- DiscId
-
Le DiscId est un identifiant calculable pour tout CD Audio. Cet identifiant est un nombre dont la valeur dépend du nombre de pistes sur le CD, et de la position de chaque piste.
Lors de l'extraction des pistes audio-numériques d'un CD audio, il est souhaitable que le nommage des fichiers obtenus soit fait à partir du nom de l'album, des titres des chansons, etc... Afin d'automatiser ce renommage il faut :
- une base de données contenant les informations : nom et genre de l'album, titres des pistes, année de parution...
- un identifiant propre à chaque album, servant de clé pour accéder à la base données.
Le DiscId est l'identifiant utilisé pour accéder aux bases de données CDDB et FreeDB, accessibles sur Internet. Il est utilisé par de nombreux logiciels pour nommer les fichiers audio-numériques. Les informations obtenues peuvent également être écrites dans les fichiers musicaux, sous forme de tags.
le DiscId est un nombre entier, codé sur 32 bits, représenté en hexadécimal sur 8 caractères (au besoin, il faut ajouter des caractères "0" en tête).
Il ne faut pas confondre le DiscId et l'ISRC. Ce dernier est attribué par un organisme officiel, de plus il y a un code ISRC par piste alors que le DiscId identifie l'ensemble du CD. De même le DiscId n'a aucun rapport avec le code-barres du CD.
Sommaire
Comment est-il calculé ?
Pour calculer le DiscId il faut disposer des informations suivantes :
- la durée totale du disque ;
- le nombre de plages du disque ;
- la position de chaque plage, depuis le début du disque.
La durée de chaque plage doit être exprimée au format MSF (Minute/Second/Frame). La TOC du CD doit donc être lue dans ce format.
La durée totale du disque est la différence entre l'offset (la position) du lead-out (ensemble des blocs non-utilisés du CD) et l'offset de la première plage (usuellement 2 secondes).
Le calcul du DiscId ne tient compte que des minutes et des secondes : le nombre de frames est inutilisé.
L'algorithme est expliqué dans un howto téléchargeable sur le site de freedb.
Écrire un logiciel qui calcule le DiscId suppose de pouvoir lire la TOC du CD. Cette structure ne se présente pas sous la forme d'un fichier qu'on pourrait accéder par exemple depuis l'explorateur Windows. Il faut pouvoir accéder au CD à un plus bas niveau.
Exemple de calcul
La position de chaque plage doit être convertie en secondes, puis il faut faire la somme des chiffres de la durée obtenue. Ci-dessous un exemple pour l'album The Seeds Of Love de Tears For Fears, dans une édition comportant 4 plages supplémentaires (bonus).
plage position (mn:sec) position en secondes position : somme des chiffres 1 00:02 2 2 2 06:33 393 15 3 15:05 905 14 4 21:25 1285 16 5 26:16 1576 19 6 31:49 1909 19 7 38:02 2282 14 8 45:10 2710 10 9 49:37 2977 25 10 52:54 3174 15 11 57:32 3452 14 12 61:05 3665 20 13 = lead-out 65:22 3922
Il faut en premier calculer la somme de la dernière colonne (uniquement les plages, pas le lead-out) : S = 183.
Puis il faut calculer la durée totale du disque : T = position du lead-out - position de la première plage = 3920.
On a également besoin du nombre de plages : N = 12.Le DiscId se calcule alors avec la formule suivante :
DiscId = ((S modulo 255) * 16777216) + (T * 256) + N
Avec notre exemple on obtient 3071234060, soit B70F500C en hexadécimal : c'est le DiscId de l'album.
Ce calcul n'est pas trivial. La première plage n'est pas forcément à l'offset 00:02, une piste de données peut décaler le lead-out, etc... Le site www.freedb.org (voir les Liens externes, ci-dessous) met à disposition une image de test utilisable pour valider une application calculant le DiscId. Il faut graver cette image sur un CD vierge puis comparer le DiscId calculé avec celui indiqué dans le fichier texte fourni.
Le DiscId est-il unique ?
Non ! Du fait de l'algorithme utilisé, deux disques différents peuvent avoir le même DiscID. L'algorithme pouvant être apparenté à une fonction de hachage, c'est un problème classique de collision.
Inversement, 2 éditions différentes d'un même disque peuvent avoir des DiscId différents.
Le MCI de Windows contient un bug se produisant lors de l'extraction d'un CD Extra (c'est-à-dire avec une ou plusieurs pistes de données) : les plages de données sont ignorées. Les logiciels utilisant cette interface peuvent donc calculer un DiscId incorrect pour de tels CD. Cela provoque l'apparition de plusieurs DiscId pour le même CD dans les bases de données FreeDB et CDDB.
Tags ID3
Dans la version 2.30 des tags ID3, il n'existe pas de tag pour enregistrer le DiscId dans un fichier mp3. Par contre il est possible de stocker toute la TOC du CD (804 octets) à l'aide du tag MCDI (Music CD Identifier). La documentation officielle de l'ID3 indique clairement que le lien avec les bases CDDB/FreeDB doit être fait via le tag MCDI. Il est donc peu probable qu'un tag "DiscId" apparaisse un jour.
A noter qu'il existe un tag pour l'ISRC, nommé "TSRC" : cet identifiant est réellement unique, contrairement au DiscId, ce qui explique peut-être qu'il ait son propre tag.
Voir aussi
Article connexe
Liens externes
- (en) DiscId howto
- (en) Tags ID3 V2
- (fr) Feuille Excel pour calculer le DiscId : il faut connaitre la position des plages, qui peut se déduire de leur durée. (feuille pré-remplie avec l'exemple de l'article).
Catégories :- Format de données numériques
- Identifiant
- Stockage disque optique
Wikimedia Foundation. 2010.