Java Sound offers FloatControl instances for various sound line functionality, and both a MASTER_GAIN & VOLUME control type.

Can these controls be used to change the system volume?

解决方案

No, it cannot. Here is source adapted from an answer to Adjusting master volume on coderanch. The source iterates the available lines, checks if they have a control of the right type, and if so, puts them in a GUI attached to a JSlider

import java.awt.*;

import javax.swing.*;

import javax.sound.sampled.*;

import javax.swing.event.ChangeEvent;

import javax.swing.event.ChangeListener;

public class SoundMixer {

public Component getGui() {

JPanel gui = new JPanel(new GridLayout(0,1));

Mixer.Info[] mixers = AudioSystem.getMixerInfo();

System.out.println(

"There are " + mixers.length + " mixer info objects");

for (Mixer.Info mixerInfo : mixers) {

System.out.println("mixer name: " + mixerInfo.getName());

Mixer mixer = AudioSystem.getMixer(mixerInfo);

Line.Info[] lineInfos = mixer.getSourceLineInfo();

for (Line.Info lineInfo : lineInfos) {

System.out.println(" Line.Info: " + lineInfo);

try {

Line line = mixer.getLine(lineInfo);

FloatControl volCtrl = (FloatControl)line.getControl(

FloatControl.Type.MASTER_GAIN);

VolumeSlider vs = new VolumeSlider(volCtrl);

gui.add( new JLabel(volCtrl.toString()) );

gui.add( vs.getVolume() );

System.out.println(

" volCtrl.getValue() = " + volCtrl.getValue());

} catch (LineUnavailableException e) {

e.printStackTrace();

} catch (IllegalArgumentException iaEx) {

System.out.println(" " + iaEx);

}

}

}

return gui;

}

public static void main(String[] args) {

Runnable r = new Runnable() {

@Override

public void run() {

SoundMixer sm = new SoundMixer();

Component c = sm.getGui();

JOptionPane.showMessageDialog(null, c);

}

};

// Swing GUIs should be created and updated on the EDT

// http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html

SwingUtilities.invokeLater(r);

}

}

class VolumeSlider {

JSlider volume;

VolumeSlider(final FloatControl volumeControl) {

volume = new JSlider(

(int) volumeControl.getMinimum() * 100,

(int) volumeControl.getMaximum() * 100,

(int) volumeControl.getValue() * 100);

ChangeListener listener = new ChangeListener() {

@Override

public void stateChanged(ChangeEvent e) {

float val = volume.getValue() / 100f;

volumeControl.setValue(val);

System.out.println(

"Setting volume of " + volumeControl.toString() +

" to " + val);

}

};

volume.addChangeListener(listener);

}

public JSlider getVolume() {

return volume;

}

}

On this Windows 7 machine I get two controls, both from the "Java Sound Audio Engine". Neither has any effect on the current system volume.

run:

There are 4 mixer info objects

mixer name: Primary Sound Driver

Line.Info: interface SourceDataLine supporting 8 audio formats, and buffers of at least 32 bytes

java.lang.IllegalArgumentException: Unsupported control type: Master Gain

Line.Info: interface Clip supporting 8 audio formats, and buffers of at least 32 bytes

java.lang.IllegalArgumentException: Unsupported control type: Master Gain

mixer name: Speakers (VIA High Definition Audio)

Line.Info: interface SourceDataLine supporting 8 audio formats, and buffers of at least 32 bytes

java.lang.IllegalArgumentException: Unsupported control type: Master Gain

Line.Info: interface Clip supporting 8 audio formats, and buffers of at least 32 bytes

java.lang.IllegalArgumentException: Unsupported control type: Master Gain

mixer name: Java Sound Audio Engine

Line.Info: interface SourceDataLine supporting 8 audio formats

volCtrl.getValue() = 0.0

Line.Info: interface Clip supporting 8 audio formats, and buffers of 0 to 4194304 bytes

volCtrl.getValue() = 0.0

mixer name: Port Speakers (VIA High Definition A

Setting volume of Master Gain with current value: 0.0 dB (range: -80.0 - 13.9794) to 0.0

Setting volume of Master Gain with current value: 0.0 dB (range: -80.0 - 13.9794) to -0.41

Setting volume of Master Gain with current value: 0.0 dB (range: -80.0 - 13.9794) to -0.68

...

Swap FloatControl.Type.MASTER_GAIN for FloatControl.Type.VOLUME to see.. no controls.

java实现对音量的控制,可Java的声音被用来控制系统音量?相关推荐

  1. android 控制app声音,Android底层开发之APP音量单独控制

    Android底层开发之APP音量单独控制 目前Android的音乐播放软件都的音量控制都是随着系统的总Master音量变化的.想要实现和windows中一样,每个APP的媒体音量可以单独控制. 控制 ...

  2. java 系统音量案例_android 实现手机音量的控制 实例源码

    [实现手机音量的控制] [实例截图] [核心代码] package com.example.yltj; import android.app.Activity; import android.cont ...

  3. java增减音量,音频音量控制在Java中(增加或减少)

    How do I increase the volume of an outgoing wav audio stream using Java? I'm having issues with vari ...

  4. java调节音量代码_用Java调用VC音量控制程序_java

    前言 本文通过java的Runtime接口来实现调用其他语言实现的应用程序,进而来实现对计算机硬件信息的监控和控制.本文是多媒体信息系统的一个部分,就是调整计算机音量. 使用VC编写音量控制程序 本控 ...

  5. 【Java播放音乐】利用AudioSystem实现音乐的播放、循环播放以及音量的调整

    [Java播放音乐]利用AudioSystem实现音乐的播放.循环播放以及音量的调整 文章目录 [Java播放音乐]利用AudioSystem实现音乐的播放.循环播放以及音量的调整 步骤 如何循环播放 ...

  6. 鼠标控制方向java代码_java鼠标操控小程序

    最近在做一个软工的屏幕监控软件,已经实现了屏幕图片的传输,但是没有鼠标,才发现键盘上的PtrScSysRq键所截到图是没有鼠标信息的.== 暂时只需实现鼠标的移动事件,用robot.mouseMove ...

  7. 第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++

    第一段Java程序_借助Win控制命令台编译执行 编辑器Notepad++ 准备代码: 第一次编译: 显然需要先配置环境变量: 先找到java.exe和javac.exe所在的文件夹位置: 此电脑-& ...

  8. Java基础篇3——流程控制

    Java基础篇3--流程控制 1.顺序结构 正常代码的流程即是顺序流程 2.分支结构 2.1.if-else分支 if(条件表达式) {语句块1; } if(条件表达式) {语句块1; } else ...

  9. Java成员的访问权限控制

    Java中的访问权限控制包含两个部分: 类的访问权限控制 类成员的访问权限控制 对类来说,访问权限控制修饰符可以是public或者无修饰符(默认的包访问权限): 对于类成员来说,访问权限控制修饰符可以 ...

最新文章

  1. MySQL面试重点篇27问27答
  2. 2.0Tonmcat高级配置和jDK的安装配置
  3. java何时支持await,内存-为什么Java等待这么长时间才能运行垃圾回收器?
  4. 有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接...
  5. header python 环境信息_【关于header信息的构造】Python模拟登录出现乱码
  6. Code Blocks 10 05的安装及使用
  7. 一键生成人脸像素图,还能上传到动森!这个项目很好玩
  8. python 迭代器相关知识
  9. [Selenium]通过Selenium实现在当前浏览器窗口点击一个图标之后,弹出另外一个窗口,关闭这个窗口,再回到原来的窗口进行操作...
  10. 拉杆音响电池升压芯片4.2V转12V2.5A大功率升压芯片
  11. 手机+PC电脑如何使用油猴插件和油猴脚本?
  12. 安装element ui
  13. Matlab生成zipf随机数
  14. 复化梯形公式matlab实验报告_复化梯形公式matlab
  15. 华为手机linux连接网络设置ip地址,华为路由器(Huawei)默认登录IP地址是多少
  16. 改变 el-dialog 的宽度
  17. 方差、标准差和均方根误差的区别总结
  18. 四路组相联原理_TLB的作用及工作原理
  19. mysql转换年月日_mysql日期转换和数字格式转换实例
  20. Matlab绘制阶梯形图

热门文章

  1. 常见的k临近向量检索算法
  2. Linux内核实验孟宁,《linux内核分析》实验二:时间片轮转多道程序运行原理
  3. 中文与 \u5927\u732a\u8e44\u5b50 这一类编码互转
  4. IE、谷歌、火狐浏览器兼容性、默认属性样式总结
  5. 谷歌浏览器插件的安装
  6. python发送文件传输助手,教你用Python通过微信来控制电脑摄像头
  7. 如何在应用交付上发布应用_面对应用交付中的新建与购买问题
  8. 汽车销售技巧培训讲师 司铭宇老师简介
  9. python代码示例500行源代码-500行代码使用python写个微信小游戏飞机大战游戏
  10. Leetcode.322 零钱兑换