Windows でリアルタイム信号処理?

昨日、Audacity と、C ででっち上げた信号処理コードで K2 の調整をしていたのですが、今日になって「やっぱり、リアルタイムで信号見られないと面倒だなあ」と怠惰な気持ちで妄想を始めました。イメージというか、したいことは以下のようなことです。

  • Windows 上で、サウンド入出力を使って信号処理したい
  • リアルタイムで動かしたい
  • 信号処理ブロックは、自分でお気軽に実装したい
  • お金をかけたくない

最初、Cygwin とか使って Windows のオーディオインターフェイスを触れないかと考えていたのですが、ちょっと面倒そうなことが分かりました。素直に Visual Studio Express とかインストールしたほうが良さそうですが、肝心な信号処理を始める前に、Windows SDK の習得あたりで脱落しそうです*1MATLAB とか使えばできるのかなー、とか思って探してみたところ、以下のような記事を発見。どうも、Simulink とか使うと、MATLAB モデルから、リアルタイム処理のための C コードを生成したりできるみたいです。

しかし。MATLAB 買うほどの財力はないなあ、と思っていたら、こんなのを発見。

Playrec というライブラリだそうで、GNU Octave と組み合わせてリアルタイム信号処理のコードを作れるらしい。素晴らしい。日本語の情報も見つけました。

もしかして私の探していたのは、実はこれなのではないか! と、ちょっと興奮しています。ちょっと勉強してみるかな。

Playrec ちょっと試してみた

Octave ですが、Cygwin 版でがんばろうと思ったのですが、Playrec コンパイルできませんでした。調査がメンドーなので、即あきらめ、素直に Octave Forge 版 3.0.3 をインストールしました。初めから Playrec は入ってきましたが、さすがにサンプルスクリプトは付いてなかったので、Playrec 本家からダウンロードしました。test_playrec を実行したら、ちゃんと動きました。spectrum_analyser は最初動かなかったのですが、これは引数を与えていないのが原因であることが判明。ちゃんと引数を与えたら動きました*2。おー、すごい。ちゃんとスペクトラムがリアルタイムでグラフ表示されます。ちなみに、ここまでは Visual Studio Express などインストールしなくても動いています。
目標は、FIR フィルタを動かして入力信号のパワーを表示することです。やっぱり、コンパイラは要るのかなあ。

フィルタ

フィルタは、この辺が参考になりました。

まだ勉強途中です。

*1:昔、Linux 上で、IP パケット拾いながら RTP と G.729 をデコードして音声を再生するソフトとか書きましたけど、そんな気力はもう萎えました。

*2:MATLAB の基礎知識がないことが災いしている。