Ich hatte in den letzten paar Tagen ein bisschen Ärger, als ich versuchte, das zum Laufen zu bringen. Aber was ich will, ist eine Anwendung, die Rohdaten über das Netzwerk sendet. Ich lese diese Binärdaten dann ein und möchte sie in einer WAV-Datei (jeder Audio-Datei) speichern. Könnte später auf Kompression schauen.Speichern von Audio-Byte [] in eine WAV-Datei
So ist die problematische Code:
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);
Haben Sie versucht auch die obige Aussage zu verwenden, aber ich bekomme die Ausnahme: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream
. Was ich denke ist, dass mein Stream rohe Audiodaten ist und keinen Wave-Header hat, was eine Ausnahme darstellt?
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);
Die Datei schreiben nicht erfolgreich, aber es ist alles andere als statisch, Benötige ich eine Wave-Header auf den Ausgang wie this mit dem etwas zu schaffen. Wenn ich mir die ausgegebene wav-Datei in Notepad anschaue, scheint sie eine Kopfzeile zu haben, da sie mit 'RIFF' beginnt.
Muss ich einen falschen Header in meinen Eingabestream einfügen? Sollte ich nur meinen eigenen Ausgabe-Header erstellen und ihn einfach mit einem Binär-Writer speichern?
Etwas stimmt nicht mit Ihrer Post. Ihnen fehlen Daten/Formatierung. – user845279
Wie wäre es mit anderen gültigen WAVE-Dateien zu vergleichen? Wenn Sie eines von ihnen auswählen, kopieren Sie die Daten nach dem Header und legen Sie dann die Rohdaten auf Code in Ihr Array allBytes. Nachdem Sie Ihren Code ausgeführt haben, können Sie einfach die 2 Wave-Dateien vergleichen. Wenn es nicht das gleiche ist, dann ist entweder Code schlecht oder du musst das Wave Format besser verstehen. –
Das 'length'-Argument im Konstruktor von' AudioInputStream' sollte anstelle der Datenlänge ein Framelängenwert sein. 'frame-length = Datenlänge/channel/sample-size-in-byte' –