После реализации звуковой петли (от входа микрофона до стандартного выхода) в Android с помощью Superpowered SDK я обнаружил, что вывод слышен только через одну сторону гарнитуры.
Так я инициализировал SuperpoweredAndroidAudioIO:
audioIO = new SuperpoweredAndroidAudioIO (
samplerate, // sampling rate
buffersize, // buffer size
true, // enableInput
true, // enableOutput
liveAudioProcessing, // process callback function
process, // clientData
-1 , // inputStreamType (-1 = default)
-1, // outputStreamType (-1 = default)
buffersize * 2 // latencySamples
);
Переключение inputStreamType или outputStreamType на другие параметры в SLES / OpenSLES_AndroidConfiguration.h не помогло решить проблему.
Моя функция обратного вызова liveAudioProcessing выглядит следующим образом:
static bool liveAudioProcessing (
void * clientdata, // custom pointer to processing bool
short int *audio, // buffer of interleaved samples
int numberOfFrames, // number of frames to process
int __unused samplerate // sampling rate
) {
SuperpoweredShortIntToFloat(audio, floatBuffer, (unsigned int)numberOfFrames);
if (*(bool *) clientdata and eq != nullptr) {
eq->process(floatBuffer, floatBuffer, (unsigned int) numberOfFrames);
}
SuperpoweredFloatToShortInt(floatBuffer, audio, (unsigned int)numberOfFrames);
return true;
}
Проблема возникает, когда оба clientdata имеют значение false и true, поэтому они не имеют ничего общего с эквалайзером.