如何在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)