2013-03-13 3 views
6

У меня есть следующий фрагмент кода:Java OGG конверсии WAV

File file = new File(sourceFile); 
AudioInputStream in = AudioSystem.getAudioInputStream(file); 
AudioInputStream din = null; 
AudioFormat baseFormat = in.getFormat(); 

AudioFormat decodedFormat = new AudioFormat(
       AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 
       16, baseFormat.getChannels(), baseFormat.getChannels() * 2, 
       baseFormat.getSampleRate(), false); 

din = AudioSystem.getAudioInputStream(decodedFormat, in); 
AudioSystem.write(din, AudioFileFormat.Type.WAVE, new File(targetFile)); 

Я написал этот код transfrom MP3 и OGG файлы в WAV файлы. Эти форматы не поддерживается Java по умолчанию, как я понимаю, так что мне пришлось добавить различные банки к моим классам, как описано здесь:

http://www.javazoom.net/mp3spi/documents.html

http://www.javazoom.net/vorbisspi/documents.html

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

java.lang.IllegalArgumentException: Unsupported conversion: PCM_SIGNED 44100.0 Hz, 16 bit, stereo, 4 bytes/frame, little-endian from VORBISENC 44100.0 Hz, unknown bits per sample, stereo, 1 bytes/frame, 16000.0 frames/second 

Теперь это брошено только при получении декодированного InputStream себя, что означает, что файл был разобран OGG успешно.

AudioSystem.getTargetEncodings(sourceFormat) 

Приведенный выше код не возвращает никаких значений при обработке файлов MP3 или OGG. Единственное различие заключается в том, что MP3 работает отлично.

Я добавил все банки, на которые ссылается предыдущая ссылка, необходимая для преобразования ogg, за исключением последней версии jogg-0.0.7.jar, потому что я не смог ее найти.

Я пробовал разные решения, такие как JAVE, но мне нужно, чтобы он работал и на MAC, а JAVE не будет работать на MAC без какой-либо специальной реализации.

Есть ли у кого-нибудь предложения, что может вызвать проблему? Может ли быть какое-либо обходное решение для преобразования OGG-файла в WAV?

EDIT:

Оу вау я понял, что проблема ... После прочтения Everthing на руководстве, я узнал, что, используя два различных вида Спиша (как в этом случае MP3 и OGG), может привести к проблемы. Я удалил зависимость spi maven MP3, и ошибка исчезла. Думал, что результат wav в основном пуст. Любые предложения по этому поводу? Я буду рад, если смогу преобразовать OGG в WAV для работы, я могу преобразовать MP3 по-другому.

Моя ПОМ зависимость выглядит следующим образом:

<dependency> 
    <groupId>com.googlecode.soundlibs</groupId> 
    <artifactId>vorbisspi</artifactId> 
    <version>1.0.3-1</version> 
</dependency> 

Эта загрузка Я думаю все банки мне нужно сделать OGG преобразования работы. (Смотрится не.)

+1

Это то, что вы хотите? https://poi1.googlecode.com/files/jogg-0.0.7.jar – longhua

+0

Я обнаружил, что jar я просто не мог найти зависимость от maven, поэтому я не хотел его использовать. Я попытался загрузить его в classpath из папки lib, но без bueno. Sry Я много тратил впустую с этим вопросом, я забыл упомянуть об этом. –

+1

Добавить tritonus_jorbis-0.3.6.jar (http://tritonus.org/tritonus_share-0.3.6.jar) может правильно преобразовать OGG в WAV. Не знаю, почему. – longhua

ответ

2

Используйте tritonus_jorbis-0.3.6.jar для замены vorbisspi1.0.2.jar.

При декодировании оригинального AudioInputStream, AudioSystem получает все SPI FormatConversionProvider и проверяет один за другим, пока не найдет тот, который может работать. Поэтому порядок классового пути важен.

Проверьте свой путь к классу, чтобы убедиться, что используется «org.tritonus.sampled.convert.jorbis.JorbisFormatConversionProvider». Проверяйте каждый JAR в пути к классам; найдите в нем следующий файл. Или просто поместите tritonus_jorbis-0.3.6.jar в самом начале пути к классам.

META-INF\services\javax.sound.sampled.spi.FormatConversionProvider 

О том, как указать путь к классам в порядке мавена, проверить этот пост: Maven classpath order issues.

+0

Я пробовал это, это не помогло, или просто не смог заставить его работать. : ( –

+0

Какой у вас JAR в вашей библиотеке? – longhua

+0

Я отредактирую свой вопрос, вы увидите мою зависимость от maven. Я полностью очистил все остальное, поэтому ничто не может конфликтовать ни с чем. (Например, mp3 spi) –

1

Собственно, вы можете использовать как mp3spi, так и vorbisspi вместе. Вам просто нужно убедиться, что Maven будет использовать правильную версию tritonus-share. Если вы полагаетесь на механизм транзитивной зависимости Maven, у вас будет доля tritonus-share 0.3.7-1, которой не хватает класс org.tritonus.share.sampled.convert.TMatrixFormatConversionProvider. Вот что ломает ворбисспи.

Мне просто нужно было явно добавить зависимость от tritonus-share 0.3.7-2 к моему pom.xml, и теперь обе игры ogg и mp3 работают через Java sound API.

Смотрите мой блог подробности: http://odoepner.wordpress.com/2013/07/19/play-mp3-or-ogg-using-javax-sound-sampled-mp3spi-vorbisspi/

0

Вы могли бы хотеть попробовать FFsampledSP (часть SampledSP).

Реализация на основе FFmpeg для Win и OSX, которая реализует интерфейсы javax.sound.sampled. OGG, FLAC и т. Д. Это в основном тот же декодер, что и в других приложениях FFmpeg (например, проигрыватель VLC и многие другие).

Смежные вопросы