2016-04-08 10 views
1

私はいくつかのオーディオ処理のためにPythonライブラリsounddeviceを使用しています。サウンドデバイスのStreamクラスから返されたNumPy配列を使用して追加処理を行うにはどうすればよいですか?

def callback(indata, outdata, frames, time, status): 
    outdata[:] = indata 

INDATA numpyの配列である:私は出力に至る入力装置(マイク)から収集された入力データを渡すためにStreamクラスを使用する場合、コールバック関数が音声データを表すnumpyの配列を有します浮動小数点数の配列を含んでいます。これらの浮きは何を表していますか?このデータをタイムストレッチやピッチシフトするにはどうすればよいですか?

答えて

1

まず、警告:効率的で信頼性の高いリアルタイムオーディオ処理が必要な場合、Pythonはおそらく非常に良い選択ではないでしょう(これはインタープリター言語であり、悪名高いGILのためガベージコレクションまたはコースを使用するためです)。

とにかくPythonを使用したい場合は、リアルタイムのオーディオ信号処理用のライブラリがいくつかあります。 pyoLibROSAがあります。詳細はPythonInMusic wiki pageです。

実際の質問に答えてください:浮動小数点値(デフォルトではfloat32)はindataの音圧を表す振幅値です。 それが役立つ場合は、電圧と考えることもできます。

サウンドカードからの値は、-1.0+1.0の範囲に限定されています。 outdataに出力信号を書き込むときには、この範囲にも制限されていることに注意しなければなりません。そうしないと、醜い歪みが聞こえます。

indataおよびoutdataの配列は2次元で、列はオーディオチャネルを表します。各行は、1つの時間インスタンスを表します。

私の小さなpage about creating simple audio signals with Pythonも読んでみてください。

タイムストレッチ/ピッチシフトの実際のアルゴリズムはここでは話題にはなりません。もしあなたが助けを求めるなら、https://dsp.stackexchange.com/で聞くことができます。

関連する問題