【问题标题】:How can I play a sound at a specified volume in Java?如何在 Java 中以指定的音量播放声音?
【发布时间】:2012-05-25 22:03:47
【问题描述】:

我已经有了在我的游戏中播放声音效果的工作方法,但是声音都是以默认音量播放的。如果音效的来源与播放器之间的距离增加,我希望声音更安静。

目前我正在使用:

public static void play(String sound) {
    Clip clip = soundList.get(sound);
    clip.setFramePosition(0);
    //I want to set the clip's volume here
    clip.start();
}

有类似clip.getLevel()的东西,但是没有setter。 如何在剪辑开始之前设置剪辑的音量?

提前致谢!

【问题讨论】:

  • 我想你可以看看stackoverflow.com/questions/953598/…他们在哪里减少了音量。当然,您只需添加音量即可。
  • 如果多个剪辑重叠,可能与其他声音(如系统声音)重叠,这将不起作用。

标签: java audio volume


【解决方案1】:

在 Java 7(可能还有 Java 6)中,有一组类提供control to the clip。它们是:

  • 布尔控制
    • 静音
    • 应用/移除混响
  • 复合控制
  • 枚举控件
    • 混响控制
  • 浮动控制
    • 辅助返回
    • 辅助发送
    • 余额
    • 主增益
    • 平移
    • 混响返回
    • 混响发送
    • 采样率
    • 音量

您要查找的控件对象是FloatControl。如上表所示,这可以控制剪辑的音量。使用以下代码实现:

FloatControl volume = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
volume.setValue(gainAmount);

-或-

((FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN)).setValue(gainAmount)

gainAmount 是您想要提高(或降低)剪辑的分贝量。

【讨论】:

    【解决方案2】:

    剪辑 API 不支持这个,AFAIK。我认为您必须读取原始数据,乘以一个常数,然后使用原始数据创建一个新剪辑。常数表示音量变化量,所以如果你想让它变大一半,乘以 0.5。

    如果你想让声音更大,你必须注意“过度”。没有简单的方法来处理它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      相关资源
      最近更新 更多