我有兴趣了解并编写一个系统,该系统将从音频文件(mp3,wav等)中提取功能,这些功能以后可用于任何目的。将来我希望用它来编写一些音乐相似度的软件。
是否有任何库可供帮助?我知道libxtract,但还没有使用它。
此外,是否有任何低级c / c ++库可以处理音频流?我根本没有这方面的经验。
感谢您的帮助,
埃里克
答案 0 :(得分:18)
为了完整起见,这里是我所知道的选项:
Yaafe和libXtract在性能方面可能是最优化的(参见下面的基准测试)。它们都在特征提取器之间共享中间计算。例如,它们每个窗口只运行一个FFT,然后任何需要FFT的提取器才会引用该FFT。更高级别的功能也是如此。提到的其他提取器并不是真的这样做,因为它们依赖于插件架构 - 即每个提取器都需要独立。
Sonic Annotator和朋友可以从插件架构中受益,因此您可以享受各种第三方功能提取器(包括libXtract,aubio和Essentia)。 Vamp插件生态系统非常多样化和精彩。 Vamp Plugin SDK中有完整的示例代码,用于构建插件主机。
我对Essentia知之甚少,除了它比其他人更新,来自Pompeu Fabra的优秀音乐科技集团。这似乎是一个庞大而组织良好的项目。文档非常好。他们在大型音乐分析项目(如Freesound和AcousticBrainz)上使用它。项目重点似乎是性能和正确性。绝对值得一看。
MARSYAS是整个框架,而不仅仅是库。文档非常好。它正在积极开发中,并且是由George Tzanetakis在UVic定期提供的MOOC的一部分。似乎有很多围绕MARYSYAS构建的应用程序和项目。
CAMEL,Maaate和FEAPI似乎处于休眠状态 - 分别于2010年,2012年和2013年未发布新版本。
这是一个基准(以秒为单位)比较Sonic Annotator,Marsyas和YAAFE在40小时的32 KHz单声道wav文件中进行特征提取:
S.A. Marsyas YAAFE MFCC 1506 1168 142 Centroid 724 942 235 Rolloff 731 951 194 ZCR 221 620 57 Total 3182 3681 628
值得注意的是,您可以从C ++运行Matlab代码,这开启了使用的可能性:
2015年还有一个有趣的调查或特征提取器,包含有关性能,功能,生态系统等的大量信息:
答案 1 :(得分:15)
Marsyas是一个非常完整的框架,它还提供音频特征提取
它是用C ++编写的,提供了一种“修补”机制,允许您将预定义的组件连接在一起
该框架附带了几个例子
查看源代码,了解如何创建自定义提取器
Marsyas附带的bextract
命令行工具可以提取:
Marsyas支持多种平台,包括Windows,Linux和Mac OS X(我还看到一篇文章提到它也适用于iPhone)
答案 2 :(得分:6)
还有libxtract,它提供了一套全面的50多种音频功能,专为实时使用而设计。它是一个具有最小依赖性的“精益”库,并为Python和Java提供绑定。还有一个“外部对象”,它可以在Pure Data实时计算机音乐环境中提供libxtract功能。
libxtract的规范参考是this paper。
答案 3 :(得分:4)
虽然这是一个非常古老的帖子,但也许有人会在谷歌搜索后到达这里。现在有一些非常好的工具包可用于音频分析:
答案 4 :(得分:3)
首先,阅读有关FFT和数字信号处理的内容。接下来,获取一本关于语音识别的教科书,因为它基于你想要做的事情 - 语音识别引擎从音频中提取“特征”以确定所说的内容。
我发现Cepstral Coefficients在机器学习意义上具有很好的“特性”。
答案 5 :(得分:2)
查看网站http://www.audiocontentanalysis.org/。 在“软件”部分下,您将找到包含与音频信号处理,特征提取和音乐信息检索相关的不同库的列表。 此外,网站(及其书籍)似乎是深入了解整个主题的一个非常好的起点。