2

Core Audio コールバックには非常に低いレイテンシーが必要であることに気づきました。私の場合、一度に 512 サンプルのリクエストを受け取っています。これは、44100Hz では、コールバックの実行に最大で 11.6 ミリ秒かかることを意味します。

さて、ガベージ コレクションを理解しているので、コレクション サイクルごとに、VM はすべてのスレッドを停止する必要があります。その後、ガベージ コレクション サイクルが Core Audio コールバックを中断し、グリッチが発生する可能性があります。

その場合、MonoTouch から Core Audio を使用するのは本当に安全ではありません。

私の仮定は正しいですか?それともこれはすべて間違っていますか?

4

2 に答える 2

2

Core Audio レンダー コールバックは、期限が非常に厳しいリアルタイム スレッドで呼び出されます。その音から、レンダー コールバックの許容時間を超えて、切断されることがあります (これは == グリッチです)。私は MonoTouch についてあまり知りませんが、GC 遅延が原因であるというあなたの推測は、非常にありそうな結論のように聞こえます。

Core Audio レンダー コールバックがいかに厳密であるかを理解していただくために、そのコンテキストで受け入れられないものをいくつか示します。

  • メモリの割り当て
  • ミューテックスで待機中
  • ディスクからのデータの読み取り
  • Objective-C メッセージング

Core Audio のアーキテクチャにより、レンダリング コールバックは、作成したオーディオが聞こえる直前にトリガーされます。そのため、GC が短時間ハングアップしただけでも、可聴グリッチが発生する可能性があります。

于 2013-02-07T03:02:41.127 に答える
1

いいえ。MonoTouchVMは、決定論的な時間でコードを実行することが保証されているようには見えません。リアルタイムオーディオコールバックには、すべてのOS呼び出しやインタプリタのオーバーヘッドなど、パフォーマンスを時間内に厳密に制限できるコード(通常はコンパイルされたネイティブC)が必要です。

于 2013-02-07T07:53:15.863 に答える