000
30.03.2006, 13:56 Uhr
Knief
|
Hallo zusammen!
Ich will ein MIDI-File-Header auslesen. Habe auch das passende struct dazu: struct MTHD_CHUNK
Code: |
struct MTHD_CHUNK { char id[4]; unsigned long length;
unsigned short format; unsigned short numTracks; unsigned short division; };
|
Eigentlich eine alltägliche Aufgabe, dachte ich mir, also versuchte ich es wie folgt:
Code: |
const char midiFileName[] = "D:\\Eigene Dateien\\fhbb\\SemAudio\\midi_files\\Barbara_Ann.mid"; MTHD_CHUNK MThd; fstream midiFile(midiFileName, ios::in||ios::binary);
midiFile.read(reinterpret_cast<char *>(&MThd),sizeof(MThd));
cout << hex; cout << "ID...........: " << MThd.id << endl; cout << "Length.......: " << MThd.length << endl; cout << "Format.......: " << MThd.format << endl; cout << "Num of Tracks: " << MThd.numTracks << endl; cout << "Division.....: " << MThd.division << endl;
cin.get();
|
Ausgabe sollte sein: ID...........: MThd Length.......: 00000006 Format.......: 0001 Num of Tracks: 0013 Division.....: 0078
Ist aber: ID...........: MThd Length.......: 6000000 Format.......: 100 Num of Tracks: 1300 Division.....: 7800
Die Bytes werden verkehrt rum auslgelesen! Ich kann sie zwar auf mühsame weise einzeln aus dem File holen und mit Bit-Shifting die richtigen Zahlen erstellen, aber der Sinn von so einem struct sollte doch sein, dass man schön die Datei reintröpfeln kann und dann seine Informationen kriegt, oder? Gibts ne möglichkeit, die HI- und LOBytes umzukehren? Evtl. andere Methoden um Dateien auszulesen, wo das besser funktioniert? Benutze .NET.
merci&gruss yves Dieser Post wurde am 30.03.2006 um 13:56 Uhr von Knief editiert. |