2009-06-04 74 views
19

Javaを使用して発信wavオーディオストリームの音量を上げるにはどうすればよいですか?私は様々なJava TTSエンジンと合成音声の出力音量に問題があります。ボリュームをポンピングするために使用できるAPIコールまたはdoo-hickey.jarはありますか?あなたは利得制御を使用して音量を調整することができJavaのオーディオ音量コントロール(増減)

答えて

34

を開いた後にこのような何かを試してみてください。

import javax.sound.sampled.*; 

AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(
    new File("some_file.wav")); 
Clip clip = AudioSystem.getClip(); 
clip.open(audioInputStream); 
FloatControl gainControl = 
    (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN); 
gainControl.setValue(-10.0f); // Reduce volume by 10 decibels. 
clip.start(); 
+0

Thanx!私はこれを試してみる。それが価値あるものであれば、私は両端の問題を見ています。私は、オーディオストリームを摂取しているiPhoneクライアントを持っているだけで、私は別のボリュームを取得するクライアント上の別のAPIを使用しています。だから私は自分の問題が完全にサーバー側だとは思わない。 – Cliff

+4

@ markusk質問がボリュームに固有の場合、 'FloatControl.Type.VOLUME'を使うべきですか? –

+3

レコードの場合:音量コントロールが例外をスローしました(サポートされていません)。マスターゲインコントロールは(SourceDataLineで)例外をスローしました。 – RedGreasel

9

、あなたはJavaのサウンドAPIを使用している場合、あなたはMASTER_GAINコントロールで音量を設定することができますライン

FloatControl volume= (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); 
1
public final class VolumeControl 
{ 

    private VolumeControl(){} 

    private static LinkedList<Line> speakers = new LinkedList<Line>(); 

    private final static void findSpeakers() 
    { 
     Mixer.Info[] mixers = AudioSystem.getMixerInfo(); 

     for (Mixer.Info mixerInfo : mixers) 
     { 
      if(!mixerInfo.getName().equals("Java Sound Audio Engine")) continue; 

      Mixer mixer   = AudioSystem.getMixer(mixerInfo); 
      Line.Info[] lines = mixer.getSourceLineInfo(); 

      for (Line.Info info : lines) 
      { 

       try 
       { 
        Line line = mixer.getLine(info); 
        speakers.add(line); 

       } 
       catch (LineUnavailableException e)  { e.printStackTrace();                     } 
       catch (IllegalArgumentException iaEx) {                          } 
      } 
     } 
    } 

    static 
    { 
     findSpeakers(); 
    } 

    public static void setVolume(float level) 
    { 
     System.out.println("setting volume to "+level); 
     for(Line line : speakers) 
     { 
      try 
      { 
       line.open(); 
       FloatControl control = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN); 
       control.setValue(limit(control,level)); 
      } 
      catch (LineUnavailableException e) { continue; } 
      catch(java.lang.IllegalArgumentException e) { continue; } 



     } 
    } 

    private static float limit(FloatControl control,float level) 
    { return Math.min(control.getMaximum(), Math.max(control.getMinimum(), level)); } 

} 
+0

スピーカーと特定のトラックの音量を調整することは、全く異なる2つのことです。 –

関連する問題