У меня проблема с использованием PortAudio, и я не уверен, что я не совсем понимаю, как работают обратные вызовы, или я сделал что-то не так. Мое предположение состояло в том, что обратные вызовы должны запускаться непрерывно «на галочке», содержащих текущие выборки, но кажется, что я получаю только несколько обратных вызовов, когда открываю и запускаю поток, и тогда я больше не получу обратных вызовов. Мой код:
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 %f\n", 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
Я что-то не так делаю или мое понимание того, что происходит с обратными вызовами, неправильное?