3

私は2つのサウンドファイルを持っています:

  • サウンドAは、1回再生するように設計された18秒のイントロです。
  • サウンドBは1分間のループトラックです

サウンドAを1回再生し、サウンドAが終了したら、すぐにサウンドBを再生し、停止するように指示するまでサウンドBをループし続けます。これは、RPGで町の音楽をループしていると思われます。

SoundEffectだけを使用してコードでこれを実行しようとしましたが、SoundAの終わりとSoundBの始まりの間に小さいながらも目立つギャップがあります。SoundAのSoundEffectInstance.Stateを監視する監視コードをUpdate()関数に配置しても、サウンドAが終了したときにサウンドBを正確に開始できなかったため、シームレスになりました。

XACTでWAVにとらわれるのではなく、WMAファイルをロードできるため、SoundEffectを使用したいと思います。

4

2 に答える 2

2

残念ながら、SoundEffect APIのシンプルさは、柔軟性を低下させることで代償を払っています。このタイプのオーディオプログラミングは、XACTが優れている点です...複雑な構成が必要な場合は、XACTへの移行を検討することをお勧めします。

于 2010-05-11T17:11:34.900 に答える
2

潜在的に2番目のオプション。あなたが聞いているギャップは、おそらく2番目のサウンドをメモリにロードするか、初期化するか、ストリームを開く必要があるためだと思います(内部実装は不明です)。しかし、これが事実である場合、私はあなたがこのようなことをすることができるかどうか疑問に思います:

  1. 2つの効果音(aとb)をロードします
  2. 効果音Aの再生を開始します
  3. すぐに効果音Bの再生を開始します
  4. 1フレーム後に効果音Bを一時停止します
  5. 効果音Aが終了したら、効果音Aを再開します。

私の仮定では、効果音Bはすでに初期化されているので、起動が速くなり、知覚されるギャップが少なくなる可能性があります。あなたがこれを試す機会があれば、そしてそれがうまくいったかどうか聞いてみたいです:-)

于 2010-05-11T21:35:30.873 に答える