如何在Java中设置SourceDataLine的卷

时间:2011-01-12 12:36:36

标签: java audio controls

我正在尝试用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 个答案:

答案 0 :(得分:2)

您是否曾尝试查看dataLine.getControls()将返回的内容?

  

获得相关的控件集   用这条线。某些控件可能只是   线路打开时可用。如果   这种方法没有控制   返回一个长度为0的数组。

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

答案 1 :(得分:2)

OK GUYS,

我发现了我的混乱局面。我实际上忘了调用dataLine.open(audioFormat)函数来获取系统资源。

所以代码工作正常,万一有人也遇到这类问题

答案 2 :(得分:0)

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