Speichern von audio-byte [], um eine wav-Datei

Wurden mit ein wenig Mühe in den letzten Tagen versucht, diese zu arbeiten. Aber was ich sagen will ist, wir haben eine Anwendung, die sendet roh-Daten über das Netzwerk. Dann Las ich diese Binärdaten in und möchten, speichern Sie es in wav(alle audio) Datei. Aussehen könnte bei der Kompression höher.

Also den problematischen 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 versucht, die obige Aussage als gut, aber ich bekomme die Ausnahme: javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from stream. Also, was ich denke passiert, ist, dass, weil mein stream ist raw-audio-Daten und nicht über einen wave-header dies ist eine Ausnahme zu werfen?

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 ist erfolgreich zu schreiben, aber es ist alles statische, brauche ich zum erstellen einer wave-header in die Ausgabe mit dem so etwas wie diese. Wenn ich mir den ausgegebenen wav-Datei in Editor, und es scheint, ein Kopf, Sie beginnt mit 'RIFF'.

Muss ich hinzufügen gefälschte header in mein input-stream? Sollte ich einfach meine eigenen Ausgabe-header und speichern Sie ihn einfach mit einem binären Schriftsteller?

  • Etwas ist falsch mit Ihrem post. Sie sind fehlende Daten/formatieren.
  • Wie etwa im Vergleich zu anderen gültigen WAVE-Dateien? Wenn Sie eines von Ihnen auswählen, kopieren der Daten nach dem header und dann die raw-Daten auf code, um das array allBytes. Nach der Ausführung Ihres Codes können Sie einfach vergleichen die 2 wave-Dateien. Wenn es nicht die selbe ist, dann ist entweder der code ist schlecht oder Sie brauchen, um zu verstehen, wave-format beter.
  • die length argument im Konstruktor von AudioInputStream sollte eine frame-Länge-Wert anstelle der Daten die Länge. frame-length = data-length / channel / sample-size-in-byte
  • Hallo Liu Yan. Ich habe versucht, den Rahmen der Länge, aber es machte es noch schlimmer. Es endete etwas wie nichts, außer den Kopf in die wav-Datei, wobei die binären Daten. Hätten Sie etwas dagegen, setzen Sie Klammern. ist es : frame-Länge = ( Daten-Länge / Kanal ) / sample-size-in-bytes oder frame-Länge = ( Daten-Länge * sample-size-in-bytes) / Kanal
InformationsquelleAutor user1434177 | 2012-06-12
Schreibe einen Kommentar