Я хочу иметь игрока и объект, который испускает звуки, а когда игрок приближается, громкость звука увеличивается. Моя проблема в том, что когда я перемещаю плеер ближе и объем увеличивается, он создает небольшие щелчки. Я думаю, что это происходит, когда громкость изменяется слишком быстро, но я не хочу, чтобы игрок двигался очень медленно.Плавное изменение объема в java
Вот мой код:
//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);
}
должен ли я использовать библиотеку?
«Type.MASTER_GAIN» - единственный, который меняет объем для меня. 'Type.VOLUME' не работает вообще. – TheEggHealer
Я думаю, что проблема связана с реализацией setVolume. Я предлагаю вам сделать простую линейную интерполяцию, представляющую прирост объема, поскольку игрок приближается к цели для проверки правильности FloatControl и публикации наблюдений. – Bhoot