Регулировка громкости с помощью JLayer

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

  • Аудио-устройство
  • Продвинутый игрок

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

Привет Тимоти


person Timothy    schedule 28.06.2010    source источник


Ответы (2)


Самый простой способ сделать это — использовать jlayer через mp3spi, что в основном означает, что вы используете jlayer через JavaSound. Затем вы можете установить усиление на линии, как в 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, прочитайте здесь.

person pstanton    schedule 10.07.2013

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);
        }
    }
person Chris Dennett    schedule 28.06.2010
comment
Эй, спасибо за быстрый ответ! Я проверю это и спрошу еще раз, если я не понимаю :-) - person Timothy; 28.06.2010
comment
О, эммм, не могли бы вы просто быстро сказать мне, в каком файле находится код, который вы разместили? Ваше здоровье - person Timothy; 28.06.2010
comment
PlayerUI.java :) В \src\javazoom\jlgui\player\amp - person Chris Dennett; 28.06.2010
comment
Хорошо, я нашел это, но я не понимаю :-/ . theSoundPlayer - это BasicController, но я нигде не могу найти этот класс... - person Timothy; 28.06.2010
comment
Код регулировки громкости, по-видимому, находится в javazoom.jlgui.basicplayer.BasicPlayer, но я не могу найти файл! Есть только пакет плеера. Раздражающий :) - person Chris Dennett; 28.06.2010
comment
koders.com/java/ - person Chris Dennett; 28.06.2010
comment
Cпасибо за ссылку! И поиск продолжается, хе-хе. Не могу понять, почему разработчики Jlayer не включили эту функцию непосредственно в библиотеку jlayer. - person Timothy; 28.06.2010
comment
Похоже, вам нужно настроить громкость на уровне реализации (где он использует классы javax.sound) - абстракция буквально не имеет в ней настройки :) - person Chris Dennett; 28.06.2010
comment
пожалуйста, проверьте мой ответ, сейчас он не работает, но я пока не знаю, почему. Я думаю, мне должно понравиться это с моим AudioDevice, но я понятия не имею, как... - person Timothy; 28.06.2010
comment
это немного отвлекающий маневр. - person pstanton; 10.07.2013