Как я могу воспроизвести файл ALAW в приложении Java? - PullRequest
2 голосов
/ 23 мая 2011

Мне нужно иметь возможность воспроизводить файлы ALAW в приложении Java (для настольных компьютеров) Я пытался следовать примеру на:

Как воспроизводить звук в приложении Java

Я создал объект File из файла ALAW (который существует, согласно проверке) и отправил этот файл в метод, где первое, что происходит, это:

AudioInputStream ais = AudioSystem.getAudioInputStream(file);

Но это где выполнение останавливается, так как я получаю это исключение:

javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file

Я вижу, что есть способ конвертировать файлы ALAW, если проверка (ais.getFormat().getEncoding() == AudioFormat.Encoding.ALAW) равна true, но как мне туда попасть, если даже невозможно создать AudioInputStream?

Кто-нибудь, кто работал с файлами ALAW и знает, что мне делать?

Можно ли программно преобразовать файлы ALAW перед вызовом AudioSystem.getAudioInputStream(file)?

Мне действительно нужно сделать эту работу!

Ответы [ 2 ]

1 голос
/ 12 октября 2012

Получить существующий формат файла из вашего AudioInputStream:
путь к файлу String с путем к вашему файлу, который вы получите, например:

String filename="x.y";
File file = new File(filename);
String filepath=file.getCanonicalPath();

Затем основное преобразование выполняется:

AudioInputStream inputStream = AudioSystem.getAudioInputStream(new File(filepath));
AudioFormat format = inputStream.getFormat();
AudioInputStream convertedInputStream;

После этого ставьте условие, которое проверяет, является ли кодировка вашего файла alaw или ulaw, и конвертирует его в PCM, который может воспроизводиться SoundCard:

if ((format.getEncoding() == AudioFormat.Encoding.ULAW) || (format.getEncoding() == AudioFormat.Encoding.ALAW))
AudioFormat tmp = new AudioFormat(
AudioFormat.Encoding.PCM_SIGNED,
format.getSampleRate(),
format.getSampleSizeInBits() * 2, 
format.getChannels(),
format.getFrameSize() * 2,
format.getFrameRate(), true);
convertedInputStream = AudioSystem.getAudioInputStream(tmp,inputStream);
format = tmp;}

Этот код преобразует формат ALAW / ULAW вашего AudioInputStream в PCM_SIGNED

0 голосов
/ 23 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...