Я делаю игру с LWJGL 3 и впервые изучаю библиотеку OpenAL. Я собираюсь включить длинные аудиофайлы, и я решил, что OGG будет использоваться для аудио, так как в противном случае musi c занял бы много места.
Что я не делаю знаю, однако, что-нибудь о том, как извлечь аудиоданные из OGG и поместить их в буферы OpenAL, которым требуется ShortBuffer
подписанных коротких сэмплов PCM.
Я уже пытался ищите ответы, но все, что я нахожу, кажется устаревшим или неуместным для моего случая.
Итак, подведем итог: у меня есть файлы OGG, и я должен иметь возможность загружать их в буферы OpenAL. Также необходима возможность потоковой передачи из файлов (в этом случае считывайте файлы по одному куску за раз в двойной буфер), так как задействован musi c.
Пример:
ShortBuffer samples = readOggSamplesToBuffer(someInputStream);
int bufferId = AL10.alGenBuffers();
// OpenAL wants the samples as signed short
AL10.alBufferData(bufferId, AL10.AL_FORMAT_MONO16, samples, 44100);
Где функция readOggSamplesToBuffer
будет выглядеть примерно так:
private ShortBuffer readOggSamplesToBuffer(InputStream in) {
// This theoretical class is what I need – something that
// can read the data from the OGG file.
OggReader reader = new OggReader(in);
// Very simplified example
ShortBuffer buffer = BufferUtils.createShortBuffer(reader.getSampleCount());
buffer.put(reader.samplesAsShortArray());
return buffer;
}