Lire les tags id3 des fichiers mp3

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 661 fois - Téléchargée 30 fois

Contenu du snippet

Voila une fonction de base qui prend comme paramètre le chemin d'accès a un fichier mp3 et qui retourne la structure du tag formaté (ou 0 si l'operation échoue), il suffit d'utiliser les fonctions list et explode comme dans l'exemple pour séparer les informations (titre, artiste...)

cette fonction de marche qu'avec les tags ID3v1 et ID3v1.1
À propos si quelqu'un connaît un site avec des info sur les tags MP3 ID3v2 (lecture, taille de la structure...)

Désolé pour le manque de commentaires :-/, mais je ne pense pas que ce code soit difficile à comprendre ;-)

Source / Exemple :


<? 
  function ReadTag($path) 
  { 
     
           $genre_array = array("Blues","Classic Rock","Country","Dance","Disco","Funk","Grunge", 
                        "Hip-Hop","Jazz","Metal","New Age","Oldies","Other","Pop","R&B", 
                  "Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska", 
                  "Death Metal","Pranks","Soundtrack","Euro-Techno","Ambient", 
                "Trip-Hop","Vocal","Jazz+Funk","Fusion","Trance","Classical", 
                  "Instrumental","Acid","House","Game","Sound Clip","Gospel", 
                  "Noise","AlternRock","Bass","Soul","Punk","Space","Meditative", 
                  "Instrumental Pop","Instrumental Rock","Ethnic","Gothic", 
                  "Darkwave","Techno-Industrial","Electronic","Pop-Folk", 
                  "Eurodance","Dream","Southern Rock","Comedy","Cult","Gangsta", 
                  "Top 40","Christian Rap","Pop/Funk","Jungle","Native American", 
                  "Cabaret","New Wave","Psychadelic","Rave","Showtunes","Trailer", 
                  "Lo-Fi","Tribal","Acid Punk","Acid Jazz","Polka","Retro", 
                  "Musical","Rock & Roll","Hard Rock","Folk","Folk-Rock", 
                  "National Folk","Swing","Fast Fusion","Bebob","Latin","Revival", 
                  "Celtic","Bluegrass","Avantgarde","Gothic Rock","Progressive Rock", 
                  "Psychedelic Rock","Symphonic Rock","Slow Rock","Big Band", 
                  "Chorus","Easy Listening","Acoustic","Humour","Speech","Chanson", 
                  "Opera","Chamber Music","Sonata","Symphony","Booty Bass","Primus", 
                  "Porn Groove","Satire","Slow Jam","Club","Tango","Samba", 
                  "Folklore","Ballad","Power Ballad","Rhythmic Soul","Freestyle", 
                  "Duet","Punk Rock","Drum Solo","Acapella","Euro-House","Dance Hall"); 
     
           $file=fopen($path, "rb"); 
     
           if($file) 
           { 
        fseek($file, 0, SEEK_END); 
        fseek($file, -128, SEEK_CUR); 
       
                      $tag=fread($file, 128); 
       
        fclose($file); 
        } 
       else
      {
          return 0;
      }
     
          if ($tag[0]=='T' && $tag[1]=='A' && $tag[2]=='G') 
            { 
                 $title=substr($tag,3,30); 
                 $artist=substr($tag,33,30); 
                 $album=substr($tag,63,30); 
                 $year=substr($tag,93,4); 
                 $comment=substr($tag,97,30); 
                 $type=ord(substr($tag,127,1)); 
       
                  if($type >= 0 && $type <= 125) 
             $genre = $genre_array[$type]; 
               else 
             $genre = "none"; 
       
                      if (ord($comment[28]) == 0 && ord($comment[29]) != 0) 
                      { 
                            $track = ord($comment[29]); 
                            $comment[29] = "\0"; 
                      } 
                      else 
                      { 
                           $track = 0; 
                      } 
       
       
                 return sprintf("%s-%s-%s-%s-%s-%s-%s",$title, $artist, $album, $year, $comment, $genre, $track); 
            } 
            else 
            { 
                 return 0; 
            } 
  } 
   
  /*Exemple d'utilisation*/ 
   
    $path = "Test.mp3"; 
    $tag = ReadTag($path); 

    if($path == 0)
     print("Lecture du tag impossible");
    else
    {
   
       list($title, $artist, $album, $year, $comment, $genre, $track) = explode   ("-", $tag); 
   
       print($title); 
       print("<br>"); 
       print($artist); 
       print("<br>"); 
       print($album); 
       print("<br>"); 
       print($year); 
       print("<br>"); 
       print($comment);   
       print("<br>"); 
       print($genre); 
       print("<br>"); 
       print($track); 
       print("<br>"); 
   }
    
  ?>

Conclusion :


Pour appeler la fonction faite $tag = ReadTag($path); $path correspond au chemin d'access au fichier mp3

la fonction ReadTag renvoie les informations séparées par des "-" il suffit, d'utiliser les fonctions list et explode comme dans l'exemple pour séparer les informations

çe code est l'adaptation PHP de la source http://www.cppfrance.com/article.aspx?Val=1386 Merci a sont auteur

A voir également

Ajouter un commentaire Commentaires
cs_iubito Messages postés 629 Date d'inscription mercredi 3 juillet 2002 Statut Membre Dernière intervention 9 octobre 2006
10 mars 2003 à 08:52
pas testé, mais ça me semble pas mal :-)
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
12 mars 2003 à 05:01
Voilà, tu voulais un site qui explique le ID3v2 -->> http://www.id3.org


Ce commentaire à été pensé, écrit et posté par NitRic
NitRic© Toute reproduction même partielle est interdite même avec accord écrit de l'auteur


Beubye && @++;

=P
cs_Otaku Messages postés 14 Date d'inscription dimanche 19 janvier 2003 Statut Membre Dernière intervention 17 mai 2003
12 mars 2003 à 12:45
Merci
Moasky Messages postés 1 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 16 mai 2003
16 mai 2003 à 22:30
C un bon code. Juste un truc, pour positionner ton pointeur de fichier, au lieu de faire un double fseek, tu peux faire :

if ( fseek( $file, -128L, SEEK_END ) != 0)
{
print ("Erreur en positionnant le pointeur de fichier");

return 0;
}

Bye
cs_BadFox Messages postés 3 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 24 août 2003
24 août 2003 à 20:34
il y a une erreur dans l'exemple :

if($path == 0) print("Lecture du tag impossible"); else...

c'est pas $path qui doit être utilisé, un type chaîne, mais $tag

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.