9

iOSの「Audio Queue Programming Guide - Playing Audio」に従っています。ガイドの最後近くにCFRunLoopRunInMode()あるステップStart and Run an Audio Queueに への呼び出しがあります。

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

行 6 に関するドキュメントには、「CFRunLoopRunInMode 関数は、オーディオ キューのスレッドを含む実行ループを実行します」と記載されています。しかし、私のメソッドが戻ったときに実行ループが実行されていませんか? 上記のコードは、アプリで再生ボタンを押すと、メイン スレッドによって実行されます。

これらの呼び出しが何に役立つのか理解するのに苦労していますCFRunLoopRunInMode()。なぜなら、再生ボタンが正しく更新されないという欠点があり (オーディオが再生されている間ずっと押し下げられているように見える)、肯定的なものがないからです。つまり、コードから do-while-loop を呼び出しとともに削除しCFRunLoopRunInMode()、代わりにこのメソッドから直接返すと、オーディオもうまく再生されます。これは、問題が発生しないため、これらの呼び出しを削除しておくという明白な解決策を示しています。オーディオ再生のためにiOSでAudio Queuesを使用することに関するAppleの公式ガイドにこのコードが含まれている理由を誰かが説明できますか?

編集:

Mac OS X には、iOS と同じオーディオ キュー API が存在し、iOS のガイドはMac OS ガイドのコピーと貼り付けの複製のようです。これにより、実行ループへのこれらの呼び出しは Mac OS でのみ必要であり、iOS では必要なくなったという疑いが生じます。たとえば、そうしないと Mac OS アプリケーションが終了するか、そのようなものになるためです。誰かがこれを確認するか、除外してもらえますか?

4

3 に答える 3

2

@bunnyheroは正しいCFRunLoopRunInMode()です。通常はコマンドラインの例です

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

AudioQueueRef割り当てが解除されていない限りCFRunLoopRunInMode()、IOS で使用する必要はありません...

私がしていることは、Audio Queue用に別のクラスを作成することであり、クラスポインタAudioQueueRefが割り当てられている限り、再生、一時停止、再開、停止などを行うことができます....

于 2015-05-21T20:44:36.610 に答える