2012-05-16 8 views
5

Por el momento estoy tratando de usar un JSlider en Java para controlar el volumen maestro de mi PC. Hasta ahora he podido localizar el puerto del altavoz principal de mi PC. Sin embargo, no sé cómo llamarlo con éxito y ejecutar un método como getValue() o setValue().Necesito ayuda para obtener el control de la salida principal de mi computadora Altavoz

He utilizado el código siguiente para buscar mi PC para todos los dispositivos de audio que es:

Mixer.Info [] mixers = AudioSystem.getMixerInfo(); 
    System.out.println("There are " + mixers.length + " mixer info objects"); 
    for (Mixer.Info mixerInfo : mixers) 
    { 
     System.out.println("mixer name: " + mixerInfo.getName()); 
     Mixer mixer = AudioSystem.getMixer(mixerInfo); 
     Line.Info [] lineInfos = mixer.getTargetLineInfo(); // target, not source 
     for (Line.Info lineInfo : lineInfos) 
     { 
      System.out.println(" Line.Info: " + lineInfo); 
      Line line = null; 
      boolean opened = true; 
      try 
      { 
       line = mixer.getLine(lineInfo); 
       opened = line.isOpen() || line instanceof Clip; 
       if (!opened) 
       { 
        line.open(); 
       } 
       FloatControl volCtrl = (FloatControl)line.getControl(FloatControl.Type.VOLUME); 
       System.out.println(" volCtrl.getValue() = " + volCtrl.getValue()); 
      } 
      catch (LineUnavailableException e) 
      { 
       e.printStackTrace(); 
     } 
      catch (IllegalArgumentException iaEx) 
      { 
       System.out.println(" " + iaEx); 
      } 
      finally 
      { 
       if (line != null && !opened) 
       { 
        line.close(); 
       } 
      } 
     } 
    } 

¿Cómo consigo el control de mi línea de altavoces y alterar el valor?

He usado this sitio web para obtener ayuda hasta ahora.


ACTUALIZACIÓN

Bueno por lo que creo que he recorrido un poco más cerca. Bajo mi programa GUI de prueba estoy tratando de usar el código del tutorial de Java bajo "Obteniendo una línea que tiene los controles deseados" (el enlace que me diste). Lo pegué en mi programa debajo de mi JSlider's Change Listener.

Esto es lo que parece:

Port SPEAKER; 
     FloatControl volCtrl; 
     try { 
      Mixer mixer = AudioSystem.getMixer(null); 
      SPEAKER = (Port)mixer.getLine(Port.Info.SPEAKER); 
      SPEAKER.open(); 
      volCtrl = (FloatControl) SPEAKER.getControl(

      FloatControl.Type.VOLUME); 

     } catch (Exception e) { 
     System.out.println("Failed trying to find LINE_IN" 
      + " VOLUME control: exception = " + e); 
     } 

Cada vez que mueva el control deslizante se imprime el mensaje de excepción de error "Error tratando de encontrar ...". ¿Por qué no me permite obtener el volCtrl en mis altavoces de salida principal? ¿Cómo puedo arreglar este código para obtener el control de mi SPEAKER?

Respuesta

0

¡Gran hallazgo en JavaRanch! He recibido mucha ayuda valiosa allí.

Una vez que localice sus líneas, este tutorial muestra cómo hacer un control: http://docs.oracle.com/javase/tutorial/sound/controls.html

Pero a veces el vals de alta y baja son inesperados. Encontré una línea que variaba de -80 a +6 (se configuró para imitar el rango de decibelios de un medidor VU). Por lo tanto, es posible que tenga que realizar algunas conversiones numéricas desde la salida JSlider para obtener un valor de control que coincida razonablemente, especialmente si el control es exponencial.

Cuestiones relacionadas