高精度のタイミングを得るには、プログラミングレベルを1〜2下げて、サンプル精度のタイミングを提供するCore Audio Unitフレームワークのようなものを利用する必要があります(44100kHzでは、サンプルは約0.02msごとに発生する必要があります)。
このアプローチの欠点は、そのようなタイミングパフォーマンスを得るために、CoreAudioUnitプログラミングがObjective-CをC/C ++アプローチに使用しないことです。これは、(私の意見では)Objective-Cよりもコーディングが困難です。コアオーディオユニットの動作方法も、特にオーディオDSPのバックグラウンドがない場合は、非常に混乱します。
Objective-Cにとどまると、NSTimersがここでのオプションではないことをおそらくご存知でしょう。AVFoundationフレームワークをチェックしてみませんか?正確なメディアシーケンスに使用でき、少し創造的な水平思考とAVURLAssetAVURLAssetPreferPreciseDurationAndTimingKey
のオプションを 使用すると、CoreAudioUnitを使用せずに目的を達成できる可能性があります。
について詳しく入力するためにAVFoundation
、のインスタンスを(オブジェクトを介して)に配置AVAsset
しAVMutableComposition
、インスタンスを持つオブジェクトをAVMutableCompositionTrack
使用して結果を制御できます。AVPlayerItem通知(docs)を使用して、個々のアセットがいつ終了するかを判断できます。また、AVPlayerメソッドを使用して、任意の時間に通知を提供できます。AVPlayerItem
AVPlayer
AVPlayerItemDidPlayToEndTimeNotification
addBoundaryTimeObserverForTimes:queue:usingBlock:
addPeriodicTimeObserverForInterval:queue:usingBlock:
iOSでは、アプリがオーディオを再生する場合、これをすべてバックグラウンドスレッドで実行することもできます。つまり、アプリがバックグラウンドにある間、時間を保つことができます(ただし、警告、オーディオが再生されない場合、Appleはこのバックグラウンドモードを使用してアプリを受け入れないでください)。詳細については、 UIBackgroundModesのドキュメントをご覧ください。