我正在处理MP3文件,遇到此问题。我的MP3是立体声编码的。我想要做的是提取人声部分以进行进一步处理(无论输出信号的模式是单声道还是立体声都可以)。

据我所知,音频被编码为不同的不连贯子MP3中的频带。我认为我可以通过适当设置截止频率的高通/低通滤波器将信号限制在人声范围内。但是,在这种情况下,结果必须包含纯音乐信号的一部分。
或在谷歌搜索之后,我想我可以先计算背景信号(通过将一个声道与来自另一个声道的信号相加来反转,假设人声部分居中。立体声音频,称为相位抵消)。经过此变换后,信号为单声道。然后,我应该将原始立体声合并为单声道,然后从中提取背景信号。

考虑到有效性,哪个是首选的(或其他解决方案:)?如果是第二个,让两个通道A和B,在计算背景时会使用(B-A)还是(A-B)?与合并两个通道一样,算术方法是否足够准确?还是我可以对每个通道进行2倍的下采样,并将下采样的信号交织为单声道结果​​?

谢谢,最好的问候。

#1 楼

首先,除非您打算进行压缩域处理​​(这很愚蠢),否则如何将数据编码到mp3文件中与该问题无关。因此,可以假设您的算法将适用于解压缩的时域数据。

和/差是声音抑制(不是提取)的非常非常基本的技巧。它基于这样的假设:人声在立体声场的中心混合,而其他乐器则在水平方向上声像。这很少是真的。 L-R和R-L听起来会一样(人耳对全局相移不敏感),并且会给您一个单声道混合音,而不会在中央混合乐器。问题是,一旦您恢复了背景,将如何处理?尝试从中心(平均)信号抑制它?这将行不通,您将要做(L + R)/ 2-(L-R),这不是很有趣。您可以尝试将这些线性组合(平均和“中心移开”),不进行任何操作

关于滤波方法:声音的f0很少超过1000 Hz,但是它的谐波可以超过它。删除最高频率会使辅音(尤其是sss,chhh)不愉快。一些男性声音低于100 Hz。您可以安全地削减50或60 Hz以下的任何频率(低音,底鼓),但是

语音分离的一些最新进展值得探索:


Jean Louis Durrieu的本底NMF +谐波梳>滤波器模型。这里是Python代码。
Rafii的背景提取方法。可以直接进行编码,并且可以很好地处理计算机生成的音乐,并且具有非常重复的模式,例如Electro,Hip-hop ...
Hsu基于f0检测,跟踪和掩蔽来处理。 “用于从音乐伴奏中进行音高提取和声音分离的串联算法”(找不到可访问的PDF)。


评论


$ \ begingroup $
“用于从音乐伴奏中进行音高提取和语音分离的串联算法”的PDF的URL(许,王):web.cse.ohio-state.edu/~wang.77/papers/HWJH.taslp12。 pdf格式
$ \ endgroup $
– mlibby
20 Mar 7 '20 at 23:36

#2 楼

感谢您的参考!您忘了提到您在鼓增强方面的工作,这对于Summer_More_More_Tea的应用程序可能也很感兴趣。好吧,这真的取决于您要使用它做什么。您是否有特定的“最终应用程序”?

我完全同意pichenettes的上述声明。为了完整起见,我要说的是,MattiRyynänen在卡拉OK音轨生成的一些作品中也使用了您提到的声音增强效果。

回答您的问题:


鉴于其有效性,哪个是优选的(或任何其他解决方案:)?


正如人体表情说的那样,这似乎都不符合您的需求:低通/高通滤波必定会由于人声的谐波结构而失败(更常见的是, “有趣”的声音-即正弦曲线以外的任何声音...)。

如果第二个,让两个通道A和B,在计算背景时会使用(B-A)还是(A-B)?与合并两个通道一样,算术方法是否足够准确?


再次,您提到的第二种方法将不会执行,因为您只能删除中间的信号,而无法检索。换句话说,即使人声在“中心”,也没有简单的数学方法获得人声信号。


或者我可以将每个通道下采样2倍,然后将下采样的信号交织为单声道结果​​?


...平均如上面所建议的,获得单声道信号的两个通道是有意义的,并且不会破坏信号的频谱特性(假设立体声信号没有退化)。因此,您获得的单声道信号基本上具有与以前相同的音乐内容。

正确地对每个通道进行降采样意味着您首先要使用一个低通滤波器(在您的情况下,截止频率为ampling_rate / 4),然后可以安全地每2个采样一次。但是,对于交错采样的通道并没有太多要说的:在大多数情况下,这破坏了信号的频谱特性。您可能不希望这样做。

实际上,低通滤波的操作是每2个样本设置为0,并在Fourier域中将这些0的导联保持为“镜像”低通滤波器。保留在高频分量上的频率分量。记住,您会在采样理论上给信号处理课上信号:乘以一系列脉冲(或狄拉克)会导致在傅立叶域中与另一个狄拉克序列卷积,也就是说,在这种情况下,信号的频谱被重复(周期化)沿频率轴,周期等于采样率。

通常,在下采样时,您会删除0(因为您假定了新的采样率)。但是在这里,保留它们会导致非常令人讨厌的其他高频成分。交织这些信号并不能解决这个问题。

总而言之,简短的答案:不要那样做。 :-)

最后,我还建议您使用为LVAICA 2012会议开发的GUI:有一个git repo。我仍在调试和改进它,因此欢迎发表评论:D

希望有帮助!