2017-02-12 10 views
2

오디오를 녹음하고 들어오는 바이트를 처리하는 간단한 앱이 있습니다. 들어오는 데이터가 많이 누락되었습니다. , 그것의 2/3과 같은 것.OSX : AudioUnit 콜백이 충분하게 호출되지 않았습니다.

이 루틴 :

static OSStatus AudioCallBack (void* userData, AudioUnitRenderActionFlags* ioActionFlags, const AudioTimeStamp* inTimeStamp, UInt32 inBusNumber, UInt32 nFrames, AudioBufferList* ioData) 

은 충분히 호출되고 있지 않습니다. 무엇이 일반적으로 이것을 일으킬 수 있습니까?

답변

2

Audio Unit 콜백 (또는 Objective C 메시징, 동기화, 잠금 또는 메모리 관리 등을 수행하는 다른 작업)에서 상당한 양의 처리를 시도하면 콜백 함수 또는 블록이 너무 오래 걸릴 수 있습니다 따라서 앱이 콜백을 놓칠 수 있으며 일부 오디오 데이터가 누락 될 수 있습니다. 콜백 내에서 모든 처리를 제거하고 수신 된 오디오 샘플의 수를 합하여 올바른 양이 초당 들어오는 지 확인할 수 있습니다.

콜백이 너무 오래 걸리지 않게하려면 다른 스레드에서 전체 또는 대부분을 처리하도록 처리를 재정비해야하며 오디오 유닛 콜백에서 데이터를 빠르게 배열, 대기열 또는 fifo를 다른 처리 작업 또는 스레드로 전달할 수 있습니다. Audio Callbacks의 속도를 알기 때문에 필요한 처리를 폴링 할 정확한 속도를 결정할 수 있습니다.

+0

네, 그게 문제였습니다. 감사! – Doej