2015-05-18 5 views
2

Я хочу иметь игрока и объект, который испускает звуки, а когда игрок приближается, громкость звука увеличивается. Моя проблема в том, что когда я перемещаю плеер ближе и объем увеличивается, он создает небольшие щелчки. Я думаю, что это происходит, когда громкость изменяется слишком быстро, но я не хочу, чтобы игрок двигался очень медленно.Плавное изменение объема в 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); 
} 


должен ли я использовать библиотеку?

ответ

2

Я надеюсь, что вы не хватает на то, что, так как вы установили FloatControl.Type.MASTER_GAIN, ваш будет либо увеличивать или уменьшать громкость на volume децибелах, а не установка текущего объема в volume.

Вы можете изменить тип FloatControl, чтобы попробовать, который лучше всего работает в вашей ситуации.

+1

«Type.MASTER_GAIN» - единственный, который меняет объем для меня. 'Type.VOLUME' не работает вообще. – TheEggHealer

+0

Я думаю, что проблема связана с реализацией setVolume. Я предлагаю вам сделать простую линейную интерполяцию, представляющую прирост объема, поскольку игрок приближается к цели для проверки правильности FloatControl и публикации наблюдений. – Bhoot

Смежные вопросы