Получение системных уровней звука в Java - PullRequest
4 голосов
/ 18 ноября 2010

Как получить основной том на Java? Я хочу сделать программу, которая отображает ( NOT CHANGE ) это значение (вероятно, на JProgressBar или что-то подобное) в процентах от максимальной настройки. Возможно, я также захочу отобразить текущий уровень звука в процентах от максимально возможного уровня звука, но это не требуется.

Ответы [ 4 ]

3 голосов
/ 18 ноября 2010

Я не совсем уверен, но вы могли бы взглянуть на ( Java Media Framework - JMF ).Вы можете управлять звуком через эту библиотеку, поэтому я предполагаю, что вы также можете получить подробную информацию об этом.Это может быть просто уровень звука приложения, поэтому я могу ошибаться.

2 голосов
/ 14 января 2011

Хотя 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();
}
}
0 голосов
/ 21 ноября 2010

Вы могли бы быть немного менее абразивным, чем сказать «Не помогает».

В противном случае, вот большая картина, использующая Sound API, упомянутую в примере AlexR: (есть много практическихподробности в этой ветке форума , и есть некоторая документация Oracle для Обработка аудио с элементами управления )

  • Как только вы получите Line Объект, представляющий линию вывода звука, которой вы хотите управлять, довольно просто получить регулятор громкости:

    line.open(); // May be necessary if the line is not already opened.
    FloatControl volumeControl = (FloatControl) masterLine.getControl(FloatControl.Type.VOLUME);
    
  • Получение "Master Line«Объект в лучшем случае зависит от платформы.Вам нужно будет перечислить Mixer s и Line s во время выполнения, используя статические методы AudioSystem, чтобы определить, какую строку вы хотите.Может также случиться, что мастер-линия не будет поддерживать громкость напрямую, а только через CompoundControl.(через иерархию, которая, как вы уже догадались, зависит от платформы).

0 голосов
/ 18 ноября 2010

Нико прав.Вот статья и пример, которые могут вам помочь.

http://onjava.com/pub/a/onjava/excerpt/jenut3_ch17/index.html
http://onjava.com/onjava/excerpt/jenut3_ch17/examples/SoundPlayer.java

...