2016-02-17 2 views
0

У меня есть обратный вызов аудиоввода, который принимает входной звуковой буфер и выполняет fft в буфере для использования в других частях приложения. Выходной буфер не изменяется. Я хотел бы поймать звук, записанный на выходное аудиоустройство по умолчанию другими приложениями. Однако при инициализации потока с устройством вывода в качестве входного сигнала звук порта вызывает ошибку «недопустимое количество каналов». Можно ли поймать все аудио, записанные на устройство вывода, используя аудио порт? Код инициализации потока ниже:Вывод аудиовыхода, записанный на выходное аудиоустройство из порта 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)); 
} 

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^