2012-04-29 3 views
4

Я пытаюсь воспроизвести некоторые файлы .m4a, и я понимаю, что JAAD поддерживает только декодирование AAC, но есть песни, с которыми я могу получить sourceDataLine, а затем, когда я пытаюсь их воспроизвести, я получаю следующее:Javasound не воспроизводит файлы .m4a через JAAD (SPI)

Мы читаем: 1024 байта.

Мы читаем: 512 байт.

Мы читаем: -1 байт.

Когда не работает так:

// read from the input 
bytesRead = audioInputStream.read(tempBuffer, 0, tempBuffer.length); 

System.out.println("We read: " + bytesRead + " bytes."); 

до прочитанных байт == -1

Для этого конкретного файла, я получаю AudioFormat baseformat быть таким: MPEG1L1 48000,0 Гц, неизвестные бит на сэмпл , моно, неизвестный размер кадра, 125,0 кадров в секунду.

Затем AudioFormat decodedFormat быть таким: PCM_SIGNED 48000,0 Гц, 16 бит, моно, 2 байта/кадр, маленький обратный порядок байт

Я использую эти строки кода, чтобы сделать преобразование:

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

Я делаю что-то неправильно здесь? Я не совсем понимаю, что эта вторая строка действительно работает, но она отлично работает для декодирования файлов MP3 с использованием MP3SPI.

Я действительно ценю любое руководство здесь.

ответ

2

Проблема в том, что ваш файл содержит только 1024 + 512 байт? (Это было бы ужасно коротко для аудиофайла!) Или вопрос о форматах файлов? Я видел, как некоторые люди сталкиваются с проблемой, когда они пытаются декодировать mp3 из WAV-файла, который оказывается несовместимым с диапазоном форматов wav-файлов, поддерживаемых Java.

Я предполагаю, что вторая строка, на которую вы ссылаетесь, является созданием нового FileFormat, да? Это просто акт создания нового формата, основанного на том, что он был декодирован из вашего входного потока. Предположительно, вы будете использовать новый формат в своем воспроизведении.

Точка нового формата, вероятно, должна гарантировать, что данные будут воспроизводиться в формате, совместимом с вашей системой. В нем говорится: (1), что независимо от формата входящего кодирования будет использоваться Signed PCM. (2) будет использоваться та же частота дискретизации (моя система поддерживает только 44100, я удивлен, увидев, что вы разрешаете 48000). (3) 16 бит - это новое количество бит на выборку, независимо от количества бит, используемых в исходном исходном файле. (4) в качестве исходного файла будет использоваться одинаковое количество каналов. (5) количество каналов * 2 будет считаться размером кадра (имеет смысл, учитывая 16 бит на выборку) (6) одинаковые частоты кадров в секунду (7) порядок байтов будет малозначным , независимо от порядка ввода файлов.

Вы можете посмотреть в API этого конструктора (некоторые хорошие документации) в разделе «Сведения о конструкторе» по этой ссылке: http://docs.oracle.com/javase/6/docs/api/javax/sound/sampled/AudioFormat.html

Если вам нужно преобразовать некоторые из аудиоданных, чтобы позволить воспроизведение, а затем вещи более активно участвовать.Прочитали ли вы этот учебник по аудиофайлу & преобразование формата? http://docs.oracle.com/javase/tutorial/sound/converters.html

Надеюсь, это по крайней мере частичная помощь. Я сам не использовал JAAD, поэтому я могу понять, не слишком ли полезен этот пост.

+0

Я скоро буду выкладывать всю эту информацию, это выходные для меня, и здесь все тяжело. Спасибо за информацию, хотя! Если это закончится для меня исправлением, я отчитаю – Nico

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

  • Нет связанных вопросов^_^