Dienstag, 18. Januar 2011

How music went on the internet...

To use the previously described algorithm I wrote a small software which creates the fingerprint and sends a request to the respective web service. I will describe the web service in a future blog.
 
There is a user and a password needed to test the software. The test user is 'test' and the password is 'test1234'.
 
The initialization will search for updates, load the configuration, and afterwards initialize the program surface.
 


The user will be asked to log in after the update and the loading of the configuration is done.






You will then see an empty program window with only three menu buttons.


 
The first button opens a dialog which allows the user to load a folder - only mp3 files are supported at this time.



After selecting a folder you will see all files in this folder (and subfolders) in the window.


 
You can unfold and or fold up the track list using the +/- button.
You can open a dialog using the button called 'title information'. This button becomes active when an input is necessary.




In this dialog the user has the opportunity between entering title information and load it by using 'upload' or register the selected title by choosing a hit of the suggestion list. The advantage of selecting a title is that the data do not have to be uploaded again - the disadvantage is that the quality of the suggested song might be worse than the song of the user.

The second button of the program window opens a dialog which allows you to change the settings.




'Upload' gives you the opportunity to change upload settings. The checkbox 'Delete folder from list after upload' automatically deletes all folders, from which all songs have been loaded into the system, from the list. This function is not implemented by now.
The option 'Number of synchronous uploads' indicates the number of simultaneous uploads. It also indicates how many songs are analyzed simultaneously.
I strongly advise against from a value higher than 4 because the analysis will increase the workload of the core of the CPU to 100% and will steadily increase the storage usage because the audio file is fully loaded to the storage as pcm/wav.
This is a good point to tell you that the storage usage of the program is very high so I have to redesign the software design. Tips and comments are highly desired!
 
The source code is available under http://sources.my-musix.com/ .
The starting point is 'MyMusixJava2', the surface and its logic is available under 'MyMusixUploader'.
You will need sources & libraries in the following folders to build the software:
EuphonySymphony
MyMusixCommon
MyMusixI18N
MyMusixJava2
MyMusixLibShared
MyMusixUploader
MyMusixWSClient
 
All files under ...MyMusixJava2/Distributed are executable versions which can be built from the available sources.

  

Dienstag, 4. Januar 2011

Wie die Musik ins Internet auswanderte...

Um das im vorher beschriebene Verfahren zu nutzen, habe ich eine kleine Software geschrieben, die den Fingerabdruck erzeugt und eine Anfrage an einen entsprechenden Webservice stellt. Den Webservice werde ich in einem späterem Blog beschreiben.

Um die wird ein Benutzer und ein Passwort benötigt. Um die Software testen zu können, gibt es den Testbenutzer  'test' mit dem Passwort 'test1234'.

Beim Programmstart wird nach Updates gesucht, die Konfiguration geladen und anschließend die Programmoberfläche initialisiert.

Nach erfolgtem Update und laden der Konfiguration, wird der Benutzer aufgefordert sich einzuloggen.


Anschließend erscheint ein leeres Programmfenster mit lediglich drei Menübuttons.
Der erste Button öffnet eine Dialog über den der Benutzer einen Ordner laden kann - derzeit werden ausschließlich mp3 Dateien unterstützt.
Nach Auswahl eines Ordners werden alle in diesem Ordner liegenden (sowie Unterordnern) Dateien in dem Programmfenster angezeigt.

Über den +/- Button kann die Titelliste aus- bzw. eingeklappt werden.
Hinter den Titeln kann über den Button mit der Aufschrift "Titelinformationen" ein Dialog geöffnet werden. Dieser Button wird erst aktiv, wenn eine Benutzereingabe erforderlich wird.
In diesem Dialog kann der Benutzer entweder Titelinformationen eingeben und anschließend über "Hochladen" den Titel in das System einspielen, oder durch Auswahl eines Treffers in der Vorschlagsliste den ausgewählten Titel in der Benutzermusikbibliothek registrieren.
Der Vorteil an der Auswahl eines Titels liegt darin, dass die Daten nicht mehr hoch geladen werden müssen - der Nachteil ist, dass eventuell die Qualität des vorgeschlagenen Lieds schlechter ist, als die des Lieds des Benutzers.

Der zweite Button des Programmfensters öffnet einen Dialog in dem Einstellungen vorgenommen werden können.
Unter 'Upload' werden Uploadeinstellungen vorgenommen. Die Checkbox 'Delete folder from list after upload' sorgt dafür, dass Ordner dessen Lieder alle in das System eingespielt wurden, automatisch von der Liste gelöscht werden. Diese Funktion ist derzeit noch nicht implementiert.
Die Option 'Number of synchronous uploads' gibt die Anzahl der zeitgleichen Uploads an. Sie stellt aber auch ein, wie viele Lieder zeitgleich analysiert werden.
Von einem höheren Wert als 4 rate ich dringend ab, da die Analyse einen Kern einer CPU auf 100% Auslastung ansteigen lässt sowie der Speicherverbrauch stetig wächst da bei jeder Analyse eine Audiodatei komplett als pcm/wav in den Speicher geladen wird.
Hier kann ich kurz anmerken, dass der Speicherverbrauch des Programms recht groß ist und ich daher das Softwaredesign überarbeiten muss. Tipps und Anmerkungen sind daher erwünscht!



Die Quellen des Codes kann man unter http://sources.my-musix.com/ einsehen.
Der Einstiegspunkt ist 'MyMusixJava2', die Oberfläche sowie dessen Logik liegt aber unter 'MyMusixUploader'.
Um die Software builden zu können werden Sources & Bibliotheken in folgenden Ordner benötigt:
EuphonySymphony
MyMusixCommon
MyMusixI18N
MyMusixJava2
MyMusixLibShared
MyMusixUploader
MyMusixWSClient

Alle Dateien unter ...MyMusixJava2/Distributed stellen eine lauffähige Version dar, die aus den vorhanden Quellen erstellt werden kann.