音声データからスペクトログラム画像を作成する in Python
概要
このスクリプトは、WAV形式の音声ファイルを入力として受け取り、その音声のスペクトログラム画像を生成します。スペクトログラムは、音声信号の時間-周波数表現であり、音声の特徴を視覚的に分析するのに役立ちます。
前提条件
このスクリプトを実行するには、以下が必要です。
Python 3.6以上
以下のPythonライブラリ:
NumPy
Matplotlib
SciPy
これらのライブラリは以下のコマンドでインストールできます。
pip install numpy matplotlib scipy
スクリプトの内容
スクリプトは主に以下の部分から構成されています。
必要なライブラリのインポート
create_spectrogram 関数の定義
音声ファイルの読み込み
スペクトログラムの計算
スペクトログラム画像の生成と保存
メイン部分
入力音声ファイルと出力画像ファイルの指定
create_spectrogram 関数の呼び出し
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
from scipy.signal import spectrogram
def create_spectrogram(input_audio, output_image):
# 音声ファイルの読み込み
sample_rate, samples = wavfile.read(input_audio)
# FFTをかけて周波数スペクトルを取得
frequencies, times, spec = spectrogram(samples, fs=sample_rate)
# スペクトログラム画像の描画
plt.figure(figsize=(12, 8))
Z = 10. * np.log10(spec)
plt.imshow(Z, origin='lower', aspect='auto', cmap='viridis')
plt.xlabel('Time')
plt.ylabel('Frequency (Hz)')
plt.colorbar(label='Intensity (dB)')
plt.title('Spectrogram')
# 画像として保存
plt.tight_layout()
plt.savefig(output_image)
plt.close()
print(f"スペクトログラム画像が {output_image} として保存されました。")
if __name__ == "__main__":
input_audio = "input_audio.wav" # 入力音声ファイル
output_image = "spectrogram.png" # 出力画像ファイル
create_spectrogram(input_audio, output_image)
機能の詳細
入力:WAV形式の音声ファイル
出力:PNG形式のスペクトログラム画像
スペクトログラムの特徴:
X軸:時間
Y軸:周波数
カラーマップ:強度(dB)を表す(viridisカラーマップを使用)
使用方法
コマンドラインから以下のように使用します。
python audio-to-spectrogram.py
注意点
入力音声ファイルは、スクリプトと同じディレクトリに input_audio.wav という名前で配置する必要があります。
出力画像ファイルは、デフォルトで spectrogram.png という名前で保存されます。
大きなサイズの音声ファイルを処理する場合、メモリ使用量が増加する可能性があります。
トラブルシューティング
エラー「FileNotFoundError: [Errno 2] No such file or directory: 'input_audio.wav'」
解決策:入力音声ファイルが正しい場所に配置されているか確認してください。
エラー「ImportError: No module named 'numpy'」(または他のライブラリ名)
解決策:必要なライブラリがインストールされているか確認し、必要に応じて「前提条件」セクションのコマンドでインストールしてください。
生成された画像が空白または不鮮明な場合
解決策:入力音声ファイルが正しく読み込まれているか、音声データが含まれているか確認してください。
まとめ
このスクリプトを使用することで、音声ファイルからスペクトログラム画像を簡単に生成できます。生成されたスペクトログラムは、音声信号の時間的変化と周波数成分を視覚的に表現しており、音声分析や音声処理のタスクに役立ちます。
スクリプトの動作や出力を調整したい場合は、create_spectrogram 関数内のパラメータ(例:figsize, cmap)を変更することで、スペクトログラムの表示をカスタマイズできます。
この記事が気に入ったらサポートをしてみませんか?