当另一个声音使用 XNA/XACT 结束时,如何立即播放一个声音?

Posted

技术标签:

【中文标题】当另一个声音使用 XNA/XACT 结束时,如何立即播放一个声音?【英文标题】:How can I immediately play a sound when another sound ends using XNA/XACT? 【发布时间】:2008-09-22 09:30:06 【问题描述】:

这个问题介于音频设计师和程序员的世界之间。虽然这个问题可能必须由音频设计师的那个领域来部分回答,但这对于程序员来说肯定是一个问题。在我们的项目中,我们希望在游戏计时器还剩一分钟以上时循环播放声音(背景音乐)。当这个时间到来时,我们希望停止创作的音乐,然后立即继续结束片段。我一直在研究 XACT,它似乎支持不同的事件。不幸的是,缺少文档,而且这个应用程序对我这个程序员来说有点陌生。

我想做的是沿着这些路线(不同的方法):

    当音乐停止,我想打领带 播放另一种声音的事件 立即 当标记是 在音乐中触发,我想 立即播放另一个声音 我还想在我的应用程序中知道其中一些事件何时发生

问题是我找不到任何机制来在另一个声音开始时自动播放声音,而且我找不到将 XACT 项目中的事件与 C# 挂钩的方法。

如果无法做到这一点(即 XACT/XNA 不支持这些操作),请收集您的想法,了解如何以最小的交叉声音时间错误解决此问题。最好我可以通过调用 XNA 在 C# 中尽可能地控制这一点。

【问题讨论】:

【参考方案1】:

我想我现在已经解决了

我是这样做的。

    XACT中选择您想要改变声音的Cue。 将播放列表类型设置为交互式。 打开提示过渡。 选择按目的地查看。 在树视图中可见的 (stop) 节点中选择 Cue。 在树视图右侧的 Transition Properties 中,对于 Source 和 Destination
      来源设置为循环结束。 将Destiantion设置为Beginning
    在树视图右侧的Transition Properties中,对于Transitions
      转换类型设置为直接并发转换。 在循环声音完成循环后,将Transitional Sound设置为您希望播放的声音

关闭窗口并通过播放 Cue 进行测试。还要测试以阻止它按作者身份,看看该行为是否符合您的期望。


实施

在代码中,停止提示 As Authored 以获取此行为。 立即停止提示而不播放声音结尾。我希望这对将来可能遇到此问题的其他人有所帮助。问题和答案并不像我最初想象的那样面向代码。此外,这适用于 XNA 2.0。我不知道在 XNA 3.0+ 中是否还有其他选项可以控制这种行为。

【讨论】:

优秀的答案!我喜欢这种布局。 +1

以上是关于当另一个声音使用 XNA/XACT 结束时,如何立即播放一个声音?的主要内容,如果未能解决你的问题,请参考以下文章

当另一个正在运行时,如何暂停一个倒数计时器?

当另一个应用开始播放音频时,如何自动暂停我的应用中的音频播放器?

当另一个线程正在工作时,活动在启动时冻结

当另一个孩子完成时如何退出一个子进程

当另一个应用程序关闭时,如何调试为啥应用程序死机无异常?

当另一个片段中的数据发生更改时,如何刷新一个片段中的 RecyclerView