首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用JLayer调节音量

利用JLayer调节音量
EN

Stack Overflow用户
提问于 2010-06-28 16:19:54
回答 2查看 5.6K关注 0票数 0

我和一个朋友正在编程一个MP3播放器作为一个学校项目。我们已经快完成了,现在我们只能尝试编写一个函数来改变播放器的音量了。我们正在使用:

  • AudioDevice
  • AdvancedPlayer

我知道还有人问了同样的问题,但我没有完全解决,我不想回答这么老的问题,所以我想我只想再问一次。

干杯蒂莫西

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-10 12:36:39

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

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

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

其中的...all在mp3spi的发行版中(链接在上面)。

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

代码语言:javascript
复制
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);

然后播放解码后的流:

代码语言:javascript
复制
Clip clip = AudioSystem.getClip();
clip.open(audioStream2);

JavaSound API控件可用:

代码语言:javascript
复制
FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
gainControl.setValue(-30.0f);

注意:不要忘记关闭您的资源,我刚刚向您展示了这个问题的要点--希望熟悉JavaSound,在这里读

票数 2
EN

Stack Overflow用户

发布于 2010-06-28 16:30:29

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

代码语言:javascript
复制
    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);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3134167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档