我正在尝试从音频文件中提取音高特征,以用于分类问题。我使用 Python(scipy/numpy)进行分类。
我认为可以使用 scipy.fft
获取频率特征,但我不知道如何通过频率近似音符。我做了一些研究,发现需要获取色度特征,将频率映射到半音阶的12
个音符中的一个。
我认为 Matlab 有一个色度工具箱,但我不认为 Python 中有类似的东西。
我该怎么办?还有人能推荐一些我应该查阅的阅读材料吗?
我正在尝试从音频文件中提取音高特征,以用于分类问题。我使用 Python(scipy/numpy)进行分类。
我认为可以使用 scipy.fft
获取频率特征,但我不知道如何通过频率近似音符。我做了一些研究,发现需要获取色度特征,将频率映射到半音阶的12
个音符中的一个。
我认为 Matlab 有一个色度工具箱,但我不认为 Python 中有类似的东西。
我该怎么办?还有人能推荐一些我应该查阅的阅读材料吗?
在编程中,表示待计算的midi音符编号,
表示频率,
表示室内音高(现代音乐中,440.0 Hz 是常见的音高)。
你可能知道,单一频率并不构成一个乐音。 "音高" 来自基音或谐波声的感觉,即主要由一个单一频率(即基音)的整数倍构成的声音。
如果你想在 Python 中使用色度特征,可以使用Bregman 音视频信息工具箱。请注意,色度特征无法提供有关音高八度的信息,因此您只能获得有关音高类别的信息。
from bregman.suite import Chromagram
audio_file = "mono_file.wav"
F = Chromagram(audio_file, nfft=16384, wfft=8192, nhop=2205)
F.X # all chroma features
F.X[:,0] # one feature
YAAPT, 参考文献:Stephen A. Zahorian 和 Hongbing Hu, "A spectral-temporal method for robust fundamental frequency tracking", J. Acoust. Soc. Am. 123, 4559 (2008). http://bingweb.binghamton.edu/~hhu1/paper/Zahorian2008spectral.pdf。MATLAB代码在这里:http://ws2.binghamton.edu/zahorian/yaapt.htm
YIN, 参考文献:De Cheveigné, A., Kawahara, H. "YIN, a fundamental frequency estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930 (2002)。http://audition.ens.fr/adc/pdf/2002_JASA_YIN.pdf
至于现成的解决方案,可以查看Aubio,这是一个带有Python包装器的C语言库,提供了多种音高提取算法,包括YIN和multiple-comb。