如何在 Java 中设置 SourceDataLine 的音量

Posted

技术标签:

【中文标题】如何在 Java 中设置 SourceDataLine 的音量【英文标题】:How to set volume of a SourceDataLine in Java 【发布时间】:2011-06-07 19:40:09 【问题描述】:

我正在尝试用 java 制作一个 mp3 播放器,但我不知道如何控制其中的音量。

我尝试过这样的事情:

         // Adjust the volume on the output line.
         if (dataLine.isControlSupported(FloatControl.Type.MASTER_GAIN)) 
             FloatControl volume = (FloatControl) dataLine.getControl(FloatControl.Type.MASTER_GAIN);
            volume.setValue(100.0F);
         

在这段代码运行良好之前我所写的一切,但显然 dataLine 不受支持,因为它跳过了这个 IF 语句。

我的问题是:你知道为什么会发生这种情况吗?我该如何解决这个问题,以便我可以控制我的应用程序的数量?

【问题讨论】:

【参考方案1】:

好吧,伙计们,

我发现我的问题了。我居然忘记调用获取系统资源的dataLine.open(audioFormat)函数了。

所以代码工作得很好,以防万一有人也遇到这种问题

【讨论】:

【参考方案2】:

你有没有试过看看dataLine.getControls()会返回什么?

获取关联的控件集 用这条线。某些控件可能只 线路开通时可用。如果 没有控件,这个方法 返回一个长度为 0 的数组。

如果您想要音量,您不想测试FloatControl.Type.VOLUME 控件吗?

【讨论】:

dataLine.getControls() 返回此主增益,当前值:0.0 dB(范围:-80.0 - 6.0206) 静音控制,当前值:False 平衡当前值:0.0(范围:-1.0 - 1.0) Pan with current value: 0.0 (range: -1.0 - 1.0) Ive been messing with my code in the meantime and realized that the Master Gains 值实际上改变了,但我听不到歌曲中的任何变化【参考方案3】:
 float vol=50;
final FloatControl volumeControl = (FloatControl) auline.getControl( FloatControl.Type.MASTER_GAIN );
volumeControl.setValue( 20.0f * (float) Math.log10( vol / 100.0 ) );

vol=0 表示静音。

【讨论】:

以上是关于如何在 Java 中设置 SourceDataLine 的音量的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中设置最高位?

如何在 Java 应用程序中设置锁定模式

如何在 Java 中设置标签(彩色文本)的颜色?

如何在 JAVA 中设置主机名?

如何在 Ubuntu 中设置 Java 环境路径

如何在 Java 循环链表中设置下一个值?