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);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值