Java 如何在不使用控件的情况下调整线的音量

Java 如何在不使用控件的情况下调整线的音量,java,line,volume,audio,Java,Line,Volume,Audio,我对使用javax.sound.sampled包还不熟悉,我选择使用该包的原因是,与一些简单的声音解决方案(如AudioClip)相比,我对所使用的音频有更多的控制 我通读了: (或者至少是我能掌握的)但是我没有看到一种方法可以使用剪辑界面在行上调节播放的级别/音量,他们似乎在软件包的允许您创建声音的部分提供了这些选项,但是我找不到任何方法来进行这些调整,无论是通过我的行,还是通过我的音频输入流 我发现这一页有文字 另一方面,浮动控件非常适合表示连续可变控件,如平移、平衡或体积 但我的计算机上没

我对使用javax.sound.sampled包还不熟悉,我选择使用该包的原因是,与一些简单的声音解决方案(如AudioClip)相比,我对所使用的音频有更多的控制

我通读了: (或者至少是我能掌握的)但是我没有看到一种方法可以使用
剪辑
界面在
上调节播放的级别/音量,他们似乎在软件包的允许您创建声音的部分提供了这些选项,但是我找不到任何方法来进行这些调整,无论是通过我的
,还是通过我的
音频输入流

我发现这一页有文字

另一方面,浮动控件非常适合表示连续可变控件,如平移、平衡或体积

但我的计算机上没有任何行返回任何控件(使用
Line.getControls()

(我试图强制该行接受与类似的
FloatControl.Type.VOLUME
,但得到了一个“不支持的控件类型异常”)

是否只有通过使用线的控件(使用剪辑界面)才能修改线上的音量/音量?或者是否可以修改音频输入流的音量


或者,是否有向现有行添加控件的方法?

而不是使用FloatControl.Type.VOLUME使用FloatControl.Type.MASTER\u GAIN。

除了使用行之外,至少还有一种方法。(我在获取控制线时也遇到了问题,发现主控线工作正常,正如特拉维斯·迈尔斯(Travis Meyers)所建议的那样。我给他一个+投票。)不确定你是否想去那里,但可以将每一帧的音频值乘以一个音量因子。Java教程间接引用了该技术,但与该文档中的许多其他内容一样,它们没有提供明确的示例

因此,当您获取一个字节缓冲区时,您必须在缓冲区中循环,组合字节以获得音频值。然后,乘以音量系数(通常是从0到1.0的浮点),然后将音频值分解回字节

它起作用了。我用一个粗糙的Java来做,你可以试试。在那个节目中,我也会在每帧的基础上操纵我的音高。但是这个计划仍然存在问题!我现在正在改进将GUI事件数据传输到音频循环的方式。另外,我是以每帧为基础响应更改,而不是以每缓冲区为基础响应更改。但对于大多数使用,每个缓冲区都可以

这就是说,需要注意的是,发送音量变化会导致不连续,从而导致响亮的咔哒声。导致单击的数量在不同的音量范围内可能会有所不同。而且,当你使用体积系数从0到1.0时,体积并不会以线性方式下降