2012-05-16 8 views
5

W tej chwili próbuję użyć JSlider w Java, aby kontrolować główny poziom głośności mojego komputera. Do tej pory udało mi się zlokalizować port mojego głównego komputera. Jednak nie wiem jak z powodzeniem wywołać go i uruchomić metodę getValue() lub setValue().Potrzebujesz pomocy w przejściu kontroli nad głównym wyjściem mojego komputera Głośnik

Użyłem poniższy kod, żeby szukać mój komputer dla wszystkich jego urządzeń audio:

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

Jak uzyskać kontrolę nad moim linii głośników i zmienić wartość?

Użyłem strony internetowej this, aby uzyskać pomoc.


UPDATE

Dobrze więc myślę, że przyjdzie trochę bliżej. W ramach mojego testowego programu GUI próbuję użyć kodu samouczka w języku Java pod nagłówkiem "Uzyskiwanie linii z pożądanymi kontrolami" (link, który mi dałeś). Wkleiłem go do mojego programu pod moim słuchaczem zmian JSlidera.

To jak to wygląda:

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

Ilekroć przesuń suwak wypisze komunikat o błędzie Exception „Failed próbuje znaleźć ...”. Dlaczego nie pozwala mi uzyskać volCtrl na moich głównych głośnikach wyjściowych? Jak mogę naprawić ten kod, aby uzyskać kontrolę nad moim GŁOŚNIKIEM?

Odpowiedz

0

Świetne znalezisko w JavaRanch! Dostałem dużo cennej pomocy.

Po zlokalizowaniu swoje linie, ten poradnik pokazuje jak zrobić Sterowanie: http://docs.oracle.com/javase/tutorial/sound/controls.html

Ale czasami wysokie i niskie vals są nieoczekiwane. Znalazłem jedną linię, która wahała się od -80 do +6 (była ustawiona tak, by naśladować zakres decybeli miernika VU). Tak więc, być może będziesz musiał wykonać pewne konwersje liczbowe z wyjścia JSlider, aby uzyskać rozsądną dopasowaną wartość Kontroli, szczególnie jeśli Kontrola jest wykładnicza.

Powiązane problemy