Pythonのmatplotlibでリアルタイムスペクトログラム描画。音と同期再生を考えると、真面目に描画するのは全然間に合わないのでPyQtGraph使うべきで、多少サボっていい加減な描画でいいなら使えなくもないかも…という印象🤔 pic.twitter.com/LNJCavKWRf
— Kurene (@_kurene) 2021年1月29日
matplotlib
はリアルタイムオーディオ信号処理ソフトウェア開発に使えるかどうか確かめるために、以下の記事で事前調査を行い、実際に実装してみました。
上記のTwitter投稿にも書きましたが、スペクトログラム描画と音楽再生を合わせることを考慮すると、厳密に正しいスペクトログラムではなく、多少データを削減したようななんちゃってプロットで許されるのであれば使えるかなという印象です。
上の動画だと、
- モノラル(Mid信号)のみ分析
- 動画の条件は、Fs=44100, ブロックサイズ4096で、1/4重複(3072サンプル飛ばし)
- 表示するスペクトルは全帯域(2049ビン)ではなく、480ビンまで削減
のような感じで描画する信号やタイミングをサボって、ようやく信号再生に間に合いそうなfpsになっています。
基本的に描画回数と描画する信号(行列)のサイズを削ればいいので、例えば、
- N回に1回だけ描画
- ダウンサンプリング
- 適当な信号値でよければ、単純な間引きを使う手も
- 周波数変換方法の変更(定Q変換とか)
などの工夫はできそうです。
ソースコード