2016-07-04 4 views
0

저는 Core Audio, AudioUnit 프레임 워크에 대한 멍청한 의견을 갖고 있습니다.스피커로 보내기 전에 오디오 버퍼를 잡는 방법?

webRTC를 사용하여 원격 호출을 통해 들어오는 라이브 스트림에 액세스해야하는 요구 사항이 있습니다. webRTC 프레임 워크에서는 오디오 스트림에 액세스 할 수 없습니다.

그래서 제가 생각한 것 중 하나는 Apple 오디오 프레임 워크를 통해 해당 오디오 스트림에 액세스하는 것입니다. 오디오를 스피커로 보내기 전에 잡아낼 생각입니다. 스피커로 보내기 전에 오디오 버퍼를 확보 할 수 있습니까?

일부 값으로 오디오 버퍼를 수정하고 스피커로 다시 보내야합니다.

도와주세요!

+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; 
} 
관련 문제