相同的声音重叠使其非常响亮。提示与技巧?

Posted

技术标签:

【中文标题】相同的声音重叠使其非常响亮。提示与技巧?【英文标题】:Same sound overlapping making it very loud. Tips/Tricks? 【发布时间】:2012-09-17 00:58:42 【问题描述】:

我正在制作的游戏中有多个对象,我在弄清楚如何播放声音而不播放两次或多次相同声音时遇到了重大问题。我想知道您是否有任何技巧/提示来说明如何让声音只播放一次,无论它制作了多少次并保持平衡,而不是让它播放 50 次,声音很大。

我正在使用 XNA.Framework.Audio.SoundEffectInstance 播放声音。

【问题讨论】:

编辑问题以澄清问题。 【参考方案1】:

这更像是一个混合问题而不是编程问题。播放两次样本总是会产生更完整的效果。

从程序化的角度来看,您可以确保声音不会同时播放两次。为此,请在每次播放声音时设置一个布尔值。在播放声音之前,请确保布尔值为 false 或取消事件。播放声音后将布尔值设置为 false。

【讨论】:

【参考方案2】:

这是一个非常通用的答案,但也许您可以创建不同的声音类(例如,射击声音、移动声音、环境声音)。

播放声音时,您可以播放每个班级的当前声音,同时静音该班级的所有其他声音。

例如,对于每次枪声,每次枪声之间的时间可能比播放声音所需的时间短。对于每一次新的枪声,只需将射击声音池中的所有其他声音静音即可。

为此,您可以将射击声音对象添加到射击声音数组中,并且对于每个游戏帧,检查以确保没有新声音。如果有新声音,请在播放新声音之前遍历声音数组以静音所有内容。

然后您可以制作多个声音阵列(行走/环境),这样您的射击声音就不会切断行走声音/环境声音。

【讨论】:

这听起来不必要的复杂,我认为有一个更简单的方法。感谢您分享您的想法! :-)【参考方案3】:

在实例类中,您可以创建一个布尔值的静态变量。

当一个实例发出声音时,首先让它检查静态变量。如果变量为真,则不播放声音。如果为假,则播放声音。

声音播放完毕后,将静态变量设置为 false,以便下一个实例可以播放声音。

示例:

public static bool is_playing = false;

【讨论】:

以上是关于相同的声音重叠使其非常响亮。提示与技巧?的主要内容,如果未能解决你的问题,请参考以下文章

在相同位置加载模型,使其重叠

jQuery Audio:如何允许重叠的声音?

FLASH AS3 声音重叠

jQueryUI 工具提示 - 没有空格的文本与工具提示容器重叠

如何调整包含绘图的 div 以绘制尺寸,使其不与文档重叠

按下 ImageButton 重叠声音