Ankündigung

Einklappen
Keine Ankündigung bisher.

ID3-Tags auslesen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ID3-Tags auslesen

    Hi,
    Nachdem ich jetzt schon ewig such, stell ich die Frage hier:
    Wie kann ich von einer mp3-Datei die Tags auslesen???

    Etwas interessantes hab ich hier gefunden: PHP-Center
    Das Script funktioniert. Ich möchte allerdings auch die Bitrate und die länge des liedes ermitteln!

    Hoffe es kann mir jemand helfen!

    Gruß s.stiezel

  • #2
    Der Beitrag von PHPcenter ist schön und gut, aber eher (finde ich) unnütz mit:
    PHP-Code:
    <?php
    $genre 
    = array(=> "Blues"=> "Classic Rock"=> "Country"=> "Dance"=> "Disco"=> "Funk",
       
    => "Grunge"=> "Hip-Hop"=> "Jazz"=> "Metal"10 => "New Age",
       
    11 => "Oldies"12 => "Other"13 => "Pop"14 => "R&B"15 => "Rap",
       
    16 => "Reggae"17 => "Rock"18 => "Techno"19 => "Industrial"20 => "Alternative",
       
    21 => "Ska"22 => "Death Metal"23 => "Pranks"24 => "Soundtrack"25 => "Euro-Techno",
       
    26 => "Ambient"27 => "Trip-Hop"28 => "Vocal"29 => "Jazz+Funk"30 => "Fusion",
       
    31 => "Trance"32 => "Classical"33 => "Instrumental"34 => "Acid"35 => "House",
       
    36 => "Game"37 => "Sound Clip"38 => "Gospel"39 => "Noise"40 => "Alternative Rock",
       
    41 => "Bass"42 => "Soul"43 => "Punk"44 => "Space"45 => "Meditative",
       
    46 => "Instrumental Pop"47 => "Instrumental Rock"48 => "Ethnic"49 => "Gothic"50 => "Darkwave",
       
    51 => "Techno-Industrial"52 => "Electronic"53 => "Pop-Folk"54 => "Eurodance"55 => "Dream",
       
    56 => "Southern Rock"57 => "Comedy"58 => "Cult"59 => "Gangsta"60 => "Top 40",
       
    61 => "Christian Rap"62 => "Pop/Funk"63 => "Jungle"64 => "Native American"65 => "Cabaret",
       
    66 => "New wave"67 => "Psychadelic"68 => "Rave"69 => "Showtunes"70 => "Trailer",
       
    71 => "Lo-Fi"72 => "Tribal"73 => "Acid Punk"74 => "Acid Jazz"75 => "Polka",
       
    80 => "Folk"81 => "Folk-Rock"82 => "National Folk"83 => "Swing"84 => "Fast Fusion"85 => "Bebob",
       
    86 => "Latin"87 => "Revival"88 => "Celtic"89 => "Bluegrass"90 => "Avantgarde",
       
    91 => "Gothic Rock"92 => "Progressive Rock"93 => "Psychedelic Rock"94 => "Symphonic Rock"95 => "Slow Rock",
       
    96 => "Big Band"97 => "Chorus"98 => "Easy Listening"99 => "Acoustic"100 => "Humour",
       
    101 => "Speech"102 => "Chanson"103 => "Opera"104 => "Chamber Music"105 => "Sonata",
       
    106 => "Symphony"107 => "Booty Bass"108 => "Primus"109 => "Porn Groove"110 => "Satire",
       
    111 => "Slow Jam"112 => "Club"113 => "Tango"114 => "Samba"115 => "Folklore",
       
    116 => "Ballad"117 => "Power Ballad"118 => "Rhythmic Soul"119 => "Free Style"120 => "Duet",
       
    121 => "Punk Rock"123 => "A capella"124 => "Euro-House"125 => "Dance Hall");


    function 
    id3($filename "")
    {
      global 
    $genre;
      if (!
    is_file($filename) or filesize($filename) < 128)
      {
        return 
    false;
        break;
      }
      
    $fp fopen($filename"r");
      
    fseek($fpfilesize($filename) - 128);
      
    $id3 fread($fp128);
      
    $arr = array();
      if (
    strtoupper(substr($id303)) == "TAG")
      {
        
    $arr["song"] = trim(substr($id3330));
        
    $arr["artist"] = trim(substr($id33330));
        
    $arr["album"] = trim(substr($id36330));
        
    $arr["year"] = trim(substr($id3934));
        
    $arr["comment"] = trim(substr($id39730));
        
    $arr["genre"] = $genre[ord($id3[127])];
        return 
    $arr;
      }
      else
        return 
    false;
      
    fclose($fp);
    }
    ?>
    .
    Was soll mir die kleine INFO wenn ich immer noch nicht weiss wie ich dei tags auslesen kann!!

    Kommentar


    • #3
      Wie immer: Als Hilfe sollte man sich immer php.net zur Hand nehmen.

      Hier, das sollte im Bezug auf die ID3-Tags weiterhelfen: PHP: ID3 Funktionen - Manual

      Allerdings stehen diese Infos nicht im ID3-Tag, sondern im Header der Datei selbst. Da dort auf jeden Fall die Bitrate drin zu finden ist, sollte sich somit auch ohne Probleme die Länge ermitteln lassen anhand der Bitrate und der Dateigröße.

      Kommentar


      • #4
        So, ich habe mir mal den Header einer MP3-Datei genauer angesehen. Da ich hier auf anhieb nicht weiter wusste hat es mich gereizt es herauszufinden und siehe da, wieder ein bisschen schlauer.

        Also nun die halbfertige Lösung:

        1. Bei Wikipedia habe ich angefangen mich reinzulesen, was im Header stehen soll...
        MPEG-1 Audio Layer 3 - Wikipedia durchlesen und halbwegs verstehen.

        PHP-Code:
        $MP3Info = array();
        $fp      fopen("foobar.mp3""r");
        $Header  fread($fp4); // 4*8Bit (Angabe hier ist ja in Byte) für den 32Bit Header
        fclose($fp);

        $Bitraten = array(=> "freies Format",    // Aus Wikipedia entnommen
                         
        => 32,
                         
        => 40,
                         
        => 48,
                         
        => 56,
                         
        => 64,
                         
        => 80,
                         
        => 96,
                         
        => 112,
                         
        => 128,
                         
        10 => 160,
                         
        11 => 192,
                         
        12 => 224,
                         
        13 => 256,
                         
        14 => 320);

        $Header  unpack("n2"$Header);  // siehe http://de2.php.net/manual/de/function.pack.php
        $Bitrate $Header['2'] >> 12// Laut Wikipedia ab Bit17,18,19,20, daher die Rechtsverschiebung um 12Bit

        $MP3Info['bitrate'] = $Bitraten[$Bitrate]; // Gibt uns die Bitrate des Liedes in Kbit an 
        So nun die Liedlänge ermitteln. Dazu hab ich mir folgende, für mich logische Erklärung:

        Dateilänge / Bitrate = Spieldauer

        Die Dateilänge ermitteln wir in PHP mit filesize und gibt uns die Dateigröße in Byte an. Also bringen wir alles auf einen Nenner und rechnen die Bitrate, die in Kbit angegeben ist ebenfalls in Byte um. Um von KBit auf Byte zu kommen multiplizieren wir mit 128 (1024 Bit / 8 Bit = 128 Byte). Da der Header ja auch ganze 4 Byte groß ist ziehen wir den gleich mal ab.

        PHP-Code:
        $MP3Info['groesse'] = filesize("foobar.mp3");
        $MP3Info['dauer']   = round($MP3Info['groesse'] / ($MP3Info['bitrate'] * 128)-4); // Angabe in Sekunden mit Headerabzug

        echo "Bitrate:\t".    $MP3Info['bitrate'] ."Kbit\n";
        echo 
        "Spieldauer:\t"date("i:s"$MP3Info['dauer']); 
        Das funktioniert soweit auch ganz gut bis auf die Abweichung der Spieldauer um úngefähr -zwei Sekunden.

        Nun seid ihr dran.

        Kommentar


        • #5
          KRASS!
          Ich verbeuge mich zu tiefst!!

          Kommentar


          • #6
            Hallo,
            das Thema ist zwar schon was älter, aber trotzdem habe ich es gefunden.
            Ich habe den Code mal ausprobiert und bei den Bitrates UND bei der Länge stimmt es überhaupt nicht ein.
            Das Script sagt mir, dass ein Lied (was eigentlich 2:53 lang ist) 7:28 lang ist.
            Außerdem zeigt es mir an, dass das Lied 48 Kbit/s hat. Eigentlich hat es aber 128 kbit/s.
            Irgendwie verstehe ich das nicht so ganz, warum es mir SOOO andere Werte anzeigt o0...

            Kommentar


            • #7
              Das macht mein mp3-Player bei variablen Bitraten aber auch.
              Noch zu #4: Nicht alle ID-3-Versionen führen ihre Daten am Anfang der Datei (vgl. ID3-Tag – Wikipedia). Imho gibts auch bereits sehr gute Bibliothemen zum php-seitigen Auslesen von mp3-Tags.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                getid3
                I like cooking my family and my pets.
                Use commas. Don't be a psycho.
                [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                Kommentar

                Lädt...
                X