python - 等长样本的音频分类 / '声码器' 设备
有没有人能提供一些链接、建议或者其他帮助呢?
我的目标是用Python来分类10秒的音频样本,这样我之后可以对着麦克风说话,然后让Python从数据库中找出和我说的内容最接近的片段(把它们淡入在一起播放)。
我并不在乎找到的内容是否是最接近的,也不关心这些音频样本的来源。所以,结果可能除了在嘈杂环境中说话(玩得开心)之外没有什么用。
我希望这个Python应用能够在数据库中的10秒样本里找到一个特定的FFT匹配。我猜麦克风的实时采样会有100毫秒的缓冲样本。
有什么想法吗?FFT?用什么数据库?其他的呢?
3 个回答
0
你可以尝试一些常见的短期特征提取方法,比如能量、过零率、梅尔频率倒谱系数(MFCC)、频谱特征、色度特征等等。然后,你可以通过一组特征统计数据来描述你的音频片段。接着,你可以使用一种简单的基于距离的分类器,比如k最近邻(kNN),来从一个手动标记的样本集中找到与未知“查询”最相似的训练样本。
可以看看我在Python音频分析方面的一些功能库:pyAudioAnalysis
0
试着搜索一下“音乐指纹识别”相关的算法。
3
要做到这一点,你需要三样东西:
- 分段(决定如何制作你的音频样本)
- 特征提取(决定你关心的音频特征,比如FFT)
- 距离度量(决定什么样的样本是“最接近”的)
分段:你现在使用的是10秒的样本。我觉得如果用更短的段落(大约100到1000毫秒),可能会得到更好的效果,因为这样更能适应声音的变化。
特征提取:你提到使用FFT。其实,零交叉率这个方法很简单,但效果还不错。如果想要更高级一点,可以考虑使用MFCC或者谱心率。
距离度量:大多数人使用欧几里得距离,但也有一些更复杂的,比如曼哈顿距离、余弦距离和地球搬运工距离。
如果你的样本数量不多,可以尝试把所有样本加载到一个kdtree中,这样可以快速计算距离,并且可以把它保存在内存里。
祝你好运!听起来这是个有趣的项目。