Поймать аудиовыход, записанный на выходное аудиоустройство из порта Audio

У меня есть обратный вызов аудио порта, который принимает входной звуковой буфер и выполняет fft в буфере для использования в других частях приложения. Выходной буфер не изменяется. Я хотел бы поймать звук, записанный на аудиоустройство вывода по умолчанию другими приложениями. Однако при инициализации потока с устройством вывода в качестве входных данных порт audio выдает ошибку «недопустимое количество каналов». Можно ли перехватить весь звук, записанный на устройство вывода, используя порт audio? Код инициализации потока ниже:

PaStreamParameters inputParams;
inputParams.device = Pa_GetDefaultOutputDevice();
inputParams.channelCount = 2;
inputParams.sampleFormat = paFloat32;
const PaDeviceInfo * inputInfo = Pa_GetDeviceInfo(inputParams.device);
inputParams.suggestedLatency = inputInfo->defaultLowOutputLatency;
inputParams.hostApiSpecificStreamInfo = NULL;

error = Pa_OpenStream( &_pInputStream,
                      &inputParams,
                      NULL,
                             inputInfo->defaultSampleRate,
                             paFramesPerBufferUnspecified,
                             0,
                             coreAudioCallback,
                             this);
if( error != paNoError ){
    printf("Port audio error = %s", Pa_GetErrorText(error));
}

person user1832287    schedule 17.02.2016    source источник


Ответы (1)


Port Audio не поддерживает эту функцию. Решение состоит в том, чтобы использовать существующее устройство кольцевой проверки звука ОС и установить это устройство в качестве устройства вывода по умолчанию из ОС. Затем устройство обратной связи можно использовать в качестве источника входного потока в Port Audio, а окончательный звук может быть направлен на желаемое устройство вывода из обратного вызова аудио порта.

person user1832287    schedule 17.02.2016