2012-05-18 30 views
3

我已经有一种工作方法可以在我的游戏中播放声音效果,但声音都是以默认音量播放的。如果声音起源与玩家之间的距离增加,我希望声音更安静。如何在Java中以指定音量播放声音?

目前我使用:

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(),但目前还没有制定者。 如何在开始前设置剪辑的音量?

在此先感谢!

+1

我想你可以看看http://stackoverflow.com/questions/953598/audio-volume-control-increase-or-decrease-in-java他们减少音量。当然,你只需添加到音量。 – Ewald

+0

如果多个剪辑重叠,可能会与其他声音(如系统声音)无法使用。 –

回答

0

剪辑API不支持这种AFAIK。我想你必须读取原始数据,乘以一个常数,然后使用原始数据创建一个新的剪辑。常数代表音量的变化量,所以如果你希望声音变大一半,乘以0.5。

如果你想做出更大的声音,你必须小心“过度”。没有简单的方法来解决这个问题。

1

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

  • 布尔控制
    • 静音
    • 应用/删除混响
  • 复合控制
  • 枚举控制
    • 混响控制
  • 浮动控制
    • 返回辅助
    • 辅助发送
    • 平衡
    • 主增益
    • 平移
    • 混响返回
    • 混响发送
    • 采样率
    • VOLUME

你正在寻找的控制对象是FloatControl。如上面的列表所示,这可以控制剪辑的音量。通过使用下面的代码来实现这一点:

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

- 或 -

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

哪里gainAmount是要作为提高(或降低)你的剪辑中的分贝量。