Pythonで音楽ジャンルの分類プログラム作成 その1オーディオ波形のスペクトログラムを表示

PythonにはLibrosaやPyaudioの様な使える音声処理ライブラリーがあります。
今回その中でLibrosaを使用し、音楽ジャンルの分類プログラム作成の解説をします。
まずはその1、オーディオ波形のスペクトログラムを表示するプログラムです。

スペクトログラムとは、オーディオの周波数スペクトルを計算し3次元グラフに視覚化したもので、声紋鑑定などに使われているものです。

1・Librosaのインポート

pip install librosa
// またはAnaconda利用の場合
conda install -c conda-forge librosa

さらに多くのオーディオデコーディングを可能にする
ffmpeg
というモジュールをインストールする事もできます。

2・オーディオファイルのロード

import librosa
audio_path = ‘任意のパスの任意のオーディオファイル’
x , sr = librosa.load(audio_path)
print(type(x), type(sr))
<class ‘numpy.ndarray’=””> <class ‘int’=””>
print(x.shape, sr)
(396688,) 22050

ロード可能なオーディオファイル形式は
.wav
.wma
.mp3
です。

srとはサンプリング周波数で、上記コードでは22.05KHzでサンプリングされていますが、下記コードで呼び出せば変更可能です。

librosa.load(audio_path, sr=44100)

44.1KHzはCDと同じサンプリング周波数です。

サンプリング周波数を変更したくない場合は下記コードで呼び出します。

librosa.load(audio_path, sr=None)

(ちなみにサンプリング周波数とは、1秒間に伝送されるオーディオのサンプル数で、単位はHzまたはkHzです)

3・オーデイオファイルの再生

オーディオを再生してみます。
下記コードはJupyter Notebookでの例です。

IPython.display.Audio

を使用して再生します。

import IPython.display as ipd
ipd.Audio(audio_path)

4・オーディオ波形の視覚化

Librosaのlibrosa.display.waveplotを使用してオーディオ波形を視覚化します。

%matplotlib inline
import matplotlib.pyplot as plt
import librosa.display
plt.figure(figsize=(14, 5))
librosa.display.waveplot(x, sr=sr)

下記の様にオーディオ波形を視覚化できます。

5・スペクトログラムの表示

Librosaでオーディオ波形のスペクトログラムを表示します。
librosa.display.specshow

X = librosa.stft(x)
Xdb = librosa.amplitude_to_db(abs(X))
plt.figure(figsize =(
14、5 ))librosa.display.specshow(Xdb、sr = sr、x_axis = ‘time’、y_axis) = ‘hz’)
plt.colorbar()

下図の様にスペクトログラムが表示されます。

縦軸は周波数(0〜10kHz)、横軸はオーディオの時間経過を表します。

おまけ

librosaでオーディオファイルの書き出し

librosa.output.write_wav(‘任意の名前.wav’, x, sr)

いかがだったでしょうか?

次回はスペクトログラムを使用し音楽のジャンル分類プログラムを解説します。