![37d64f4d850cbe1b35c540655264112f.png](https://img-blog.csdnimg.cn/img_convert/37d64f4d850cbe1b35c540655264112f.png)
音乐类型分类一直是音乐信息检索领域研究的热点问题。在本教程中,我们将尝试使用隐马尔可夫模型对音乐类型进行分类,隐马尔可夫模型非常擅长对时间序列数据进行建模。由于音乐音频文件是时间序列信号,我们希望HMM能够满足我们的需求,给我们一个准确的分类。隐马尔可夫模型是表示观察序列的概率分布的模型。我们假设输出是由隐藏状态生成的。
数据集和特征
我们将使用Marsyas提供的机器学习数据集,这是一个名为GTZAN的开源软件。它是每30秒长的1000个音轨的集合。代表10种类型,每种包含100个音轨。所有音轨都是.au格式的22050Hz单声道16位音频文件。在我们的教程中,我们将使用所有提供的类型(blues, classical, jazz, country, pop, rock, metal, disco, hip-hop, reggae)。对于音乐类型分类,我们将更容易使用WAV文件,因为它们可以通过scipy库轻松读取。因此,我们必须将AU文件转换为WAV格式。可以在此处(http://opihi.cs.uvic.ca/sound/genres.tar.gz)访问机器学习数据集。
对于音频处理,我们需要找到一种简洁地表示歌曲波形的方法。Mel频率倒谱系数(MFCC)是一种很好的方法。MFCC获取信号的功率谱(power spectrum),然后使用Filter banks和离散余弦变换的组合来提取特征。
让我们开始为我们的项目导入必要的Python库。
from python_speech_features import mfcc, logfbankfrom scipy.io import wavfileimport numpy as npimport matplotlib.pyplot as pltfrom hmmlearn import hmmfrom sklearn.metrics import confusion_matriximport itertoolsimport os
![08468fa43550ef3d1bf1532a95ccd0cd.png](https://img-blog.csdnimg.cn/img_convert/08468fa43550ef3d1bf1532a95ccd0cd.png)
让我们从机器学习数据集中选择一首歌并提取MFCC和Filter banks 特征。
sampling_freq, audio = wavfile.read("genres/blues/blues.00000.wav")mfcc_features = mfcc(audio, sampling_freq)filterbank_features = logfbank(audio, sampling_freq)