Donnerstag, 17. Mai 2012

Prototyp zu smartLib

Das größte Echo aus der Community haben wir sicherlich für unsere Pläne für die Bibliothek bekommen. Das verwundert nicht - schließlich gibt es da draußen in den Weiten des Internets soetwas noch nicht. Gleichzeitig haben wir aber auch gesagt, dass eine Bibliothek ohne zugehörigen Player nicht sonderlich viel Sinn macht. Dabei bleiben wir auch. Trotzdem müssen wir uns frühzeitig Gedanken machen, wie die Bibliothek später aussehen soll. Um euch in diese Überlegungen einbeziehen zu können, stellen wir euch heute einen Prototypen für smartLib vor - der Bibliothek für smartSound.


Was ist smartLib?

smartLib (kurz für smart library) ist ein Tool zur Kategorisierung und Verwaltung von Musik. Es entspricht im Wesentlichen der Bibliotheksfunktion, die wir in einem früheren Blogpost beschrieben haben. Es gibt aber einen entscheidenden Unterschied zu unseren damaligen Überlegungen: smartLib wird man auch als alleinstehendes Programm benutzen können (also auch ohne smartSound zu starten). Wir wollen zwar immer noch den besten Musikplayer für's Rollenspiel entwickeln, aber es soll niemand auf die Bibliotheksfunktion verzichten müssen, nur weil er seinem Lieblingsmusikplayer treu bleiben möchte. Außerdem geben wir damit anderen Projekten die Möglichkeit, smartLib zu verwenden, genauso wie wir es aus smartSound heraus tun werden.


Warum ein Prototyp?

Ein Prototyp ist dazu gedacht, eine Vorschau auf die fertige Software zu geben und danach (also vor der Entwicklung der "echten" Version) vollständig weggeworfen zu werden. Wir verwenden den Prototypen aus zwei Gründen: Zu allererst möchten wir von euch wissen, was ihr von dem Konzept haltet. Zweitens müssen wir uns auch darauf einstellen, wie wir smartLib technisch organisieren werden, um smartSound bereits jetzt darauf auslegen zu können.

Wichtig ist auch, dass wir anderen Projekten die Möglichkeit geben möchten, auf der gleichen Datenbasis wie wir zu operieren. So könnten mit smartLib Bibliotheken erstellt werden, die dann von anderen Tools verwendet werden können.

Was kann der Prototyp?

Hier einfach mal eine Liste von Features, die der Prototyp bereitstellt:

  • Auswählen eines Ordners als "Library". Hierzu wird eine Datei namens .soundlibrary in diesem Ordner erstellt. Hierbei werden nur solche Dateien hinzugefügt, die als Audiodateien erkannt werden.
  • Zuweisen von hierarchischen Tags zu den einzelnen Sounds, wie MUSIC/Atmosphere/Fight
  • Darstellung dieser Tags in einer Baumstruktur und Filterung aller Sounds nach einem Tag
  • Beim Hinzufügen von MP3s automatisches Auslesen von ID3-Tags für Interpret, Album, Titel, Jahr und Genre. Werden keine Tags gefunden, erhält der Sound den Tag UNCATEGORIZED.
  • Aus der Liste der gefilterten Sounds Drag'n'Drop der Dateien in einen Musikplayer. Das funktioniert leider nicht mit dem Windows Media Player, sehr wohl aber mit smartSound, VLC oder Winamp.

Die Liste der Features ist natürlich noch kurz. Beispielsweise wird die finale Version nicht nur ID3-Tags für MP3s unterstützen, sondern auch Tagging-Verfahren für OGG und weitere Audioformate. Auch wird es später möglich sein, mehrere Library-Ordner auf einmal zu verwenden.

Systemvoraussetzungen

Wie auch für smartSound wird Java in der aktuellen Version 7 benötigt. Es kann hier heruntergeladen werden.

Was stört euch? Was gefällt euch?

Nun seid ihr gefragt: Sagt uns, was ihr von diesem Konzept haltet. Jede Kritik, jeder Verbesserungsvorschlag ist erwünscht, so wirr und abgefahren er auch erscheinen mag. Probiert's aus und verratet uns hier in den Kommentaren oder in einem der Forenthreads, wie ihr die Musikverwaltung am liebsten hättet. Wir freuen uns auf euer Feeback!

Zur Verwendung des Prototyps

Eine Sache müssen wir allerdings noch betonen, bevor wir euch auf den Prototypen loslassen: Wir wissen, dass das Taggen von Musik ein unglaublich aufwendiger Prozess ist. Wir möchten euch daher davon abraten, den Prototypen bereits zu nutzen um große Teile eurer Musik zu kategorisieren. Das liegt einfach daran, dass es sich nunmal um einen Prototypen handelt und wir nicht garantieren können, dass die Folgeversionen die mit dem Prototypen erstellten Library-Dateien auslesen können. Wir versuchen selbstverständlich hier Rückwärtskompatibilität zu erreichen. Wenn uns allerdings das Feedback dazu zwingen sollte, unser ganzes Datenmodell zu überdenken, dann ist das gegebenenfalls nicht möglich. Macht euch also bitte nicht sonderlich viel Arbeit, die ihr dann möglicherweise im Nachhinein wegwerfen müsst.

In diesem Sinne: Frohes Ausprobieren! Wir freuen uns auf eure Anregungen.

Kommentare:

  1. OK, kurz ausprobiert. Am Anfang hatte ich ein paar Abstürze (Stacktraces unten), aber schließlich konnte ich ein Verzeichnis verwenden.

    Sehr gut finde ich, die DB in einer Datei im Verzeichnis abzuspeichern, hätte ich auch so gemacht. Ich nehme an, die Dateinamen sind dann relativ zur DB-Datei drin.

    Die Meta-Tags Year und Title finde ich nicht so sinnvoll.

    Tags löschen oder ändern geht wohl noch nicht.

    Interessanter fände ich statt des Prototyps mehr das Datenbank-Schema und die verwendete Technologie. Wäre in der Tat schön, wenn Ares mal die DB nutzen könnte, aber dafür müsste es eine .NET-API zum Zugriff geben. Ich würde mich vermutlich für SQLite entscheiden.

    Absturz-Stacktraces:

    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
    der.java:58)
    Caused by: java.io.FileNotFoundException: D:\Ares\Media\Amber & Gefährten\Barde
    nsang\01 - Amber und Gefährten - Der Weg durch den Dunkelforst.mp3 (Zugriff ver
    weigert)
    at java.io.RandomAccessFile.open(Native Method)
    at java.io.RandomAccessFile.(Unknown Source)
    at org.farng.mp3.MP3File.(Unknown Source)
    at org.farng.mp3.MP3File.(Unknown Source)
    at Launcher.main(Launcher.java:109)

    Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
    der.java:58)
    Caused by: java.lang.NullPointerException

    Beides jeweils nach Auswahl eines Verzeichnisses und Bestätigung, dass auch Unterverzeichnisse betrachtet werden sollen.

    AntwortenLöschen
  2. Hi Jörg,

    danke für das Feedback. Zu allererst: In den nächsten Tagen wirds noch einen Blogpost zur Technik hinter dem Prototypen geben, wo wir erklären, was wir benutzen. Aber so viel: Unsere Datenbank ist eine XML-Datei (damit es möglichst wenige Abhängigkeiten gibt und das ganze auch menschenlesbar bleibt).

    Zumindest den Meta-Tag "Title" haben wir drin, um später zwischen Datei- und Liedtitel unterscheiden zu können. Über das Jahr - ja, da kann man sich streiten.

    Zu den Fehlern:
    Beim ersten scheinen das Problem die Umlaute zu sein. Ich werd das mal prüfen. Beim zweiten kann ich aus der Fehlermeldung ehrlichgesagt nichts rauslesen. Vielleicht kannst du mir ja ne Mail schreiben mit den Ordnerinhalten.

    AntwortenLöschen