@Override public void onVolumeChanged(short volume) { log.info("apply_volume_callback"); log.debug("volume: " + volume); if (audioLine == null) { log.warn("audioLine not ready"); return; } FloatControl volumeControl = (FloatControl) audioLine.getControl(FloatControl.Type.MASTER_GAIN); float maxDb = volumeControl.getMaximum(); log.debug("maxDb : " + maxDb); float minDbOrig = volumeControl.getMinimum(); float minDb = minDbOrig + ((maxDb - minDbOrig) / 3); log.debug("minDb : " + minDb); float newVolume = 0; float volumePercent = (float) (volume / 655.35); if (volumePercent < 0) { volumePercent = 100 + volumePercent; } log.debug("volume percent : " + volumePercent); newVolume = (volumePercent * minDb / 100); newVolume = (newVolume - minDb) * -1; if (volume == 0) { log.debug("volume 0, setting max"); newVolume = minDbOrig; } log.debug("newVolume : " + newVolume); volumeControl.setValue(newVolume); }
/* x долже быть в пределах от 0 до 1 (от самого тихого к самому громкому) */ public void setVolume(float x) { if (x < 0) x = 0; if (x > 1) x = 1; float min = volumeC.getMinimum(); float max = volumeC.getMaximum(); volumeC.setValue((max - min) * x + min); }
public FloatControlBoundedRangeModel(FloatControl control) { this.control = control; float range = 100; float steps = range / 100; factor = range / steps; int min = (int) (control.getMinimum() * factor); int max = (int) (control.getMaximum() * factor); int value = (int) (control.getValue() * factor); setRangeProperties(value, 0, min, max, false); }
// Возвращает текущую громкость (число от 0 до 1) public float getVolume() { float v = volumeC.getValue(); float min = volumeC.getMinimum(); float max = volumeC.getMaximum(); return (v - min) / (max - min); }