Moduł MP3::Tag
Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowaSpis treści
Moduł MP3::Tag
Wstęp
Zapewne większość z nas korzysta z plików muzycznych w popularnym formacie MP3. Być może również chociaż część tej grupy spotkała się nieraz z problemem skatalogowania dużych zbiorów tego typu plików. Oczywiście w internecie można znaleźć wiele zarówno darmowych jak i komercyjnych programów, ale dlaczego nie napisać swojego i to jeszcze w Perlu? W końcu podstawą takiego programu jest wyłuskiwanie danych na temat danego utworu z tak zwanych etykiet ID3Tag. Ten proceder w dużym stopniu ułatwi nam właśnie opisywany przeze mnie rozbudowany moduł MP3::Tag. Pozwala on czytać rozmaite tagi plików MP3. Dostarcza prosty interfejs do metod osobnych modułów, które pozwalają czytać jak i zapisywać tagi. W momencie pisania tego artykułu moduły MP3::Tag::ID3v1 i MP3::Tag::ID3v2 pozwalają czytać i zapisywać, natomiast moduły MP3::Tag::Inf, MP3::Tag::CDDB_File, MP3::Tag::File, MP3::Tag::LastResort mają jedynie możliwość odczytu danych.
Metody
- new()
- Tworzy obiekt mp3, który może być potem użyty do wyciągnięcia bądź ustawienia różnych tagów.
$mp3 = MP3::Tag->new($filename);
- get_tags()
- Sprawdza, które tagi mogą być odnalezione w obiekcie mp3. Zwraca listę @tags, która zawiera łańcuchy identyfikujące znalezione tagi jak np. "ID3v1", "ID3v2", "Inf" czy "CDDB_File". Do każdego z tagów mamy dostęp poprzez $mp3->{tagname} gdzie tagname to łańcuch zwrócony przez funkcję get_tags.
@tags = $mp3->get_tags;
- new_fake()
- Tworzy udawany obiekt MP3::Tag, który zachowuje się jak plik MP3 bez tagów. Jeśli chcemy ustawić kilka właściwości tego obiektu należy podać true jako opcjonalny argument.
$obj = MP3::Tag->new_fake();
- new_tag()
- Tworzy nowy tag o podanym w $tagname typie.
$tag = $mp3->new_tag($tagname);
- close()
- Używając tej metody możemy ręcznie zamknąć plik jednak nie jest to niezbędne, ponieważ moduł robi to automatycznie.
$mp3->close;
- genres()
- Zwraca referencję do listy wszystkich rodzajów muzyki (genres), lub odpowiadającą nazwę lub id dla danego id lub nazwy.
$allgenres = $mp3->genres; $genreName = $mp3->genres($genreID); $genreID = $mp3->genres($genreName);
- autoinfo()
- Zwraca informacje o tytule, numerze ścieżki, artyście, nazwie albumu, komentarzu, roku i rodzaju muzyki. Informacje te mogą być pobrane z ID3v1-tag, ID3v2-tag, pliku CDDB, pliku .inf oraz z samego pliku. Domyślnie metoda będzie próbowała znaleźć tag ID3v2 aby zdobyć informacje. Jeśli nie będzie to możliwe następne w kolejności będą ID3v1-tag, plik CDDB, plik .inf i jeśli te także nie zostaną znalezione, użyje nazwy pliku aby uzyskać tytuł, numer ścieżki, artystę i nazwę albumu. Komentarz, rok i rodzaj muzyki będą odnalezione poprzez metody comment, year i genre.
autoinfo() zwraca tablicę z informacją lub referencję do hasza. Hasz ma cztery klucze 'title', 'track', 'artist' i 'album', w których przechowywane są informacje. Jeśli zostaną również odnalezione komentarz, rok i rodzaj, hasz będzie również zawierał klucze 'comment', 'year', 'genre'.
Jeśli opcjonalnie podamy argument 'from', zwrócone wartości (tytuł, numer ścieżki, artysta, nazwa albumu, komentarz, rok i rodzaj) będą referencjami do tablic, w których pierwszy element będzie wartością odpowiedniego pola natomiast drugi rodzajem taga, z którego dana informacja pochodzi (ID3v2, ID2v1 itd.)
A oto przykład zastosowania metody autoinfo():
($title, $track, $artist, $album, $comment, $year, $genre) = $mp3->autoinfo(); $info_hashref = $mp3->autoinfo();
- comment()
- Zwraca informacje o komentarzu. Domyślna kolejność poszukiwania tej informacji będzie taka sama jak w przypadku metody autoinfo(). Również tutaj możemy opcjonalnie podać argument from.
$comment = $mp3->comment(); # pusty łańcuch jeśli nie znaleziono
- year()
- Zwraca informację o roku. Działanie i specyfikacja jak wyżej.
$year = $mp3->year(); # pusty łańcuch jeśli nie znaleziono
- genre()
- Zwraca informację o rodzaju muzyki, która może być pobrana z tagów ID3v2 i ID3v1. Działanie i specyfikacja jak wyżej.
$genre = $mp3->genre(); # pusty łańcuch jeśli nie znaleziono
- composer()
- Zwraca informacje na temat kompozytora. Domyślnie pobierana jest ona z taga ID3v2, w przeciwnym wypadku zwracany jest artysta.
$composer = $mp3->composer(); # pusty łańcuch jeśli nie znaleziono
- performer()
- Zwraca informację na temat wykonawcy. Domyślnie pobierana z taga ID3v2 TXXX[TPE1], w przeciwnym wypadku z taga ID3v2 TPE1, a jeśli te nie istnieją, zwraca artystę.
$performer = $mp3->performer(); # pusty łańcuch jeśli nie znaleziono
Dokumentacja
Moduł ma jeszcze całą masę możliwości, a jego dokumentacja jest wielokrotnie obszerniejsza i jeśli ktoś chciałby zgłębić go w całości tradycyjnie zapraszam na: cpan.org. Jednakże myślę, że udało mi się go przybliżyć na tyle, aby korzystając z powyższych informacji, można było swobodnie zacząć dłubać własny program do katalogowania swoich empetrójek, o którym wspomniałem we wstępie. Do dzieła!