matlab声音处理的基本操作


matlab实现声音的读取过程

wavread函数(matlab2012支持)

audioread函数(matlab2012以后版本支持)

此函数好像只支持.wav的声音文件(如果不是,可用软件 格式工厂 进行转化

[y,Fs] = wavread('Track6.wav');%y是输出的音频,Fs是采样率
[m,n]=size(y);
t = 1/Fs:1/Fs:1/Fs*m;
subplot(2,1,1);plot(t,y(:,1));title('左声道时域');
subplot(2,1,2);plot(t,y(:,2));title('右声道时域');

matlab实现播放声音

wavplay函数(matlab2012支持)

audioplayer函数(matlab2012以后版本支持)

wavplay(y,Fs);

matlab提取特征声音

clc;clear all;
%这两个数可以修改表示频率的截取范围,百分比,都要小于1
%r_start 和 r_end之间的频率会被保留
r_start =0.05; %当这个数大于0.1后,可以明显听到高频声音的消失
r_end = 0.6;


[y,Fs] = wavread('Track6.wav');%y是输出的音频,Fs是采样率
if mod(length(y),2)==1
      y = y(1:end-1,:);
end
[m,n]=size(y);
t = 1/Fs:1/Fs:1/Fs*m;
y1 = y(:,1);
y2 = y(:,2);
nfft= 2^nextpow2(length(y1));%找出大于y的个数的最大的2的指数值
f1 = fft(y1);
f2 = fft(y2);
subplot(2,4,1);plot(t,y1);title('左声道时域');
subplot(2,4,2);plot(t(1:end/2),f1(1:end/2));title('左声道频域');

f_start = round(length(f1)*r_start);
f_end = round(length(f1)*r_end);
f1(1:f_start) = 0;f1(end-f_start:end) = 0;
f1(f_end:end-f_end)=0;
subplot(2,4,3);plot(t(1:end/2),f1(1:end/2));title('处理后的左声道频域');
y11 = ifft(f1);
subplot(2,4,4);plot(t,y11);title('处理后的左声道时域');
subplot(2,4,5);plot(t,y2);title('右声道时域');
subplot(2,4,6);plot(t,f2);title('右声道频域');
f2(1:f_start) = 0;f2(end-f_start:end) = 0;
f2(f_end:end-f_end)=0;
subplot(2,4,7);plot(t(1:end/2),f2(1:end/2));title('处理后的右声道频域');
y21 = ifft(f2);
subplot(2,4,8);plot(t(1:end/2),y21(1:end/2));title('处理后的右声道时域');
y_new = [y11;y21];%合并声音

btnH = uicontrol(gcf,'Style', 'pushbutton', 'String', '播放处理前声音',...
'Position', [10 10 140 25], 'FontSize', 10);
set(btnH,'Callback','wavplay(real(y),Fs)')
btnH1 = uicontrol(gcf,'Style', 'pushbutton', 'String', '播放处理后声音',...
'Position', [300 10 140 25], 'FontSize', 10);
set(btnH1,'Callback','wavplay(real(y_new),Fs)')
============================找指导老师布置任务吧==============================