java中的平滑卷更改

java中的平滑卷更改,java,audio,volume,Java,Audio,Volume,我想要一个播放器和一个发出声音的物体,当播放器靠近时,声音的音量会增加。我的问题是,当我将播放器移近,音量增大时,它会产生轻微的咔嗒声。我认为当音量变化太快时会发生这种情况,但我不希望球员移动太慢 这是我的密码: //Game.al is the player public void update() { if(getVolume() > 0) sound.setVolume(getVolume()); } public int getVolume() { int vol

我想要一个播放器和一个发出声音的物体,当播放器靠近时,声音的音量会增加。我的问题是,当我将播放器移近,音量增大时,它会产生轻微的咔嗒声。我认为当音量变化太快时会发生这种情况,但我不希望球员移动太慢

这是我的密码:

//Game.al is the player
public void update() {
    if(getVolume() > 0) sound.setVolume(getVolume());
}

public int getVolume() {
    int volume = (int)(100 - ((float)getDistance() / (float)Game.al.listenRadius) * 100);
    return volume;
}

public int getDistance() {
    return (int)(Math.abs(Math.sqrt((x - Game.al.x) * (x - Game.al.x) + (y - Game.al.y) * (y - Game.al.y))));
}

以下是更改音量的代码:
(所有其他的东西都是这样,我可以将音量设置在0-100之间,并且仍然可以听到音量1的声音)



我必须使用库吗?

我希望您不要错过这样一个事实,因为您已经设置了
FloatControl.Type.MASTER\u GAIN
,您的
GAIN.setValue(volume)
将通过
volume
增加或减少当前音量,而不是将当前音量设置为
volume


您可以更改FloatControl类型,以尝试哪种类型在您的情况下工作得最好

Type.MASTER\u GAIN
是唯一将音量更改为me的设备。
Type.VOLUME
根本不起作用。我认为问题在于setVolume实现。我建议你做一个简单的线性插值,代表玩家接近目标时的音量增益,以测试FloatControl的正确性,并发布观察结果。
FloatControl gain = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
public void setVolume(float volume) {
    volume /= 2;
    volume += 50;
    volume /= 1.1627f;
    volume -= 80;
    gain.setValue(volume);
}