Problème réglage de son système

Fermé
yoh42 - 5 déc. 2011 à 22:09
 yoh42 - 7 déc. 2011 à 22:57
Bonjour a tous,

je viens vers vous car je rencontre actuellement un problème avec un programme JAVA.
En effet, je souhaite contrôler le son de mon système avec une méthode en JAVA.
Après quelques recherches sur le web, j'ai trouvé quelques programmes et celui dont je rencontre le problème fonctionne sous Windows XP mais ne fonctionne pas sur les versions supérieures de Windows ni sur Linux.
Voici le code en question :

************************************************************************

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.Port;

public class ControlSound2 {

static void ControleSonClient2(double d) {
Port lineOut;
try
{
if (AudioSystem.isLineSupported(Port.Info.LINE_OUT)) {
lineOut = (Port) AudioSystem.getLine(Port.Info.LINE_OUT);
lineOut.open();
} else if (AudioSystem.isLineSupported(Port.Info.HEADPHONE)) {
lineOut = (Port) AudioSystem.getLine(Port.Info.HEADPHONE);
lineOut.open();
} else if (AudioSystem.isLineSupported(Port.Info.SPEAKER)) {
lineOut = (Port) AudioSystem.getLine(Port.Info.SPEAKER);
lineOut.open();
} else {
System.out.println("Unable to get Output Port");
return;
}

FloatControl controlIn = (FloatControl)lineOut.getControl(FloatControl.Type.VOLUME);
float volume = 100 * (controlIn.getValue() / controlIn.getMaximum());
System.out.println("LINE_OUT : volume = " + volume);

controlIn.setValue((float)d / 100);
}
catch(final Exception e)
{
System.out.println(e + " LINE_OUT");
}

}

public static void main(String[] args) throws Exception
{
ControleSonClient2(50);
System.out.println("FIN");
}
}

************************************************************************

Est ce que vous pourriez m'aider à trouver une solution pour que ce code fonctionne sur toutes les plateformes actuelles. Est ce mes imports/méthodes que j'utilise qui ne sont plus utilisés ou le code en lui même qui ne va pas.

Merci de votre aide a tous.

Yohan
A voir également:

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 020
6 déc. 2011 à 00:53
Voici une modification de ton code. Chez moi seul le speaker est supporté, et c'est surement le support ou non de ton matériel qui fait la différence entre tes différents système. Avec les affichages que j'ai rajouté tu devrais mieux voir ce qui se passe.

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.Line;
import javax.sound.sampled.Line.Info;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Port;

public class ControlSound
{	
	public static void modifierVolume(float prctVolume, Port.Info...portsInfo) throws LineUnavailableException 
	{	
		for (Info info : portsInfo)
		{
			System.out.print(info);
			
			if (AudioSystem.isLineSupported(info))
			{					
				Line lineOut = AudioSystem.getLine(info);
				lineOut.open();				
				
				FloatControl controlIn = (FloatControl) lineOut.getControl(FloatControl.Type.VOLUME);
				
				System.out.print("\tvolume : "+(100* controlIn.getValue()/controlIn.getMaximum())+" %");
				controlIn.setValue(prctVolume/100);
				System.out.println(" ==> "+(100* controlIn.getValue()/controlIn.getMaximum())+" %");
				
				lineOut.close();
			}
			else System.out.println("\tnot supported");
		}
	}
	
	public static void main(String...args) throws LineUnavailableException
	{
		modifierVolume(50,Port.Info.LINE_OUT, Port.Info.HEADPHONE, Port.Info.SPEAKER);
	}
}
0
Merci beaucoup de ta réponse.
Je viens de tester sous windows XP et il n'y a pas de soucis.
Je vais tester ton code sur Vista,7 et Linux dès demain et je te retourne le résultat.
Merci pour les system.out.println, cela explique mieux ce que fonctionne et ce qui ne fonctionne pas.
Merci encore
0