Konvertieren Sie audio-stream in WAV byte-array in Java ohne temp-Datei

Gegeben InputStream genannt in enthält Audiodaten in einem komprimierten format (wie MP3 oder OGG), ich möchte erstellen Sie eine byte array mit einer WAV Konvertierung der Eingabedaten. Leider, wenn Sie versuchen, dies zu tun, JavaSound Hände Sie die folgende Fehlermeldung:

java.io.IOException: stream length not specified

Habe ich es geschafft es zum laufen zu bringen, indem Sie die wav-in eine temporäre Datei, dann Lesen Sie es wieder an, wie unten gezeigt:

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;

Dies ist natürlich weniger wünschenswert. Gibt es einen besseren Weg?

Schreibe einen Kommentar