2013-01-08 5 views
6

iOS "오디오 대기열 프로그래밍 가이드 - 오디오 재생"을 따르고 있습니다.Audio Queue 재생 코드에서 CFRunLoopRunInMode()를 호출하는 이유는 무엇입니까?

do {            // 5 
    CFRunLoopRunInMode (       // 6 
     kCFRunLoopDefaultMode,      // 7 
     0.25,          // 8 
     false          // 9 
    ); 
} while (aqData.mIsRunning); 
//... 

라인 (6)에 대한 설명서를 말한다 : 가이드의 끝 부분, 단계 Start and Run an Audio Queue에서 CFRunLoopRunInMode()에 대한 호출이 있습니다. "CFRunLoopRunInMode 기능은 오디오 큐의 스레드를 포함하는 실행 루프를 실행" 은 내 메소드가 반환 될 때 실행되는 루프가 어쨌든 실행되지 않습니까? 위의 코드는 내 앱의 재생 버튼을 누르면 메인 스레드가 실행합니다.

이제는 CFRunLoopRunInMode()에 대한 이러한 호출이 내 재생 버튼이 올바르게 업데이트되지 않는다는 단점이 있으므로 (오디오가 재생되는 동안 계속 눌려진 것처럼 보임) 어려움을 겪고 있습니다. CFRunLoopRunInMode()에 대한 호출과 함께 코드에서 do-while-loop를 제거하고 대신이 메서드에서 직접 반환하면 오디오도 훌륭하게 재생됩니다. 이것은 문제를 일으키지 않으므로 이러한 호출을 단순히 제거하는 명백한 해결책을 지적합니다. 누군가가 왜이 코드가 iOS의 오디오 대기열을 오디오 재생에 사용하는지 Apple이 공식 가이드에 포함시킨 이유를 설명 할 수 있습니까?

편집 : 난 그냥 맥 OS X에서,이 iOS에서와 같은 오디오 큐 API를 존재하며, iOS 용 가이드는 Mac OS guide의 복사 - 붙여 넣기 복제 것 같다보고 있어요

. 이것은 실행 루프에 대한 호출이 Mac OS에서만 필요하며 더 이상 iOS에서는 필요하지 않다는 의혹으로 이어집니다. 그렇지 않으면 Mac OS 응용 프로그램이 종료되거나 그와 비슷한 것이 있기 때문입니다. 누군가 이것을 확인하거나 배제 할 수 있습니까?

+2

당신이 옳다고 생각합니다. 나에게 이것은 독립 실행 형 (명령 행?) 응용 프로그램을위한 샘플 코드와 비슷하지만 * 완성 된 오디오 파일은 재생하지 않습니다. "실제"앱에서는 실행 루프를 "수동으로"실행할 필요가 없습니다. FWIW, 나는 AudioQueues를 사용하고 그 샘플 코드를 결코 발견하지 못했고 그런 식으로'CFRunLoopRunInMode()'를 결코 호출하지 않는다. – bunnyhero

답변

1

@bunnyhero는 CFRunLoopRunInMode() 명령 행 예제만큼

https://github.com/abbood/Learning-Core-Audio-Book-Code-Sample/blob/master/CH05_Player/CH05_Player/main.c

을 위해 일반적으로, 바로 당신의 AudioQueueRef 할당이 해제되지 않은, 당신은 ... IOS에서 CFRunLoopRunInMode()를 사용할 필요 없다

무엇 오디오 큐에 대한 별도의 클래스를 만들고 내 클래스 포인터와 AudioQueueRef이 할당되어있는 한 재생, 일시 중지, 다시 시작, 중지 등을 할 수 있습니다.