[英]Java Sound API to access the system/master volume control in Vista and Win 7
历史和情况:
我目前正在更新一个Java应用程序,该应用程序是几年前为客户端开发的(可在WinXP上运行),用于测试和培训患有某些听力障碍的人。 购买此应用程序的用户将获得特定的USB声音设备和耳机。
此软件最重要的要求之一是必须以特定的分贝声音级别向用户播放音频。 使用Java Sound API,开发了该应用程序,以将Windows Volume动态调整为计算的水平(基于在开发过程中校准USB声音设备和耳机时进行的测量)。
问题:
现在需要升级该应用程序以支持Windows Vista和Windows 7,但是由于Windows的新的按应用程序声音体系结构,我无法找到使用Java Sound API访问主/系统卷的任何方法。
由于应用程序的Windows音量控制是相对于系统音量的,因此不能单独削减Windows音量控制,并且无法保证用户将听到特定级别的已知输出音频。
有人知道在Java中是否有可能这样做,如果可以,怎么办? 如果不可能的话,那么您能给出什么指导来实现它的最简单方法吗? (也许是JNI和C-尽管我以前从未使用过JNI ...要注意的陷阱?)
如果以Windows XP兼容模式运行应用程序,则该应用程序应该可以工作(这取决于Java Sound API与硬件卷的交互方式)。
如果要使用Vista(及以后)的声音API,则需要查看IAudioEndpointVolume API。
我的猜测是,由于您使用的是USB设备,因此Java声音API无法访问正确的通道。
您可以看一下如何在Windows XP中调整主音量 。 我知道您不是在XP中工作,而是了解如何在该链接上访问特定的Lines和Mixers。 您可能需要尝试一下才能找到正确的线路和混音器组合,或者为用户提供一个GUI,使他们可以选择正确的线路和混音器组合。
我已经在Windows 7中运行了使用此方法的应用程序,因此我怀疑这是O兼容性问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.