PortAudio ASIO を使う その1
1. やはり、一筋縄では、いかん... Digital Signal Processing using PortAudio ASIO
PortAudio ASIO の、DLL自体は、うまく、機能します。
ただ、Digital Signal Processing を行なうと、 まだ、問題が、あります。
Filter処理をした後の音が、細切れになって、音が、機関銃を撃ったときのような、音になります。ドッドッドッドッドッド...
Filter処理をしない時は、うまく機能します。(入力をFFTし、すぐ、IFFTして、戻す時、以下の説明にある関数の場合は、うまく機能する)
つまり、
microphone -> window -> FFT -> IFFT -> inverted window ->output.
入力を window処理して、 FFT 、すぐに 逆FFTする。そして、 逆window処理したものを 、出力する。
これを、関数 get_original_data(.....)に、まとめて 置きました。( こんな関数も、使い道が、あったんや... (^_^;; )
因みに、この関数の中身は
と、なっていて、CFir クラスの関数を利用しているだけです。
ですので、
get_original_data(.....)関数が、うまく動作すると、言う事は、中身の関数
も、うまく、働いてくれていると、言うことに、なります。
最初の図を見ていただければ、originalデータと、出力された returned_dataは、ほとんど、同じである事が
わかります。
原音を再生できている事に、なります。
Callback関数に渡す、userDataを、以下のように定義して置きます。
my_data[] は、入力を貯めておく所。
original[] は、Filter処理後のデータを貯めて置く所です。
入力の信号は、2048個 = FRAMES_PER_BUFFER
サンプリング周波数 48000Hz
です。
( Filterのテスト時は、ffilter 係数 filtercoefは 2000個 )
そして、信号処理は、すべて Callback 関数内で処理します。( tks to JI3GAB さん )
2. 信号のタイミング関係は、どうなってるんか?
48KHz samplingで、2048個のデータを取り込むには
2048 x 1/48000 =43ms
時間が、掛かります。
一方、信号処理 get_original_data(.....)は、前節で調べましたように、大体3ms位。
2048回の for loop 2回分は、時間 ゼロと、考えますと
入力データを2048回取り込む間に、
43ms/3ms = 15回
Callback内で、loopしてる事になります。
この重複を避けるために、条件文を入れました。
if(data->my_data[2047]の条件は、この重複した loopを失くすために
my->data[2047]が、前回と違う値になった時だけ(初回は、main関数内で、0.0f に、初期化してあります)
出力するように、致しました。
これで、音の、ぶつ切れ どっとっどっどは、無くなると、思ったのですが、
filterを通した時は、効果ありません....どっとっどっどっど..... 残念!
Low pass filterの、3KHzのエッジ周波数で、ばさっと、切れては、いるのですが....
まだ、こんな状態です。
p.s YouTubeについて、一言、言わせて下さい
著作権の問題があるHPらしいですが、google傘下に入ったらしいし、無茶は、できないはずや。
promotion video と、お考え下さい。 しかも、企業にとって、無料の.....
私は、なつかしの Peter Paul & Mary を、YouTubeで見て、
即刻、" 500 miles "の曲を、webにて、有料で、downloadしました。
videoの音質には、満足できなかったからです。
おまけに、Simon & Garfunkel も、YouTubeにて、見つけて
なつかしくて、たまらず
「SIMON & GARFUNKEL GUITER SOLO shinkoMusic Entertaiment LTD 2600円」
「ソロギターのしらべ 官能のスタンダード篇 RittoMusic 2000円 」
即刻、購入した次第です。
20代の女の子 数人に、「Peter Paul & Mary 知ってるか?」と、聞いた所
誰も、知りませんでしたわ...
私が、有料でdownloadした、「500miles」を、聞かせてやると、「いい曲です。」と、皆、言ってましたよ....
YouTubeは、無料で宣伝できる媒体と、お考えの上、linkご容赦ください。
私や、5000円近く、出費してしまいましたが、楽しいですわ...
H.18.12.21 ( 20061221 )