DiscId

Un article de Wikipédia, l'encyclopédie libre.

Le DiscId est un identifiant utilisé par les projets FreeDB et CDDB.

Cet identifiant est calculable pour tout CD Audio. Il permet, en interrogeant une base de données CDDB ou FreeDB, de connaître la liste des plages du disque, ainsi que leur durée.

D'un point de vue technique, 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).

Sommaire

[modifier] 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 durée de chaque plage.

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 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.

Ecrire un logiciel qui calcule le DiscId n'est pas trivial. En effet les informations nécessaires se trouvent dans la TOC (Table of Content) du CD. L'accès à cette TOC requière la lecture du CD au niveau secteur. Si cet accès bas niveau est relativement aisé sous Linux, il n'en est pas de même sous Windows. Les lecteurs et graveurs de CD ou DVD sont pilotables avec le jeu de commandes SCSI, même si l'interface physique est autre que SCSI (ATA, SATA). Comme il n'y a pas d'API SCSI standard sous Windows, le développeur devra utiliser une API SCSI tierce, comme ASPI de la société Adaptec.

[modifier] 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 bogue 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.

[modifier] Voir aussi

[modifier] Article connexe

[modifier] Lien externe