Speichern von Audio-Byte [] in einer WAV-Datei

9

Ich habe in den letzten Tagen ein bisschen Ärger gehabt, als ich versucht habe, das zum Laufen zu bringen. Aber was ich will, ist eine Anwendung, die Rohdaten über das Netzwerk sendet. Ich lese dann diese Binärdaten ein und möchte sie in eine WAV-Datei (beliebige Audio-Datei) speichern. Könnte später auf Kompression schauen.

Also der problematische Code:

%Vor%

Habe versucht, die obige Anweisung zu verwenden, aber ich bekomme die Ausnahme: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream . Also, was ich denke, ist passiert, dass, weil mein Stream rohe Audiodaten ist und keinen Wave-Header hat, dies eine Ausnahme auslöst?

%Vor%

Die Datei schreibt erfolgreich, aber es ist alles statisch. Muss ich einen Wave-Header auf der Ausgabe erstellen, indem ich etwas wie dies . 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ären Writer speichern?

    
user1434177 12.06.2012, 06:15
quelle

3 Antworten

2

Also habe ich es am Laufen bekommen, nicht wirklich sicher warum, aber das ist der Code, der funktioniert:

%Vor%

Also müssen es meine signed / unsigned / Little Endian Einstellungen gewesen sein. Am Ende habe ich die Daten in einer Binärdatei gespeichert. Dann importieren Sie diese Datei als Rohdaten in Dreistigkeit. Das hat mir alles außer der Rate erzählt, die ich bereits neu bin. Das einzige Problem, das ich jetzt habe, ist mit der Header-Berechnung zu tun. Ich speichere die binären Daten, die eine 4 Sekunden wav erzeugen, aber es hat immer nur 2 Sekunden Sound. Es ist, als würde es meine Kopfzeile falsch berechnen. Ich bin mir nicht sicher, ob es mit der Rahmenlänge zu tun hat, die LiuYan erwähnt hat.

Wenn ich eine Array-Länge von 160 habe. Bedeutet das, dass ich eine Framelength von 10 habe? 160/1/16. Wenn ich dies tue, dann speichere ich nur 10 Bytes an Daten in meiner Binärdatei.

    
user1434177 14.06.2012, 00:00
quelle
1

Es ist schwer von Ihrer Beschreibung zu wissen, wo der Fehler ist, aber um Ihre Fragen zu beantworten, wenn Sie beim Öffnen der Datei 'RIFF' sehen, bedeutet das, dass es eine Kopfzeile hat. Der Versuch, einen eigenen Header zu erstellen, ist möglich, aber ein wenig zeitaufwändig (und unnötig, da Sie einen haben).

Jetzt, beim Lesen, ist es am sichersten, das Format aus der Datei selbst zu bekommen, anstatt es manuell zu spezifizieren - das wird weniger fehleranfällig sein. Dafür gibt es einen Beispielcode:

Ссылка

Beim Schreiben sagen Sie "Die Datei schreibt erfolgreich, aber alles ist statisch" - haben Sie das mit etwas anderem als Ihrem eigenen Java-Code bestätigt? Vielleicht verstehe ich das nicht richtig, aber es hört sich so an, als würden Sie versuchen, WAV-Dateien mit frischem Java-Code aufzunehmen und wiederzugeben, und wenn das der Fall ist, ist es schwer zu sagen, ob etwas mit der Aufnahme oder der Wiedergabe schief geht.

>

Sie sollten mit einem Vanilla-Format (16 Bit, Stereo, unkomprimiert, 44.100 kHz) beginnen, damit Sie die Datei im Media Player oder Quicktime oder etwas öffnen und überprüfen können, ob die Aufnahme funktioniert hat. Sobald das funktioniert, können Sie versuchen, die SR usw. zu ändern. Hier ist ein Beispielcode für die Aufnahme. Beginne damit, vergewissere dich, dass es funktioniert und gehe dann zu etwas Komplexem:

Ссылка

    
Bjorn Roche 12.06.2012 15:05
quelle
0

Versuchen Sie, die Codierung und Bildgröße und Bildfrequenz von AudioFormat einzustellen.

%Vor%     
Ernest Kuttubaev 08.12.2015 04:13
quelle

Tags und Links