MATLAB去除人声

来源:互联网 发布:淘宝上新品怎样上架 编辑:程序博客网 时间:2024/04/29 05:26

clear

clc

close all

&&&&&&&&&&&&&&&&&

上面的几句话意思是清屏,清内存。

&&&&&&&&&&&&&&&&&

%[Original,fs,bits]=wavread('E:\Curriculum\The Fifth Term\数字信号处理\课程设计\DSP Voice Cuter\Love Story.wav');%修改文件路径可以滤除不同歌曲

[Original,fs,bits]=wavread('E:\matlab workspace\视觉机器学习20讲配套仿真代码Code\22 VoiceFilterB1\齐晨 -咱们结婚吧.wav');%修改文件路径可以滤除不同歌曲

%size(Original)


&&&&&&&&&&&&&&&&&&&&&&&


y,Fs,bits] = wavread('filename')

y是自己随意定义的一个输出函数,fs 是采样频率 bits 表示每个样点的位数

[Y,FS,NBITS,OPTS]=wavread(...) returns a structure OPTS of additional
        information contained in the WAV file.  The content of this
        structure differs from file to file.  Typical structure fields
        include '.fmt' (audio format information) and '.info' (text
        which may describe title, author, etc.)
 
    Output Scaling
    The range of values in Y depends on the data format FMT specified.
    Some examples of output scaling based on typical bit-widths found
    in a WAV file are given below for both 'double' and 'native' formats.
    FMT='native'
       #Bits   MATLAB data type          Data range
       -----   ------------------------- -------------------
         8     uint8  (unsigned integer)      0 <= Y <= 255
        16     int16  (signed integer)   -32768 <= Y <= +32767
        24     int32  (signed integer)    -2^23 <= Y <= 2^23-1
        32     single (floating point)     -1.0 <= Y <= +1.0
 
    FMT='double'
       #Bits   MATLAB data type          Data range
       -----   ------------------------- -------------------
        N<32   double                     -1.0 <= Y <  +1.0
        N=32   double                     -1.0 <= Y <= +1.0
       Note: Values in y might exceed -1.0 or +1.0 for the case of
             N=32 bit data samples stored in the WAV file.
 
    Supports multi-channel data, with up to 32 bits per sample.
    Supports Microsoft PCM data format only.

&&&&&&&&&&&&&&&&&&&&&&&&&

ts=1/fs;                            采样时间

N=length(Original)-1;    采样点数

t=0:1/fs:N/fs;                %建立时间向量

Nfft=N;

df=fs/Nfft;                     频分辩率        步长 

%计算频率间隔(Hz/s)

fk=(-Nfft/2:Nfft/2-1)*df;

 

a1=1,a2=-1,b1=1,b2=-1;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

SoundLeft=Original(:,1);

SoundRight=Original(:,2);

SoundLeft_f=ts*fftshift(fft(SoundLeft,N));

SoundRight_f=ts*fftshift(fft(SoundRight,N));  可计算某些频率点上的频谱。

%%%http://wenku.baidu.com/link?url=_9ehkwkZXvfNExDAQvvIjQszVJYtYPv64xl9cBn2DN2m0nRWpjRVnhwJdkiA-zBb0MlzUCShSnOXtC7W6NnvbNwqyH7xzzGFL1yd0NQbGca


 

fftshift的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称。因为直接用fft得出的数据与频率不是对应的,fftshift可以纠正过来
fft是一维的傅里叶变换,是将时域信号转换为频域信号的
fftshift是这针对频域信号的,将fft的DC分量移到频谱中心区,
这是信号处理的基本功能!

因为实信号以fs为采样速率的信号在 fs/2 处混叠,所以实信号fft的结果中前半部分对应[0, fs/2],后半部分对应[ -fs/2, 0] 
1)实信号fft的结果前半部分对应[0, fs/2]是正频率的结果,后半部分对应[ -fs/2, 0]是负频率的结果。大于fs/2的部分的频谱实际上是实信号的负频率加fs的结果。故要得到正确的结果,只需将视在频率减去fs即可得到频谱对应的真实负频率 2)如果要让实信号fft的结果与[-fs/2, fs/2]对应,则要fft后fftshift一下即可,fftshift的操作是将fft结果以fs/2为中心左右互换 
3)如果实信号fft的绘图频率f从[-fs/2, fs/2],并且没有fftshift,则fft正频谱对应f在[0, fs/2]的结果将混叠到(f - fs/2)的位置; 
fft负频谱对应f在[-fs/2, 0]的结果混叠到 f + fs - fs/2 的位置,注意这里f为负值,也就是说此种情况下fft负频谱对应的视在频率减去fs/2即可得到频谱对应的真实负频率



立体声歌曲去人声原理及Premiere消人声方法
去人声原理:7
我们知道在立体声音乐中左右声道中的声音是不一样的,尤其是歌曲中的各种乐器都分别放到左右声道,但是一般人声在两个声道的声音完全一样.那么,我们就可以利用这点消除人声了,原理就是将歌曲中两个声道的声音相减,这样两个声道中相同的声音(人声)就会被完全减掉,而其他乐器由于在两个声道中不同,所以相减后将被保留,当然被减的声音波形反转,但人耳不会听出来的.zKF
Premiere去人声方法:]c&u
了解了原理,我们就会看出去人声主要的工作在于如何让歌曲的两个声道相减.这里要用到Premiere中的两个音频特效:Swap Channels(交换声道)和Invert(反相),Swap Channels用于将立体声中的两个声道互换,Invert用于将声音波形反转(波峰变波谷)。具体方法如下:T7#
1、将歌曲分别放到Audio1和Audio2轨,将两个音频片断开头对齐$T(aP$
2、为其中一个音频片断依次添加Swap Channels和Invert特效即可。#<l!
其中添加Swap Channels特效的效果为让原歌曲的两个声道对调再和原歌曲叠加,Invert特效是利用A-B=A+(-B)原理让两个声道相减。


最近有很多朋友在问怎么才能把原唱里的声音给消除。这里我整理了下,给大家系统、仔细的介绍下怎么用Cool Edit Pro来制作伴奏带的方法。你只要有歌曲的原唱音频文件,就能很快的制作成伴奏带,这里我只讲消原唱和以最大限度来保证伴奏的质量。但是首先,我要交待的是:方法永远是死的,若不精心去体会,就算把方法背得烂熟也不会有多大的作用。这里我只给大家介绍,不是为了给大家去硬搬硬套,真正要做出点象样的东西来,还得靠大家多练习和体会。所以,这个方法我个人不建议大家使用。 

其次这里介绍的方法再怎么做也是不能完全做到原版的效果,一般都会残留部分原唱的声音,而且有的还可能无能为力。接下来我就从基础的开始来讲,有耐心的朋友细心的读完,或许对你会有很大的帮助。 

一、为什么能消原唱 

假设我们的电脑里有一个音频文件,不管是MP3、WMA或是WAV都好,通常一个音频文件就是一首歌曲,我们用耳朵来听时,通常一首歌中有原唱、伴奏。而原唱的特征大致分为两种:1、人声的声像位置在整个声场的中央(左右声道平衡分布);2、声音频率集中在中频和高频部分。我们理解了这些后,而我们只要告诉电脑“把左右声道的对等声音且频率集中在中频和高频部分的声音消除”,所以说,电脑永远是死的,和人脑完全不同,它只会听命令去执行。所以再一次告戒大家电脑或是软件都是死的,它们永远是工具,是跟着你的思维去运作的东西,要想用它来作出像样的东西,最终还是要靠你的大脑。 

二、那些软件能消原唱 

消原唱的软件很多我个人知道的有Cool Edit Pro、T-RackS、Vogone、Dart Karaoke、WinRIP等等。这里我就不一一介绍了。总的来说各软件制作出来的效果虽说都不同,但是都达不到理想的效果。对于Cool Edit Pro来说算不上是自动化的软件,最主要的还是要靠你自己去听,然后给它命令,让它来帮你帮你实现你大脑所需要的东西。如果大家有兴趣的话也可以搜索以下一个一个来试试,看自己的需求来用。这里我只向大家介绍Cool Edit Pro、和T-RackS两款软件的消声制作。 

三、用Cool Edit Pro消除原唱的基本方法 

用Cool Edit Pro消除原唱,方法实际上可以说很简单,然而要想把它做的很完美还是得下点功夫。 

我这里说的“消原唱”只是Cool Edit Pro菜单中的一个独立功能,选择并使用就立即出结果。但是要想得到最好的效果,仅仅使用Cool Edit Pro的“消原唱”菜单功能还是不够滴!!你还得进行跟多细致的音频处理和设置。 

无论如何,还是先让我们尝试下最简单的“消除原唱”的方法。 

首先进入“单轨编辑模式”界面。用“File”→“Open”调入一个音频文件。我已阎维文《母亲》为例,文件名为“母亲.MP3”。调入后选择“Effects”→“Amplitude” →“Channel Mixer…..”(中文版的为“效果”→“波形振幅”→“声道重混缩”),在“预置”中选择“Vocal Cut”见(图1),保持对话框上的默认设置,点“OK”按钮。经过处理后,就得到了《母亲》这首歌的伴奏音乐。“Vocal Cut”功能的原理是:消除声像位置在声场中央的所有声音(包括人声和部分伴奏)。所以用此功能主要的还是要看伴奏的来源,混音前是否有乐器和人声放在声场的中央,如果有的话用此功能都会把它给消除掉,造成了音质的衰减。比如说一般声场放在中央的有“主人声”、BASS……等等。如果大家需要消音音频来源是我说的这些原理的来源的话,我还是建议不要使用此功能,这样人声没消掉到把伴奏音乐全给消除了,真让人郁闷呵呵! 

好了来试听下自己的成果吧!请非常仔细地听,你会发现伴奏与原声带的声音是不同的。伴奏带中的原唱声音已变得非常“虚”,但是隐约还是能听到原唱的声音,其实这就是所谓的消声后的效果(绝对滴消除原唱是不可能滴)。这样的伴奏效果基本上可以拿去当作卡拉OK的背景音乐了,当你演唱时,你如牛般的吼叫声足以能掩盖住原唱的声音了呵呵。如果不是要求很原版的伴奏的朋友,这个因该还是行了吧呵呵。(这里我可还没说完喔!) 

此外,整个伴奏带中的音频质量有所下降,我们所听到的是缺乏立体感的伴奏声音(类似于单声道音频),还可能有一些“咝咝啦啦”的声音,低频部分也被消弱了很多。总之,听起来很不“爽”。 

或许你现在已经非常不满意这种效果了吧,不是吗?别急,下面我们就来学习一些进阶的处理技巧,这里请留意下前面我所说的“消声原理”的思路。 

四、Cool Edit Pro消原唱进阶 

先总结一下我们不满意的结果有那些。第一,原唱的声音似乎消除得还不够干净;第二,有“咝咝啦啦”的杂声;第三,立体声效果降低了;第四,低频效果减弱了。 

以下针对上述四个问题进行一一修正。首先在Cool Edit Pro中打开“母亲.MP3”原声带。 

1.把原唱声消除得更干净 

选择“Effects”→“Amplitude” →“Channel Mixer…..”(中文版的为“效果”→“波形振幅”→“声道重混缩”),在“预置”中选择“Vocal Cut”。先前我们是以默认值处理,现在我们来试着调节左面的各个参数见(图2)。在调节过程中,可以随时点“Bypassa (直通)”复选框来对比原音。 

左面有两个“Invert (反相)” 复选框,默认状态下其中一个前面有“√”,现在我们把“√”取消,声音变得更“干”,但是声场变得要开阔一些,立体感增强,但低频被消减得更多。或许这个效果对某些歌曲比较合适,但对有些歌曲效果不是很好,处理的时候还是得靠大家来慢慢、仔细的调试,如果次方法对你要处理的歌曲不好的话,自然保持默认设置。 

此对话框在默认设置下已处于以最大程度消除原音的状态,因此要想把原音消除的更干净,基本上在这里是没有任何办法的。我个人发现,不同人唱的歌曲,消原唱的效果并不一样。有些会比较好些,有些就很不理想。但是我们可以通过“声道重混缩”对话框左面的四个滑块对这项处理进行优化 见(图2)。由于最终效果受原声带的影响非常大,所以这里的调整没有固定的“定式”,只能将滑块略微移动到中心点时,立体声效果会比较明显,但是人声也会变得比较明显。在立体声和人声消除效果上,总得向一方妥协。这里先把处理后的结果保存为“母亲(伴奏).MP3”。 

2.消除“咝咝啦啦”声 

杂音来源于两处,这里我指的是伴奏里的杂声。第一,你的原声带经过了有损压缩处理(如MP3或WMA编码),在经过“声道重混缩”处理后,自然就会显现出来;第二,未消除干净的气声和齿音。所以条件允许,应直接将CD音轨以WAVE格式保存到硬盘在进行处理。 

消除“咝咝啦啦”声一般要使用Cool Edit Pro的“均衡器”功能。首先调入刚刚消除好后的伴奏“母亲(伴奏).MP3”,选择“Effects”→“Filters” →“parametric Epualizer”(中文为“效果”→“滤波器”→“参数均衡器”)。此“参数均衡器”对于初学着来说不是很直观,这里不是很懂均衡器的朋友也可以选择用“图形均衡器”来调节,它的制作界面要比“参数均衡器”直观容易得多。这里我以“参数均衡器”来消除伴奏中的“咝咝啦啦”声。 

“均衡器”的作用是增强或衰减某一频率段或某几个频率段的声音强度。“咝咝啦啦”声通常处于8000Hz左右,我们将这一区域的声音强度作衰减处理。 

这一处理同时也有助于进一步消除人声。例如,一般人声的频响以中频为主,我们可对中频部分做适当衰减。而气声和齿音主要在6000Hz — 18000Hz以上,也可根据实际情况做衰减处理,但会损失伴奏的清晰度。均衡器一般用来做修补和优化,人声的消除还得靠“效果”→“波形振幅”→“声道重混缩”来做。这里处理完了别忘记了存盘喔! 

3.立体声效果增强 

立体声效果增强属于比较专业的处理手法,由于一时不能完全的写出来,这里我只简单说下立体声增强的方法,可以使用立体声效果起增强插件(如:WAVES插件效果器材就是个不错的处理插件,这里我就不一一介绍了)或用专业的立体声增强软件进行适当的调节,也可以适当的加入些混响效果。

4.低频补偿 

“母亲(伴奏).MP3”是我们经过了消除原唱、消除“咝咝”声后的结果,但是它的音频被衰减了很多。要对低频进行补偿这里就可以用Cool Edit Pro的“均衡器”,但不要用已经“消过”声的这个文件,因为它的低频效果已经被衰减了,若进行增益处理,效果一定没有原声带好,所以我们用原声带来进行处理。取出原声带里的低频部分作为伴奏的补偿。 

现在先调入“母亲.MP3”原声带,选择“Effects”→“Filters” →“parametric Epualizer”(中文为“效果”→“滤波器”→“参数均衡器”),进入“参数均衡器”后,将参数调节成图4的样子。点“OK”后立即进行处理,这样就能得到“母亲”原声带里的低频部分,这里暂时先保存个文件为“母亲(BASS).MP3”。(再次提醒大家,保存最好从一开始就用无损的WAV格式来保存,这样最后出来的效果会好一些。) 

5.多轨合成 

多轨合成这个可就不用我多说了吧,想必你一定很熟悉了,这里先把消过声的“母亲(伴奏).MP3”插入到第一轨; “母亲(BASS).MP3”插入到第二轨,混缩合成为就搞定了。如果觉得两个音轨的音量不是很均衡的话,这里就可以在多轨下调节下两个音轨的音量,直到你听着伴奏很饱满很合适了在进行混缩保存。 

消人声的重点其实是在人声消除程度和播放效果上取得平衡,如果不考虑播放效果,人声可以被消除的更干净,但这样做的必要性不大,只要你在唱歌时你的声音能盖住原唱就可以了。这样以来伴奏带里的效果即能保证,原唱的声音也不会太明显。 

这里也要告戒大家,此方法我个人建议只做参考和学习,不要去指望它能给你带来什么好的效果。还有,次方法的使用,主要还是要看你消声的歌曲的来源如何,不是什么歌曲都能消除掉,它首先要具备我前面所说的原理条件,不要为了做不好效果去自责自己或他人,也不要怪你的造作或是设备声卡之类什么的。因为这些方法制作上是和设备完全无关的,效果的好坏决非是你设备不好所致,这里的效果制作最多声卡起到的作用是输出声音让你得到效果好坏的结果。最终,还得靠你去细心的体会。


figure(1)

subplot(411)

plot(t,SoundLeft);

subplot(412)

plot(t,SoundRight);

subplot(413)

f_range=[-3000,3000,0,0.06];

plot(fk,SoundLeft_f);

axis(f_range);

subplot(414)

plot(fk,SoundRight_f);

axis(f_range);

 

% Sound=SoundLeft-SoundRight;

 

 

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=[-3000,3000,0,0.06];

subplot(413)

plot(fk,Sound_Left_f);

axis(f_range);

subplot(414)

plot(fk,Sound_Right_f);

axis(f_range);

 

 

BP=fir1(300,[500,2000]/(fs/2));     %考虑300

CutDown=filter(BP,1,Sound);     %Pass BPF

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=[-3000,3000,0,0.06];

plot(fk,Sound_Final_f);

axis(f_range);

 

sound(Sound_Final,fs,bits);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0 0
原创粉丝点击