Javaでマスターボリュームを取得するにはどうすればよいですか? この値 (おそらく aまたは同様のもの) を最大設定のパーセンテージとして表示 ( NOT CHANGE )するプログラムを作成したいと考えています。JProgressBar
現在のサウンド レベルを可能な限り高いサウンド レベルのパーセンテージとして表示することもできますが、これは必要ありません。
4 に答える
完全にはわかりませんが、(Java Media Framework - JMF)をご覧ください。そのライブラリを介してサウンドを制御できるので、それについての詳細も取得できると思います。単にアプリケーションの音量レベルかもしれないので、間違っているかもしれません。
これJProgressBar
には使用されませんが、
これは役立つかもしれません
package test;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.Line;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.Mixer;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
public class SoundMeter {
JFrame j;
public SoundMeter() {
j = new JFrame("SoundMeter");
j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j.setLayout(new BoxLayout(j.getContentPane(), BoxLayout.Y_AXIS));
printMixersDetails();
j.setVisible(true);
}
public void printMixersDetails(){
javax.sound.sampled.Mixer.Info[] mixers = AudioSystem.getMixerInfo();
System.out.println("There are " + mixers.length + " mixer info objects");
for(int i=0;i<mixers.length;i++){
Mixer.Info mixerInfo = mixers[i];
System.out.println("Mixer Name:"+mixerInfo.getName());
Mixer mixer = AudioSystem.getMixer(mixerInfo);
Line.Info[] lineinfos = mixer.getTargetLineInfo();
for(Line.Info lineinfo : lineinfos){
System.out.println("line:" + lineinfo);
try {
Line line = mixer.getLine(lineinfo);
line.open();
if(line.isControlSupported(FloatControl.Type.VOLUME)){
FloatControl control = (FloatControl) line.getControl(FloatControl.Type.VOLUME);
System.out.println("Volume:"+control.getValue());
JProgressBar pb = new JProgressBar();
// if you want to set the value for the volume 0.5 will be 50%
// 0.0 being 0%
// 1.0 being 100%
//control.setValue((float) 0.5);
int value = (int) (control.getValue()*100);
pb.setValue(value);
j.add(new JLabel(lineinfo.toString()));
j.add(pb);
j.pack();
}
} catch (LineUnavailableException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
new SoundMeter();
}
}
ニコは正しいです。これがあなたを助けるかもしれない記事と例です。
http://onjava.com/pub/a/onjava/excerpt/jenut3_ch17/index.html
http://onjava.com/onjava/excerpt/jenut3_ch17/examples/SoundPlayer.java
「役に立たない」と言うよりも、少し研ぎ澄まされないようにすることができます。
それ以外の場合は、AlexR の例で言及されている Sound API を使用した全体像を次に示します (そのフォーラム スレッドには多くの実用的な詳細があり、 Processing Audio with Controlsに関するいくつかの Oracle ドキュメントがあります) 。
制御したい音声出力ラインを表すオブジェクトを取得
Line
したら、音量制御を取得するのはかなり簡単です。line.open(); // May be necessary if the line is not already opened. FloatControl volumeControl = (FloatControl) masterLine.getControl(FloatControl.Type.VOLUME);
「マスター
Line
」オブジェクトの取得は、せいぜいプラットフォームに依存します。必要な行を決定するには、静的メソッドを使用して実行時にMixer
とをリストする必要があります。また、マスター ラインがボリューム コントロールを直接サポートせず、. (ご想像のとおり、プラットフォームに依存する階層を介して)。Line
AudioSystem
CompoundControl