使用声音效果在XNA中引入音乐

时间:2010-05-11 16:17:35

标签: audio xna playback xact

我有两个声音文件:

  • 声音A是一个18秒的介绍,旨在播放一次
  • 声音B是1分钟的循环曲目

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

我已经尝试使用SoundEffect在代码中执行此操作,但是在声音A的结尾和声音B的开头之间存在微小而明显的差距。即使我将监视代码视为更新中的Sound A的SoundEffectInstance.State ()函数,当声音A完成时,我无法启动Sound B 完全,因此它是无缝的。

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

2 个答案:

答案 0 :(得分:2)

不幸的是,SoundEffect API的简单性是通过降低灵活性来实现的。这种类型的音频编程是XACT擅长的...如果你需要复杂的构图,那么你可能想要调查移动到XACT。

答案 1 :(得分:2)

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

  1. 加载两个音效(a和b)
  2. 开始播放音效A
  3. 立即开始播放音效B
  4. 一帧后暂停音效B
  5. 当声音效果A完成时,重启声音效果A
  6. 我的假设是,由于声音效果B已经初始化,它可能会更快启动,从而减少感知差距。如果你有机会尝试这个,并且是否有效,我很乐意听到: - )