デモ+概要
Python のPyAudio
と matplotlib
を使って、PC上で流れている音をリアルタイムで表示・分析できるスペクトルアナライザを作りました。以下の実装では VB-Audio社の仮想ミキサ "Voice Meeter" 向けの設定となっていますが、PortAudio 対応かつループバック録音できる環境なら多少変更すれば動くと思います。
描画としては matplotlib
を使っています。PyQtGraph
を使うか迷いましたが、FuncAnimation
を使えば自分の環境では特に描画に支障は出なかったので matplotlib
を採用しました。
スペクトルアナライザに表示されているオーディオ信号はNumpy
の配列にできるので、機械学習やディープラーニングのデータ収集等にも使えるかもしれません。
実装の要点
ループバック録音
PC上の音を取得するためには、再生中の音を入力用として引っ張ってくる必要があります。イメージとしては、PCの音声出力をPCの音声入力に繋げる感じです。これをループバック録音といい、身近な例だとゲーム実況やデスクトップ操作の配信時に、操作時に流れている音を配信するために使われます。
仮想ミキサー
VB-Audio社の仮想ミキサ "Voice Meeter" を使いました。
A1、A2にスピーカー・ヘッドホンへの出力と、VB-Audio Point (Virtual Input) を設定します。そうすると、PyAudioのインプットストリーム用のデバイスとして VoiceMeeter Output を設定すれば、PC上の音をインプットストリームとして取得できる状態になります。
matplotlib
FuncAnimation
を使います。大事なのは、Brit=True
にし、描画をなるべく高速化します。
qiita.com
PyAudio
仮想ミキサー出力 (VoiceMeeter Output) をインプットストリームとしました。