Forum: PC-Programmierung C++: Auslesen einer .wav


von Lars (Gast)


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

von Klaus W. (mfgkw)


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.

von Lars (Gast)


Lesenswert?

hmmm, wie meinst du das? Im endeffekt möchte ich, dass egal, was dort 
steht, dies auch wieder in das neue textfile geschrieben wird. Wie 
stelle ich das an?

von the other side of horst (Gast)


Lesenswert?

Du liest die Wave-Datei mit ios::binary, schreibst aber in die 
"Text"-Datei ohne dieses Flag.

Dämmert's?

von Klaus W. (mfgkw)


Lesenswert?

naja, er schreibt ja noch nichts lt. seinem Fragment.

@ Lars (Gast): Wer sagt denn, daß das Lesen stoppt?

von Lars (Gast)


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?

von ... (Gast)


Lesenswert?

&daten

Ein Pointer auf einen Pointer? Ich wette Du wolltest nur den Pointer 
selbst übergeben, also lass das & weg.

CU

von Chris L. (kingkernel)


Lesenswert?

Ich hatte mal das Problem, das beim Schreiben einer Datei alles hinter 
\0 angeschnitten wurde. Hast du mal kontrolliert, ob das auch so ist!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.