检测音频流中的特征

时间:2013-04-20 08:17:41

标签: c# algorithm fft

我想编写/编程/开发一种算法,可以识别来自/ mic音频线路的数据中的许多特征。音频流将是音乐,我想过滤掉特征以区分彼此的歌曲,通过区分我的意思是你可以分别调用歌曲的类型。

我绝对想要发现的一件重要事情是这首歌有什么样的棒/节拍。例如,我想知道这首歌是否处于3/4时间。

我发现的唯一有用的文章是关于BPM检测,但这还不足以区分一首歌和另一首歌。

FFT是从音频流中获得不同特性的良好开端,但我不知道从哪里开始。是否可以通过FFT获得条形/节拍?有关于此的任何好的教程/代码示例吗?

FFT是否足以获得音频流的良好特性,还是有其他算法可以获得音频流中的特性?

我最好在C#中这样做,因为这是我最熟悉的编程语言。这在C#中是可能的还是更好的另一种语言?

为了总结我的问题,我正在寻找有关在音频流中查找特征的任何信息,以获得节拍/条和其他信息以区分歌曲。

3 个答案:

答案 0 :(得分:3)

我很高兴阅读这位博主的相关文章:

http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/

作者讨论了指纹歌曲。如果您labelled一组歌曲具有您正在寻找的品质,然后将数据输入某种learning algorithm / classifier,您可能会取得一些成功。

我不认为这是一个已解决的问题,因此,据我所知,不可能给出一个明确的答案。

祝你好运!

答案 1 :(得分:0)

傅立叶变换将告诉您声音中的频率。这可能足以告诉您它们记录的关键。我怀疑它会告诉你更多信息。

软件(如Shazam)可以将两段录制的音乐识别为相同。你想做一些不同的事情 - 你想以分类的形式提取意义。将此与语音识别相比较;这是一个类似的问题。音乐实际上要难得多,因为通常涉及多种乐器。我们的大脑可以使用非常复杂的模式识别来提取各个乐器(鼓,吉他),然后使用单独的乐器来确定仪表和节拍。就像我们可以跟随电视声音的对话一样。计算机无法将声音分解为单独的声音(还),只是听到连续的声音。这让我觉得提取有意义的信息(节拍,电表)必须至少等待,直到我们可以将声音分解为计算机上的单独“声音”。

有一天你想做的事情会很棒,而且会很棒。但我认为我们还有一段距离;也许当计算机能够流利地解释语音时,他们也能够流利地解释音乐。也许10年后。

答案 2 :(得分:0)

开源aubio库从音频中提取功能。它是用C语言编写的,但可以作为托管实现的参考。或者你可以P / Invoke它。

  

aubio是一种用于从音频信号中提取注释的工具。它的功能包括在每次攻击之前分割声音文件,执行音调检测,敲击节拍以及从现场音频生成midi流。