2011-07-12 7 views
3

マイクから読み込むためにportaudio(クロスプラットフォーム機能)を使用しようとしていますが、そのデータをFFTで入れたいのですが、そうではありませんそれを行う方法を確認します。 多くの人が教えてくれました:1.データを取得する、2.apply fft、 しかし、問題は私がデータを取得する方法がわからないため、portaudioにはマイクからの入力を取得するチュートリアルが多くありません。コード、チュートリアル、またはその他のリソースがあれば十分分かります。私はこれでしばらく検索していました。助けてくださいPortAudio:マイクからレコードを取得する方法(データを取得する)

+0

誰も私が本当に苦労してください、私を助けることができます。 – Rave

+0

リンク先は次のとおりです。http://www.rossbencina.com/static/writings/portaudio_icmc2001.pdf?q=%7Erossb/writings/portaudio_icmc2001.pdf – unpythonic

答えて

3

portaudioディストリビューションには、サンプルCプログラムの形式でドキュメントがあります。それらはtestディレクトリにあり、通常patest_...と呼ばれます。良い資料がたくさんあり、ドキュメントにはoverview with very short description

があります。見たいものは、コールバックによる非同期録音を行うpatest_recordです。あなたが真剣に何かをしたいなら、これは行く方法です、IMHO。しかし、同期(ブロック)IOを行うpatest_read_record.cもあります。

コードは実際には非常に簡単です、ここに関連する部分があります(多くのものは除外されています): 1 /あなたはmallocバッファ2 /コールバック3をインストールする/あなたのバッファにデータをコピーします

/* 1 */ 
data.recordedSamples = (SAMPLE *) malloc(numBytes); 
/* 2 */ 
err = Pa_OpenStream(
      &stream, 
      &inputParameters, 
      NULL,     /* &outputParameters, */ 
      SAMPLE_RATE, 
      FRAMES_PER_BUFFER, 
      paClipOff,  
      recordCallback, 
      &data); 
/* 3, in recordCallBack with rptr the input data and wptr our buffer */ 
for(i=0; i<framesLeft; i++) 
{ 
    *wptr++ = *rptr++; /* left */ 
    if(NUM_CHANNELS == 2) *wptr++ = *rptr++; /* right */ 
} 

これもやはり簡略化されていますが、わかります。かなりの量の簿記があり、サンプルコードはきれいでクリーンではありませんが、あなたの目的に適応するのは簡単です。

関連する問題