Как я могу декодировать данные OGG vorbis из ByteBuffer? - PullRequest
0 голосов
/ 21 октября 2010

Библиотеки, которые я основал до сих пор, имеют только методы для декодирования из файла или InputStream. У меня есть ByteBuffer с данными OGG vorbis, и мне нужно, чтобы он был декодирован в PCM без необходимости сначала записывать его в файл.

Ответы [ 2 ]

3 голосов
/ 21 октября 2010

Кажется, есть 2 части этой проблемы.1) Получение Java Sound для работы с форматом OGG Vorbis.2) Избегание файла.

Для (1) Java Sound API позволяет добавлять дополнительные форматы через интерфейс поставщика услуг.Идея состоит в том, чтобы поместить кодировщик / декодер в Jar-файл и использовать стандартный путь и формат файла для определения класса, который выполняет кодирование / декодирование.

Для (2) это просто вопрос поставкиInputStream и требуемый AudioFormat для соответствующих методов статических функций AudioSystem.EG (псевдокод ..)

byte[] b = byteBuffer.array();
ByteArrayInputStream bais = new ByteArrayInputStream(b);
InputStream is = new InputStream(bais);
AudioInputStrream aisOgg = AudioSystem.getAudioInputStream(is);        
AudioInputStrream aisPcm = AudioSystem.
    getAudioInputStream(pcmAudioFormat, aisOgg);
1 голос
/ 21 октября 2010

Вы можете использовать ByteArrayInputStream, который является подклассом InputStream.Если ваш поток очень большой, вам, вероятно, придется записать в файл.

...