2012-05-16 2 views
5

JSliderJava에 사용하여 PC의 마스터 볼륨을 제어하려고합니다. 지금까지 PC의 주 스피커 포트를 찾을 수있었습니다. 그러나 성공적으로 호출하고 getValue() 또는 setValue() 같은 메서드를 실행하는 방법을 모르겠습니다.내 컴퓨터의 주요 출력을 제어하는 ​​데 도움이 필요합니다. 스피커

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

어떻게 내 스피커 라인의 제어를 얻고 값을 변경 않습니다

내가 모든 내 PC를 검색하려면 다음 코드를 사용하고 오디오 장치는?

나는 지금까지 도움을 청하니 this 웹 사이트를 사용했습니다.


UPDATE 내가 조금 더 가까이 온 것 같아요, 그래서

좋아요. 내 테스트 GUI 프로그램에서 Java 튜토리얼의 코드를 "원하는 컨트롤이있는 라인 얻기"(당신이 내게 준 링크)를 사용하려고합니다. JSlider의 Change Listener 아래에 내 프로그램에 붙여 넣었습니다. 이는 모습입니다

: 나는 그것이 오류 예외 메시지를 출력한다 슬라이더 이동 때마다

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

"찾기 위해 노력하고 실패를 ...". 왜 내 출력 스피커에서 volCtrl을 얻을 수 없습니까? 스피커를 제어하려면이 코드를 어떻게 수정하면됩니까?

답변

0

위대한 발견에서 JavaRanch! 거기에 많은 도움을 받았습니다. http://docs.oracle.com/javase/tutorial/sound/controls.html

하지만 가끔은 높고 낮은 발스가 예기치 : 당신이 당신의 라인을 찾아되면

,이 튜토리얼은 컨트롤을 만드는 방법을 보여줍니다. 저는 -80에서 +6까지의 한 줄을 발견했습니다 (이것은 VU 미터의 데시벨 범위를 모방하도록 설정되었습니다). 따라서 특히 컨트롤이 지수면, 일치하는 컨트롤 값을 얻기 위해 JSlider 출력에서 ​​수치 변환을해야 할 수도 있습니다.

관련 문제