Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Java获取系统音频级别_Java_Audio_System_System Sounds - Fatal编程技术网

用Java获取系统音频级别

用Java获取系统音频级别,java,audio,system,system-sounds,Java,Audio,System,System Sounds,如何在Java中获得主卷?我想制作一个程序来显示(不更改)这个值(可能在JProgressBar或类似的东西上),作为最大设置的百分比。我可能还想将当前的声级显示为最高可能声级的百分比,但这不是必需的。我不完全确定,但您可以查看()。您可以通过该库控制声音,因此我假设您也可以获得有关它的详细信息。它可能只是应用程序的声级,所以我可能错了。尼科是对的。 下面是一篇文章和一个可能对您有所帮助的示例 你可以少一点磨蹭,而不是说“帮不了我” 另外,使用AlexR的示例中提到的Sound API,这里是

如何在Java中获得主卷?我想制作一个程序来显示(不更改)这个值(可能在
JProgressBar
或类似的东西上),作为最大设置的百分比。我可能还想将当前的声级显示为最高可能声级的百分比,但这不是必需的。

我不完全确定,但您可以查看()。您可以通过该库控制声音,因此我假设您也可以获得有关它的详细信息。它可能只是应用程序的声级,所以我可能错了。

尼科是对的。 下面是一篇文章和一个可能对您有所帮助的示例



你可以少一点磨蹭,而不是说“帮不了我”

另外,使用AlexR的示例中提到的Sound API,这里是一个大画面:(有很多实用的细节,还有一些Oracle文档)

  • 一旦您得到一个表示您希望控制的声音输出线的对象,那么获得音量控制就相当简单了:

    line.open(); // May be necessary if the line is not already opened.
    FloatControl volumeControl = (FloatControl) masterLine.getControl(FloatControl.Type.VOLUME);
    
  • 获取“Master
    ”对象最多取决于平台。您必须在运行时使用静态方法列出s和
    s,以确定需要哪一行。也可能发生这样的情况:主线不直接支持音量控制,而仅通过
    CompoundControl
    支持音量控制。(通过一个层次结构,也就是说,您猜对了,依赖于平台)


尽管
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();
}
}
封装测试;
导入javax.sound.sampled.AudioSystem;
导入javax.sound.sampled.FloatControl;
导入javax.sound.sampled.Line;
导入javax.sound.sampled.LineUnavailableException;
导入javax.sound.sampled.Mixer;
导入javax.swing.BoxLayout;
导入javax.swing.JFrame;
导入javax.swing.JLabel;
导入javax.swing.JProgressBar;
公共级声级计{
jj框架;
公共发声计(){
j=新的JFrame(“声音计”);
j、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
j、 setLayout(新的BoxLayout(j.getContentPane(),BoxLayout.Y_轴));
PrintMixerDetails();
j、 setVisible(真);
}
公共无效PrintMixerDetails(){
javax.sound.sampled.Mixer.Info[]mixers=AudioSystem.getMixerInfo();
System.out.println(“有“+mixers.length+”mixer-info对象”);

对于(int i=0;作为旁注,不要使用进度条。主声级不是进度的度量,有些操作系统会绘制一个不适合测量声级的动画条。那么,进度条是什么度量的呢?进度条是一个显示长期任务(如复制文件)进度的条不。进度条显示的是占整个对象长度一定百分比的进度条。不能认为它只能增长。我没有说它只能增长……而是读“一个可视化显示某项任务进度的组件”。该组件不是用来显示用户可以修改的值。(虽然
JSlider
is)看起来像是一个用于视觉效果(即音频/视频编辑)的库不,我以前用过它来编写音频拖缆/播放器。我相信这也很好,但它对我没有帮助,从编码角度来看,它可以用来测量系统当前的音量吗?使用
line=(Port)AudioSystem.getMixer(null).getLine(Port.Info.LINE_IN);
,我得到了
java.lang.IllegalArgumentException:LINE不受支持:LINE_在源端口中
@Supuhstar:1。我怀疑你是想写
((Port)AudioSystem.getMixer(null)).getLine(Port.Info.LINE_IN);
-这将引发一个
ClassCastException
.2.无法保证调用
AudioSystem.getMixer(null)
将产生您想要的
端口
——计算机无法猜出您想要什么。3.我认为唯一可靠的方法是使用
AudioSystem.getMixerInfo()枚举系统
的子集或
混音器
s
和类似的其他方法,并检查每个方法。4.如果您阅读了链接论坛线程,我就不必写第2点和第3点。它似乎只测量和设置应用程序的容量,而不是系统。注意:两个链接现在都已失效。