我想从mp3音轨中去除人声。我在谷歌上搜索并尝试了几款软件,但没有一个令人信服的。我计划读取mp3文件,获取波形,并去除超过指定限制的波形。
您有任何关于如何进行的建议吗?
-- 更新
我只需要能够读取mp3文件格式的代码。有这样的软件吗?
我想从mp3音轨中去除人声。我在谷歌上搜索并尝试了几款软件,但没有一个令人信服的。我计划读取mp3文件,获取波形,并去除超过指定限制的波形。
您有任何关于如何进行的建议吗?
-- 更新
我只需要能够读取mp3文件格式的代码。有这样的软件吗?
这不算是一个“算法”,更像是一个“技巧”,但它可以在代码中自动化实现。它主要适用于声道中人声居中的立体声曲目。如果人声位于中心,则两个声道中都会表现出来。如果你反转其中一个声道,然后将它们合并在一起,中心人声的波形会相互抵消,几乎被移除。你可以使用大多数好的音频编辑器(如Audacity)手动完成这个过程。它不会给您完美的结果,其他音频也会稍微受到影响,但它非常适合卡拉OK轨道 :)
来源:http://www.cdf.utoronto.ca/~csc209h/summer/a2/a2.html,作者:Daniel Zingaro。
声音是空气压力的波动。当声音产生时,由压缩(增加压力)和稀疏(降低压力)组成的声波通过空气传播。这与你将石头扔入池塘时发生的情况类似:水面上下起伏形成周期性波浪。
当麦克风记录声音时,它会测量空气压力并将其作为一个值返回。这些值称为样本,可以是正数或负数,对应于空气压力的增加或减少。每次记录空气压力时,我们都在取样声音。每个样本在时间上记录了声音的瞬间;我们采样得越快,就越准确地表示声音。采样率指的是我们每秒采样声音的次数。例如,CD音质使用每秒44100个样本的采样率;用于VOIP会话中的语音采样远远少于此。常见的采样率为11025(语音质量)、22050和44100(CD音质)...
对于单声道的声音(只有一个声道),样本只是表示在取样点处空气中压缩量的正数或负数整数。对于立体声声音(我们在此任务中使用的声音),一个样本实际上由两个整数值组成:一个用于左扬声器,一个用于右扬声器...
以下是去除人声算法的工作原理。
将输入文件的前44个字节逐字复制到输出文件中。这44个字节包含重要的标头信息,不应更改。
接下来,将输入文件的其余部分视为shorts序列。对于每个左右两个shorts,计算combined = (left - right) / 2。将combined的两份副本写入输出文件。
为什么会生效?
对于好奇的人,需要简要解释一下消除人声的算法。从算法中可以看出,我们只是减去一个通道的声音(然后除以2以保持音量不要太大)。那么为什么从右声道减去左声道会奇迹般地消除人声呢?
当音乐被录制时,有时候人声是由单个麦克风录制的,并且这个单独的人声轨道用于两个声道的人声。歌曲中的其他乐器是由多个麦克风录制的,所以它们在两个声道中听起来不同。从一个声道中减去另一个声道会消除这两个声道之间“共同”的所有内容,如果我们很幸运,就意味着删除了人声。
当然,事情很少有这么顺利。请尝试对此进行人声去除:badly-behaved wav file。确实,人声消失了,但音乐的主体也被削弱了!显然,一些乐器也采用了“中心”录制方式,这样在减去通道时会将它们与人声一起删除。
wav demux error: cannot peek
wav demux error: cannot find 'data' chunk
wav demux error: An error occurred during wav demuxing
ps demux error: cannot peek
mpgv demux error: cannot peek
mjpeg demux error: cannot peek
ps demux error: cannot peek
core input error: no suitable demux module for file/any:///home/srinivas/workspace/Extract%20Vocals/output.wav
有什么建议吗? - Srinivasfrom pydub import AudioSegment
from pydub.playback import play
# read in audio file and get the two mono tracks
sound_stereo = AudioSegment.from_file(myAudioFile, format="mp3")
sound_monoL = sound_stereo.split_to_mono()[0]
sound_monoR = sound_stereo.split_to_mono()[1]
# Invert phase of the Right audio file
sound_monoR_inv = sound_monoR.invert_phase()
# Merge two L and R_inv files, this cancels out the centers
sound_CentersOut = sound_monoL.overlay(sound_monoR_inv)
# Export merged audio file
fh = sound_CentersOut.export(myAudioFile_CentersOut, format="mp3")
超过指定限制?听起来像是高通滤波器...如果你有原声音轨和原始音轨,你可以使用相位抵消。否则,除非它是一个60年代旧曲,其中人声直接在中间,其他所有声音都被硬混音,否则我认为没有一种非常干净的方法可以去除人声。