AudioUnit
과 ExtAudioFile
을 사용하는 맞춤형 오디오 플레이어 클래스를 만들었습니다. 내 수업에서 내가iOS에서 전달한 inNumberFrames를 AURenderCallback 함수에서 제한 할 수 있습니까?
OSStatus MyAURenderCallack (
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData
);
내 응용 프로그램이 전경처럼 같은 내 자신의 렌더링 콜백 함수를 준비, OS에 의해 전달 된 매개 변수 inNumberFrames
항상 512
또는 1024
이며, 내 플레이어는 잘 작동합니다.
그러나 iOS 장비가 잠자기에 들어갔을 때 inNumberFrames
은 4096
이되고 너무 많은 프레임을 한 번 준비 할 수 없기 때문에 플레이어가 작동하지 않습니다.
가속화하기가 힘든 extAudioFileRead
기능을 많이 사용하기 때문에 프레임 준비 프로세스를 개선하기가 어렵습니다.
따라서 inNumberFrames
이 1024
보다 커지지 않도록 제한하고 싶습니다.
만들 수 있습니까?
렌더링 콜백에서'ExtAudioFileRead'를 호출하면 안됩니다. 불특정 다수의 시간 동안 방해를하여 글리치를 유발할 수 있습니다. – sbooth
그래서 ExtAudioFileRead를 호출하고 다른 스레드에서 버퍼를 준비해야합니까? – Mekajiki
예, 일반적인 방법은 생성자 스레드가 링 버퍼를 채우는 것입니다. 렌더링 콜백은 링 버퍼에서 읽고 더 많은 데이터가 필요하다는 제작자 스레드에 신호를 보냅니다. – sbooth