Учитывая InputStream
, называемый in
, который содержит аудиоданные в сжатом формате (например, MP3 или OGG), я хочу создать массив byte
, содержащий преобразование WAV входных данных. К сожалению, если вы попытаетесь это сделать, JavaSound выдаст вам следующую ошибку:
java.io.IOException: stream length not specified
Мне удалось заставить его работать, записав wav во временный файл, а затем прочитав его обратно, как показано ниже:
AudioInputStream source = AudioSystem.getAudioInputStream(new BufferedInputStream(in, 1024));
AudioInputStream pcm = AudioSystem.getAudioInputStream(AudioFormat.Encoding.PCM_SIGNED, source);
AudioInputStream ulaw = AudioSystem.getAudioInputStream(AudioFormat.Encoding.ULAW, pcm);
File tempFile = File.createTempFile("wav", "tmp");
AudioSystem.write(ulaw, AudioFileFormat.Type.WAVE, tempFile);
// The fileToByteArray() method reads the file
// into a byte array; omitted for brevity
byte[] bytes = fileToByteArray(tempFile);
tempFile.delete();
return bytes;
Это явно менее желательно. Есть ли лучший способ?