länge eines mp3-tracks herausfinden

fishguts

Erfahrenes Mitglied
ich hab mal irgendwo gelesen, dass man mit php die ID v1 bzw. v2 tags von mp3-tracks auslesen kann
dann sollte es ja also auch kein problem sein, nur die länge eines songs zu bestimmen :)
wie also kann ich die lnänge eines mp3-liedes herausfinden?
hoffe, ihr könnt mir da helfen
ich will nur die länge, der rest interessiert mich vorerst nicht... vorerst ;)
 
da musste den header der datei auslesen... weiss auch nich genau wie du des machst... geh mal durch die php functionen...
 
bist mir ja ne echte hilfe ;)
ich hatte eigentlich gehofft, das könnte mir jemand ein wenig genauer erklären...
 
Also Länge hab ich nichts gefunden aber das hier:

Was mit jeder Programmiersprache geht, geht natürlich auch mit PHP! Das ID3-Tag (Version 1) belegt in MP3s immer die letzten 128 Byte. Man liest diese 128 Byte einfach aus und zerlegt diese in 6 Teile:


30 Byte : Songname
30 Byte : Künstlername
30 Byte : Albumname
4 Byte : Erscheinungs-Jahr
30 Byte : Kommentar
1 Byte : Genre-Byte

Soweit - so einfach. Was macht man aber nun mit dem Genre-Byte ? Antwort: Der Ordinalwert ( also ord() ) dieses Bytes verweist auf einen festgelegten String. Ich habe vor einiger Zeit im Zusammenhang mit meinem MP3-Browser mal nachgeforscht und bin auf eine Auflistung gestossen, die mir alle Genres zeigte. Diese Strings packt man am einfachsten in ein Array (s.u.).


Hinweise:
Die Genres 80 bis 125 sind Winamp-Erweiterungen. Offiziell sind also nur die ersten 75.
Die ID3v2-Tags kann man auf diese Weise nicht auslesen. Diese sind erheblich komplexer - wer das will, sollte die Spezifikationen von Martin Nilsson auf http://www.id3.org/ mal studieren.
Anwendung: array id3(String filename)
PHP:
<?php
$genre = array(0 => "Blues", 1 => "Classic Rock", 2 => "Country", 3 => "Dance", 4 => "Disco", 5 => "Funk",
   6 => "Grunge", 7 => "Hip-Hop", 8 => "Jazz", 9 => "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($fp, filesize($filename) - 128);
  $id3 = fread($fp, 128);
  $arr = array();
  if (strtoupper(substr($id3, 0, 3)) == "TAG")
  {
    $arr["song"] = trim(substr($id3, 3, 30));
    $arr["artist"] = trim(substr($id3, 33, 30));
    $arr["album"] = trim(substr($id3, 63, 30));
    $arr["year"] = trim(substr($id3, 93, 4));
    $arr["comment"] = trim(substr($id3, 97, 30));
    $arr["genre"] = $genre[ord($id3[127];
    return $arr;
  }
  else
    return false;
  fclose($fp);
}
?>


Quelle
 
ok, das is ja schonmal was :)
aber die spielzeit eines songs bekomm ich so auch nicht raus,oder?
 
vielleicht gibts da auch ne art formel... also length (in sec) = datei in bytes / irgendso ne magische zahl.
 
man könnts ja mal mit dem dreisatz probieren :)

für das problem wirds ja wohl ne gescheite lösung geben, oder?!
 
du musst halt wissen in welcher quali die mp codiert wurde. wenns 128kbits sind dann sind es 128 bits pro sekunde, wie du dann weitermachst sollte dir ja klar sein ;)
 
Zurück