1、安装pyAudioAnalysis(安装pyAudioAnalysis时需要的安装包)
2、分析音频和预测
from pyAudioAnalysis import audioTrainTest as aT
# 根据音频特征生成model(svmEmotion_00)
# ["wavs/LJ", "wavs/SP251"]为两个说话人的音频列表
aT.extract_features_and_train(["wavs/LJ", "wavs/SP251"], 1.0, 1.0, aT.shortTermWindow, aT.shortTermStep, "svm", "data/svmEmotion_00", False)
# 根据已有的model(svmEmotion_00)预测音频属于哪个说话人
info = aT.file_classification("wavs/SP25111371.wav", "data/svmEmotion_00","svm")
print('result:{}'.format(info))
这里有必要说一下,通过extract_features_and_train方法得到的model不能对file_regression进行音频分析(因为model没有参数对应的特征值),哎,file_regression方法里面用的也是model_name,但是就是这么坑,其实不是你想的那个model_name(准确说应该是regression_model_name,嗯,就是下面要训练的这个)
3、根据已有的音频和对应的特征值训练model,然后测试音频的arousal和valence值
# 通过自回归训练预测情感特征(
# arousal:情感的强度(平静→兴奋),
# valence:情感的愉悦程度,
# emotion:情感类型{"fru": 0, "sad": 1, "exc": 2, "neu": 3, "xxx": 4, "ang": 5, "hap": 6, "fea": 7, "dis": 8, "sur": 9, "oth": 10})
aT.feature_extraction_train_regression("wavs/session", 1, 1, aT.shortTermWindow, aT.shortTermStep, "svm", "data/svmSpeechEmotion02", False)
# 预测音频的arousal和valence值
R, regressionNames = aT.file_regression("wavs/test01.wav", "data/svmSpeechEmotion02", "svm")
for i in range(len(R)):
print("{0:s}\t{1:.3f}".format(regressionNames[i], R[i]))
说明:要训练的音频文件和.csv文件都要放在同一个"wavs/session"文件侠下,不同的特征值放不同的.csv文件中(格式为“有后缀的音频文件名,特征值”,并不是pyAudioAnalysis作者说的不需要后缀,不然会报异常,当然你可以自己改源码)
感觉效果还可以接受,如果你能接受它长时间训练的话……
我自己训练的regression_model提取码:eb54
可能是训练的音频少(150个左右),得到的emotion值都差不多