C++: Auslesen einer .wav

Gast #1205079
Lesenswert?

Hallo Leute,

ich habe ein Problem beim Auslesen einer wav Datei. Ich möchte im ersten 
Schritt nur den Header auslesen. Dieser ist 44Byte lang und soll in 
einem Buffer gespeichert werden und in ein neues Textdokument geschieben 
werden. Mein Code sieht folgendermaßen aus:
1
char *buffer;
2
buffer = new char [44];
3
fstream lut_file, wav;
4
wav.open("test2.wav", ios::in | ios::binary);
5
wav.read(buffer,44);
6
lut_file.open("C:\\TEST.txt", ios::out);

In der wav. Datei kommt nach dem einleitenden "RIFF" eine Zahl und 
danach Leerzeichen. Und genau bei diesem leerzeichen stoppt das einlesen 
und es wird nur "RIFF4" in die txt geschrieben. Können da irgendwelche 
Steuerzeichen versteckt sein? Wie kann ich den Inhalt einer Datei 
auslesen und wirklich alle Zeichen auslesen?

Gruß

Lars
#1205090
Lesenswert?

Kann es sein, dass korrekt eingelesen wird, und nur GLAUBST, es würde 
nach RIFF aufhören? Schließlich kommt danach ja eine Binärzahl, die 
wahrscheinlich ein Nullbyte enthält. Wenn du jetzt buffer als 
nullterminierten String betrachtest, endet der dort natürlich.
Gast #1206518
Lesenswert?

Ok, ich habe das Problem gelöst, es lag an dem von Klaus genannten 
Problem! Vielen Dank dafür schonmal:)
Nun habe ich ein weiteres Problem, Dabei geht es um die Arbeit mit 
Zeigern:
1
short *daten;
2
long buffersize;
3
    
4
buffersize = w.SubChunk2Size / 4;  
5
daten = new short [buffersize];
6

7
wav.seekg(44, ios::beg);
8
wav.read((char*)&daten, buffersize * 2);

In dem Code soll ein Array (daten) im Speicher erzeugt werden, in 
welches die einzelnen Samples aus der .wav Datei abgespeichert werden. 
Beim debuggen stürzt VS immer ab, mit unterschiedlichen Fehlermeldungen. 
Meistens Meldungen, die Stackviolation oder ähnliches erwähnen. Hab ich 
da nen Denkfehler?

Achso, buffersize liegt meistens so im Bereich von 100000. Damit würden 
im Speicher 200kByte reserviert werden. Das dürfte doch eigentlich auch 
kein Problem sein, oder?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren