2012-10-22 2 views
0

간단히 요약하면 : RemoteIO를 사용하여 앱에서 생성 한 모든 오디오를 캡처/조작하는 방법이 있습니까?RemoteIO : 앱에서 생성 한 오디오 효과

입력 범위에 대해 RemoteIO의 출력 버스에 연결하여 오디오를 스피커로 보낼 수있는 렌더링 콜백을 얻을 수 있습니다. 하지만 그 콜백의 입력 버퍼에는 AVPlayer에 의해 앱의 다른 곳에서 생성되는 사운드가 포함되어 있지 않습니다. 가능한 모든 앱 오디오를 조작하고 있습니까?

여기 내 설정이다 :

-(void)setup 
{ 
    OSStatus status = noErr; 

    AudioComponentDescription remoteIODesc; 
    fillRemoteIODesc(&remoteIODesc); 
    AudioComponent inputComponent = AudioComponentFindNext(NULL, &remoteIODesc); 

    AudioComponentInstance remoteIO; 
    status = AudioComponentInstanceNew(inputComponent, &remoteIO); 
    assert(status == noErr); 

    AudioStreamBasicDescription desc = {0}; 
    fillShortMonoASBD(&desc); 

    status = AudioUnitSetProperty(remoteIO, 
            kAudioUnitProperty_StreamFormat, 
            kAudioUnitScope_Input, 
            0, 
            &desc, 
            sizeof(desc)); 
    assert(status == noErr); 

    AURenderCallbackStruct callback; 
    callback.inputProc = outputCallback; 
    callback.inputProcRefCon = _state; 

    status = AudioUnitSetProperty(remoteIO, 
            kAudioUnitProperty_SetRenderCallback, 
            kAudioUnitScope_Input, 
            0, 
            &callback, 
            sizeof(callback)); 
    assert(status == noErr); 

    status = AudioUnitInitialize(remoteIO); 
    assert(status == noErr); 

    status = AudioOutputUnitStart(remoteIO); 
    assert(status == noErr); 
} 

답변

2

짧은 답변 : 아니, 불행하게도, 그런 식으로 작동하지 않습니다. AVFoundation을 통해 제작하는 오디오에는 임의의 처리를 추가 할 수 없습니다 (iOS 6 기준).

당신은 RemoteIO 장치의 목적을 오해하고 있습니다. RemoteIO는 오디오 입력 하드웨어와 오디오 출력 하드웨어의 두 가지 항목에 대한 액세스를 제공합니다. 에서와 같이 RemoteIO를 사용하여 마이크에서 오디오를 가져 오거나 스피커로 오디오를 보낼 수 있습니다. RemoteIO 기기를 사용하면 앱의 다른 부분 (예 : AVFoundation)에서 하드웨어로 오디오를 전송할 수 없습니다. AVFoundation이 RemoteIO와 함께 사용하는 것과 동일한 오디오 경로를 사용하지 않기 때문에이 문제가 발생하지 않습니다.

원하는 수준에서 오디오를 조작하려면 AVFoundation보다 더 깊이 들어가야합니다. Audio Queue Services은 다음 단계의 레이어이며 오디오 대기열 처리 탭의 형태로 오디오에 액세스 할 수 있습니다. 이것은 아마도 오디오 처리를 시작하는 가장 간단한 방법 일 것입니다. 그래도 문서가 너무 많지는 않습니다. 아마 지금 가장 좋은 소스는 헤더입니다 AudioToolbox.framework/AudioQueue.h 이것은 iOS 6에서만 소개되었습니다.

그보다 깊은 숫자는 Audio Units입니다. 이것은 RemoteIO 기기가있는 곳입니다. AUFilePlayer를 사용하여 오디오 파일에서 사운드를 생성 한 다음 오디오를 다른 오디오 유닛에 공급하여 처리하거나 직접 처리 할 수 ​​있습니다. 이것은 AVFoundation (삼가면서 말하는 것)보다 상당히 까다 롭거나 장황 할 것입니다. 그러나 이미 RemoteIO 장치가 설정되어 있다면 아마 그것을 처리 할 수 ​​있습니다.

관련 문제