PHP - ID3-Tags, Header-Parse Problem

  • Hallo,

    im Rahmen meines Music-Manager Projektes baue ich grade eine PHP-Klasse um ID3-Tags aus MP3's herauszulesen. Soweit kein problem, es existiert ja ein Standard, der alles genau erklaert. Jetzt haenge ich aber schwer an einer Stelle, wo ich den Header des ID3-Tags, speziell die Groesse parsen will.

    Code
    The ID3v2 tag header, which should be the first information in the file, is 10 bytes as follows:  
    ID3v2/file identifier   "ID3" 
    ID3v2 version           $03 00
    ID3v2 flags             %abc00000
    ID3v2 size              4 * %0xxxxxxx
    The first three bytes of the tag are always "ID3" to indicate that this is an ID3v2 tag, directly followed by the two version bytes. The first byte of ID3v2 version is it's major version, while the second byte is its revision number. In this case this is ID3v2.3.0. All revisions are backwards compatible while major versions are not. If software with ID3v2.2.0 and below support should encounter version three or higher it should simply ignore the whole tag. Version and revision will never be $FF. 
    The version is followed by one the ID3v2 flags field, of which currently only three flags are used.  
    [...]

    http://id3.org/id3v2.3.0#head…9d93585e2652b0b

    Jetzt ist die Frage, wie zum Teufel (xD) ich diese 4 Bytes "size" parsen soll.

    bindec($sizeString);

    Gibt 0 Zurueck. In jedem Fall, also bei 10-15 getesteten MP3's

    var_dump($sizeString);

    Gibt diese komischen Zeichen zurueck, die Binaer-Daten representieren.
    (Also

    <?>

    Als ein Zeichen, man hat sowas sicher schon gesehen)

    Mir ist klar, dass es dafuer schon fertige Klassen gibt (Google Reader, diverse Perl klassen, fertige Implementationen, usw.) aber ich wuerds gerne selber schreiben. In dem o.g. fertigen Code sehe ich die Stelle, wo ausgelesen wird nie. Was bei der PHP-Klasse Google-Reader daran liegt, dass der Code zu 90% aus

    functuion name($param) { Return next_function($param) }

    besteht. Ansonsten beherrsche ich leider kein LISP und meine Perl-Kenntnisse sind noch zu mager um da zu klauen.

    Ich hoffe man kann mir hier helfen.

    Gruss
    crAzywuLf
    :D

  • Wenn deine Perl-Kenntnisse nicht reichen, dann sieh' dir doch mal die PEAR-Klasse MP3_ID an: http://pear.php.net/package/MP3_ID Entweder du siehst dir die entsprechenden Funktionen an oder du nutzt die Klasse, was bestimmt nicht schlecht wäre (auch, wenn du das unbedingt selber schreiben willst)

  • Danke soweit,

    aber das loest mein Problem leider nicht. In der Klasse werden ID3v1 Tags gelesen.

    "The class offers methods for reading and
    writing information tags (version 1) in MP3 files."

    mit fseek($fh, -128) usw.

    Ich haette gerne ID3v2.3.0 gelesen.

    MfG,