2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > matlab wav合成 请问大佬们如何把合成语音信号存为wav文件?我用的语音信号是...

matlab wav合成 请问大佬们如何把合成语音信号存为wav文件?我用的语音信号是...

时间:2024-06-14 12:10:26

相关推荐

matlab wav合成 请问大佬们如何把合成语音信号存为wav文件?我用的语音信号是...

该楼层疑似违规已被系统折叠隐藏此楼查看此楼

请问大佬们如何把合成语音信号存为wav文件?

我用的语音信号是自己录的,大佬们可以自己用自己的试一试,这是我的代码,谢谢大家

clear all;

clc;

close all;

filedir=('C:\Users\ASUS\Desktop\newvoice\test4\xiandianzikejidaxue.wav');

filename='xiandianzikejidaxue.wav'; % 设置文件名

fle=[filedir filename]; % 构成完整的路径和文件名

[y,Fs] = audioread('C:\Users\ASUS\Desktop\newvoice\test4\xiandianzikejidaxue .wav');

y=y-mean(y); % 消除直流分量

y=y/max(abs(y)); % 幅值归一

xl=length(y); % 获取声音长度

time=(0:xl-1)/Fs; % 计算出时间刻度

p=12; % LPC的阶数为12

wlen=200; inc=50; % 帧长和帧移

msoverlap = wlen - inc; % 每帧重叠部分的长度

y=enframe(y,wlen,inc)'; % 分帧

fn=size(y,2); % 取帧数

% 语音分析:求每一帧的LPC系数和预测误差

for i=1 : fn

u=y(:,i); % 取来一帧

A=lpc(u,p); % LPC求得系数

aCoeff(:,i)=A; % 存放在aCoeff数组中

errSig = filter(A,1,u); % 计算预测误差序列

resid(:,i) = errSig; % 存放在resid数组中

end

% 语音合成:求每一帧的合成语音叠接成连续语音信号

for i=1:fn

A = aCoeff(:,i); % 取得该帧的预测系数

residFrame = resid(:,i); % 取得该帧的预测误差

synFrame = filter(1, A', residFrame); % 预测误差激励,合成语音

outspeech((i-1)*inc+1:i*inc)=synFrame(1:inc); % 重叠存储法存放数据

% 如果是最后一帧,把inc后的数据补上

if i==fn

outspeech(fn*inc+1:(fn-1)*inc+wlen)=synFrame(inc+1:wlen);

end

end;

ol=length(outspeech);

if ol

outspeech=[outspeech zeros(1,xl-ol)];

end

% 发声

[y,Fs]=audioread('C:\Users\ASUS\Desktop\newvoice\test4\xiandianzikejidaxue .wav');

sound(y,Fs);

pause(2)

sound(outspeech,Fs);

% %存发音文件

% save('test.mat','outspeech')

% load('test.mat');

%y=outspeech

filename='outspeech.wav';

audiowrite(filename,y,Fs);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。