java中的平滑卷更改

时间:2015-05-18 11:36:21

标签: java audio volume

我希望有一个播放器和一个发出声音的物体,当播放器靠近时,声音的音量会增加。我的问题是,当我将玩家移近并且音量增加时,它会产生很少的咔哒声。我认为当音量变化太快但我不希望播放器移动得非常慢时会发生这种情况。

这是我的代码:

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


我必须使用图书馆吗?

1 个答案:

答案 0 :(得分:2)

我希望您不要错过这样一个事实:既然您设置了FloatControl.Type.MASTER_GAIN,您的gain.setValue(volume)会将当前音量增加或减少volume分贝,而不是将当前音量设置为volume

您可以更改FloatControl类型以尝试在您的情况下最适合哪种类型。