如何在 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 Gain
s 值实际上改变了,但我听不到歌曲中的任何变化【参考方案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 的音量的主要内容,如果未能解决你的问题,请参考以下文章