cs_titicar
Messages postés
181
Date d'inscription
jeudi 30 mai 2002
Statut
Membre
Dernière intervention
19 août 2012
4 oct. 2007 à 21:11
Et oui évidemment, la souplesse de la v2, avec des balises personnalisable et de longueur variables, rendent la programmation plus compliquée. C'est pourquoi il faut connaitre la structure de la v2 pour comprendre comment l'utiliser.
Je vais essayer de faire un résumé sur la structure de la v2.3 (mais pas la v2.4 car elle se complique !). Tout cela juste pour te dire comment on récupère, de façon THEORIQUE, la longueur d'une balise 'normale'.
V2.3 est divisé en 2 grande partie:
- Le Header
- Les différentes balises.
1) Le header
Il a une longueur FIXE de 10 caractères (ou 10 bits ou 10 chiffres binaires, à ne pas confondre avec bytes [anglais] qui correspond à 1 octet [français]) :
- Les 3 premiers bits doivent être égal à "ID3" (dès lors, on est déjà dans une version v2): autrement dit, lors de la lecture du tag, si ce test est négatif, alors pas besoin d'aller plus loin : on quitte la procédure (sans oublier de 'fermer' le fichier qu'on vient d'ouvrir pour lire).
- Le 4ème et 5ème bits réprésente la version du Tag v2. Par exemple, c'est 03 et 00 pour dire ID3 v2.3.0... On passe...
- Le 6ème bit est un 'flag'... on passe aussi...
- Et les 4 derniers, donc de 7 à 10 représente la longueur TOTAL du tag v2, mais sans la taille du header. Ca représente donc la longueur total des différentes 'balises'. C'est très important car c'est dans cette longueur de zone qu'on va rechercher toutes les balises! Au delà de cette zone se trouve la partie 'audio' proprement dite qui n'a plus rien à voir avec le Tag.
D'un point de vue programmation, il va falloir travailler sur ces 4 bits pour les transformer en une seule valeur entière (donc sans virgule, à base décimale donc nos fameux 10 chiffres).
2) Les différentes balises
En fait, chaque balise est assimilé à un ensemble de 3 informations et cet ensemble est appelé 'Frame' dans la doc anglaise.
Et pour rechercher une balise, on va rechercher dans toutes les frames, LA frame contenant le nom associé à cette balise.
Chaque frame a donc 3 informations:
- Le nom de la balise: QUATRE bits uniquement, comme TALB, TIT2,...
- La longueur de la donnée associé à la balise, enregistré également dans 4 bits, qu'il faut convertir en un nombre entier (et voilà ton problème!)
- Et la donnée dont la longueur a été précisée juste avant.
CQFD! Voilà, tu connais maintenant la théorie pour connaître la longueur total d'un Tag, et la longueur d'une balise (ou d'un champ).
Je n'ai pas parlé de la conversion de plusieurs bits en une valeur décimale entière, mais peut-être le sais-tu déjà.
Oups, j'ai failli oublié : Pour scruter l'intérieur d'un fichier (surtout si l'on parle de binaire), j'espère que tu utilises plutôt un editeur hexa-décimale plutôt qu'un éditeur de texte.
titicar