Technik
Wie wird RPGMusicTags.org gemacht? Hier gebe ich ein paar Einblicke in die Technik dahinter.
Datenbasis
Die Daten sind in einer SQLite-Datenbasis gespeichert. SQLite wird verwendet,
weil es ein einfaches und kostenloses DBMS ist, das für eine eher kleine Datenbasis wie diese völlig ausreicht.
Das Datenbasis-Schema kann man hier sehen. Für Tags und Kategorien gibt es
jeweils potentiell viele Übersetzungen in andere Sprachen. Wenn einer eine Übersetzung hinzufügt, ist der
Tag in der neuen Sprache auch automatisch allen Musikstücken zugeordnet, denen er bereits in der alten
Sprache zugeordnet war.
Die Zuordnungen zwischen Tag und Musikstück werden pro Benutzer gespeichert,
weswegen man beim Upload auch einen Benutzernamen mitgeben muss. Wenn ein Benutzer einen Tag wieder entfernt,
wird das in der RemovedTags-Tabelle gespeichert. So ist eine einfache "Abstimmung" zwischen den Benutzern
über ein Tag möglich, denn beim Download wird ein Tag für ein Musikstück nur zurückgegeben, wenn mehr
Benutzer es gesetzt als es entfernt haben.
Musik-Identifikation
Zur Identifikation eines Musikstückes wird AcoustId verwendet. Über den dort bereitgestellten Chromaprint-Algorithmus wird ein "Fingerabdruck" des Musikstücks ermittelt, und über den Webservice bei AcoustId dann die Id geholt. Beim Upload werden auch Künstler, Album und Titel mitgegeben, damit man Stöbern kann. Beim Download kann man das Musikstück auch über diese Attribute finden, aber das ist unzuverlässig.
Webservice
Der Webservice und alle Webseiten hier werden mittels ServiceStack.net
betrieben. Dies ist eine sehr einfache Art, mit .NET einen Webservice zu erstellen. .NET wurde gebraucht, weil
die Tag-Datenbasis sehr viel Code mit Ares gemeinsam hat.
Viel Code kann gleich für Ares und RPGMusicTags verwendet werden, denn ein Upload in die Datenbasis unterscheidet
sich nur in einigen Details von einem Download in die lokale Datenbasis von Ares (und umgekehrt).
Der gesamte Code für den Webservice ist Open Source und in den Sourcen von Ares enthalten.
Die Webseite wird von SmarterASP.NET gehostet.