Come aumentare il volume di un flusso audio in uscita wav utilizzando Java? Sto avendo problemi con vari motori Java TTS e il volume di output del parlato sintetizzato. C'è una chiamata API o doo-hickey.jar che posso usare per aumentare il volume?Controllo del volume dell'audio (aumento o diminuzione) in Java
19
A
risposta
34
Se si sta utilizzando l'API Java Sound, è possibile impostare il volume con il controllo 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
È possibile regolare il volume utilizzando un GainControl, provare qualcosa di simile dopo aver aperto la linea
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
La regolazione del volume degli altoparlanti e su una traccia specifica sono due cose completamente diverse. –
Problemi correlati
- 1. Controllo del volume in un'applicazione java
- 2. Controllo del mixer di volume
- 3. iOS suono Controllo del volume
- 4. Il controllo del volume midi Java non funzionerà
- 5. Invio di file di grandi dimensioni con HttpWebRequest, buffer in aumento o in diminuzione in base alle esigenze
- 6. controllo volume microfono da javascript
- 7. Controllo del volume usando UIlider Iphone?
- 8. Controllo volume nell'applicazione Android
- 9. Controllo volume AVPlayer
- 10. Copia Shadow del volume utilizzando Java
- 11. iOS: accesso al controllo volume audio hardware del dispositivo
- 12. Controllo del volume per il client Bluetooth senza mani
- 13. Controllo slider per volume - JQuery/Javascript
- 14. Aumento del timeout per .ashx
- 15. multiprocessing di python: nessun ritorno in diminuzione?
- 16. estensione del volume logico in ubuntu
- 17. Aumento del prototipo dei nodi elemento DOM?
- 18. Dissolvenza di un colore in bianco (aumento della luminosità)
- 19. iOS, diminuzione icona distintivo numero
- 20. Livello volume iPod influisce sul livello del volume dell'app
- 21. aumento Charfield
- 22. Sintassi Controllo in Java
- 23. Calcolo del volume per sfera in C++
- 24. Come gestire MediaPlayer.setVolume() + SeekBar per impostarlo + controllo volume dispositivo
- 25. Il controllo volume di Mediaelement non è visibile su IE8
- 26. Esecuzione di pacchetti SSIS in allocazioni di memoria separate o aumento della dimensione del buffer predefinita?
- 27. Perché il blocco del controllo doppio è interrotto in Java?
- 28. sistema audio iPhone iOS7 (suoneria e allarme) il controllo del volume
- 29. Tempo di aumento monotonico in JavaScript?
- 30. Diminuzione della dimensione degli oggetti cPickle
Grazie! Ci proverò. Per quello che vale, sto osservando il problema da entrambe le estremità. Ho un cliente di iPhone che ha ingerito lo stream audio e, semplicemente usando un'API diversa sul client, ottengo un volume diverso. Quindi non penso che il mio problema sia interamente lato server. – Cliff
@ markusk Se la domanda è specifica per il volume, è necessario utilizzare 'FloatControl.Type.VOLUME'? –
Solo per il record: il controllo del volume ha generato un'eccezione (non supportata) mentre il controllo del guadagno principale non lo era (su un 'SourceDataLine'). – RedGreasel