Binärdatei im Zweierkomplement einlesen(Vorzeichen-Problem)
-
Hallo!
Ich hoffe mal, ihr könnt mir helfen. Ich muss für meine Studienarbeit eine WAV-Datei einlesen, um diese dann weiter verarbeiten zu können. Im Moment scheiter ich allerdings noch an den Format in dem die Samples in der Datei stehn. Bis jetzt hab ich folgendes versucht:
void datenlesen(long start,long samples,const char *datei,long *data, long aufloesung){ std::ifstream dat; //Stream Definieren dat.open(datei, std::ios::in|std::ios::binary); //Datei öffnen if (!dat) { //existiert die Datei? std::cout << "Fehler beim Öffnen der Datei!" <<std::endl; exit(2); } dat.seekg(start,std::ios::beg); int i; for (i=0;i<samples;i++){ // Genügend Daten für die FFT einlesen data[i]=0; dat.read(reinterpret_cast<char*>(&data[i]),aufloesung); } dat.close(); return; }Prinzipiell liest er die Werte schon ein, allerdings interpretiert er jedes Sample als positiven Wert. Soweit ich das bis jetzt recherchieren konnte, stehen die Werte als 24-Bit-Zweierkomplement(Little Endian-codiert) im Wav-file. Gibts es eine Standardmöglichkeit, solche Werte richtig auszulesen, oder muss ich die nachträglich noch umwandeln(Kann ich grad nicht glauben)?
Danke für eure Mühe!
-
dataist ein Zeiger auf ein Array von mindestenssamplelongs!?
Undaufloesungist was? 3? Und ein long ist wie groß? Im Rest stehen dann Nullen und das wird in little-endian wie interpretiert? :pUnd die Konvertierungen der Endianess müsstest du selbst machen... aber das ist recht einfach, da dein System wohl auch Little-Endian ist

(Aber auch sonst wäre das bytes-tauschen nicht so wild.)
-
Öhmm...ja, genau...da hätte man auch selbst mal drauf kommen können. Naja, die alte Sache mit dem Wald und den Bäumen. Danke!