2012-05-16 3 views
5

Im Moment versuche ich, JSlider in Java zu verwenden, um das Hauptvolumen meines PC zu steuern. Bis jetzt konnte ich den Port meines PC-Hauptlautsprechers finden. Ich weiß jedoch nicht, wie ich es erfolgreich aufrufen und eine Methode wie getValue() oder setValue() ausführen kann.Benötigen Sie Hilfe, die Kontrolle über den Hauptausgang meines Computers zu erhalten Lautsprecher

ich den folgenden Code verwendet haben, mein PC für alle seine Audio-Geräten zu suchen:

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(); 
       } 
      } 
     } 
    } 

Wie bekomme ich die Kontrolle über meine Lautsprecher Linie und ändern Sie den Wert?

Ich habe this Website für Hilfe bisher verwendet.


UPDATE

Okay, so ich glaube, ich ein bisschen näher gekommen sind. Unter meinem Test-GUI-Programm versuche ich, den Code des Java-Tutorials unter "Eine Zeile mit den gewünschten Steuerelementen abrufen" (den Link, den Sie mir gegeben haben) zu verwenden. Ich habe es unter dem Change Listener meines JSliders in mein Programm eingefügt.

Dies ist, wie es aussieht:

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); 
     } 

Immer, wenn ich den Regler verschieben sie den Fehler Ausnahmemeldung ausdruckt „Fehler zu finden versuchen, ...“. Warum kann ich nicht den volCtrl auf meinen Hauptlautsprechern bekommen? Wie kann ich diesen Code reparieren, um die Kontrolle über meinen SPEAKER zu bekommen?

Antwort

0

Toller Fund bei JavaRanch! Ich habe dort eine Menge wertvolle Hilfe bekommen.

Sobald Sie Ihre Linien zu finden, zeigt dieses Tutorial, wie ein Steuerelement machen: http://docs.oracle.com/javase/tutorial/sound/controls.html

Aber manchmal die hohen und niedrigen vals sind unerwartet. Ich fand eine Zeile zwischen -80 und +6 (sie wurde so eingestellt, dass sie die Dezibel-Bandbreite eines VU-Meters nachahmt). Daher müssen Sie möglicherweise einige numerische Konvertierungen von der JSlider-Ausgabe durchführen, um einen vernünftigen übereinstimmenden Steuerwert zu erhalten, insbesondere wenn das Steuerelement exponentiell ist.

Verwandte Themen