2016-07-04 5 views
0

Я - нуб в Core Audio, AudioUnit framework, и у меня нет много знаний об этом, поэтому, пожалуйста, несите его со мной.Как захватить аудио буферы перед отправкой их в динамик?

У меня есть требование, когда мне нужно получить доступ к прямому потоку, проходящему через удаленный вызов, используя webRTC. В рамках webRTC нет доступа к аудиопотоку.

Итак, я думал, что получить доступ к этому аудиопотоку через Apple audio frameworks, я подумываю захватить аудио, прежде чем отправлять его в динамик. Возможно ли получить звуковые буферы перед отправкой в ​​динамик.

Мне нужно изменить звуковые буферы с некоторым значением и отправить его обратно в динамик.

Пожалуйста, помогите!

+0

Вы можете получить большую помощь здесь, но нужно описать немного больше ваших проблем и ваших усилий. Конечно, вы можете захватить буферы и изменить их, но этот метод зависит от конструкции вашей цепочки обработки аудио. Если вы новичок в CA, этот учебник (http://www.informit.com/store/learning-core-audio-a-hands-on-guide-to-audio-programming-9780321636843) может помочь прояснить базовые понятия с кодом рабочего кода для изучения. – user3078414

ответ

0

Вы можете установить обратный вызов рендеринга для вывода AudioUnit и изменить звуковые буферы перед отправкой на динамики.

AURenderCallbackStruct callbackStruct; 
     callbackStruct.inputProc = inputRemoteRenderCallback; 
     callbackStruct.inputProcRefCon = sourceUnit; 


     AudioUnitSetProperty(outputAudioUnit, 
          kAudioUnitProperty_SetRenderCallback, 
          kAudioUnitScope_Input, 
          0, 
          &callbackStruct, 
          sizeof(callbackStruct)); 

и обратного вызова:

static OSStatus inputRemoteRenderCallback (void *inRefCon, 
             AudioUnitRenderActionFlags *ioActionFlags, 
             const AudioTimeStamp *inTimeStamp, 
             UInt32 inBusNumber, 
             UInt32 inNumberFrames, 
             AudioBufferList *ioData 
             ) { 

AudioUnit au = (AudioUnit)inRefCon; 

AudioUnitRender(au, 
       ioActionFlags, 
       inTimeStamp, 
       0, 
       inNumberFrames, 
       ioData); 

return noErr; 
} 
Смежные вопросы