如何在Java中设置SourceDataLine的音量

7

我正在尝试用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语句。

我的问题是:你有任何想法为什么会发生这种情况,以及我如何解决这个问题,以便可以控制我的应用程序的音量?

3个回答

4

好的,大家好,

我发现了我的错误。实际上我忘记调用dataLine.open(audioFormat)函数,该函数获取系统资源。

所以代码运行良好,如果有人遇到这种问题,也可以参考这个解决方法。


3

你是否尝试过查看dataLine.getControls()将返回什么?

获取与此行相关联的控件集。在打开该行时,可能只有某些控件可用。如果没有控件,则此方法返回长度为0的数组。

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


dataLine.getControls() 返回以下内容:当前主增益值为:0.0 dB(范围:-80.0 - 6.0206) 当前静音控制状态为:False 当前平衡值为:0.0(范围:-1.0 - 1.0) 当前声像平衡值为:0.0(范围:-1.0 - 1.0)与此同时,我一直在调试我的代码,并意识到主增益的值确实已经改变,但是我听不到歌曲中的任何变化。 - Liviu

1
 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 表示静音。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接