Я читаю аудиофайлы wav с помощью PortAudio. Функция обратного вызова работает нормально, и файлы воспроизводятся ОК в Ubunto, как и должно быть. Проблема в том, что когда я пытаюсь получить время, используя Pa_GetStreamTime, когда он возвращает 0, я читал документацию и примеры portaudio, но я не мог найти способ устранения неполадок или, по крайней мере, пример использования этой функции. Я просмотрел документацию API here, но ничего не звонит в колокол. Если кто-то может дать подсказку, это будет очень признательно. Ниже представлена часть реализации, в которой выполняется функция обратного вызова, я использую Qt, так как моя конечная цель отображает FTT любого wav-файла. Заранее спасибо.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, я получил 0s; используя outputBufferDACtime, я мог видеть время данных, но не уверен, как справиться с этим, я добавляю их, но результат не имеет смысла, поэтому попытка Pa_getStreamTime дала тот же результат, когда я использовал currentTime. О qDebug вы правы, в моем случае не дают проблем, в конечном итоге будут удалены. Если вы можете обмениваться информацией с помощью portaudio и получать время или знать, как обрабатывать эти данные из timeInfo.OutputBufferDACTime. – luffyKun