3

I already have a working method to play sound effects in my game, but the sounds are all played at the default volume. I want a sound to be more quiet if the distance between the sound effect's origin and the player increases.

Currently I'm using:

public static void play(String sound) {
    Clip clip = soundList.get(sound);
    clip.setFramePosition(0);
    //I want to set the clip's volume here
    clip.start();
}

There is something like clip.getLevel(), but there is no setter. How can I set the clip's volume before it starts?

Thanks in advance!

4

2 回答 2

1

在 Java 7(可能还有 Java 6)中,有一组类可以控制 clip。这些是:

  • 布尔控制
    • 沉默的
    • 应用/移除混响
  • 复合控制
  • 枚举控件
    • 混响控制
  • 浮动控制
    • 辅助返回
    • 辅助发送
    • 平衡
    • 主增益
    • 平移
    • 混响返回
    • 混响发送
    • 采样率
    • 体积

您正在寻找的控制对象是FloatControl. 如上表所示,这可以控制剪辑的音量。使用以下代码实现此功能:

FloatControl volume = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
volume.setValue(gainAmount);

-或者-

((FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN)).setValue(gainAmount)

gainAmount您想要提高(或降低)剪辑的分贝量在哪里。

于 2013-12-15T08:16:43.123 回答
0

剪辑 API 不支持这个,AFAIK。我认为您必须读取原始数据,乘以一个常数,然后使用原始数据创建一个新剪辑。该常数表示音量变化量,因此如果您希望音量减半,请乘以 0.5。

如果你想让某些东西更响亮,你将不得不提防“过度”。没有简单的方法来处理它。

于 2012-05-20T17:29:30.093 回答