WaveFile aus Teilfragmenten erstellen
-
Hi an alle,
ich möchte ein WaveFile mit Direct X erstellen und zwar immer wenn der NOTIFICATION Event aufgerufen wird möchte ich diese Daten im WaveFile Speichern.
In einem Ringbuffer mit 4 Segmenten wird immer wenn ein Fragment des Buffers gefüllt wurde eine Thread aufgerufen welche dieses Ereignis bearbeitet. Nun möchte ich halt jedes einzelne Segment in einem WaveFile abspeichern, so dass ich am Schluss das ganze als Wave Datei habe. Wie könnte man da am besten rangehen?Gruß
-
Lies einen Artikel zum RIFF Datei-Format (das Format welches WAV Files verwenden).
z.B.: http://ccrma.stanford.edu/courses/422/projects/WaveFormat/Im Prinzip:
- Eine Header in die Datei schreiben (RIFF Header + "fmt" Chunk)
- Den Anfang des "data" Chunks schreiben, wobei du die Grösse erstmal Null lassen kannst
- Stück für Stück Daten an den "data" Chunk anhängen
- Wenn du fertig bist überschreibst du die Grösse im "data" Chunk mit dem korrekten Wert
Komprimierte WAV Files (sprich: alles ausser "PCM") sind komplizierter, da du hier die Audio-Daten entsprechend komprimieren müsstest, aber das hat eigentlich nichts mit dem WAV Format ansich zu tun, sondern mit dem verwendeten Kompressionsverfahren (ADPCM ist z.B. relativ einfach zu implementieren, andere viel schwieriger).
Du kannst dich aber auch nach einer Library umsehen die das für dich übernimmt. Der grösste Vorteil wäre dabei vermutlich dass solche Libraries meist mehr verschiedene Formate unterstützen. Der Aufwand zum Einbinden so einer Library bzw. zum Implementieren eines eigenen WAV-Writers wird wohl inetwa gleich gross sein (da WAV-Files Schreiben wirklich einfach ist, und man sich in jede Library auch erstmal einlesen muss).
-
So ähnlich habe ich mir das auch gedacht, nur wie mach ich das mit dem Anhängen der Daten?
-
Alles klar erledigt.
Danke für den Anstoss