Dado un InputStream
llamado que contiene datos de audio en un formato comprimido (como MP3 u OGG), deseo crear una matriz byte
que contenga una conversión WAV de la entrada datos. Por desgracia, si intenta hacer esto, JavaSound le da el siguiente error:Convertir flujo de audio a matriz de bytes WAV en Java sin archivo temporal
java.io.IOException: stream length not specified
me las arreglé para conseguir que funcione escribiendo el wav en un archivo temporal, y luego leerlo de nuevo, como se muestra a continuación:
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;
Esto es obviamente menos deseable. ¿Hay una mejor manera?
Tendré que intentarlo. Puede ser un poco antes de que pueda probarlo, por lo que no puedo aceptar la respuesta en este momento. Sin embargo, lo votaré mejor. –