MP3 Header problem



  • AJ schrieb:

    Enthält denn der long wert den richtigen Wert? Bei 4 chars meintest du funktioniert es. Hast du anstatt dem long schon char bytes[4] verwendet??

    jo, hab ich probiert : kommt das selbe bei raus...

    @junix, öhm... ich weiß nicht mal was das ist, bitte um Aufklärung! Ist das die Anlegung der Struktur im Speicher?h ab den Free Borland Compiler, wie kann ich das da einstellen? (hab da nur die Option "align on n-bytes", aber was soll da rein?)

    danke



  • Paul W. schrieb:

    ja, das hab ich mit 4 chars gemacht (jeweils ein byte groß), da funzt alles wunderbar...

    Da hast du gesagt, dass es wunderbar funktioniert. Warum jetzt aufeinmal nicht mehr? Zeig mal wie du mit der union deine Daten einliest (Code).



  • Hoi,
    ne sorry, bei char[4] funzt es wunderbar, nur wenn ich auf die Struktur zugreife, funzt es nicht...
    sorry, hab mich irgendwie nicht richtig ausgedrückt.
    Code hab ich grad ncht mehr zur hand, habs folgender Maßen gemacht:
    - fread schreibt auf bytes
    - ich gebe FrameSync von der Struktur detail aus
    - raus kommt dabei je nach MP3-Datei 1023 (so muss es immer sein), oder 767, obwohl die ersten 12 Bits bei den Dateien immer gleich sind

    Danke



  • 😕 Es steht also in den bytes (char[4]) richtig drin, aber in der struktur nicht?!? Wie kann das denn sein??

    Etwas fällt mir noch ein. Mach dir mal eine Hilfsvariable (char oder int), die du mit 0 initialisierst. Dann kopierst du FrameSync aus deiner Struktur auf diese Hilfsvariable und gibst dann diese Hilfsvariable aus.



  • Immernoch das gleiche...
    ich glaub ich gebs auf...



  • Na wenn es mit char[4] geht, dann mach es hald damit. Musst hald dann mit >> bzw. << und & arbeiten.

    Beispiel:

    //Nur die ersten 11 Bit zeigen
    unsigned int bytes = 0xfffa;
    
    printf("%u", bytes >> 5); //bytes um 5 Bits nach rechts verschieben und dies dann ausgeben
    


  • Wenn ich das hier richtig verstehe, haben wir einen unsigned int, der 4 byte groß ist, und belegen davon nur 2 byte. Wenn man jetzt mit den einzelnen Bits arbeiten will, muss man doch wissen wie die geschrieben werden. Ich denke da an BIG und LITTLE ENDIAN (oder wie das hieß).
    Wenn ich int i = 0xFFFF schreibe kann 0x0000FFFF oder 0xFFFF0000 bei rauskommen.
    Ich habe keine Ahnung ob das weiterhelfen könnte.


Anmelden zum Antworten