如何从 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 程序调整扬声器音量?的主要内容,如果未能解决你的问题,请参考以下文章