我有兴趣了解并编写一个系统,该系统将从音频文件(mp3,wav等)中提取功能,这些功能以后可用于任何目的。在未来,我希望用它来编写一些音乐相似度的软件。
是否有任何库可以提供帮助?我知道libxtract,但还没有使用它。
此外,是否有任何低级c / c ++库可以处理音频流?我根本就没有这方面的经验。
谢谢您的帮助,
埃里克
Marsyas是一个非常完整的框架,也提供音频特征提取。
它是用C ++编写的,并提供“修补”机制,允许您将预定义的组件插入到一起。
该框架附带了几个例子。
查看源代码以了解如何创建自定义提取器。
Marsyas附带的bextract
命令行工具可以提取:
Marsyas支持多种平台,包括Windows,Linux和Mac OS X(我还看到一篇文章提到它也适用于iPhone)
为了完整起见,这是我所知道的选项:
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年还有一个有趣的调查或特征提取器,包含有关性能,功能,生态系统等的大量信息:
还有libxtract,它提供了一整套50多种音频功能,专为实时使用而设计。它是一个具有最小依赖性的“精益”库,并为Python和Java提供绑定。还有一个“外部对象”,它使纯数据实时计算机音乐环境中的libxtract功能可用。
libxtract的规范参考是this paper。
虽然这是一个非常古老的帖子,但也许有人会在谷歌搜索后到达这里。现在有一些非常好的工具包可用于音频分析:
首先,阅读有关FFT和数字信号处理的内容。接下来,获得一本关于语音识别的教科书,因为它基于你想要做的事情 - 语音识别引擎从音频中提取“特征”以确定所说的内容。
我发现Cepstral Coefficients在机器学习意义上具有很好的“特性”。
看看网站http://www.audiocontentanalysis.org/。在“软件”部分下,您将找到包含与音频信号处理,特征提取和音乐信息检索相关的不同库的列表。此外,网站(及其书籍)似乎是深入了解整个主题的一个非常好的起点。