TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

CQTでスペクトログラムを描く その3(VSTプラグイン化)

前回実装したCQTでスペクトログラムをリアルタイムに解析するWindowsアプリをVST3プラグインにした。

VST3プラグイン

以前の記事で実装した方法をベースにした。

描画処理

はじめ、VSTGUIの描画メソッド(drawLineなど)で、全面を描画するようにしたが、カクついてリアルタイムに表示できなった。

オフスクリーンのビットマップを作成してからビットマップを描画するように変更したところ、リアルタイムに描画できるようになった。

拡大処理

VSTGUIでビットマップを作成すると、オフスクリーンのピクセルとスクリーンのピクセルがずれるため、正しく表示されなかった。

試行錯誤したところ、

VSTGUI::CGraphicsTransform tm; tm.scale (scaleX, scaleY); tm.translate(pr.left, pr.top);

のようにして、行列変換することでピッタリ表示されるようになった。

スペクトルの補間

スペクトルの放物線補間は、スクリーンのピクセル単位まで細かくする必要はないため、オフスクリーンではビンの中心周波数の間の2点を補間して、それをスクリーンに拡大表示するようにした。
2点を補間することで、画面上の半音が3分割され、中心をビンの中心周波数にできるためである。

描画のエイリアシング

時間方向を1フレーム1ピクセルにすると、スクロールでエイリアシング(ちらつき)が発生した。
ビットマップの描画モードや、setDrawModeでアンチエイリアシングを設定してみたが、解決しなかったので、1フレームを2ピクセルしたところエイリアシングが目立たなくなった。

結果

DAWで楽曲をパススルーして再生しながら、スペクトログラムを表示できるようになった。


まとめ

CQTでスペクトログラムを作成するアプリをVST3プラグイン化した。
DAWで楽曲をパススルーで作成しながらリアルタイムにスペクトログラムを表示できるようになった。

拍の表示や、MIDIノートの表示、基本周波数解析も実装したい。