matlab歌曲人声消除
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
[X,fs]=audioread('F:\神田川片段.wav');
ts=1/fs;
N=length(X)-1;
t=0:1/fs:N/fs;
Nfft=N;
df=fs/Nfft;
fk=(-Nfft/2:Nfft/2-1)*df;
a1=1;a2=-1;b1=1;b2=-1;%分离左声道和右声道
SoundLeft=X(:,1);
SoundRight=X(:,2);%对左声道和右声道进行快速傅里叶变换
SoundLeft_f=ts*fftshift(fft(SoundLeft,N));
SoundRight_f=ts*fftshift(fft(SoundRight,N));%显示左右声道幅度变化
figure(1)
subplot(411)
plot(t,SoundLeft);
subplot(412)
plot(t,SoundRight);%显示左右声道频率变化
subplot(413)
f_range=[-5000,5000,0,0.1];
plot(fk,SoundLeft_f);
axis(f_range);
subplot(414)
plot(fk,SoundRight_f);
axis(f_range);
NewLeft=a1*SoundLeft+a2*SoundRight;
NewRight=b1*SoundLeft+b2*SoundRight;
Sound(:,1)=NewLeft;
Sound(:,2)=NewRight;
Sound_Left_f=ts*fftshift(fft(NewLeft,N));
Sound_Right_f=ts*fftshift(fft(NewRight,N));
figure(2)
subplot(411)
plot(t,NewLeft);
subplot(412)
plot(t,NewRight);
f_range=[-5000,5000,0,0.1];
subplot(413)
plot(fk,Sound_Left_f);
axis(f_range);
subplot(414)
plot(fk,Sound_Right_f);
axis(f_range);
BP=fir1(300,[800,2200]/(fs/2));%根据左右声道差异进行滤波【800,2200】Hz
CutDown=filter(BP,1,Sound);
Sound_Final=Sound-0.6*abs(CutDown);
Sound_Final_f=ts*fftshift(fft(Sound_Final,N));
figure(3)
subplot(211)
plot(t,Sound_Final);
subplot(212)
f_range=[-5000,5000,0,0.1];
plot(fk,Sound_Final_f);
axis(f_range);
audiowrite('F:\歌曲消音.wav',Sound_Final,fs);