1

portaudio余暇に少しいじった後、マイクが開いているときに周波数を送信しようとしました。そのためのコールバックを作成しました。コールバック は出力ストリームのみを開き、portaudio のレコード コールバックを使用します。サンプル形式の場合出力が何も聞こえないように定義されているため、チャネル数が1に定義されているため、音(​​beep()音など)が聞こえますが、ピッチ検出(FFTを使用)は送信する周波数と同じではありません. だから私の質問は、FFTが間違って実装されているためです(または、paUint8を使用しても正しい答えを得ることができますか)、またはブロッキングI / Oを使用してみるべきですか?paFloat32paUInt8

いくつかのコード(おそらく役立つでしょう):

これは、出力ストリームの出力パラメーターです (入力ストリームは記録例からのものです)。

    outputParameters.device = Pa_GetDefaultOutputDevice(); 
    outputParameters.channelCount = 1;      
    outputParameters.sampleFormat = paUInt8; 
    outputParameters.suggestedLatency = Pa_GetDeviceInfo( outputParameters.device )->defaultLowOutputLatency;
    outputParameters.hostApiSpecificStreamInfo = NULL;

PSpaUInt8 : 2つのコールバック(読み取り用と書き込み用)を使用したにもかかわらず、送信できる理由の説明。

4

1 に答える 1

2

コードを追加せずに問題がどこにあるのかを知ることは不可能ですが、いくつかのことを言うことができます:

  • ブロッキングに切り替えても、問題の解決に違いはありません。

  • paFloat32 を実行しても何も聞こえない場合は、paFloat32 のサポートが非常に優れているため、何か間違っている可能性があります。浮動小数点型の範囲は -1 から 1 です。それが出力されていることを確認してください。また、PortAudio に含まれている優れたコード サンプルを試すこともできます。コールバックを使用して paFloat32 を使用して出力するものを探し、それが機能するかどうかを確認します (このようなもの)。

  • FFT 検出で間違ったピッチを取得している場合は、おそらくそれも間違っています。2 つの可能性があります: 1. ピッチが思ったものと違う、2. FFT ピッチ検出が間違っている。コードがなければ、私は推測することしかできませんが、誰もが#2に問題があるため(SOに関する質問で判断)、少なくともそれで問題があると思います.

FFT ピッチ検出については、私のブログ エントリのコードを参照してください (portaudio も使用しています)。

http://blog.bjornroche.com/2012/07/frequency-detection-using-fft-aka-pitch.html

適切な売り込みを作成するために、ここ SO にはたくさんの質問があります。

于 2012-11-02T16:08:11.547 に答える