0

投機的評価 (別名、投機的実行) は、時折の手直し (非効率) を犠牲にして、低レイテンシーのコードを実現するための効果的なアプローチです。投機的評価は、現代のコンピューター アーキテクチャで一般的な低レベルの手法ですが、高レベルのプログラミング モデルでサポートできます (タイム ワープ プロトコル、時相論理、リアクティブ プログラミング モデルを参照)。

投機的評価が特に役立つと思われる場所の 1 つは、ライブ コーディングやゲームなどのオーディオのリアルタイム計算です。アイデアは単純です。オーディオ バッファーを投機的に満たしてバッファー アンダーランを防ぐことができますが、最後の瞬間の変更に対応する必要がある場合は、それらのバッファーを時々修正します。このような手法は、依然として不具合を起こす可能性があります。更新が遅れていると、前面が少し切り落とされる可能性があります。しかし、推測されたサウンドのほとんどはまだほとんど正しいはずなので、これは通常のアンダーランとは異なる (潜在的により優雅な) グリッチのモードです。

さて、私が疑問に思っているのは、どのオーディオ API またはライブラリが、既存のバッファに対するこれらの最後の瞬間の更新を最も効果的にサポートするかということです。私は健全なプログラミングの専門家ではありませんが、私が見たほとんどのサンプル コードは、バッファーへのコミットメントを想定しているようです。バッファを読み込んだ後にバッファにコミットしている場合、レイテンシとアンダーランのリスクとの間でトレードオフを行うしかありません。コミットメントを必要としないオーディオ API はどれですか?

4

1 に答える 1

1

サウンドを含むバッファがサウンドカードに渡された後では、通常、変更を加えるには遅すぎます。Microsoft が、サウンドカードのメモリ バッファ ( WaveRT )に直接書き込むことができるオーディオ ドライバ モデルを導入しようとしたことを覚えているようですが、USB サウンドカードがサポートしていなかったため、あまり注目されませんでした。

すべてのオーディオ API には、再生するバッファーを指定する方法、または指定されたバッファーを満たす方法があります。これを行った後は、その場所のメモリを変更しても効果があるという保証はありません (クラッシュを引き起こす可能性さえあります)。Windows の waveOut API を使用すると、複数のバッファーをキューに入れることができるため、サウンドカードが再生を開始する前にバッファーを変更することができます。ただし、低レイテンシ API ではないため、再生中の API は 50 ミリ秒程度になる可能性があります。

非常に応答性の高いサウンドを必要とするほとんどのアプリケーションは、低レイテンシーで動作します。オーディオ処理の観点からは、すでに書き込まれたバッファの一部をさかのぼって変更することは非常に難しいことがよくあります。オーディオをスワップアウトすると、フェードインとフェードアウトを行わないとポップやクリックが発生する可能性があるためです。オーディオを通過させた場合、再現できない状態になる可能性があります。

于 2012-12-06T08:05:04.680 に答える