鉴于MP3,是否可以使用快速傅里叶变换(FFT)打破不同的仪器?

时间:2011-08-09 10:41:29

标签: audio signal-processing fft

我正在制作音乐可视化工具,我想为每种乐器显示不同的视觉元素。例如,代表声乐的蓝色条,代表吉他的红色条,代表鼓的黄色条等

有没有办法分析FFT的结果来获取这些信息?

感谢。

2 个答案:

答案 0 :(得分:12)

这是一项挑战,是音乐技术研究的一个活跃领域。

在某种程度上,这是可能的,但这肯定不容易。使用mp3会特别困难,因为许多重要信息在压缩时会丢失。

您要做的事情被称为音频源分离或声源分离。它追求将录音分离为其组成元素。

这些元素可能是演讲(几个人同时说话 - '鸡尾酒会问题')或乐器(在录音'盲目分类'中将一种乐器与另一种乐器分开)。

您可以采取各种方法,其中一些方法基于声音的频域特性,另一些则基于空间属性。

如果您尝试将低音鼓和长笛分开(即低频鼓的低频音箱和分配给长笛的高频频段),频域方法可能看起来相当简单。现实声音很少整齐地分隔成有用的频率区域。例如,低音鼓将在频谱上向上具有谐波含量。因此,这些类型的解决方案在数学上非常复杂并且通常涉及统计建模。沉重的东西。

基于声音的空间属性的分离通常依赖于在记录之前每个源的位置的一些先验知识(这是“非盲”)。通常需要有一个以上的麦克风(至少是立体声录音)。使用一些聪明的数学,可以根据每个麦克风上信号的关系,根据源在空间的位置的知识来分离源。这也是称为波束成形技术的基础,通过该技术可以使用麦克风阵列确定源的位置。

所以,回到正轨。人们正在尝试这样做,但它很复杂,使用mp3会让你的生活变得困难!

我担心我不太了解更好地解释这些方法,但我可以找到一些参考资料来帮助你入门:

http://www.cs.tut.fi/~tuomasv/demopage.html

http://www.cs.northwestern.edu/~pardo/courses/eecs352/lectures/source%20separation.pdf(pdf警告!)

祝你好运!

答案 1 :(得分:4)

对于人声和低音,您可以使用它们通常位于立体声混音中心的事实,这意味着它将在左右声道中具有完全相同的波形。如果你从另一个频道中减去一个频道,你将会得到一个通常没有人声和低音的新频道。

类似的东西:

sound = LoadMP3(...)
length = sound.SampleCount
left = sound.Channels[LEFT]
right = sound.Channels[RIGHT]
for i = 0:length
    difference[i] = left[i] - right[i]

现在,您可以通过巧妙的方式查看FFT(左),FFT(右)和FFT(差异)。

也许这会朝着你所追求的效果迈出一小步?