Pythonは音声処理において非常に強力なツールです。スペクトログラムは音声波形を周波数領域に変換し、時間軸に沿ってプロットされたものです。Pythonを使って、音声ファイルのスペクトログラムを簡単に生成できます。
必要なライブラリ
スペクトログラムを生成するために、Pythonにはいくつかのライブラリが必要です。以下は、この記事で使用する主なライブラリです。
- numpy
- scipy
- matplotlib
- librosa
これらのライブラリをインストールするには、次のコマンドを使用してください。
pip install numpy scipy matplotlib librosa
スペクトログラムの生成方法
スペクトログラムを生成するには、次のステップを実行する必要があります。
- 音声ファイルを読み込む
- 音声波形をフレーム化する
- 各フレームに対して、ショートタイムフーリエ変換(STFT)を実行する
- STFTの結果から、振幅スペクトログラムを計算する
- 振幅スペクトログラムをプロットする
以下は、Pythonコードで実現したスペクトログラムの生成方法です。
import numpy as np
import scipy.signal
import matplotlib.pyplot as plt
import librosa
# 1. 音声ファイルを読み込む
filename = 'sample.wav'
y, sr = librosa.load(filename)
# 2. 音声波形をフレーム化する
frame_length = 2048
hop_length = 512
frames = librosa.util.frame(y, frame_length=frame_length, hop_length=hop_length)
# 3. 各フレームに対して、STFTを実行する
stft = np.abs(librosa.stft(y, n_fft=frame_length, hop_length=hop_length))
# 4. STFTの結果から、振幅スペクトログラムを計算する
spec = librosa.amplitude_to_db(stft, ref=np.max)
# 5. 振幅スペクトログラムをプロットする
plt.figure(figsize=(12, 8))
librosa.display.specshow(spec, sr=sr, x_axis='time', y_axis='linear')
plt.colorbar(format='%+2.0f dB')
plt.title('Spectrogram')
plt.tight_layout()
plt.show()
このコードを実行すると、指定した音声ファイルのスペクトログラムが生成され、表示されます。
まとめ
Pythonを使用して、音声ファイルのスペクトログラムを生成する方法を紹介しました。必要な ライブラリのインストール方法や、スペクトログラムを生成するために必要なステップについて説明しました。スペクトログラムは、音声処理において非常に重要な役割を担っています。Pythonを使えば、簡単にスペクトログラムを生成できるため、音声処理の研究やアプリケーション開発において役立てることができます。