2013-01-08 8 views
6

iOSの「オーディオキュープログラミングガイド - オーディオを再生する」に従っています。ガイドの終わり近く、ステップStart and Run an Audio QueueCFRunLoopRunInMode()への呼び出しがあります。なぜオーディオキューの再生コードでCFRunLoopRunInMode()を呼び出すのですか?

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

ライン6についてのドキュメントは言う: 「CFRunLoopRunInMode機能は、オーディオキューのスレッドが含まれている実行ループを実行します。」 私のメソッドが返っても、実行ループは実行されません。上記のコードは、私のアプリで再生ボタンを押すとメインスレッドによって実行されます。

CFRunLoopRunInMode()のコールは、再生ボタンが正しく更新されないという欠点があります(オーディオが再生されている時間全体が押されているように見えます) CFRunLoopRunInMode()への呼び出しと一緒に私のコードからdo-while-loopを取り除き、代わりにこのメソッドから直接戻ってくると、オーディオはうまく演奏されます。 これは、これらの呼び出しを削除したままにしておくことで問題が発生しないため、明白な解決策を示しています。誰かがなぜこのコードがAppleの公式ガイドに含まれているのか説明してもらえますか?オーディオ再生のためにiOSのオーディオキューを使用していますか?

編集:

私はちょうどMac OS Xで、iOSのと同じオーディオキューのAPIが存在することを見ている、とiOSのためのガイドがMac OS guideのコピー&ペーストの重複であるように思われます。これは、実行ループへの呼び出しがMac OSでのみ必要であり、もはやiOSでは不要であるという疑いにつながります。それ以外の場合はMac OSアプリケーションが終了するなどの理由があります。誰かがこれを確認したり、それを排除してもらえますか?

+2

私はあなたが正しいと思います:私には、スタンドアロン(コマンドライン?)アプリケーション用のサンプルコードのように見えます。 「本当の」アプリでは、実行ループを「手動で」実行する必要はありません。 FWIW、私はAudioQueuesを使用し、サンプルコードに気付かず、そのようなループで 'CFRunLoopRunInMode()'を決して呼び出してはいけません。 – bunnyhero

答えて

1

@bunnyheroがCFRunLoopRunInMode()は限りあなたのAudioQueueRefの割り当てが解除されていない、あなたはIOSでCFRunLoopRunInMode()を使用するために持っていけないように、コマンドラインの例

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

のために通常、権利である...

何私はオーディオキューのための別のクラスを作成し、私のクラスのポインタとAudioQueueRefが割り当てられている限り、私は再生、一時停止、再開、停止等を割り当てることができます....

関連する問題