Control de volumen de audio (aumento o disminución) en Java

¿Cómo aumento el volumen de una transmisión de audio wav saliente usando Java? Tengo problemas con varios motores Java TTS y el volumen de salida del habla sintetizada. ¿Hay una llamada API o un doo-hickey.jar que pueda usar para boost el volumen?

Si está utilizando Java Sound API, puede configurar el volumen con el control MASTER_GAIN .

import javax.sound.sampled.*; AudioInputStream audioInputStream = AudioSystem.getAudioInputStream( new File("some_file.wav")); Clip clip = AudioSystem.getClip(); clip.open(audioInputStream); FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); gainControl.setValue(-10.0f); // Reduce volume by 10 decibels. clip.start(); 

Puede ajustar el volumen usando un GainControl, intente algo como esto después de haber abierto la línea

 FloatControl volume= (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); 
 public final class VolumeControl { private VolumeControl(){} private static LinkedList speakers = new LinkedList(); private final static void findSpeakers() { Mixer.Info[] mixers = AudioSystem.getMixerInfo(); for (Mixer.Info mixerInfo : mixers) { if(!mixerInfo.getName().equals("Java Sound Audio Engine")) continue; Mixer mixer = AudioSystem.getMixer(mixerInfo); Line.Info[] lines = mixer.getSourceLineInfo(); for (Line.Info info : lines) { try { Line line = mixer.getLine(info); speakers.add(line); } catch (LineUnavailableException e) { e.printStackTrace(); } catch (IllegalArgumentException iaEx) { } } } } static { findSpeakers(); } public static void setVolume(float level) { System.out.println("setting volume to "+level); for(Line line : speakers) { try { line.open(); FloatControl control = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN); control.setValue(limit(control,level)); } catch (LineUnavailableException e) { continue; } catch(java.lang.IllegalArgumentException e) { continue; } } } private static float limit(FloatControl control,float level) { return Math.min(control.getMaximum(), Math.max(control.getMinimum(), level)); } }