shadow377
Goto Top

Auswertung von Wave Dateien

Ich will eine Wave Datei auswerten und habe mich dafür schon ein bisschen durch die Wave Spezifikationen gekämpft. Nachdem ich jetzt in etwa weiß wie der Header aufgebaut ist, wollte ich mir das ganze mal an ein paar Beispielen anschauen, wobei ich jedoch auf folgendes Problem gestoßen bin:
Nachdem ich eine Wave Datei mit dem Editor geöffnet habe, ist steht z.B. folgendes am Anfang der Datei (in diesem Fall der XP Anmeldesound aus dem Verzeichnis %windir%\Media ->wer das ganze etwas besser nachvollziehen will kann diese Datei ja mit dem Editor aufmachen):
RIFFøæ WAVEfmt    "V ˆX   dataÔæ         %  8  
]Dabei weiß ich zwar mit "RIFF", "WAVE", "fmt" etwas anzufangen, allerdings sollten dazwischen noch Werte stehen anstelle der Kästchen, Leer- und sonstigen (Sonder)zeichen. Für mich ergibt sich der Schluss, dass es sich dabei um eine falsche Interpretation des Editors handelt, der einen anderen Zeichensatz, eine andere Darstellungsform o.ä. verwenden müsste um ALLE Werte korrekt anzuzeigen.
Jetzt die konkrete Frage: Wie kann ich erstmal manuell und später auch zum programmieren unter C#.Net die "richtigen" Werte bekommen?

Danke schon im vorhinein für alle Antworten, wäre mir relativ wichtig hier (rasch) eine Lösung zu finden.

Content-Key: 67781

Url: https://administrator.de/contentid/67781

Printed on: April 16, 2024 at 20:04 o'clock

Member: bastla
bastla Sep 03, 2007 at 18:50:19 (UTC)
Goto Top
Hallo Shadow377!

Für die manuelle Vorgangsweise sollte ein beliebiger Hex-Editor (etwa tiny hexer) ausreichen ...

Grüße
bastla
Member: Shadow377
Shadow377 Sep 03, 2007 at 22:06:59 (UTC)
Goto Top
Danke für deine schnelle Antwort bastla
Ich habe den Editor mal runtergeladen und installiert. Allerdings muss ich gestehen dass ich noch nie mit einem Hex Editor gearbeitet habe und deshalb nicht so recht damit umgehen kann. Kannst du mir das bitte kurz erklären?
Prinzipiell ist mir mal aufgefallen, dass für den Wert für die Länge der Datei (abzüglich 8 Byte) 4 Byte verwendet werden, ganz wie es die Spezifikationen vorschreiben. Ich habe das ganze mal als eine Hex Zahl gesehen und umgerechnet, allerdings kommt das irgendwie so übehaupt nicht hin: F0BD0200 (Hex) = 4038918656 (Dez)
Die Dateigröße (Abmeldesound) ist allerdings 179.704 Byte und irgendwie verstehe ich nicht wie ich die zwei Zahlen in Einklang bringen soll. Man muss noch 8 Byte abziehen ok, aber selbst dann geht sich das nicht wirklich aus..
Habe ich hier einen Denkfehler, oder woran scheitert das?
Grüße Shadow377
Member: bastla
bastla Sep 03, 2007 at 22:31:44 (UTC)
Goto Top
Hallo Shadow377!

Soweit ich das auf die Schnelle gesehen habe, wird die Länge im "Little Endian"-Format gespeichert - daher ist die entsprechende Hex-Zahl 0002BDF0 = Dezimal 179696 - das passt doch ganz gut. face-smile

Grüße
bastla
Member: Shadow377
Shadow377 Sep 03, 2007 at 22:56:42 (UTC)
Goto Top
Hmm....Da ist was wahres dran. Jetzt wo du es sagst glaube ich auch mich erinnern zu können dass da was von Little Endian gestanden ist, allerdings müsste ich da nochmal genauer nachlesen.
Allerdings gibt es auch hier wieder ein Problem:
F0BD0200 (Big Endian) = 0020DB0F (Little Endian) und nicht 0002BDF0. Das Ergebnis wäre zwar relativ schön und auch das, das ich gerne sehen würde, nur ist mir leider nicht ganz klar wie ich darauf kommen soll..
Ich hoffe es handelt sich hierbei um keinen Schreib-/Denkfehler meinerseits, was ich um diese Uhrzeit auch nicht mehr ausschließen kann da ich leider schon relativ müde bin.
Grüße und nochmals Dankeschön für die bisherige Hilfe
Shadow377
Member: bastla
bastla Sep 04, 2007 at 16:13:13 (UTC)
Goto Top
Hallo Shadow377!

Du musst die Zahl byteweise betrachten, also
F0 BD 02 00
Jetzt schreibst Du einfach die 4 Bytes in umgekehrter Reihenfolge an:
00 02 BD F0
Die Nibbles musst Du nicht zusätzlich auch noch austauschen.

Grüße
bastla
Member: Shadow377
Shadow377 Sep 04, 2007 at 21:59:41 (UTC)
Goto Top
Danke für deine bisherige Hilfe bastla. Hat ganz gut geklappt und beim Little Endian hab ich das ganze leider Pro Hex Ziffer und nicht pro Byte umgedreht; danke für den Hinweis dass das ja falsch ist.
Werd mich jetzt mal weiter daran machen die Wave Datei manuell zu analysieren, gibt es gute Ideen , wie ich den Daten Teil auswerten könnte?

Weißt du (oder jemand anderer) vllt auch noch, wie ich das Ganze in ein C#.Net Programm einlesen kann und zwar so, dass es auswertbar ist (also in dem Fall wohl als Hex)?
Grüße Shadow377