如何在 Java 中设置 SourceDataLine 的音量

发布于 2024-10-11 18:42:50 字数 480 浏览 1 评论 0原文

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

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

I'm trying to make an mp3 player in java and I can`t figure out how to control the volume in it.

I've tried something like this:

         // 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);
         }

Everything I have written until this code worked fine but apparently the dataLine is NOT control Supported because it jumps over this IF statement.

My question is this : Do you have any idea why this is happening and how could I work this issue around so that I could control the volume of my application?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

坐在坟头思考人生 2024-10-18 18:42:50

好吧,伙计们,

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

所以代码工作得很好,以防有人也遇到此类问题

OK GUYS,

I found my mess-up. I actually forgot to call the dataLine.open(audioFormat) function which acquires the system resources.

So the code workes just fine, in case anyone has this kind of problems too

三生路 2024-10-18 18:42:50

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

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

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

Have you tried to see what dataLine.getControls() will return ?

Obtains the set of controls associated
with this line. Some controls may only
be available when the line is open. If
there are no controls, this method
returns an array of length 0.

If you want volume wouldn't you want to test for the FloatControl.Type.VOLUME control ?

極樂鬼 2024-10-18 18:42:50
 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 表示静音。

 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 means mute.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文