Informations sur le MP3 et calcul de la durée

WMA / ASF en option

Page MGC / Nombre de visiteurs

Logiciel pour modifier les Tag : https://www.mp3tag.de/en/index.html - Ce logiciel fait la modification des tag mieux que je ne pourrais le faire moi-même !

En marge du fichier audio, dans un MP3 on peut aussi trouver des Tags ou informations texte sur le contenu du MP3. Il existe 3 types de Tag.
Le Tag ID3 v1 en fin de fichier.
Le Tag ID3 v2 en début de fichier.
Le Tag APE en fin de fichier mais avant le Tag ID3 v1.

- Le tag ID3 v1 ne comporte que 6 informations sur le fichier à savoir  le titre sur 30 caractères, l'artiste sur 30 caractères, l'album sur 30 caractères, l'année sur 4 caractères, un commentaire sur 30 caractères et le genre sous la forme d'un chiffre (1 octet) de 1 à 255 représentant le genre par rapport à une liste de genre définit (Détail des genres dans Wikipedia ou GenresMp3 à la fin du document). Avec la mention "TAG" au début cela fait exactement 128 caractères (128 octets). Il existe une variante qui ne donne que 28 caractères seulement pour le commentaire et rajoute 1 caractère de séparateur (0) et 1 caractère pour la piste (en hexadécimal).
Pour lire ce tag il suffit de se placer à 128 octets de la fin du fichier, si les 3 premiers octets représentent la mention "TAG", la suite des caractères est définit comme précédemment. Sinon pas de tag.

- Le Tag ID3 v2 est beaucoup plus souple et complet (en fonction de ce que l'on y met). Il se trouve au début du fichier et commence toujours par la mention "ID3". Si cette mention est absente, il n'y a pas de tag. Elle est suivit de 2 octets qui représentent la version du Tag (02 00 ou 03 00 ou 04 00). Il ne semble y avoir beaucoup de différence entre la version 03 et la version 04.
Vient en suite un flag sur 1 octet et la longueur totale de l'ensemble des tags ID3 v2 sur 4 octets. Attention ces 4 octets sont codés sur 7 bits, le huitième bit est toujours à 0. C'est donc des puissances de 128 qu'il faut utiliser pour connaître la longueur des tags (x3 * 128^3 + x2 * 128^2 + x1 * 128^1 + x0 * 128^0). Cet ensemble représente les 10 premiers octets du fichier.
- Pour les versions 03 et 04
A partir du onzième octet se trouve le début du premier tag sur 4 octets suivit de la longueur de l'information sur 4 octets et d'un flag sur 2 octets. Cet ensemble a une longueur de 10 octets. Le onzième (vingt et unième depuis le début du fichier) octet, qui est toujours à 0, marque le début de l'information du tag. Après l'information se trouvera le tag suivant.

I D 3 vv vv f0 x3 x2 x1 x0 t3 t2 t1 t0 l3 l2 l1 l0 f1 f0 0 zz zz zz zz ...zz t3 t2 t1 t0 l3 l2 l1 l0 f1 f0 0 zz zz zz zz ...zz etc...
L'entête des tags suivi de sa version vv vv (03 00 ou 04 00) sur 5 octets.
Flag sur 1 octets ???.
Longueur total des tag sur 4 octets de 7 bits.
Label du tag sur 4 octets indiquant le type d'information contenu,
commence toujours par une lettre majuscule de A à Z.
Longueur de l'information contenu sur 4 octets.

Flag sur 2 octets ???.

Texte du tag, commence toujours par un 0
Label du tag sur 4 octets indiquant le type d'information contenu, commence toujours par une lettre majuscule de A à Z.
Longueur de l'information contenu sur 4 octets.

Flag sur 2 octets ???.

Texte du tag, commence toujours par un 0

TPE1 - artiste ------ TCON - genre
TALB - CD   TLEN - durée
TIT2 - titre   MCDI - N° CD
TYER - année   TENC - Encodeur
TDRC - année   TCOP - Copyright
TRCK - piste   COMM - commentaire
D'autre informations sur les types de tag ID3 v2-3
D'autre informations sur les tag ID3 v2-4
- Pour la version 02
A partir du onzième octet se trouve le début du premier tag sur 3 octets suivit de la longueur de l'information sur 3 octets. Cet ensemble a une longueur de 6 octets. Le septième octet (Dixseptième depuis le début du fichier), qui est toujours à 0, marque le début de l'information du tag. Après l'information se trouvera le tag suivant.

I D 3 vv vv f0 x3 x2 x1 x0 t2 t1 t0 l2 l1 l0 0 zz zz zz zz ...zz t2 t1 t0 l2 l1 l0 0 zz zz zz zz ...zz etc...
L'entête des tags suivi de sa version vv vv (02 00) sur 5 octets.
Flag sur 1 octets ???.
Longueur total des tag sur 4 octets de 7 bits.
Label du tag sur 3 octets indiquant le type d'information contenu,
commence toujours par une lettre majuscule de A à Z.
Longueur de l'information contenu sur 3 octets.

Texte du tag, commence toujours par un 0
Label du tag sur 3 octets indiquant le type d'information contenu, commence toujours par une lettre majuscule de A à Z.
Longueur de l'information contenu sur 3 octets.

Texte du tag, commence toujours par un 0

TP1 - artiste ------ TCO - genre
TAL - CD   TLE - durée
TT2 - titre   MCI - N° CD
TYE - année   TEN -  Encodeur
TRD - année  
 
 
TRK - piste   COM - commentaire
D'autre informations sur les tag ID3 v2-2

- Le Tag APE est surtout utilisé par le logiciel MP3GAIN pour indiquer les modifications qu'il a apportées au MP3.
Il est situé en fin de fichier avant le Tag ID3v1.
Il commence par un entête de 32 octets et fini de même à l'exception d'un bit de flag.
L'entête commence toujours par la mention "APETAGEX" (8 octets) suivit de 4 octets pour la version ( D0 07 00 00 = 2000 en décimal sur 4 octets inversés) puis la taille de l'ensemble du tag sur 4 octets puis le nombre d'information sur 4 octets puis un flag sur 4 octets et enfin 8 octets réservés (à 00). Total de l'ensemble 32 octets. A l'exception d'un bit de flag, cet ensemble sera répété à la fin du tag. Attention : la taille et le nombre d'infos sont codés sur 4 octets inversés, c'est à dire le poid faible en premier et le poid fort en dernier (de gauche à droite en quelque sorte).
Dans le flag, le sixième bit du quatrième octet définit le début du tag s'il est à 1 ou la fin du tag s'il est à 0.
Entre les entêtes se trouvent les informations. Ca commence par  4 octets inversés pour donner la longueur de l'information suivit de 4 octets pour le flag puis un label de longueur variable pour l'information. Ce label se termine par toujours par un octet à 00 (séparateur). Après le séparateur se trouve l'information dont la longueur a été définit par les 4 premiers octets. Ce groupe est répété autant de fois qu'il n'a été définit de nombre d'information dans l'entête du tag.

- La partie "audio" du MP3 commence par un entête de 4 octets. Ces 4 octets donnent des informations sur le type de MP3. Cet entête se trouve après les tag ID3 v2 s'il y en a. Il n'a pas de position précise dans le fichier, il faut le chercher. Il commence toujours par une série de 11 bits à 1 (FF Ex xx xx ou FF Fx xx xx).
1111 1111 - 111B BCCD - EEEE FFGH - IIJJ KLMM
BB version de MPEG (11-v1, 10-v2, 01-reserved, 00-v2.5)
CC numéro de layer (11-layer 1, 10-layer 2, 01-layer 3, 00-reserved)
D protection bit (0 protection par CRC, 2 octets suive l'entête. 1 pas de protection)
EEEE bitrate index.
FF sampling rate frequency index.
G padding bit.
H private bit.
II chanel mode (11-single channel, 10-dual channel, 01-joint stéréo, 00-stéréo)
JJ mode extention seulement si "joint stéréo"
K copyright (1 copyright, 0 pas de copyright).
L original (1 original, 0 copie)
MM emphasis (11-CCIT J.17, 10-reserved, 01-50/15ms, 00-none)
D'autre information sur le Header des MP3
ou https://wiki.hydrogenaud.io/

- Après l'entête peut se trouver la mention "Xing" pour indiquer un MP3 de type VBR (compression variable). Cette mention peut se trouver 9, 17 ou 32 octets plus loin en fonction du type de MP3 (Mpeg V1 mono  17 octets, pas mono 32 octets et Mpeg V2/2.5 mono 9 octets, pas mono 17 octets).
Si la mention Xing existe, à sa suite se trouvent 4 octets de flag. Les 2 premiers bits du dernier octet indiquent la présence du nombre de frame sur 4 octets et la présence de la taille du fichier MP3 sur les 4 octets suivant à la suite des flags.
Xing f3 f2 f1 f0 aa aa aa aa bb bb bb bb xx xx xx ...

f0 =
xxxx xxyz
si z =1
 nombre
frames
si y =1
taille
fichier


- Après l'entête peut se trouver la mention "VBRI" pour indiquer un MP3 de type VBR (compression variable). Cette mention devrait se trouver 32 octets plus loin. Si la mention VBRI existe, à la suite se trouvent 2 octets pour indiquer la version de VBRI. Les 2 octets suivants indiquent le délai (je ne sais pas ce que c'est mais c'est utile pour le calcul de la durée), les 2 octets suivants indiquent la qualité du VBRI,  puis la taille du fichier MP3 sur 4 octets et encore le nombre de frames sur les 4 octets suivants.
VBRI aa aa bb bb cc cc dd dd dd dd ee ee ee ee xx xx xx ...
VBRI + version Délai Qualité Taille MP3 Nombre de frames
 
-
Après l'entête peut se trouver la mention "INFO" 32 octets plus loin. Ça donne, entre autre, le nom de l'utilitaire qui à servi à la fabrication du MP3 et peut être d'autres informations mais je n'ai pas trouvé d'info sur "INFO" ! Mais si "INFO" existe il faudra prendre la prochaine occurrence de l'entête pour le calcul de la durée sinon il pourrait y avoir une erreur dans le calcul de la durée (inférieur à une seconde environ).

- Calcul de la durée d'un MP3:
Pour le type Xing, c'est facile, voila la formule: durée = (bb bb bb bb * 8 / 1000) / ((bb bb bb bb * 8 / 1000) / (aa aa aa aa / 38 - 1)).
Pour le type Vbri, c'est facile, voila la formule: durée = ((dd dd dd dd - bb bb) * 8 / 1000) / (((dd dd dd dd - bb bb) * 8 / 1000) / (ee ee ee ee / 38 - 1)).

Pour les autres, c'est un peu plus compliqué.
Tableau pour la détermination du Bitrate
EEEE BB V1
V2
CC L1 L2 L3 L1 L2/L3
 0000 free free free free free
 0001 32 32 32 32 8
 0010 64 48 40 48 16
 0011 96 56 48 56 24
 0100 128 64 56 64 32
 0101 160 80 64 80 40
 0110 192 96 80 96 48
 0111 224 112 96 112 56
 1000 256 128 112 128 64
 1001 288 160 128 144 80
 1010 320 192 160 160 96
 1011 352 224 192 176 112
 1100 384 256 224 192 128
 1101 416 320 256 224 144
 1110 448 384 320 256 160
 1111 bad bad bad bad bad
V1 pour MPEG V1 et V2 pour MPEG V2/V2.5
L1 pour layer 1, L2 pour layer 2 et L3 pour layer 3
Tableau pour la determination du sampling rate
FF BB
MPEG1 MPEG2 MPEG2.5
 00 44100 22050 11025
 01 48000 24000 12000
 10 32000 16000 8000
 11 reserv. reserv. reserv.
Méthode 1:
Taille frame pour layer 3 et 2 : 144 * bitrate * 1000 / sampling rate - G.
Taille frame pour layer 1 : (12 * bitrate * 1000 / sampling rate - G) * 4 (le * 4, je ne suis pas sûr, suivant les informations que j'ai trouvées, il n'est pas toujours là ? Mais comme j'ai pas de layer 1 pour tester !)

Nombre de frame : (taille fichier MP3 - taille des tags) / taille frame.

Durée pour un MPEG V2/2.5 layer 1 : nombre de frame * 132 / sampling rate
Durée pour un MPEG V1/2/2.5 layer 2 et 3 : nombre de frame * 1152 / sampling rate
Durée pour un MPEG V1 layer 1 : nombre de frame * 384 / sampling rate

Méthode 2:
((taille fichier MP3 - taille des tags) * 8 / 1000) / bitrate.

Après tests, les 2 méthodes semblent équivalentes !

Ces formules ont été testées sur des MPEG V1/2/2.5 layer 3 et 2, VBR et non VBR. Pour les MP1 j'ai pas testé, j'en ai pas trouvé.
Logiciel pour lire les informations en vrac dans le MP3 V11.6 du 07/2021 MD5 : 69776D54A94D872336C619B03F2D3D12
Prend en compte les 192 genres reconnus par Winamp.
Reconnait les fichiers WMA / WMV et affiche quelques informations et images contenus.
Intégre la lecture des tag ID3 V2 -2 et -3 -4
Affiche aussi l'images contenu dans le MP3 si l'image est de type JPG, BMP ou PNG


Les fichiers WMA

L'organisation de ces fichiers vient de la norme ASF (Advensed Systems Format).
Il s'agit d'une succession de bloc de donnée pouvant contenir d'autre bloc.
Un bloc est constitué d'une entête suivit de la longueur du bloc et des données qu'il contient. Toutes les valeurs "numérique" sont écrites de droite à gauche et les valeurs "texte" de gauche à droite.
L'entête est constitué de 16 octets, le GUID qui est une représentation unique de chaque bloc. Le GUID est toujours suivit de 8 octets qui indiquent la longueur du bloc. Cette longueur inclus le GUID lui-même. La suite est variable en fonction du GUID. Le détail est donné dans un document ASF_Specification.pdf téléchargeable chez Microsoft. Voir en début de page.
Dans un fichier ASF, le premier bloc est toujours l'ASF Header Object. Il est constitué de son GUID sur 16 octets, suivit de sa longueur sur 8 octets puis du nombre de bloc qu'il contient sur 4 octets et enfin 2 octets réservés. Le tout a une longueur fixe de 30 octets. Le 31 unièmes octets est le début du premier bloc qu'il contient.
Le GUID est lu de droite à gauche pour les 8 premiers octets (4 puis 2 puis 2) et de gauche à droite pour les 8 suivants !

L'ASF Content Description donne quelques informations sur le contenu du fichier et peut être considéré comme équivalant au tag ID3 v1. L'ASF Extended Content Description donne d'autres informations et peut être considéré comme équivalent au tag ID3 v2. Toute fois les deux sont complémentaire, souvent les informations du premier n'apparaissent pas dans le second.
L'ASF File Properties donne des indications sur la partie audio du fichier (taille durée biterate ...). L'ASF Header Extension donne d'autres informations sur la partie audio.
La date est codée en dixième de microseconde et sur la base du 1 janvier 1601 ! Des fois que Louis XIV veuille enregistrer les musiques de Lully sur son baladeur :)
Détail des fichiers ASF chez Microsoft : https://docs.microsoft.com/en-us/windows/desktop/wmformat/overview-of-the-asf-format 





Liste des genres dans Winamp