1

時間ベースでイベントを送信したり、非常に細かい解像度と精度で複雑な処理を実行したりするアプリの例は数多くあります。MIDIシーケンスアプリ、オーディオおよびビデオ編集アプリを考えてみてください。

だから私は、コアレベルで、これらのアプリがプログラミングの観点からどのように正確に行うのか興味がありますか?

4

1 に答える 1

0

MIDI とメディアの再生は性質がまったく異なり、異なる方法で処理されます。

MIDI の場合、処理するデータはほとんどありません。MIDI I/O を処理するために、優先度の高いスレッドが作成されます。必要なのはそれだけです。

オーディオの場合、精度は問題ではありませんが、遅延は問題です。サウンド インターフェイスには、オーディオを再生するソフトウェアによって定期的に書き込まれるバッファがあります。典型的なメディア プレーヤーの場合、このバッファには約 300 ミリ秒のオーディオ用のストレージがあります。ソフトウェアは、PCM でエンコードされたオーディオ波形をバッファに書き込むだけです。サウンド インターフェイスは常にこのバッファから読み取り、一定の速度で再生しています。

低遅延のオーディオ アプリケーションの場合、このバッファ サイズは非常に小さく、5 ミリ秒または 10 ミリ秒のオーディオしか処理できません。オーディオ データを生成するソフトウェアは、優先度の高いスレッドによって処理される必要があり、多くの場合、ソフトウェアの残りの部分 (エフェクトなど) が追いつかない場合に実行し続けるための多くの最適化が行われます。バッファ アンダーランは一般的です。シグナル チェーン内の不要なソフトウェアをスキップするために、特別なドライバーがよく使用されます。Windows では ASIO と DirectX が一般的です。Windows Vista/7 と OSX はどちらも、オーディオ API を「コア オーディオ」と呼び、特別なドライバーなしで低遅延機能を提供します。

ビデオはまったく別の獣です。ビデオのデコードは、可能な場合、ハードウェアによって処理されます。これは、携帯電話などの低速のデバイスが 720p ビデオを再生できる方法です。ハードウェアがコーデックを処理できる場合、ソフトウェアはデータを送信するだけで済みます。コーデックがサポートされていない場合、ビデオははるかに遅いソフトウェアでデコードする必要があります。最新の PC でさえ、ソフトウェアのデコードによってビデオが途切れたり、遅延したりすることがよくあります。

オーディオとビデオの同期も問題です。私はそれについてあまり知りませんが、オーディオがマスタークロックであり、ビデオがそれに同期していることは理解しています。44.1kHz (またはその他のサンプル レート) については、サウンド インターフェイスが異なれば考え方も異なるため、単純に再生を開始してタイミングがうまくいくと期待することはできません。これは、同じオーディオを 2 つの異なるデバイスで同時に再生し、時間の経過とともに変化する音を聞くことで証明できます。

于 2013-02-15T15:33:43.823 に答える