PortAudioを使用してオーディオWAVファイルを読み込んでいます。コールバック関数は正常に動作しており、ファイルはUbuntoで正常に再生されています。この問題は、Pa_GetStreamTimeを使用して時刻を取得しようとするときに0を返します。私はportaudioのドキュメントとサンプルを読んでいますが、トラブルシューティングの方法やその機能を使用する例は見つかりませんでした。私はAPIドキュメントhereを調べましたが、何も鐘が鳴りません。誰かがヒントを提供することができれば、それは非常に高く評価されるだろう。以下は、コールバック関数が実行されている実装部分です。最終目標はwavファイルのFTTを表示しているため、Qtを使用しています。前もって感謝します。Pa_GetStreamTimeが0時間を返す
int playAudio::patestCallback(const void *inputBuffer, void *outputBuffer,
unsigned long framesPerBuffer,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData)
{
/* Cast data passed through stream to our structure. */
// data = (WAV*)userData;
float *out = (float*)outputBuffer;
(void) inputBuffer; /* Prevent unused variable warning. */
/*terminates the stream flows and reset cursor.*/
if (cursor == playAudio::SubChunk2Size/4)
{
cursor = 0;
return paComplete;
}
for (int i = 0; i < framesPerBuffer; i++)
{
if (cursor == playAudio::SubChunk2Size/4) break; // breaks if samples reached last.
*(out++) = pLeftChannel[cursor];
*(out++) = pRightChannel[cursor];
cursor++;
}
// qDebug()<<cursor;
playAudio::audioTime = Pa_GetStreamTime(stream);
qDebug() << playAudio::audioTime;
return paContinue;
}
実際には、構造体PaStreamCallを試しました。なぜなら、私はコールバック関数を混乱させたくないからですが、currentTimeメンバでは0になっています。 outputBufferDACtimeを使ってデータの時刻を見ることはできましたが、それをどう扱うか分かりませんでした。しかし、結果は得られませんでしたので、currentTimeを使用したときに同じ結果を返すPa_getStreamTimeを試しました。 qDebugについてあなたが正しいです、私のケースでは、問題を与えていない、最終的に削除されます。 portaudioを使用して情報を共有し、時間を取得するか、timeInfo.OutputBufferDACTimeからそのデータを処理する方法を知っている場合。 – luffyKun