¿Cómo puedo aumentar el volumen de una secuencia de audio wav saliente utilizando 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 aumentar el volumen?Control de volumen de audio (aumento o disminución) en Java
19
A
Respuesta
34
Si está utilizando la API de Java de sonido, se puede ajustar 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();
9
Puede ajustar el volumen usando un gaincontrol, intentar algo como esto después de haber abierto la línea
FloatControl volume= (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN);
1
public final class VolumeControl
{
private VolumeControl(){}
private static LinkedList<Line> speakers = new LinkedList<Line>();
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)); }
}
+0
Ajustar el volumen en los altavoces y en una pista específica son dos cosas completamente diferentes. –
Cuestiones relacionadas
- 1. Django método de aumento/disminución de votos
- 2. Velocidad de aumento/disminución dinámica de un video en una aplicación Windows Forms
- 3. Aumento (o disminución) de la memoria disponible para los procesos R
- 4. Control de volumen en la aplicación Android
- 5. control de volumen del micrófono desde javascript
- 6. El control de volumen Java midi no funcionará
- 7. iOS: acceso al hardware del dispositivo control de volumen de audio
- 8. IntelliJ IDEA desactiva el aumento/disminución de la fuente en CMD + scroll
- 9. Control del volumen del sonido de la aplicación en Delphi
- 10. ¿Cómo configurar el volumen del audio HTML5?
- 11. Procesamiento de audio: Reproducción con nivel de volumen
- 12. Control deslizante de volumen como VLC
- 13. Control de volumen usando UIslider Iphone?
- 14. Controlando el volumen en una aplicación Java
- 15. Disminución del ancho de banda en Python
- 16. Android. ¿Cómo hacer grabaciones de audio con alto volumen?
- 17. Disminución de rangos en Haskell
- 18. memoria de imagen disminución
- 19. Cambiar el volumen sin un control deslizante de volumen en un iphone
- 20. Configuración del volumen con java
- 21. Ajuste del intervalo de incremento/disminución de NumberPicker
- 22. Control deslizante para el volumen - JQuery/Javascript
- 23. Disminución del ancho de banda en C#
- 24. Control dinámico de audio HTML5 con JavaScript
- 25. Reciba eventos de control remoto sin audio
- 26. Cálculo de disminución de tamaño en perspectiva
- 27. Textarea Aumento de altura
- 28. Modificar la ganancia de volumen en la memoria tampón de muestra de audio
- 29. Lista de reproducción de video o audio HTML 5
- 30. Cambiando el volumen en Java al usar JLayer
Gracias! Voy a intentar esto. Por lo que vale, estoy viendo el problema en ambos extremos. Tengo un cliente de iPhone que ingiere la transmisión de audio y con solo usar una API diferente en el cliente obtengo un volumen diferente. Así que no creo que mi problema sea completamente del lado del servidor. – Cliff
@ markusk Si la pregunta es específica del volumen, ¿se debe usar 'FloatControl.Type.VOLUME'? –
Solo para el registro: el control de volumen lanzó una excepción (no compatible) mientras que el control de ganancia maestro no lo hizo (en una 'SourceDataLine'). – RedGreasel