• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[FRAGE] MP3 Tag auslesen

schlegel.berlin

New member
Hi Leute,

hab mich gerade erstmalig damit beschäftigt, ein mp3 -Tag auszulesen um Bitrate und Titel-Länge zu ermitteln.
Hab einen vorhanden Codeschnipsel (keine Ahnung, wo der ursprünglich herkam) für meine Zwecke "umgestrickt".
Funktioniert auch recht ordentlich, nur die Länge ist nicht ganz exakt. Tolerenz ca. 1 - 3 Sekunden, je nach Länge der mp3-Datei ...

Das ist in meinem Fall ziemlich egal und reicht mir völlig, aber möglicherweise braucht ein/e ähnlich "Ahnungslose/r" (wie ich es bin :excitement:) irgendwann mal genau die Funktion und hätte es gerne genauer.

Wenn also eine/r von Euch der "Weisheit letzten Schluss" kennt, wär's echt nett, wenn sie/er dies hier kundtun könnte...

Einen schönen Sonntag noch Euch allen, Karin

PHP:
$mp3 = "Suite_for_20_G.MP3";

$MP3Info = array();
$fp      = fopen($mp3, "r");
$Header  = fread($fp, 4); 
fclose($fp);

$Bitratendefinition = array(0 => "Definitionen", 
                 1 => 32,
                 2 => 40,
                 3 => 48,
                 4 => 56,
                 5 => 64,
                 6 => 80,
                 7 => 96,
                 8 => 112,
                 9 => 128,
                 10 => 160,
                 11 => 192,
                 12 => 224,
                 13 => 256,
                 14 => 320);

$Header  = unpack("n2", $Header);
$Bitrate = $Header['2'] >> 12;

$MP3Info['bitrate'] = $Bitratendefinition[$Bitrate];  

$MP3Info['bits'] = filesize($mp3);
$MP3Info['laenge']   = round($MP3Info['bits'] / ($MP3Info['bitrate'] * 128)-4); 

// Ausgabe

echo 'Spiel-Laenge der mp3 -Datei: '. date("i:s", $MP3Info["laenge"]).' <i>(in Min. und Sek.)</i><br />';
echo 'Bitrate: '.$MP3Info['bitrate'] .' Kbit';
 
Der Code oben funktioniert nur mit MP3-Dateien, die keine ID3-Tags haben und ist auch komplizierter, als er sein sollte (das unpack könnte durch ein ord() ersetzt werden). Zusätzlich ist noch ein Rechenfehler drin (das -4 ist an der falschen Stelle und außerdem gibt es mehr als einen Frameheader). Außerdem funktioniert er nur, wenn man eine feste Bitrate annimmt, was bei MP3 nicht der Fall sein muss.

Wenn ich morgen mal Lust hab', schreib' ich das ev. für ID3-freie Dateien mal um...

PS: filsize() gibt die Dateigröße in Bytes und nicht in Bit zurück... und die Bitraten sind in kBit.
 
Zurück
Oben