Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 5 File Formats
  gp 5.1 Contact_Vcard_Build
  gp 5.2 Contact_Vcard_Parse
  gp 5.3 MP3_ID
  gp 5.4 Archive_Tar
  gp 5.5 File_Passwd
    gp 5.5.1 Grundsätzliche Funktionsweise
    gp 5.5.2 .htpasswd-Dateien
    gp 5.5.3 Unix-User verwalten
    gp 5.5.4 Samba-Passwort-Dateien
    gp 5.5.5 CVS-Passwort-Dateien
  gp 5.6 File_HtAccess
  gp 5.7 Spreadsheet_Excel_Writer
    gp 5.7.1 Arbeitsblätter
    gp 5.7.2 Tabellenfelder
    gp 5.7.3 Drucken
  gp 5.8 File_PDF


Rheinwerk Computing

5.3 MP3_ID  toptop


Besprochene Version: 1.1.3 Lizenz: LGPL
Klassendatei(en): MP3/Id.php

Alexander Merzs Klasse MP3_ID eröffnet Ihnen die Möglichkeit, die ID3-Tags, die in MP3-Dateien enthalten sein können, zu lesen und zu manipulieren. Im ID3-Tag sind Informationen wie Titel, Interpret oder Genre enthalten. Darüber hinaus kann das Paket auch weitere Informationen wie die Bitrate oder die Lauflänge eines Stücks extrahieren. Dazu ist es allerdings notwendig, die Datei genauer zu inspizieren, was relativ viel Rechenleistung erfordert. Der Konstruktor erfordert keinen Parameter.

require_once("MP3/Id.php"); 
 
// neues Objekt instanziieren 
$myMP3=new MP3_Id(); 
 
// Datei einlesen 
$erg=$myMP3->read("51st_State.mp3"); 
if (PEAR::isError($erg)) 
{ 
   echo $erg->getMessage(); 
}

Die Datei wird mit der Methode read() eingelesen, die im Fehlerfall ein PEAR_Error-Objekt zurückgibt. Danach enthält das MP3_Id-Objekt alle Informationen, die direkt aus der Datei ausgelesen werden können. Um diese Daten weiterzuverarbeiten, steht die Methode getTag() zur Verfügung. Sie bekommt als ersten Parameter den Namen des Tags übergeben, das ausgelesen werden soll. Der zweite, optionale Parameter bestimmt den Wert, der zurückgegeben wird, wenn das gesuchte Tag nicht gefunden wird. In Tabelle 5.1 finden Sie die Tags, die direkt aus der Datei ausgelesen werden können. Allerdings kann es passieren, dass die Tags keine Informationen enthalten, da der Ersteller der Datei selbst dafür sorgen muss, dass die Felder gefüllt sind.


Tabelle 5.1 ID3-Tags
Tag Enthaltener Wert
file Dateiname
id3v1 1, wenn das ID3-Tag der Version 1 entspricht
id3v11 1, wenn das ID3-Tag der Version 1.1 entspricht
id3v2 1, wenn das ID3-Tag der Version 2 entspricht
name Titel des Liedes / Musikstücks, max. 30 Zeichen
artists Interpret(en), max. 30 Zeichen
album Album, auf dem das Stück enthalten ist, max. 30 Zeichen
year Jahr der Veröffentlichung, max. 4 Zeichen
comment Kommentar, max. 30 Zeichen in Version 1.0 und max. 28 Zeichen in Version 1.1
track Nummer des Liedes auf der CD (nur ab ID3 Version 1.1), 2 Zeichen
genre Genre des Stücks im Klartext
genreno Nummer des Genres, 1 Byte

In der Version 2 [Weitere Informationen zu den Tags finden Sie unter www.id3.org. ] des ID3-Tags sind darüber hinaus noch Felder für den Liedtext oder ein Bild vorhanden. Allerdings scheint diese Version zurzeit kaum genutzt zu werden und wird derzeit auch noch nicht von der Klasse unterstützt. Es erscheint auch unwahrscheinlich, dass das Format sich in Zukunft weiter verbreiten wird, da eine der großen Stärken von MP3-Dateien ihre geringe Größe ist, die durch enthaltene Songtexte oder Ähnliches verloren gehen würde.

Möchten Sie nun also den Interpreten und den Titel eines Stücks ausgeben, sähe das so aus:

require_once("MP3/Id.php"); 
$myMP3=new MP3_Id(); 
$myMP3->read("51st_State.mp3"); 
echo ($myMP3->getTag("artists"))."<br />"; 
echo $myMP3->getTag("name"); 
// Ausgabe: 
// New Model Army 
// 51st State

Sie sehen schon, dass das Auslesen dieser Informationen wirklich sehr einfach ist. Genauso einfach können Sie Daten auch neu schreiben, wozu die Methode setTag() vorgesehen ist. Sie bekommt das Tag übergeben, das einen neuen Wert erhalten soll, und den dazugehörigen Wert. Bitte beachten Sie hierbei die maximalen Längen, die in Tabelle 5.1 angegeben sind. Ist ein Wert zu groß für das vorgesehene Feld, wird er ignoriert.

Ein wenig hinterhältig ist, dass Sie die Nummer des Genres nicht direkt setzen können. Es ist nur möglich, mithilfe von setTag("genre","Rock"); ein gültiges Genre zu selektieren. Das System bestimmt dann die dazugehörige Genre-Nummer, die dann im Tag abgelegt wird. Sollten Sie das Tag genreno manipuliert haben, so wird der dort enthaltene Wert überschrieben. Eine Liste aller verfügbaren Stilrichtungen können Sie sich mit

echo "<pre>"; 
var_dump (MP3_Id::genres()); 
echo "</pre>";

ausgeben lassen. Die Methode liefert ein indiziertes Array zurück, mit dem Sie natürlich auch weiterarbeiten können. In diesem Zusammenhang könnten die Methoden getGenre() und getGenreNo() hilfreich sein, die beide nicht statisch aufgerufen werden können. Die erste bekommt die Nummer eines Genres übergeben und liefert den Klartext-Namen zurück. Die zweite stellt die Umkehrung dazu dar, bekommt also den Namen eines Genres übergeben und liefert die korrespondierende Nummer zurück. Die Methode akzeptiert noch einen zweiten Parameter, mit dem Sie den Rückgabewert bestimmen können, falls das Genre nicht gefunden wird. Sollten Sie diesen zweiten Parameter nicht nutzen, gibt die Methode den Wert 0xFF bzw. 255 zurück, wenn das Genre nicht gefunden wird.

Möchten Sie alle Tags leeren, steht die Methode remove() zur Verfügung. Häufiger wird jedoch der Fall vorkommen, dass Sie eine relativ große Anzahl von MP3-Dateien mit ähnlichen Tags versehen müssen. Wenn Sie also beispielsweise alle Lieder einer CD mit Tags versehen wollen, sind die Tags artists, album und year immer identisch. In einem solchen Fall können Sie mithilfe der Methode copy() alle Tags aus einem »Master-Objekt« in die anderen Objekte hineinkopieren.

Nachdem Sie die Inhalte der gewünschten Tags verändert haben, können Sie die Datei mithilfe der Methode write() wieder speichern. Auch write() gibt im Fehlerfall ein PEAR_Error-Objekt zurück.

require_once("MP3/Id.php"); 
$master=new MP3_Id(); 
// "Master-MP3" einlesen 
$master->read("51st_State.mp3"); 
//Objekt fuer "leeres" MP3 
$myMP3=new MP3_Id(); 
$myMP3->read("EmptyMP3.php"); 
// Daten kopieren 
$myMP3->copy($master); 
// Titel der Datei setzen 
$myMP3->setTag("name","Green and Grey"); 
// Datei schreiben 
$myMP3->write();

Möchten Sie einen tieferen Einblick in die Struktur der Datei bekommen, kann das Paket die Datei auch für Sie analysieren, die Bit-Rate, die Laufzeit und Ähnliches ermitteln. Hierzu können Sie entweder dem Konstruktor ein true als zweiten Parameter übergeben oder die Methode study() nutzen. Im ersten Fall wird die Datei sofort nach dem Einlesen analysiert, im zweiten erst nach dem Aufruf von study(). Da das Analysieren der Datei einen deutlich höheren Aufwand verursacht, sollten Sie diesen Schritt nur dann ausführen, wenn es wirklich nötig ist. Wenn Sie z. B. einen Server zum Verwalten Ihrer MP3-Dateien erstellen möchten, sollten Sie die Daten einmal ermitteln, wenn neue MP3s hinzugefügt werden, und diese dann in einer Datenbank oder Datei ablegen.

Nachdem die Datei analysiert wurde, stehen zusätzlich zu den schon genannten Tags die in Tabelle 5.2 erläuterten Tags zur Verfügung.


Tabelle 5.2 Zusätzliche Informationen, die von MP3_ID ermittelt werden können
Tag Enthaltener Wert
mpeg_ver MPEG-Version (üblicherweise 1, da MP3 den Audio Layer 3 des MPEG 1-Formats bezeichnet)
bitrate Bit-Rate, mit der die Datei gesampelt wurde (Dateien mit VBR – Variable Bitrate – werden zurzeit nicht korrekt erkannt. Es wird die Bitrate des ersten Frames zurückgeliefert.)
frequency Frequenz, in der die Datei gesampelt wurde
mode Stereomodus
copyright 1, wenn die Datei einen Copyright-Vermerk trägt
filesize Dateigröße in Bytes
length Dauer des Musikstücks in Minuten und Sekunden. (Eine Datei mit VBR liefert hier einen falschen Wert, da die Größe auf Basis des ersten Frames berechnet wird.)

 <<   zurück
     
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: PHP PEAR
PHP PEAR
Jetzt Buch bestellen!
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Rheinwerk-Shop: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Rheinwerk-Shop: MySQL 5.6






 MySQL 5.6


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern