Boo*_*ean 14 algorithm audio mp3 voice signal-processing
我想从mp3音轨中删除人声.我搜索谷歌,并尝试了一些软件,但没有一个是令人信服的.我打算读取mp3文件,获取波形并删除超出指定限制的波形.
你对如何进行有任何建议吗?
- 更新
我只想要能够读取mp3文件格式的代码.有没有软件?
Arn*_*nce 17
这不是一个"算法"作为"技巧",但它可以在代码中自动化.它主要用于人声居中的立体声音轨.如果人声居中,则它们在两个轨道中均匀显示.如果您反转其中一个轨道然后将它们合并在一起,则中心人声的波形会被取消并被虚拟删除.您可以使用大胆的大多数优秀音频编辑器手动执行此操作.它没有给你完美的结果,其余的音频也受到了一些影响,但它创造了很棒的卡拉OK曲目:)
Dan*_*iel 10
资料来源:http://www.cdf.utoronto.ca/~csc209h/summer/a2/a2.html,由Daniel Zingaro撰写.
声音是气压波.当产生声音时,由压缩(压力增加)和稀疏(压力降低)组成的声波在空气中移动.这类似于将石头扔进池塘时所发生的情况:水在重复的波浪中上升和下降.
当麦克风录制声音时,它会测量气压并将其作为值返回.这些值称为样品,对应于气压的增加或减少,可以是正的或负的.每次记录气压时,我们都会对声音进行采样.每个样本都会及时记录声音; 我们采样得越快,我们对声音的表现就越准确.采样率是指我们每秒采样声音的次数.例如,CD质量的声音使用每秒44100个样本的采样率; 在VOIP对话中使用某人的声音使用远远少于此.采样率为11025(语音质量),22050和44100(CD质量)很常见......
对于单声道声音(具有一个声道的声音),样本只是一个正整数或负整数,表示采样时空气中的压缩量.对于立体声(我们在此作业中使用),样本实际上由两个整数值组成:一个用于左扬声器,一个用于右扬声器...
这是[删除人声]算法的工作原理.
将输入文件中的前44个字节逐字复制到输出文件.这44个字节包含不应修改的重要标头信息.
接下来,将输入文件的其余部分视为一系列短路.左右各对短裤,并计算合并=(左 - 右)/ 2.将两个组合的副本写入输出文件.
为什么这样做?
对于好奇,有关声音去除算法的简要说明是有序的.正如您从算法中注意到的那样,我们只是从另一个中减去一个通道(然后除以2以保持音量不会太大).那么为什么从右声道中减去左声道会神奇地删除人声呢?
当录制音乐时,有时会通过单个麦克风录制人声,并且单个声道用于两个声道中的人声.歌曲中的其他乐器由多个麦克风录制,因此它们在两个声道中听起来都不同.从另一个频道中减去一个频道会消除这两个频道之间"共同"的一切,如果我们幸运的话,这意味着删除人声.
当然,事情很少奏效.在这个表现不佳的wav文件上尝试你的声音去除器 .当然,人声消失了,但音乐的身体也消失了!显然,有些乐器也被记录为"居中",因此当减去频道时,它们会与人声一起被删除.
小智 5
您可以使用pydub工具箱,看到这里的细节,也看到这里的相关的问题。它取决于FFmpeg,可以读取任何文件格式
然后,您可以执行以下操作:
from 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")
Run Code Online (Sandbox Code Playgroud)