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

如何在Java中以指定的音量播放声音?,java,audio,volume,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

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

目前我正在使用:

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。 如何在剪辑开始前设置其音量


提前谢谢

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

如果你想让声音更大一些,你就得小心“结束”。没有简单的方法可以解决这个问题。

在Java7(可能还有Java6)中,有一组类可以提供。这些是:

  • 布尔控制
    • 哑巴
    • 应用/移除混响
  • 复合控制
  • 枚举控制
    • 混响控制
  • 浮动控制
    • 辅助回路
    • 辅助发送
    • 平衡
    • 主增益
    • 淘金
    • 混响返回
    • 混响发送
    • 采样率
    • 音量
您要查找的控件对象是。如上面列表所示,这可以控制剪辑的音量。使用以下代码实现此功能:

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


其中,
gainAmount
是您希望提高(或降低)剪辑音量的分贝量。

我想您可以看看它们降低音量的地方。当然,您只需添加音量。如果多个剪辑重叠,可能与其他声音(如系统声音)重叠,则无法工作。
((FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN)).setValue(gainAmount)