如何在Java中以指定的音量播放声音?

时间:2012-05-18 10:18:35

标签: java audio volume

我已经有了一种在我的游戏中播放声音效果的工作方法,但声音都是以默认音量播放的。如果声音效果的起源和播放器之间的距离增加,我希望声音更安静。

目前我正在使用:

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();
}

有像clip.getLevel()这样的东西,但是没有setter。 如何在开始之前设置剪辑的音量?

提前致谢!

2 个答案:

答案 0 :(得分:1)

在Java 7(也许是Java 6)中,有一组给出control to the clip的类。这些是:

  • 布尔控件
    • 忽略
    • 应用/删除混响
  • 复合控制
  • Enum Control
    • 混响控制
  • 浮动控制
    • 辅助回报
    • 辅助发送
    • 余额
    • MASTER GAIN
    • 平移
    • Reverb Return
    • 混响发送
    • 采样率
    • VOLUME

您要查找的控件对象是FloatControl。如上面的列表所示,这可以控制剪辑的音量。使用以下代码实现此目的:

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

-OR -

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

gainAmount是你想要提高(或降低)剪辑的分贝数。

答案 1 :(得分:0)

剪辑API不支持此功能,AFAIK。我认为您必须读取原始数据,乘以常量,然后使用原始数据创建新剪辑。常数表示音量变化量,因此如果您想要它的一半大声,则乘以.5。

如果你想要做出更大声的话,你必须注意“过度”。没有简单的方法可以解决这个问题。