Music Feature Extraction in Python
。然后这篇文章介绍完了还有一个歌曲分类的实践:
Classification of Music into different Genres using Keras
。
下面的内容会主要参考一下这两篇文章,并加入一些我的理解。内容如下:
声音信号介绍
使用Python对音频进行特征提取
使用Keras对歌曲的题材进行分类
主要涉及的背景知识有:
傅里叶变换
Python
librosa
,numpy, sklearn与keras。当然为了方便开发,我这里还用了IPython NoteBook。
1
|
pip install librosa numpy sklearn tensorflow keras
|
visions.mp3
1 2 3 4
|
import librosa
x , sr = librosa.load("visions.mp3", sr=8000) print(x.shape, sr)
|
这里
x
是音频信号的数字信息,可以看到是一维的,
sr
是采样频率,用8000就好了。
然后可以看下这首歌在时域上的波形。
1 2 3 4 5
|
%matplotlib inline import matplotlib.pyplot as plt import librosa.display plt.figure(figsize=(14, 5)) librosa.display.waveplot(x, sr=sr)
|
运行后,效果如下:
横轴为时间,纵轴为幅度(amplitude)。
The Short Time Fourier Transform | Digital Signal Processing
不过在看视频之前,凭借我的想象,感觉这个变换既然叫短时傅里叶变换,那应该是把音频信号拆分开,然后进行傅里叶变换。因为如果对整个音乐进行傅里叶变换的话,我们只能看到所有的频率信息,但不能确定每个频率的发生的大概时间。只能看到有某些频率的声音而已。
后来在网上找了一个我感觉比较好的解释:
短时傅立叶变换基本思想是将信号加滑动时间窗,并对窗内信号做傅立叶变换,得到信号的时变频谱。
另外,还有一个东西可以感受STFT,这里可以打开网易云音乐,找到一首歌,打开动效。
可以看到不断变化的各波形,拆分开来看,其实代表着就当前这一短时间内包含的声音的频率信息。上面的这张图其实也就是对当前时刻的音频信号,进行DFT得到的。
GTZAN genre collection
。这个数据集包含了10个题材,每个题材包含了100个30s长的音乐。
这里将使用Tensorflow后端的Keras进行编码。