Вам необходимо реализовать простую глобальную функцию с той же сигнатурой, что и PaStreamCallback.
Похоже, что PaStreamCallback принимает аргумент, void * userData. Это то, что обычно называют контекстным аргументом. Без знания PortAudio я думаю, что вы можете использовать это для представления экземпляра вашего класса. Когда вы вызываете Pa_OpenDefaultStream, передайте «this» для указателя userData, где вы написали NULL в своем примере.
Вот пример реализации необходимой вам оболочки функции:
int MyPaStreamCallback (const void *input, void *output, unsigned long frameCount, const PaStreamCallbackTimeInfo *timeInfo, PaStreamCallbackFlags statusFlags, void *userData)
{
MyClass *myClass = reinterpret_cast<MyClass*>(userData);
return myClass->callbackFunction(input, output, frameCount, timeInfo, statusFlags);
}
Затем замените исходный код на:
Pa_OpenDefaultStream(&this->_stream, 1, 2, paFloat32, this->_sampleRate, this->_framesPerBuffer, MyPaStreamCallback , this);
Я предполагал, что вы сделаете функцию обратного вызова, чтобы принять все остальные аргументы.