TP - Lire des tags mp3
ID3 version 1.0 et 1.1


Présentation.

Dans une musique au format mp3, on peut stoker les informations suivantes, appelées tags :

Ces informations sont utilisées pour être affichées par les lecteurs de musique : winamp, lecteurs DVD de salon, balladeurs mp3, etc. Ce TP sert à faire un programme qui permet de récupérer et d'afficher les tags d'une musiques.

Etape 1 : préparation du TP.

Vous devez :

Etape 2 : lecture séquentielle du début du fichier mp3.

Pour faire votre première lecture de fichier mp3, vous devez (dans la procédure main) :

Si cela fonctionne, les premières valeurs en texte que vous devez voir sont "ID3". C'est l'en-tête des fichiers mp3.

Etape 3 : lecture séquentielle de la fin du fichier mp3.

En fait, les tags v1.0 et v1.1 se trouvent dans les 128 derniers octets du fichiers. Vous allez donc modifier le programme précédent de la façon suivante :

Lorsque vous exécutez, vous devez reconnaître facilement les tags mp3 dans la fenêtre d'exécution : nom de la chanson, de l'artiste, etc.

Etape 4 : Affectation de chaque tag à une variable.

Sachant que (tout ceci est détaillé ici, paragraphe MPEG Audio Tag ID3v1) :

Vous devez modifier votre programme de façon à ce qu'il lise information par information, basé sur l'exemple suivant (permet de lire le tag en début de fichier) :

Tag=""
For i = 1 to 3
  Get #f, , val
  Tag = Tag & chr(val)
Next i

Dans cet exemple, on ne lit que les 3 premiers caractères, et on les stocke dans la variable Tag (déclarée de type string). Il faut ensuite faire la même chose pour lire les 30 caractères suivants et les mettre dans une variable nommée Title, etc.

Etape 5 : Créer un type structuré.

Vous allez transformer votre programme en fonction dont le but est de renvoyer ces informations dans une structure appropriée. Le modèle à utiliser est le suivant :

Struct TypeTag
  Tag as String
  Title as String
  Artist as String
  Album as String
  Year as String
  Comment as String
  TrackNumber as Byte
  Genre as Byte
  LibelleGenre as String
End Struct

Function GetTags(NomFichier As String) As TypeTag
  ...
Votre programme ici ...
End Function

Votre programme doit bien sûr remplir les champs GetTags.Tag, GetTags.Title, GetTags.Artist, etc. La variable GetTags sera automatiquement renvoyé comme résultat de la fonction. Vous devez faire une fonction main qui teste le bon fonctionnement de GetTags.

Pour aller plus loin : affectation du libellé du genre.

Le genre est codé sous forme numérique, de 0 à 255. Celle valeur correspond à un libellé précis. Par exemple :

Vous devez, dans la fonction GetTags, renvoyer le libellé du type (champs GetTags.LibelleGenre). Pour ça vous devez déclarer un tableau global :

Tab_LibelleGenre(0) = "Blues"
Tab_LibelleGenre(1) = "Classic Rock"
Tab_LibelleGenre(2) = "Country"
...

Et ensuite affecter le libellé du genre très simplement :

GetTags.LibelleGenre = Tab_LibelleGenre(GetTags.Genre)

Pour aller plus loin : modification des tags.

Vous devez maintenant écrire une procédure qui modifie les tags mp3 contenus dans un fichier. Le fonctionnement de celle-ci est très similaire à la fonction GetTags. La principale différence réside dans l'utilisation de l'instruction put (écrire dans le fichier) au lieu de get (lire dans le fichier).

Voici l'en-tête de la fonction que vous devez écrire :

Function UpdateTag(NomFichier As String, NouveauTags As TypeTag)

Quels que soient les anciens tags, UpdateTags les remplace par le contenu du paramètre NouveauTags.


Sébastien PASTORE.