Portaudio回调不是连续的

PortAudio callbacks not continuous?

本文关键字:连续 回调 Portaudio      更新时间:2023-10-16

我使用portaudio遇到问题,我不确定我是否不太了解回调的工作方式,还是我做错了什么。我的假设是,回调应该在包含当前样本的" tick上"连续开火,但是似乎我在打开并启动流时只收到一些回调,然后我再也不会收到回调了。我的代码:

PaStreamParameters inputP, outputP;
inputP.device = DeviceIndex;
inputP.channelCount = CardInfo->maxInputChannels;
inputP.sampleFormat = paFloat32;
inputP.suggestedLatency = CardInfo->defaultLowInputLatency;
inputP.hostApiSpecificStreamInfo = NULL;
outputP.device = DeviceIndex;
outputP.channelCount = CardInfo->maxOutputChannels;
outputP.sampleFormat = paFloat32;
outputP.suggestedLatency = CardInfo->defaultLowOutputLatency;
outputP.hostApiSpecificStreamInfo = NULL;
PaError err = Pa_OpenStream(
    &AudioStream,
    &inputP,
    &outputP,
    SAMPLE_RATE,
    FRAMES_PER_BUFFER,
    paClipOff,
    &CAudio::AudioCallback,
    this
);
err = Pa_StartStream(AudioStream);

我使用以下常数

#define SAMPLE_RATE 44100
#define FRAMES_PER_BUFFER 64

回调:

int CAudio::AudioCallback(const void* pInputBuffer, void* pOutputBuffer, unsigned long iFramesPerBuffer, const PaStreamCallbackTimeInfo* timeInfo, PaStreamCallbackFlags statusFlags, void* userData)
{
    CAudio* AudioInterface = (CAudio*)userData;
    const float* buffer = (const float*)pInputBuffer;
    printf("Callback: %d frames per buffer %d t %fn", AudioInterface->CallbackIndex, iFramesPerBuffer, Pa_GetStreamTime(AudioInterface->AudioStream));
AudioInterface->CallbackIndex++;
    return paContinue;
}

现在,如果我打开并启动流会发生什么是我得到六个回调,以下日志输出

Opening audio stream on 'USB PnP Sound Device: Audio (hw:1,0)'
Opened audio stream, starting it...
Callback: 0 frames per buffer 64 t 21812.485122
Callback: 1 frames per buffer 64 t 21812.497681
Callback: 2 frames per buffer 64 t 21812.514483
Callback: 3 frames per buffer 64 t 21812.525110
Callback: 4 frames per buffer 64 t 21812.626489
Callback: 5 frames per buffer 64 t 21812.635590

我在做错了什么,还是我对回调发生了什么的理解?

好吧,现在我通过使用阻止API,抓住流并将其写入缓冲区的段循环中的另一个std :: thread,它可以很好地解决此问题。