2012-05-16 15 views
5

現時点ではにJSliderを使用して、自分のPCのマスターボリュームを制御しようとしています。これまでのところ、私は自分のPCのメインスピーカーのポートを見つけることができました。しかし、私はそれをうまく呼び出してgetValue()やsetValue()のようなメソッドを実行する方法を知らない。私はそれのすべてのための私のPCを検索するには、次のコードを使用しているコンピュータのメイン出力を制御するのに役立つ必要がありますスピーカー

は、オーディオデバイスです:

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

は、どのように私は私のスピーカーラインの制御を取得し、値を変更しますか?

私はこれまでのところ、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の範囲の1行を見つけました(これは、VUメートルのデシベル範囲を模したものです)。したがって、コントロールが指数関数的である場合は、合理的な一致するコントロール値を得るために、JSlider出力から数値変換を行う必要があります。

関連する問題