見出し画像

音声データからスペクトログラム画像を作成する in Python


概要

このスクリプトは、WAV形式の音声ファイルを入力として受け取り、その音声のスペクトログラム画像を生成します。スペクトログラムは、音声信号の時間-周波数表現であり、音声の特徴を視覚的に分析するのに役立ちます。

前提条件

このスクリプトを実行するには、以下が必要です。

  • Python 3.6以上

  • 以下のPythonライブラリ:

    • NumPy

    • Matplotlib

    • SciPy

これらのライブラリは以下のコマンドでインストールできます。

pip install numpy matplotlib scipy

スクリプトの内容

スクリプトは主に以下の部分から構成されています。

  1. 必要なライブラリのインポート

  2. create_spectrogram 関数の定義

    • 音声ファイルの読み込み

    • スペクトログラムの計算

    • スペクトログラム画像の生成と保存

  3. メイン部分

    • 入力音声ファイルと出力画像ファイルの指定

    • 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)を変更することで、スペクトログラムの表示をカスタマイズできます。

この記事が気に入ったらサポートをしてみませんか?