He estado teniendo problemas durante los últimos días tratando de hacer que esto funcione. Pero lo que quiero es que tengamos una aplicación que envíe datos en bruto a través de la red. Luego leo estos datos binarios y quiero guardarlos en un archivo wav (cualquier audio). Podría ver la compresión más tarde.Guardando el byte de audio [] en un archivo wav
Así que el código problemático:
byte[] allBytes = ...
InputStream b_in = new ByteArrayInputStream(allBytes);
try
{
AudioFormat format = new AudioFormat(8000f, 16, 1, true, true);
AudioInputStream stream = new AudioInputStream(b_in, format, allBytes.length);
//AudioInputStream stream = AudioSystem.getAudioInputStream(b_in);
han tratado de utilizar la declaración anterior también, pero me da la excepción: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream
. Entonces, lo que creo que está sucediendo es que debido a que mi flujo de datos de audio en bruto y no tiene un encabezado de onda, ¿está lanzando una excepción?
File newPath = new File(SystemConfiguration.getLatest().voiceNetworkPathDirectory + currentPhoneCall.fileName);
if (!AudioSystem.isFileTypeSupported(Type.WAVE, stream))
{
Logger.error("Audio System file type not supported");
}
AudioSystem.write(stream, Type.WAVE, newPath);
El archivo escribir con éxito pero todo es estático, ¿Es necesario crear un encabezado de onda en la salida utilizando el algo así como this. Cuando miro el archivo wav de salida en el bloc de notas y parece tener un encabezado, ya que comienza con 'RIFF'.
¿Debo agregar un encabezado falso en mi flujo de entrada? ¿Debo simplemente crear mi propio encabezado de salida y simplemente guardarlo con un escritor binario?
Algo está mal con su publicación. Te faltan datos/formateo. – user845279
¿Qué le parece comparar con otros archivos WAVE válidos? Cuando selecciona uno de ellos, copie los datos después del encabezado y luego coloque los datos brutos en el código de su matriz allBytes. Después de ejecutar su código, simplemente puede comparar los 2 archivos de onda. Si no es lo mismo, el código es incorrecto o necesita comprender el formato de onda. –
el argumento 'length' en el constructor de' AudioInputStream' debe ser un valor de longitud de cuadro en lugar de longitud de datos. 'frame-length = data-length/channel/sample-size-in-byte' –