Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

Python matplotlibでスペクトログラムのリアルタイムでのプロット実装

matplotlibはリアルタイムオーディオ信号処理ソフトウェア開発に使えるかどうか確かめるために、以下の記事で事前調査を行い、実際に実装してみました。

www.wizard-notes.com

上記のTwitter投稿にも書きましたが、スペクトログラム描画と音楽再生を合わせることを考慮すると、厳密に正しいスペクトログラムではなく、多少データを削減したようななんちゃってプロットで許されるのであれば使えるかなという印象です。

上の動画だと、

  • モノラル(Mid信号)のみ分析
  • 動画の条件は、Fs=44100, ブロックサイズ4096で、1/4重複(3072サンプル飛ばし)
  • 表示するスペクトルは全帯域(2049ビン)ではなく、480ビンまで削減

のような感じで描画する信号やタイミングをサボって、ようやく信号再生に間に合いそうなfpsになっています

基本的に描画回数と描画する信号(行列)のサイズを削ればいいので、例えば、

  • N回に1回だけ描画
  • ダウンサンプリング
    • 適当な信号値でよければ、単純な間引きを使う手も
  • 周波数変換方法の変更(定Q変換とか)

などの工夫はできそうです。

ソースコード

github.com