Java LWJGL OGG Фоновая музыка

1

В моей игре у меня есть очень длинные файлы ogg (от 8 до 20 мб), а некоторые другие машины не могут читать ее прямо в память. Поэтому я читал, что в некоторых играх используется метод stream и play. Есть ли какой-нибудь пример lib/code для загрузки и воспроизведения файлов ogg (с LWJGL) в режиме реального времени? Спасибо за помощь :)

  • 0
    Как общее примечание, вы хотите сжать файлы настолько, насколько это возможно в вашей игре. 20 МБ для одной музыкальной дорожки просто недопустимы с точки зрения того, сколько времени потребуется для загрузки вашей игры.
  • 0
    Моя ошибка, мой фоновый звук длится около 5 минут (~ 9 МБ) :)
Теги:
lwjgl
stream
playback
ogg

2 ответа

0

@Joehot200 Итак, у меня есть два музыкальных движка - java-клип и lwjgl, поэтому он не учитывает, какой из них я буду использовать :)

У меня очень похожий код на ваш (но он включает в себя декомпрессию ogg), и время загрузки по-прежнему очень длительное - я хочу прочитать мой звуковой файл и воспроизвести то, что я читаю одновременно (например, YOUTUBE). Вот мой кусок кода:

public static Clip DecodeOgg(String filename)
{
    try
    {
        File file = new File(filename);
        // Get AudioInputStream from given file.
        AudioInputStream in= AudioSystem.getAudioInputStream(file);
        AudioInputStream din = null;
        if (in != null)
        {
            AudioFormat baseFormat = in.getFormat();
            AudioFormat  decodedFormat = new AudioFormat(
                    AudioFormat.Encoding.PCM_SIGNED,
                    baseFormat.getSampleRate(),
                    16,
                    baseFormat.getChannels(),
                    baseFormat.getChannels() * 2,
                    baseFormat.getSampleRate(),
                    false);
            // Get AudioInputStream that will be decoded by underlying VorbisSPI
            din = AudioSystem.getAudioInputStream(decodedFormat, in);

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

            return clip;
        }
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }

    return null;
}
  • 0
    Вам специально нужно загрузить OGG? В моей игре есть 5-минутная музыкальная дорожка, загруженная точно таким же кодом, который я выложил выше в формате WAV. Более того, он загружается практически мгновенно.
  • 0
    Мне нужен сжатый музыкальный файл (для одного места в моей игре у меня есть два длинных файла ogg - для дня и ночи), и разница между 8 МБ и 80 МБ огромна. Проблема в том, что я загружаю распакованный файл ogg в память и затем воспроизводю его. Это настоящая проблема ...
0

Вам особенно нужно играть в файлы OGG? Если нет, есть много онлайн-конвертеров, чем конвертировать их в MP3, WAV и т.д.

Кроме того, вам нужно играть с LWJGL? Это очень возможно при использовании java по умолчанию:

static String randomName = "TreasureQuest";
public static Clip clip = null;
public static void playSound(String name) throws Exception{
    if (clip != null && clip.isOpen()) clip.close();
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("music/" + name + ".wav").getAbsoluteFile());
        clip = AudioSystem.getClip();

        clip.open(audioInputStream);
        FloatControl gainControl = 
                (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
            gainControl.setValue(0f);

        System.out.println(clip.getFrameLength() + " | " + clip.getFramePosition());
        clip.start();


}

Лично я использую это для своей игры LWJGL, и она отлично работает.

Если вы должны играть в файл OGG, и вы должны обязательно играть с LWJGL, я предлагаю вам использовать OpenAL. Здесь вы можете найти документацию для воспроизведения файлов OGG.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню