设置计算机音量

6
我想制作一个Java程序,它可以:
  1. 从文件中读取一行(例如:文件内容为“Hello”)
  2. 如果该行等于“Hello”,则
  3. 获取计算机音量,如果计算机音量大于1,则将音量除以2
我不知道如何实现这个程序的音量部分。我已经在网上搜索了一个小时,但似乎无法得到任何关于如何实现或是否可能实现的想法。
我忘记添加(我使用的是Windows 7)。

1
相关线程:http://stackoverflow.com/questions/3249550/is-there-a-way-in-java-jna-to-set-the-master-system-volume-reliably-in-xpvi - Igor
请查看此链接,了解如何使用JavaSound控制主音量:http://www.coderanch.com/t/492931/java/java/Adjusting-master-volume-Windows-XP。然而,它的普适性还存在一些疑问。 - Neil Coffey
3个回答

8

1
Affero许可证?还是您在此授权我们复制和重新许可?(顺便说一句,在Win 7上似乎对我没什么作用,有人成功使用了吗?) - rogerdpack
2
是的,我允许您对 https://github.com/Kunagi/ilarkesto/blob/master/src/main/java/ilarkesto/media/Audio.java 做任何您想做的事情。 - Witek
我从getMasterOutputLine方法中收集了所有的行输出,并将其粘贴到一个新答案中,因为我无法在评论中放置任何合理格式化的文本,更不用说评论中可用的字符不足以粘贴所有信息。我的想法是,也许你可以使用这个输出来帮助我修改测试,以便返回正确的行。 - Michael Sims
3
在我的Windows 10上什么都没做……有人让它起作用了吗? - user1111929
1
Audio.setMasterOutputVolume(0.5f); 抛出“RuntimeException: 未找到主输出端口”的异常。 - Elron
显示剩余2条评论

5

我知道这个问题很久了,但也许我的答案能帮助其他人。 我发现了一个有用的工具(下载链接在页面底部)。 使用这个工具,你可以调整系统音量和做许多其他的事情(例如打开CD驱动器)。只需下载并将nircmd.exe放在硬盘上的某个位置。然后输入以下内容以调整音量:

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(pathToNircmdexe + " setsysvolume 32767.5");

这将把您的系统音量设置为50。要设置音量,您需要选择0到65535之间的数字。如果您想使用0到100的数字,请使用下面的方法。它将转换您想要的音量(通过使用简单的数学:D)。
public void setSystemVolume(int volume)
{
    if(volume < 0 || volume > 100)
    {
        throw new RuntimeException("Error: " + volume + " is not a valid number. Choose a number between 0 and 100");
    }

    else
    {
        double endVolume = 655.35 * volume;

        Runtime rt = Runtime.getRuntime();
        Process pr;
        try 
        {
            pr = rt.exec(nircmdFilePath + " setsysvolume " + endVolume);
            pr = rt.exec(nircmdFilePath + " mutesysvolume 0");

        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}

注意:很遗憾,这只适用于 Windows。

"因为 Java 是跨平台的,它不能像改变音量或者控制操作系统做其他特定于平台的事情。你需要使用操作系统的独特 API 层来完成这些操作。" 来源


3

以下是我成功使用终端命令设置系统主音量的方法(我使用的是运行OS X 10.10的Mac):

public static void setOutputVolume(float value)
{
    String command = "set volume " + value;
    try
    {
        ProcessBuilder pb = new ProcessBuilder("osascript","-e",command);
        pb.directory(new File("/usr/bin"));
        StringBuffer output = new StringBuffer();
        Process p = pb.start();
        p.waitFor();
        BufferedReader reader =
                new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line;
        while ((line = reader.readLine())!= null)
        {
            output.append(line + "\n");
        }
        System.out.println(output);
    }
    catch(Exception e)
    {
        System.out.println(e);
    }
}

数值可以从0.1到7.0任意选择,您可以按以下方式调用该方法:

setOutputVolume(3.5f);

这将把系统音量设置为大约一半。我不知道在Windows中设置系统音量的任何命令行选项,如果有人知道,请发言?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接