python - 等长样本的音频分类 / '声码器' 设备

1 投票
3 回答
1136 浏览
提问于 2025-04-17 07:19

有没有人能提供一些链接、建议或者其他帮助呢?

我的目标是用Python来分类10秒的音频样本,这样我之后可以对着麦克风说话,然后让Python从数据库中找出和我说的内容最接近的片段(把它们淡入在一起播放)。

我并不在乎找到的内容是否是最接近的,也不关心这些音频样本的来源。所以,结果可能除了在嘈杂环境中说话(玩得开心)之外没有什么用。

我希望这个Python应用能够在数据库中的10秒样本里找到一个特定的FFT匹配。我猜麦克风的实时采样会有100毫秒的缓冲样本。

有什么想法吗?FFT?用什么数据库?其他的呢?

3 个回答

0

你可以尝试一些常见的短期特征提取方法,比如能量、过零率、梅尔频率倒谱系数(MFCC)、频谱特征、色度特征等等。然后,你可以通过一组特征统计数据来描述你的音频片段。接着,你可以使用一种简单的基于距离的分类器,比如k最近邻(kNN),来从一个手动标记的样本集中找到与未知“查询”最相似的训练样本。

可以看看我在Python音频分析方面的一些功能库:pyAudioAnalysis

0

试着搜索一下“音乐指纹识别”相关的算法。

3

要做到这一点,你需要三样东西:

  1. 分段(决定如何制作你的音频样本)
  2. 特征提取(决定你关心的音频特征,比如FFT)
  3. 距离度量(决定什么样的样本是“最接近”的)

分段:你现在使用的是10秒的样本。我觉得如果用更短的段落(大约100到1000毫秒),可能会得到更好的效果,因为这样更能适应声音的变化。

特征提取:你提到使用FFT。其实,零交叉率这个方法很简单,但效果还不错。如果想要更高级一点,可以考虑使用MFCC或者谱心率。

距离度量:大多数人使用欧几里得距离,但也有一些更复杂的,比如曼哈顿距离余弦距离地球搬运工距离

如果你的样本数量不多,可以尝试把所有样本加载到一个kdtree中,这样可以快速计算距离,并且可以把它保存在内存里。

祝你好运!听起来这是个有趣的项目。

撰写回答