5

我想编写/编程/开发一种算法,该算法可以识别来自线路输入/麦克风音频的数据中的许多特征。音频流将是音乐,我想过滤掉特征以区分歌曲,通过区分我的意思是您可以将歌曲的流派分开。

我绝对想检测的一件关键事情是这首歌有什么样的小节/节拍。例如,我想知道这首歌是否是 3/4 拍。

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

FFT 是从音频流中获得不同特征的良好开端,但我不知道从哪里开始。是否可以通过 FFT 获得小节/节拍?有没有关于这个的好的教程/代码示例?

FFT 是否足以获得音频流的良好特征,或者是否有任何其他算法可以很好地获得音频流的特征?

最好我会在 C# 中执行此操作,因为这是我最有经验的编程语言。这在 C# 中是可能的还是另一种语言更好?

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

4

3 回答 3

3

我喜欢阅读这个博主的相关文章:

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

作者讨论了指纹歌曲。如果您将一组歌曲标记为具有您正在寻找的品质,然后将数据输入某种学习算法/分类器,您可能会取得一些成功。

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

祝你好运!

于 2013-04-20T09:20:28.593 回答
0

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

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

于 2014-05-10T22:06:04.637 回答
0

傅立叶变换会告诉您声音中的频率。这可能足以告诉你他们在哪里记录了它。我怀疑它会告诉你更多。

软件(如 Shazam)可以将两段录制的音乐识别为相同的。你想做一些不同的事情——你想以分类的形式提取意义。将此与语音识别进行比较;这是一个类似的问题。音乐实际上要困难得多,因为通常涉及多种乐器。我们的大脑可以使用非常复杂的模式识别来提取单个乐器(鼓、吉他),然后使用单个乐器来确定节拍和节拍。就像我们可以在电视声音打开的情况下进行对话一样。计算机(还)不能将声音分解成单独的声音,而只能听到连续的声音。这让我认为提取有意义的信息(节拍、米)至少要等到我们可以在计算机上将声音解析为单独的“声音”。

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

于 2013-04-21T07:50:14.260 回答