如何从 Java 程序调整扬声器音量?

Posted

技术标签:

【中文标题】如何从 Java 程序调整扬声器音量?【英文标题】:How to adjust speaker volume from Java program? 【发布时间】:2009-11-14 16:54:28 【问题描述】:

我运行的是Win Vista,在窗口右下角的时钟旁边有一个喇叭图标,我可以点击它来调节音量,不知道我的Java程序中有没有办法自动执行此操作?

例如,当我的 Java 程序启动时,它会将音量调到 80,当程序退出时,它会将音量变回原来的水平。如果有办法实现这种效果,我不介意使用Runtime.getRuntime().exec()

【问题讨论】:

【参考方案1】:

Java 的主要前提之一是用它编写的应用程序应该在任何平台上工作。这就是为什么他们在 Java 1.4 SDK 中放弃了对环境变量的支持,但后来又重新启用了它。这就是为什么无法使用“cls”之类的命令来清理 Java 控制台的原因,因为它可以在某些平台上运行,但在其他平台上却不行。

话虽如此,您将无法使用 Java 进行操作。您可以使用 C++ 创建 JNI DLL,也可以使用 C++ 或 C# 创建应用程序。

有关在 C++ 中执行此操作的更多信息:

change volume win32 c++

【讨论】:

关于控制台控制的争论被打破了。 ANSI 序列没有任何问题,只是 Windows 不支持开箱即用。 @Thorbjorn 我知道我的例子不适合这种情况。 @EricSchafer 但是您可以通过使用 C# 中的 Windows API(使用 DllImport)来做到这一点,对吧? 或者使用 jna 和一个 dll(我猜和 jni 一样)【参考方案2】:

查看javax.sound API。 Here 是一个关于此的教程,特别是 here(在更改线路的音量一章中)您可以阅读如何设置音量。这些知识应该提供足够的 Google 关键字来查找示例。

【讨论】:

【参考方案3】:

我使用以下代码来模拟音量调节:

Robot robot;             // Set speaker volume to 80
try

  robot=new Robot();
  robot.mouseMove(1828,1178);
  robot.mousePress(InputEvent.BUTTON1_MASK);
  robot.mouseRelease(InputEvent.BUTTON1_MASK);
  robot.delay(90);
  robot.mouseMove(1828,906);
  robot.mousePress(InputEvent.BUTTON1_MASK);
  robot.mouseRelease(InputEvent.BUTTON1_MASK);
  robot.delay(260);
  robot.mousePress(InputEvent.BUTTON1_MASK);
  robot.mouseRelease(InputEvent.BUTTON1_MASK);

catch (AWTException ex)

  System.err.println("Can't start Robot: " + ex);
  System.exit(0);

它成功了!

【讨论】:

【参考方案4】:

通过鼠标点击打开音量控制后,如果相对调整适合您,您还可以使用向上/向下键命令调整音量。

import java.awt.event.KeyEvent;    
robot.keyPress(KeyEvent.VK_UP);
robot.delay(200);
robot.keyRelease(KeyEvent.VK_DOWN);

【讨论】:

以上是关于如何从 Java 程序调整扬声器音量?的主要内容,如果未能解决你的问题,请参考以下文章

从 linux 主机控制 Jabra 710 USB 扬声器音量

如何使用 Java 在 PC 扬声器上发出噪音

如何获得扬声器音量级别? [复制]

电脑突然没有声音了怎么恢复正常

iOS 是不是会降低使用麦克风的应用程序的扬声器音量?

win7音量合成器怎么添加设备