Convertir les pistes audio pour WAV tableau d'octets en Java sans les fichiers temp

Donné un InputStream appelé in qui contient des données audio dans un format compressé (MP3 ou OGG), je souhaite créer un byte tableau contenant un WAV conversion des données d'entrée. Malheureusement, si vous essayez de le faire, JavaSound mains, vous avez l'erreur suivante:

java.io.IOException: stream length not specified

J'ai réussi à le faire fonctionner par écrit le wav en un fichier temporaire, puis de le lire, comme indiqué ci-dessous:

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;

C'est évidemment moins souhaitable. Est-il un meilleur moyen?

OriginalL'auteur Robert J. Walker | 2008-10-13