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