【问题标题】:Java Sound API to access the system/master volume control in Vista and Win 7在 Vista 和 Win 7 中访问系统/主音量控制的 Java Sound API
【发布时间】:2010-12-16 04:45:14
【问题描述】:

历史与现状:

我目前正在更新几年前为客户开发的 Java 应用程序(在 WinXP 上运行),用于测试和培训有某些听力障碍的人。购买此应用程序的用户将获得特定的 USB 声音设备和耳机。

此软件最重要的要求之一是必须以特定分贝声级向用户播放音频。使用 Java 声音 API,开发该应用程序以将 Windows 音量动态调整到计算水平(基于在开发期间校准 USB 声音设备和耳机时进行的测量)。

问题:

该应用程序现在需要升级以支持 Windows Vista 和 Windows 7,但是由于 Windows 新的 per-app 声音架构,我无法找到使用 Java Sound 访问主/系统音量的任何方法API。

应用程序的 Windows 音量控制本身并不能削减它,因为它与系统音量相关,并且无法保证用户会听到特定的已知级别的输出音频。

有没有人知道在 Java 中是否可以做到这一点,如果可以,那怎么做?如果不可能,那么您能否就实现它的最简单方法提供任何指导? (也许是 JNI 和 C - 虽然我以前从未使用过 JNI...有什么需要注意的问题吗?)

【问题讨论】:

    标签: java windows-7 windows-vista audio


    【解决方案1】:

    我的猜测是因为您使用的是 USB 设备,所以您的 Java 声音 API 无法访问正确的通道。

    你可以看看how to adjust the master volume in Windows XP。我知道您不是在 XP 中工作,但请查看如何访问该链接上的特定线路和混音器。您可能需要进行一些试验才能找到正确的线路和混音器组合,或者为您的用户提供允许他们选择正确的线路和混音器组合的 GUI。

    我已经在 Windows 7 中运行了使用这种方法的应用程序,所以我怀疑这是 O 兼容性问题。

    【讨论】:

    • 如果我的记忆正确,这不是问题或错误的通道/线路/混音器:问题在于 API 没有提供任何方法来调整设备的主音量以“整个系统”在 Vista/7 中 - 它仅更改特定应用程序的音量,然后受系统的设备实际主音量影响(您无法控制或测量)。
    • 例如在 Windows Mixer 中手动将系统音量设置为 50%,然后将应用程序中的“主”设置为 100% 并尝试一下。然后再试一次,手动将系统音量设置为其他值。您会看到它们是 2 个完全独立但相互依赖的音量控制,您无法从您的应用访问系统的主控
    【解决方案2】:

    如果您在 Windows XP 兼容模式下运行应用程序,它应该可以工作(这取决于 Java Sound API 与硬件音量的交互方式)。

    如果您想使用 Vista(及更高版本)声音 API,您需要查看 IAudioEndpointVolume API。

    【讨论】:

    • 谢谢 :D 我不知道为什么我不想在 Win XP 兼容模式下尝试它,但如果我启用该选项,它会完美运行。
    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2011-04-05
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多