// --------------------------------------------------------------------------------------------------------------------------------------------------------- // Description d'un fichier Mp3 : // --------------------------------------------------------------------------------------------------------------------------------------------------------- // // Tag Version 2 // -Non obligatoire - Si présent longueur variable, commence par // -Entête de trame fait 6 octets en 2.2 et 10 octets en 2.3 // // Entête de Tag 2.x -> Fixe qq soit la version, sur 10 octets, donne la taille du tag (sans les 10 octets) // Entête de Trame 1 + Trame 1 -> Données 1 // --- // Entête de Trame N + Trame N -> Données N // // Données Audio -> Longueur variable // -On peut avoir nFrames (normalement en bitrate fixe on a 1, en vbr n) // -Entête de Frame sur 4 octets // // Entête de Frame 1 + Données 1 // --- // Entête de Frame N + Données N // // Tag Version 1 // -Non obligatoire - Si présent = 128 derniers octects, commence par // -Deux versions : 1.0 et 1.1 (ajout du numéro de piste) // // --------------------------------------------------------------------------------------------------------------------------------------------------------- // --------------------------------------------------------------------------------------------------------------------------------------------------------- // TAG 2 // --------------------------------------------------------------------------------------------------------------------------------------------------------- // ID3: Entête de TAG en version 2 (10 octets de long) gpEnteteTagId3v2 est une structure Tag est une chaîne fixe de 3 VersionMajeur est un entier sur 1 octet VersionMineur est un entier sur 1 octet BitDesynchro est un entier sur 1 octet BitCompression est un entier sur 1 octet BitExperimental est un entier sur 1 octet TailleTag est un entier // Codé %0xxxxxxx %0xxxxxxx %0xxxxxxx %0xxxxxxxx (4 octets) FIN // ID3: Entête de Trame en version 2.2 (6 octets de long) // Tous les chars sont entre 0x20 --> 0xFF ; Le 0x00 indique une fin de zone gpTrameId3v22 est une structure Nom est une chaîne fixe de 3 TailleTrame est un entier // Codé %0xxxxxxx %0xxxxxxx %0xxxxxxx (3 octets) FIN // ID3: Entête de Trame en version 2.3 (10 octets de long) // Tous les chars sont entre 0x20 --> 0xFF ; Le 0x00 indique une fin de zone gpTrameId3v23 est une structure Nom est une chaîne fixe de 4 TailleTrame est un entier // Codé %0xxxxxxx %0xxxxxxx %0xxxxxxx %0xxxxxxx (4 octets) Flags est une chaîne fixe de 2 FIN // --------------------------------------------------------------------------------------------------------------------------------------------------------- // MPEG STRUTURE // --------------------------------------------------------------------------------------------------------------------------------------------------------- // MPEG Audio Frame Header (4 octets de long) // A décomposée en 32 bits pour extraire les informations gpMpegAudioHeader est une structure Emphasis est une chaîne fixe de 2 // 00=none, 01=50/15ms, 10=reserved, 11=CCIT J.17 Original est une chaîne fixe de 1 // 0=Copy of original media, 1=Original media Copyright est une chaîne fixe de 1 // 1=Oui, 2=Non ModeExtension est une chaîne fixe de 2 // Pour Joint Stereo ChannelMode est une chaîne fixe de 2 // 00=Stereo, 01=Joint Stereo, 10=Dual Channel, 11=Single Channel PrivateBit est une chaîne fixe de 1 PaddingBit est une chaîne fixe de 1 SamplingRate est une chaîne fixe de 2 // Sampling rate frequency index (in Hz) Bitrate est une chaîne fixe de 4 // Bitrate index (8 Kbps --> 320 Kbps) ProtectionBit est une chaîne fixe de 1 // 0=Protected by CRC (16 Bits follow header), 1=Not protected Layer est une chaîne fixe de 2 // 00=Reserved, 01=Layer III, 10=Layer II, 11=Layer I MpegVersion est une chaîne fixe de 2 // 00=Version 2.5, 01=Reserved, 10=Version 2, 11=Version 1 FrameSync est une chaîne fixe de 11 // Frame sync (all bits set) PCompression est une chaîne fixe sur 30 PBitrateC est une chaîne fixe sur 30 PBitrateN est un entier sur 2 octet PFréquence est une chaîne fixe sur 30 PMode est une chaîne fixe sur 30 FIN // --------------------------------------------------------------------------------------------------------------------------------------------------------- // TAG 1 // --------------------------------------------------------------------------------------------------------------------------------------------------------- // ID3: Tag en version 1.0 (128 octets de long) gpTagId3v10 est une structure Tag est une chaîne fixe de 3 // Constante vaut TAG Artiste est une chaîne fixe de 30 Titre est une chaîne fixe de 30 Album est une chaîne fixe de 30 Année est une chaîne fixe de 4 Commentaire est une chaîne fixe de 30 Genre est une chaîne fixe de 1 FIN // ID3: Tag en version 1.0 (128 octets de long) gpTagId3v11 est une structure Tag est une chaîne fixe de 3 // Constante vaut TAG Artiste est une chaîne fixe de 30 Titre est une chaîne fixe de 30 Album est une chaîne fixe de 30 Année est une chaîne fixe de 4 Commentaire est une chaîne fixe de 28 Dummy est une chaîne fixe de 1 // Vaut 0x00 Piste est une chaîne fixe de 1 Genre est une chaîne fixe de 1 FIN // --------------------------------------------------------------------------------------------------------------------------------------------------------- // STRUCTURE PERSO // --------------------------------------------------------------------------------------------------------------------------------------------------------- // ID3: Structure générale pour la manipulation d'un TAG (variable) gpTagId3 est une structure Fichier est une chaîne Version est un entier Artiste est une chaîne Titre est une chaîne Album est une chaîne Année est une chaîne Commentaire est une chaîne Piste est une chaîne Genre est une chaîne TailleFichier est un réel TailleTag est un réel Durée est une Heure Compression est une chaîne Bitrate est une chaîne Fréquence est une chaîne Mode est une chaîne Url est une chaîne FIN