RndMp3Copy

Linux GUI

Linux GUI

Windows GUI

Dein MP3-Player fasst noch 60MB, aber kannst dich nicht entscheiden, welche Songs du draufspielen sollst?

Du willst mal quer durch deine neuen Musiktitel hören, aber hast (zB aus Platzgründen) keine Lust, alles auf deinen MP3-Player zu spielen?

Falls das so ist, habe ich genau das Richtige für dich: RndMp3Copy.

Ursprünglich ist das Tool und die Idee von suppaman2 (Gulli-Post hier), doch damit hatte ich (und andere auch, wie im gulli:board zu sehen) ein Problem: Es war total langsam.

Das lag wahrscheinlich daran, dass das Tool komplett in AutoIt3 geschrieben war. Die Scriptsprache ist für Automatisierungen top, aber leider nicht unbedingt performant. Wenn man so ein Tool dann auf eine Musiksammlung von mehreren Gigabytes loslässt, wurde dies sehr stark bemerkbar.

Ich habe die Idee in C++ implementiert und dank der boost::filesystem Library geht das  Tool ab wie Schmitz’ Katze.

Funktionsumfang und Bedienung:

RndMp3Copy wird über Parameter beim Aufruf gesteuert, es lässt sich also zB. als Cronjob planen.

Über -i gibt man das Musikverzeichnis an. Man kann mehrere Verzeichnisse angeben, allerdings braucht man pro Verzeichnis einen -i Switch.

Das Ausgabeverzeichnis übermittelt man mit -o.

Mit -s gibt man die Menge der zu kopierenden Musik an, zB -s 46.7 für 46,7 MB Musik. Alternativ kann man per -s all den gesamten freien Speicher auf dem Gerät füllen (falls eure Musikbibliothek groß genug ist).

Mit -d bestimmt man das Format der kopierten Dateien. Bis jetzt gibt es drei Formate:

  • 0: output/file.ext (default)
  • 1: output/relative/path/file.ext
  • 2: output/relative-path-file.ext

Mit -l kann man eine Datei übergeben, die als Used-List verarbeitet wird. Das bedeutet, dass alle Songs, die in dieser Datei stehen, nicht kopiert werden. Am Ende schreibt RndMp3Copy alle Songs in diese Liste, die kopiert wurden, um ein erneutes Kopieren beim nächsten Mal zu verhindern. Diese Option ist zum Beispiel dann nützlich, wenn die Nicht-Überschreiben-Funktion nicht greift, also wenn man z.B. 10 x je 100MB in verschiedene Verzeichnisse kopieren will oder jeden Tag den Inhalt des MP3-Players löscht und dann voll bespielt (und dabei keine Songs hören will, die man schon am Vortag gehört hat).

Der Parameter -w gibt an, dass RndMp3Copy sich nach dem Kopieren nicht beendet, sondern erst den Benutzer auffordert “any Key” zu drücken.

Per default sucht RndMp3Copy nur nach .mp3 Dateien, dieses Verhalten kann man aber mit -f steuern und andere Dateiformate bestimmen.

Falls man nur Musik von einem ganz bestimmten Künstler haben möchte oder ein Album von der Suche ausschließen will, kann man über reguläre Audrücke (regular expressions) Filter erstellen, die mit -in (Ausdruck muss vorkommen) und / oder -ex (Ausdruck darf nicht vorkommen) gesteuert werden.

Ein Aufruf könnte also so aussehen:

RndMp3Copy -i ~/mukke/ -i /media/cdrom/music/soundtrack/ -o /media/mp3player/ -s 128 -f mp3,wma,ogg,flac -ex “(Tokio.?Hotel)” -w

Der obige Aufruf kopiert also ca. 128 MB mp3-, wma-, ogg- und flac-Songs, die nicht die Wörter “Tokio” und “Hotel” hintereinander beinhalten, von einem Ordner auf einer eingelegten CD und aus dem Verzeichnis “mukke” im persönlichen Ordner (unter Linux) auf den MP3-Player und wartet dann, bis der User eine Taste drückt.

Gui

Meine Versuche, das GUI einheitlich Crossplattform zu machen waren leider nicht ganz so erfolgreich.

Also gibt es separate GUIs. Sie erfüllen nur den einfachen Zweck, die Usereingaben an das Kommandozeilen-Programm zu schicken und dessen Ausgabe dem User anzuzeigen.

Linux-Gui

Das Linux-Gui basiert auf Glade und GTKmm / GTK+. Diese müssen also installiert sein.

Wer einen Gnome-Desktop hat, hat auch die meisten Abhängigkeiten schon installiert.

Windows-Gui

Das für Linux gedachte Gui funktioniert auch sehr schön unter Windows, allerdings sind eine Menge Abhängigkeiten zu erfüllen.

Alleine die Runtimes summierten sich auf über 100mb, weshalb ich das Gui in AutoIt nachgecoded habe. Wer trotzdem unbedingt auch unter Windows mit GTK+ arbeiten will, kann es sich aus dem Sourcecode kompilieren.

Das AutoIt Gui hat keine Abhängigkeiten und sollte Out-Of-The-Box laufen. Es ist im Windows-Bundle enthalten.

Download

RndMp3Copy Windows mit Gui

RndMp3Copy Windows ohne Gui

RndMp3Copy Sourcecode

RndMp3Copy Autoit Gui Sourcecode

RndMp3Copy GTK+ Gui Sourcecode

ToDo-Liste

  • Das komplette Output im GUI parsen und dort per ProgressBar oä. anzeigen
  • Verzeichnisse, aus denen schon Musik genommen wurde, eine Art “used”-Flag geben, diese haben dann niedrigerere Priorität gegenüber Verzeichnissen, aus denen noch gar nichts kam

Changelog:

1.6.0

  • Code komplett neu strukturiert und große Teile neu geschrieben
  • Der Einlesevorgang wurde stark beschleunigt, bei mir liest es jetzt 9x schneller Daten ein!
  • Einige Bugs wurden durch den Rewrite entfernt, allerdings kann es sein, dass sich dabei neue Bugs eingeschlichen haben, Bugreports sind gern gesehen!
  • Mann kann jetzt per -s all das Zielgerät komplett füllen

1.5.3

  • RndMp3Copy gibt jetzt eine kleine Zusammenfassung am Ende aus über die verwendeten Dateien, die benutzte Größe, etc.
  • Einige Fehlermeldungen klarer formuliert
  • Einen Fehler im Windows-GUI behoben

1.5.2

  • Die Used-List (siehe oben -l) implementiert
  • Wie immer ein paar Fixes
  • Das Linux-GUI ist jetzt auch auf dem neuesten Stand
  • Windows- als auch Linux-GUI umstrukturiert und aufgeräumter gestaltet

1.5.1

  • Das Mischen der Songs wird nun intern über Vektoren gemacht, ohne komisches Rumkopieren von Listen wie vorher :D

1.5

  • Man kann nun über regular expressions sowohl inklusiv als auch exklusiv filtern
  • Fehler beim Einlesen von Dateien werden jetzt aufgefangen, diese Dateien werden übersprungen

1.4

  • Das Programm überspringt jetzt Dateien, die im Ausgabeverzeichnis schon existieren
  • Wenn ein Fehler beim Kopieren einer Datei auftritt, bricht nicht der gesamte Kopiervorgang ab
  • Der Zufallsgenerator wurde verbessert
  • Wieder einmal wurde der Code etwas verbessert

1.3.2

  • -w Parameter eingeführt, mit dem das Programm nach Beenden wartet und sich nicht schließt
  • Bugfix für -d Parameter

1.3.1

  • Verbesserung der Anzeige
  • kleinere Fixes

1.3

  • -d Parameter für die Formatierung der Ausgabefiles eingeführt

1.2

  • Bugfixes
  • Codeverbesserungen

1.1

  • Es ist nun möglich, mehrere Input-Verzeichnisse mit -i übergeben
  • -f setzt Filter für verschiedene Dateitypen

1.0

  • Erste Version
  1. Johnny
    13. September 2009, 21:58 | #1

    Moin Moin ADI64,

    cooles Programm, hab ich grad entdeckt und ausprobiert. Meine Anregung dazu: die Zufallsfunktion deutlich verbessern. Aus fast 100.000 Titeln kopiert er bereits beim zweiten Durchlauf bei 500 Titels den ersten Titel doppelt. Beim dritten Durchlauf ist bereits der 93te Versuch schonmal dagewesen. Beim vierten Durchlauf ist bereits der 9te File schon vorhanden. Ich kenne mich mit Zufallsverteilungen nicht so aus, aber so richtig zufällig scheint mir das nicht… Ich habe mir vorher die Musik mit randomisierten Winamp-Playlisten und einem Playlist-Kopierer kopiert, wobei auch hier der Zufall nicht sehr zufällig war: bei 1000 Stücken höre ich dann 6x denselben Interpreten. Ich kenne mich mit der Programmierung von “echten” Zufallszahlen nicht so aus, kann Dir daher auch leider keine Hilfe anbieten. Solltest Du meine Anregung berücksichtigen, schicke mir doch bitte eine Mail zurück. Danke Dir!

  2. 18. September 2009, 16:15 | #2

    @Johnny
    Hey und danke für deinen Kommentar.
    Version 1.4 mit einem besseren Zufallsgenerator ist raus. Außerdem überprüft die neue Version, ob die Files schon existieren und wenn dies so ist, werden diese Files übersprungen.

  3. 15. Juli 2010, 02:34 | #3

    Wirklich tolles Tool! Genau sowas habe ich gesucht. Es wäre richtig toll, wenn der freie Speicherplatz des MP3-Players noch ermittelt werden könnte, so dass man den Player dann restlos füllen kann (ohne, dass man manuell eine Größe für die zu kopierenden Musikstücke angeben muss).

  4. 15. Juli 2010, 16:47 | #4

    So ein Feature habe ich in der Konsolenversion in Version 1.6.0 schon hinzugefügt, allerdings war es noch nicht im GUI und noch nicht dokumentiert, da es noch einen kleinen Fehler hatte.
    Den habe ich soeben behoben und die Option “zugänglich” gemacht, man kann also jetzt auch den kompletten Player befüllen (es wird aber nicht alles gelöscht, sondern nur der noch verfügbare Platz genutzt). :)
    Danke für den Artikel über RndMp3Copy!

  5. 16. Juli 2010, 03:12 | #5

    Wow, das ging ja jetzt echt schnell. Da bin ich wirklich sprachlos. Cool! :)

  1. 12. September 2009, 14:13 | #1