用Java获取系统音频级别
如何用Java获取主卷? 我想制作一个程序,显示( NOT CHANGE )这个值(可能在JProgressBar
或类似的东西上)作为最大设置的百分比。 我可能还想将当前声级显示为最高可能声级的百分比,但这不是必需的。
我不完全确定,但您可以查看( 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
你可能会有点不那么粗暴,而不是说“不帮助我”。
否则,这是大局,使用AlexR示例中提到的Sound API 🙁 该论坛post中有很多实用的细节,并且有一些Oracle文档用于处理带控件的音频 )
-
一旦你得到一个代表你想要控制的声音输出行的
Line
对象,获得音量控制是相当简单的:line.open(); // May be necessary if the line is not already opened. FloatControl volumeControl = (FloatControl) masterLine.getControl(FloatControl.Type.VOLUME);
-
获取“
Line
”对象充其量只是依赖于平台。 您必须使用AudioSystem
静态方法在运行时列出Mixer
和Line
,以确定您想要的线路。 也可能是主线不直接支持音量控制,而只能通过CompoundControl
。 (通过层次结构,你猜对了,平台依赖)。