我从事音乐流派分类项目已经有一段时间了,从文献来看,我认为 MFCC 是最好的功能。尽管有各种库可以实现特征提取,但我的重点是librosaessentia

免责声明:

这不是一篇旨在回答问题的文章,而只是更清楚地说明为什么要问这个问题并得到回应。

MFCC

MFCC 代表梅尔频率倒谱系数,它是一种基本的音频特征。 MFCC 使用 MEL 标度将频带划分为子频带,然后使用离散余弦变换 (DCT) 提取倒谱系数。 MEL 标度基于人类区分频率的方式,这使得处理声音非常方便。

它是一种由听众判断为彼此距离相等的音高等级。由于人类感知声音的方式,MEL 标度是非线性标度,并且音高之间的距离随着频率的增加而增加。

利布罗斯

librosa是 Python 中用于特征提取和处理数据的 API。librosa.feature.mfcc是一种通过提供参数来设置帧数、跳长、MFCC 数量等来简化获取 MFCC 的过程的方法。根据设置的参数,返回一个二维数组。

本质

essentia是一个全功能的工作流环境,用于高级和低级功能,便于音频输入、预处理和输出的统计分析。它是用 C++ 编写的,带有 Python 绑定,并以 YAML 或 JSON 格式导出数据。

essentia.standard.MFCC函数有一个参数来固定 MFCC 中的系数数量,但一次性处理整个文件,返回一维数组。然而,该库也有一个FrameGenerator方法,该方法接受其他参数,这可能使其产生与librosa相似的结果。

使 Essentia 的 MFCC 像 Librosa

我使用FrameGenerator方法设置其他参数,如跳长、帧数和 MFCC 数,与 librosa 使用的相同。此外,将两个库的采样率和窗口类型修改为相同。

然后我使用这两个函数为 20 个轨道生成相同形状的 MFCC。其中两个在下面可视化。

[MFCC of Song](https://res.cloudinary.com/practicaldev/image/fetch/s--7IwHOcH8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/inqwzch7knk0ka4stgjn.jpg)[MFCC of Song](https://res.cloudinary.com/practicaldev/image/fetch/s--L0dWErBJ--/ c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h4gp0jixma5c37lepm5p.jpg)

[MFCC of Song](https://res.cloudinary.com/practicaldev/image/fetch/s--Ti_wkVAG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to -uploads.s3.amazonaws.com/uploads/articles/sgamebtx4yy604yqf7z1.jpg)[MFCC of Song](https://res.cloudinary.com/practicaldev/image/fetch/s--sdT8Wvaz--/ c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iv61gb0yq6ko3rmby87e.jpg)

我的观察是,即使进行了这种修改,essentia仍然比librosa快大约 2 倍(这是我想要比较的主要指标)。不过,我也注意到了别的东西。 MFCC 看起来不一样。

Librosa 和 Essentia 的 MFCC 有何不同?

在看到它们之间的视觉差异后,我发现了两个 MFCC 之间的余弦相似度,目的是对其进行量化。对于显示的两个曲目,相似之处是:

  • 你的非洲:0.9019551277160645

  • 所以到哪里:0.9127510786056519

一般来说,相似度在0.900.94之间。

如果您知道 MFCC 之间存在这种差异的原因,或者可以识别出我没有考虑的参数,请不要犹豫,发表评论。谢谢。

参考文献:

MFCC实现及教程

实用密码学

Logo

华为、百度、京东云现已入驻,来创建你的专属开发者社区吧!

更多推荐