【问题标题】:Adjusting Volume using JLayer使用 JLayer 调整音量
【发布时间】:2010-06-28 16:19:54
【问题描述】:

我和一个朋友正在编写一个 MP3 播放器作为一个学校项目。我们几乎完成了,现在我们试图编写一个函数来改变播放器的音量。 我们正在使用:

  • 音频设备
  • 高级播放器

我知道其他人已经问过同样的问题,但我没有完全得到解决方案,我不想回答这么老的问题,所以我想我会再问一次。

干杯 提摩太

【问题讨论】:

    标签: java volume jlayer


    【解决方案1】:

    最简单的方法是通过mp3spi 使用jlayer,这基本上意味着您通过JavaSound 使用jlayer。然后,您可以像在 JavaSound 中一样设置线路增益。

    首先,您需要将以下内容添加到您的类路径中:

    • jl1.0.1.jar
    • mp3spi1.9.5.jar
    • tritonus_share.jar

    ...所有这些都在 mp3spi 的发行版中(上面链接)。

    其次,您需要在播放之前对 AudioInputStream 进行解码。

    AudioInputStream audioStream = AudioSystem.getAudioInputStream(file);
    AudioFormat baseFormat = audioStream.getFormat();
    AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
            baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);
    AudioInputStream audioStream2 = AudioSystem.getAudioInputStream(decodedFormat, audioStream);
    

    然后你播放解码后的流:

    Clip clip = AudioSystem.getClip();
    clip.open(audioStream2);
    

    和 JavaSound API 控件可用:

    FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
    gainControl.setValue(-30.0f);
    

    注意:不要忘记关闭您的资源,我刚刚展示了此问题的关键点 - 希望熟悉 JavaSound,read here

    【讨论】:

      【解决方案2】:

      JLGUI 是基于 UI 的 JLayer 应用程序调整音量的一个很好的例子。您可以在 tar.gz 文件中获取源代码。 http://www.javazoom.net/jlgui/sources.html

          if (src == ui.getAcVolume())
          {
              Object[] args = { String.valueOf(ui.getAcVolume().getValue()) };
              String volumeText = MessageFormat.format(ui.getResource("slider.volume.text"), args);
              ui.getAcTitleLabel().setAcText(volumeText);
              try
              {
                  int gainValue = ui.getAcVolume().getValue();
                  int maxGain = ui.getAcVolume().getMaximum();
                  if (gainValue == 0) theSoundPlayer.setGain(0);
                  else theSoundPlayer.setGain(((double) gainValue / (double) maxGain));
                  config.setVolume(gainValue);
              }
              catch (BasicPlayerException ex)
              {
                  log.debug("Cannot set gain", ex);
              }
          }
      

      【讨论】:

      • 您好,感谢您的快速回答!我会检查一下,如果我不明白,再问一次:-)
      • 哦,嗯,你能不能快速告诉我你发布的代码是在哪个文件中找到的?干杯
      • PlayerUI.java :) 在 \src\javazoom\jlgui\player\amp
      • 好吧,我找到了,但我不明白:-/。 theSoundPlayer 是一个 BasicController 但我在任何地方都找不到该类...
      • 音量调整代码显然在 javazoom.jlgui.basicplayer.BasicPlayer 但我找不到文件!只有播放器包。烦人:)
      猜你喜欢
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      相关资源
      最近更新 更多