WAVE-Format lesen

Hallo zusammen!

ich will einen Algorithmus schreiben, der WAVE-Dateien lesen und schreiben kann. Im Canonical Format m"usste das relativ einfach m"oglich sein.

Zum rumprobieren hab ich mal mit „'Sound Recorder“’ (Ubuntu) eine sehr kurze Audiodatei erzeugt. Im Kopf sollte an zwei Stellen die Dateil"ange angegeben werden. Direkt am Anfang (4. bis 7. Byte) sollte Dateil"ange - 8 stehen.

Steht da aber nicht: Die Datei ist 35 244 Bytes lang, es wird aber

36 0 255 127

angegeben. Dies entspricht einer Dateil"ange von 36 * 256^3 + 0 * 256^2 + 255 * 256 + 127 = 604 045 183, was etwas v"ollig anderes ist, es m"usste 35 244 - 8 = 35 236 sein. Auch wenn man die vier Ziffern in der umgekehrten Reihenfolge liest, kommt nicht das richtige raus. (Au"serdem sehen die Zahlen 255 und 127 nicht sonderlich zuf"allig aus).

Ich wei"s nicht, ob die Datei im kanonischen Format ist.
Wenn jemand ein unnkompliziertes Programm (f"ur Ubuntu) kennt, mit dem man Audiodateien in beliebige Formate transferrieren kann, kann ich das auch gebrauchen.

Vielen Dank schonmal,

Tobias

Hallo Tobias!

ich will einen Algorithmus schreiben, der WAVE-Dateien lesen
und schreiben kann.

Gut.

Im Canonical Format m"usste das relativ einfach m"oglich sein.

„Canonical“? Nie gehört. Was soll das sein bitte???

Im Kopf sollte an zwei
Stellen die Dateil"ange angegeben werden.

Die Dateilänge wird, genau genommen, nirgends angegeben.
Es gibt drei Längen-Einträge:

4-7 Dateilänge - 8
16-19 Länge des folgenden Chunk's (= Abschnitt, meist 16)
40-43 Länge der folgenden Klangdaten

Direkt am Anfang (4. bis 7. Byte) sollte Dateil"ange - 8 stehen.

Das schon.

Steht da aber nicht: Die Datei ist 35 244 Bytes lang, es wird
aber
36 0 255 127
angegeben.

Da hat das (schreibende )Proggy wohl Mist gemacht.

Dies entspricht einer Dateil"ange von 36 * 256^3 +
0 * 256^2 + 255 * 256 + 127 = 604 045 183, was etwas v"ollig
anderes ist, es m"usste 35 244 - 8 = 35 236 sein.

Ich würde das nicht nach Big-Endian rechnen, aber du kannst dich beim Autor des Programms beschweren, :smile:

Auch wenn
man die vier Ziffern in der umgekehrten Reihenfolge liest,
kommt nicht das richtige raus.

S.o. Du beginnst immer mit dem Low-byte, die *.wav benutzt ja Little-Endian:
http://de.wikipedia.org/wiki/Little_Endian
Das gibt bei mir 2,147 Mia., also sicher ein bisschen mehr, als das Ding wirklich hat…

(Au"serdem sehen die Zahlen 255
und 127 nicht sonderlich zuf"allig aus).

Das müssen sie m.E. nicht, aber den richtigen Wert sollte dieser Knilch schon hinschreiben.

Dein Problem ist also nicht so sehr der Algo, den hast du ja. Dein Problem ist ein Proggy, das *.wav mit falschen Werten schreibt.
Der Header (Kopf) hat übrigens praktisch immer 44 Bytes (in 99 von 100 Fällen), dann geht es los mit den Klangdaten.
Ist die Frage damit beantwortet?

lG
Martin B