我正在寻找以下问题的解决方案:
AudioSystem.getMixer()
来获取Windows主音量控制)如上所述,目标环境是Windows(XP或更高版本)。
不幸的是,所有音频输出包都共享相同的进程ID,因为它们属于同一个java运行时。因此,windows只会创建一个特定于应用程序的混音器。你有什么想法吗?
答案 0 :(得分:0)
你是通过剪辑玩的吗? SourceDataLines?很可能,每个都暴露出一个可用于改变音量的控件。使用基本的生产者/消费者设计模式,您可以选择是否受JSlider影响的声音。
换句话说,您可以在Clip / SDL级别而不是在混音器级别执行操作。
如果一个Control for volume不起作用,那么创建一个浮点“volume”变量并不困难,你可以“订阅”或暴露给JSlider,它保存0到1.0f之间的值并乘以在SourceDataLine播放之前,内部缓冲区循环中的每个帧值。它可能需要将字节放在一起(对于16位声音),进行乘法,然后再将它们分开。这里还有其他线程显示小端或大端声音数据处理的编码。
我看了一下提供的OSGi链接并跑了。我主要是直接做javax.sound.sampled。
如果第三方为声音提供的“捆绑”没有暴露音量控制,我会感到非常惊讶。这似乎是一件基本的事情!