我想编写/编程/开发一种算法,它可以识别/麦克风音频线路中数据中的许多特征。音频流将是音乐,我想过滤掉特征来区分歌曲,通过区分,我的意思是你可以区分歌曲的流派。
我绝对想要检测的一个关键的事情是这首歌有什么样的小节/节拍。例如,我想知道这首歌是不是在3/4的时间段。
我找到的唯一有帮助的文章都是关于BPM检测的,但这不足以区分一首歌和另一首歌。
FFT是从音频流中获得不同特征的一个很好的开始,但我不知道从哪里开始。有没有可能用FFT得到小节/节拍?关于这一点,有没有什么好的教程/代码示例?
FFT是否足以获得音频流的良好特征,或者是否有其他算法可以很好地获取音频流的特征?
我最好使用C#,因为这是我最有经验的编程语言。这在C#中是可能的,还是另一种语言更好?
总结我的问题,我正在寻找关于在音频流中寻找特征的任何信息,以获得节拍/小节和其他信息来区分歌曲。
发布于 2013-04-20 17:20:29
我喜欢阅读这位博主的相关文章:
http://www.redcode.nl/blog/2010/06/creating-shazam-in-java/
作者讨论了指纹识别歌曲。如果你labelled一组歌曲,认为它具有你想要的品质,然后将数据输入到某种learning algorithm/classifier中,你可能会取得一些成功。
我不认为这是一个已解决的问题,所以据我所知,给你一个明确的答案是不可能的。
祝好运!
发布于 2013-04-21 15:50:14
傅立叶变换会告诉你声音中的频率。这可能足以告诉你它是在什么地方录制的。我怀疑它能告诉你更多的信息。
软件(如Shazam)可以识别两段录制的音乐是相同的。你想做一些不同的事情--你想以分类的形式提取意义。将其与语音识别进行比较;这是一个类似的问题。音乐实际上要难得多,因为通常会涉及到几种乐器。我们的大脑可以使用非常复杂的模式识别来提取单个乐器(鼓、吉他),然后使用单个乐器来确定节拍和节拍。就像我们可以在开着电视声音的情况下进行对话一样。计算机还不能将声音分解成单独的声音,而只是简单地听到一个连续的声音。这让我认为,提取有意义的信息(节拍,节拍)至少要等到我们可以在计算机上将声音分解为单独的“声音”。
你想做的事情总有一天会成为可能,而且会很棒。但我认为我们还有一段距离;也许当计算机能够流利地解释语音时,它们也能够流利地解释音乐。也许10年后吧。
发布于 2014-05-11 06:06:05
开源的aubio库从音频中提取特征。它是用C语言编写的,但可以作为托管实现的参考。或者你可以对它进行P/Invoke。
aubio是一个为从音频信号中提取注释而设计的工具。它的功能包括在每次攻击之前分割声音文件,执行音调检测,敲击节拍,并从现场音频中产生midi流。
https://stackoverflow.com/questions/16118219
复制相似问题