2011/03/10

Java Applet WaveViewer (波形表示アプレット) を作ってみた

上画像はイメージで下は動作可能なアプレットになります。



このアプレットを動かすためには、Javaの環境設定をいじる必要がある。java.policyファイルにオーディオを許可する内容を書き込むとマイク入力が許可され、波形が表示されるようになる。
WindowsXPだと、このファイルに、
C:\Program Files\Java\jre6\lib\security\java.policy
下の1行を加える。
permission javax.sound.sampled.AudioPermission "record";
たぶんこれで動作する。

プログラムの概要
チューナーを作るための下準備として波形を表示させるプログラムを作ってみた。マイク入力から音を取得して、それを表示させている。幅は44Hzぐらいを表示。音叉の440Hzを入れると10周期ぐらいが表示される。個人的に波形ひとつひとつを見たかったので、これぐらいにしてみた。動きはぎこちないが、まぁ目標は達成できた。

作ってみて
いつものように資料はAPIぐらい。動けばよいというレベル。やってみてわかったことは、意外とCPU負荷が高いということ。次から次へと来る音の信号を、一つ一つ処理することはパソコンでも結構辛いようだ。はじめ44100Hzのサンプリング周波数で入れてみたが、CPU負荷が高すぎたので、サンプリング周波数を10000Hzまで落としてみた。音の入力レベルに関しても8bitに下げている。
内部的にはbyteデータをリングバッファに溜めつつ捨てつつ、一定時間ごとに表示させている。やっていることはシンプルなのだが、連続的に行うので、いかに軽く作るかがポイント。リアルタイム処理って難しい。