Wizard Notes

音楽信号解析の技術録、音楽のレビューおよび分析、作曲活動に関する雑記です

Python + PyAudio で作る、リアルタイムスペクトルアナライザ(ループバック録音対応)

この記事をシェアする

デモ+概要

PythonPyAudiomatplotlib を使って、PC上で流れている音をリアルタイムで表示・分析できるスペクトルアナライザを作りました。以下の実装では VB-Audio社の仮想ミキサ "Voice Meeter" 向けの設定となっていますが、PortAudio 対応かつループバック録音できる環境なら多少変更すれば動くと思います。

描画としては matplotlib を使っています。PyQtGraph を使うか迷いましたが、FuncAnimationを使えば自分の環境では特に描画に支障は出なかったので matplotlib を採用しました。

スペクトルアナライザに表示されているオーディオ信号はNumpyの配列にできるので、機械学習ディープラーニングのデータ収集等にも使えるかもしれません。

実装の要点

ループバック録音

PC上の音を取得するためには、再生中の音を入力用として引っ張ってくる必要があります。イメージとしては、PCの音声出力をPCの音声入力に繋げる感じです。これをループバック録音といい、身近な例だとゲーム実況やデスクトップ操作の配信時に、操作時に流れている音を配信するために使われます。

仮想ミキサー

VB-Audio社の仮想ミキサ "Voice Meeter"](https://www.vb-audio.com/Voicemeeter/) を使いました。

A1、A2にスピーカー・ヘッドホンへの出力と、VB-Audio Point (Virtual Input) を設定します。そうすると、PyAudioのインプットストリーム用のデバイスとして VoiceMeeter Output を設定すれば、PC上の音をインプットストリームとして取得できる状態になります。

f:id:Kurene:20191028190453p:plain
VB-Audio VoiceMeeter

www.vb-audio.com

matplotlib

FuncAnimationを使います。大事なのは、Brit=True にし、描画をなるべく高速化します。 qiita.com

PyAudio

仮想ミキサー出力 (VoiceMeeter Output) をインプットストリームとしました。

f:id:Kurene:20191029084604p:plain

実装

github.com

環境