Регулировка громкости с помощью JLayer - PullRequest
0 голосов
/ 28 июня 2010

я и друг программируем MP3-плеер как школьный проект.Мы почти закончили и теперь застряли в точке, где мы пытаемся запрограммировать функцию изменения громкости проигрывателя.Мы используем:

  • AudioDevice
  • AdvancedPlayer

Я знаю, что кто-то уже задавал тот же вопрос уже, но я не совсем понял решение, и я не сделалне хочу отвечать на такой старый вопрос, поэтому я подумал, что просто задам еще раз.

Ура Тимоти

Ответы [ 2 ]

2 голосов
/ 10 июля 2013

Самый простой способ сделать это - использовать jlayer через mp3spi , что в основном означает, что вы используете jlayer через JavaSound. Затем вы можете установить усиление на линии, как в JavaSound.

Во-первых, вам нужно добавить следующее к вашему classpath:

  • 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, читайте здесь .

0 голосов
/ 28 июня 2010

JLGUI - хороший пример регулировки громкости приложения 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);
        }
    }
...