Comment augmenter le volume d'un flux audio wav sortant en utilisant Java? J'ai des problèmes avec différents moteurs Java TTS et le volume de sortie du discours synthétisé. Y at-il un appel d'API ou un doo-hickey.jar que je peux utiliser pour augmenter le volume?Contrôle du volume audio (augmentation ou diminution) en Java
19
A
Répondre
34
Si vous utilisez l'API Java Sound, vous pouvez régler le volume avec le contrôle 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
Vous pouvez régler le volume à l'aide d'un gaincontrol, essayez quelque chose comme ça après avoir ouvert la ligne
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
Le réglage du volume sur les enceintes et sur une piste spécifique est deux choses totalement différentes. –
Questions connexes
- 1. Ajustement du volume sonore java en temps réel
- 2. Comment détecter le volume actuel du périphérique audio
- 3. Contrôle du volume (balance) pour XP/Vista
- 4. Contrôle SWFLoader Volume
- 5. Définir le volume du microphone en C#
- 6. Comment contrôler le volume audio dans .NET 3.5?
- 7. Comment éjecter un volume en Java?
- 8. flex comment contrôler le volume audio d'une vidéo
- 9. Android. Comment faire un enregistrement audio avec un volume élevé?
- 10. Augmentation de la gestion des événements en Java
- 11. boutons de mise en œuvre de contrôle du volume du clavier dans AppleScript - réglage du volume intérieur de la boucle ne fonctionne pas
- 12. Logiciel de génération audio ou bibliothèque .NET
- 13. Augmentation du temps d'indexation en utilisant DIH avec JdbcDataSource
- 14. Java - fichier audio wav de sous-échantillonnage
- 15. Performances avec clé primaire en augmentation séquentielle
- 16. Énumérer toutes les «sessions» audio Vista/7, telles qu'affichées dans le mélangeur de volume
- 17. Augmentation du nombre de descripteurs de fichiers sous Linux
- 18. Contrôle du volume pendant l'utilisation de la fonction SndPlayAsync sous Windows Mobile 6
- 19. Paramètres d'enregistrement et de mixage audio Java
- 20. Bibliothèque de détection audio ou vidéo
- 21. Accélérez ou diminuez la vitesse audio dans ActionScript?
- 22. Audio Record Upload comme Wav ou MP3 au serveur
- 23. Programmation audio sur les appareils Symbian
- 24. Mesure du niveau de bruit audio
- 25. Combinaison de fonctions de hachage - Y a-t-il une diminution significative du risque de collision?
- 26. Contrôle des niveaux audio et de panoramique FLV/MP4
- 27. augmentation automatique conditionnelle dans xsl
- 28. Convertir un flux audio en tableau d'octets WAV en Java sans fichier temporaire
- 29. Diffusion audio en utilisant J2ME
- 30. membres statiques et augmentation de la sérialisation
Thanx! Je vais essayer ça. Pour ce que ça vaut, je regarde le problème des deux côtés. J'ai un client iPhone ingérant le flux audio et juste en utilisant une API différente sur le client, je reçois un volume différent. Donc je ne pense pas que mon problème soit entièrement côté serveur. – Cliff
@ markusk Si la question est spécifique au volume, 'FloatControl.Type.VOLUME' devrait-il être utilisé? –
Juste pour l'enregistrement: le contrôle de volume a jeté une exception (non supporté) alors que le contrôle de gain principal n'a pas (sur un 'SourceDataLine'). – RedGreasel