Open Source im professionellen Einsatz

MP3s kategorisieren und Playlisten anlegen

Trainierter DJ

Je nach Stimmungslage haben Musikliebhaber mal Lust auf Rock, mal auf Schmusepop. Ein MP3-Player mit grafischer GTK-Oberfläche wählt aus der privaten Sammlung passende Lieder aus, erstellt eine Playliste und spielt sie ab. Das Perl Object Environment sorgt dafür, dass alles flüssig abläuft.

In jeder größeren MP3-Sammlung aus gerippten CDs finden sich immer wieder ungeahnte Schätze: Eine Computer-gesteuerte Zufallsauswahl fördert aus Tausenden von MP3-Dateien erstaunliche Kostbarkeiten zutage und erlaubt überraschende Zusammenstellungen aufgrund einfacher Kriterien.

Das hier vorgestellte Perl-Skript »rateplay« zeigt dem Benutzer alle Musikstücke in zufälliger Reihenfolge. Er bewertet dann jedes einzelne nach zwei Kriterien: dem so genannten Energize- und dem Schmoop-Faktor. Energize bestimmt die Dynamik des Stücks, Schmoop die Schmusigkeit. Auf einer Skala von eins bis fünf hätte etwa der Song "Thunderstruck" von AC/DC einen Energize-Faktor von fünf und einen Schmoop-Faktor von eins. "Don\'t Know Why" von Norah Jones hätte einen Energize-Faktor von eins und einen Schmoop-Faktor von fünf.

Jedes Mal, wenn der Benutzer seine Stimme abgibt, speichert eine Datenbank den Dateisystempfad zu dem Song und die beiden Faktoren. Haben sich so einige Bewertungen angesammelt, erstellt das Skript auf Anfragen wie "Spiele mir schnelle Songs, aber keine, die meine Freundin verscheuchen" Playlisten und spielt sie ab.

Grafisches Interface

Abbildung 1 zeigt das Skript in Aktion. Zum Abspielen bereits bewerteter Songs wählt der Musikfreund die gewünschten Energize- und Schmoop-Faktoren in den oberen zwei Knopfreihen aus. Ein Mausklick auf »Play Rated« erstellt eine Playliste aus jenen Songs der Datenbank, zu denen die Werte passen, und spielt sie der Reihe nach ab. Über »Play Next« und »Play Previous« springt das Programm zum nächsten und vorigen Stück.

Um neue Lieder zu bewerten, klickt der Benutzer auf den Button »Random Rate«. Rateplay erstellt daraufhin eine Playliste aus bisher unbewerteten Songs und spielt sie ab. Währenddessen lassen sich für jedes Stück die einzelnen Level einstellen, und zwar über die Buttonleiste am unteren Rand. Nur jeweils ein Energize- und Schmoop-Level pro Stück ist erlaubt. Ein Klick auf »Rate« speichert die Werte in der Datenbank und Rateplay springt zur nächsten Datei.

Abbildung 1: Hier spielt Rateplay nur Songs mit den Energize-Werten drei bis fünf und Schmoop eins bis drei ab. Im Moment dröhnt ein Heavy-Metal-Song aus den Lautsprechern, mit einem Energize-Level von fünf und einem Schmoop-Wert von eins.

Abbildung 1: Hier spielt Rateplay nur Songs mit den Energize-Werten drei bis fünf und Schmoop eins bis drei ab. Im Moment dröhnt ein Heavy-Metal-Song aus den Lautsprechern, mit einem Energize-Level von fünf und einem Schmoop-Wert von eins.

Vom Duo zum Trio

Rateplay nutzt gleich mehrere Perl-Module: Zu dem aus[2] bekannten Erfolgsduo POE und GTK für ruckfreie GUIs gesellt sich diesmal noch der Kommandozeilen-MP3-Spieler Musicus[3] von Robert Muth dazu, ein C++-Programm, das auf den dynamischen Libraries des bekannten Players Xmms aufsetzt. Das Modul »POE::Component::Player::Musicus« (im Folgenden durch »PoCo::Player::Musicus« abgekürzt) von Curtis Hawthorne bindet den MP3-Spieler in den POE-Reigen ein - so steuert das GUI den Player ruckelfrei.

Zum Speichern der Bewertungen nutzt Rateplay die in[4] vorgestellte objektorientierte »Class::DBI«-Abstraktion, die diesmal eine SQLite-Datenbank nutzt (siehe[5]). SQLite legt in einer einzigen Datei eine professionelle Datenbank mit SQL-Abfragemöglichkeit ab. Natürlich gibt es dafür auch ein Perl-Modul aus der DBI-Reihe auf dem CPAN. SQLite ist im Grunde eine ganz normale SQL-Datenbank. Um festzustellen wie viele bewertete Songs in der definierten Tabelle »rated_songs« stehen, dockt der Anwender einfach mit dem Kommandozeilen-Tool »sqlite« an die von Rateplay erzeugte Datenbankdatei »rp.dat« an und setzt einen SQL-Befehl ab:

$ sqlite rp.dat
SQLite version 2.8.12
Enter ".help" for instructions
sqlite> select count(*) from rated_songs;
887


In diesem Beispiel sind also 887 Songs schon bewertet. Genug Stücke, um erstaunliche Playlisten zu erstellen!

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook