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)')
============================找指导老师布置任务吧==============================
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)')============================找指导老师布置任务吧==============================