【问题标题】:How to set volume of a SourceDataLine in Java如何在 Java 中设置 SourceDataLine 的音量
【发布时间】: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 语句。

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

【问题讨论】:

    标签: java audio controls


    【解决方案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 表示静音。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-07
        • 2018-03-13
        • 2016-09-04
        • 2015-05-28
        相关资源
        最近更新 更多