3

我有两个声音文件:

  • Sound A 是一个 18 秒的前奏,旨在播放一次
  • Sound B 是一首 1 分钟的循环曲目

我想播放声音 A 一次,然后一旦声音 A 完成,立即播放声音 B 并继续循环声音 B,直到我告诉它停止。这应该是在 RPG 中循环播放城镇音乐。

我已经尝试在仅使用 SoundEffect 的代码中执行此操作,但声音 A 的结尾和声音 B 的开头之间存在一个微小但明显的差距。即使我将监视代码监视声音 A 的 SoundEffectInstance.State 放在 Update() 函数中,我无法在声音 A 结束时准确地启动声音 B ,因此它是无缝的。

我更喜欢使用 SoundEffect,因为我可以加载 WMA 文件,而不是在 XACT 中被 WAV 卡住。

4

2 回答 2

2

不幸的是,SoundEffect API 的简单性是以降低灵活性为代价的。这种类型的音频编程是 XACT 擅长的……如果您需要复杂的作品,那么您可能想要研究转向 XACT。

于 2010-05-11T17:11:34.900 回答
2

潜在的第二个选择。我想你听到的差距可能是因为第二个声音需要加载到内存中,或者初始化,或者打开流(不确定内部实现)。但如果是这样的话,我想知道你是否可以这样做:

  1. 加载两个音效(a 和 b)
  2. 开始播放音效A
  3. 立即开始播放音效B
  4. 一帧后暂停音效B
  5. 音效A结束后,重新启动音效A

我的假设是,由于音效 B 已经初始化,它可能会更快启动,从而减少感知差距。很想听听你是否有机会尝试这个,以及它是否有效:-)

于 2010-05-11T21:35:30.873 回答