2013-05-30 4 views
2

I 설정 콜백을 처리하는 콜백 방법은지정 번호는 오디오 유닛 콜백 렌더링 iOS에서 렌더링의 AudioUnit에

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

{ 
} 

를 inNumberFrames은 항상 1024입니다. 어떻게 변경합니까? 렌더링 할 시간이 1024 프레임 이상입니다 (64K).

답변

4

iOS에서 정확한 버퍼 크기를 지정할 수는 없지만 특정 크기와 비슷한 버퍼 크기를 요청할 수는 있습니다. 코드는 다음과 같은 :

Float32 bufferSizeInSec = 0.02f; 
if(AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, 
    sizeof(Float32), &bufferSizeInSec) != noErr) { 
    return 1; 
} 

그래서 기본적으로 당신이 초 선호하는 버퍼 크기 (이상하게 충분하지 샘플을) 계산해야하고 시스템이 더 원하는대로 당신에게 버퍼 크기를 제공 바랍니다.

그러나이 문제는 잘못된 방법 일 수 있습니다. AudioUnits는 실시간 처리를위한 것이므로 작은 버퍼 크기를 선호합니다. 64K의 버퍼 크기는 터무니없이 크며, 현대의 iPhone/iPad가 편안하게 처리하려면 1024 프레임이 실제로 상당히 큽니다. 귀하의 알고리즘은 "블록 기반"이어야합니다. 즉, 논리가 깨져서 64 개의 호출 (각각 1024 프레임)에서 64K 샘플을 처리 할 수 ​​있어야합니다. 이것은 가장 견고한 코드로 이어질 것입니다.