NAudioのBiQuadFilterを使ってみた。 BiQuadFilterクラスをインスタンス化しようと思ってコードを書いていたのでうまくいかなかったけど、オブジェクトブラウザをよく見たら、それぞれのフィルターは、BiQuadFilterクラスが返り値のスタティックメソッドだった。
またフィルターの実行は、Transformメソッドを使ってやればいいらしいことも解った。
で、WaveInで入力をキャプチャしてFFTで表示するコードを、WaveIn_DataAvailableの中でTransformしてFFTに渡すように書き換えた。
ソースの主要部分だけ書くと..(LowPassFilterの 場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//グローバル変数の宣言 BiQuadFilter filter; //Form1_Load(... //第1引数 サンプルレート、第2引数 カットオフ周波数、第3引数 Q filter = BiQuadFilter.LowPassFilter(44100, 3000, 50); //WaveIn_DataAvailable(... for (int index = 0; index < e.BytesRecorded; index += 4) { var data = (short)((e.Buffer[index + 1] << 8) | e.Buffer[index + 0]); sdata[index / 4] = filter.Transform(data); } |
以前やったようにホワイトノイズを入力してFFT表示させてみた。
というわけで、NAudioのBiQuadFilterを使ってみたけど、特性はイマイチかな..。