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 )