Mp3 nach Ogg convertieren unter Linux. Und am Ende wieder foobar2000
Neulich hatte ich das Verlangen, meine digitale Musiksammlung mal etwas genauer unter die Lupe zu nehmen und etwas auszumisten. Ich wollte nicht direkt die Musikdateien löschen sondern nur all die anderen Dateien, die dort noch so rumspuken und eigentlich nicht benötigt werden, wie z.B. Albumcover, Playlisten und Text/NFO-Dateien. Mit der Kommandozeile unter Linux und Befehlen wie
find . -type f -iname "*.mp3" | wc -l (gibt die Anzahl aller mp3-Dateien an)
war es leicht, ein paar Statistische Aussagen zu meiner Sammlung zu treffen. Letztlich musste ich feststellen, dass 95 % meiner Musikdateien im mp3-Format vorliegen und nur 1% im freien ogg-vorbis-Format. Damit war die Idee geboren, meine gesamte Musiksammlung in eben dieses freie Format umzuwandeln. Warum? 1. Weil ich es kann. 2. Weil ich es interessant finde, auf die suche nach (halb-)automatischen Möglichkeiten für diese Aufgabe zu gehen und 3. Weil Freie Formate Rocken.
Nun gibt es natürlich Programme, die solche Konvertierungen in einem Rutsch ausführen können. Dummer weise sind oft die Möglichkeiten der Einflussnahme etwas begrenzt. Vor allem die Bitrate bereitete mir Sorgen. Natürlich wird die Audio-Qualität bei so einem Vorgang nicht besser - im Gegenteil. Um dieses Problem möglichst gering zu halten, könnte man natürlich einfach alle Dateien mit 320 kbps oder mehr konvertieren. Nur stellt sich hier die Frage, ob sich das bei Dateien, die im Ausgangsformat lediglich 128 kbps besitzen, überhaupt lohnt. Der Unterschied bei der Dateigröße ist schließlich beträchtlich.
Ideal wäre also, wenn man festlegen kann, das z.B. Dateien mit einer Ausgangsbitrate von 128 kbps dann mit 192 kbps ins OGG-Format konvertiert werden. Dateien mit 192 Ausgangsbitrate werden nach 256 kbps gewandelt und Dateien mit höherer Bitrate (320 z.B.) bekommen eine noch höhere neue Bitrate.
Eine solche Abstufung erlauben die üblichen Programme leider nicht. Als Informatiker öffnet man bei solchen Gelegenheiten natürlich sofort die Entwicklungsumgebung und versucht etwas eigenes zu basteln. Ich habe mir in dem Zusammenhang zum ersten mal die Programmiersprache Python angeschaut. Nach einigem Rumprobieren bin ich dem Ziel sogar etwas näher gekommen - mein Script konnte alle Mp3s rekursiv einlesen und zumindest schonmal ins WAV-Format zwischenspeichern und die ID3-Tags aufheben. Die OGG-Konvertieren hätte hier nur noch angeschlossen werden müssen. Allerdings hat mich dann doch die Lust verlassen und ich habe mir vorgenommen, das ganze später weiter zubasteln.
Am Ende kam mir dann jedoch noch eine andere Idee: Foobar2000. Foobar ist nämlich nicht nur ein super Abspielprogramm sondern kann auch alle möglichen Formate in alle möglichen anderen Formate konvertieren. Und was hier wichtig ist: Ich kann natürlich auch meine gesamte Mp3-Sammlung auf einmal einlesen und dann nach der Bitrate Sortieren. Und schon kann ich selektiv konvertieren. Und direkt wurde mir wieder bewusst, wie sehr foobar2000 unter Linux fehlt.
Musikplayer
Hin und wieder habe ich in der letzten Woche Zeit gefunden, um an meinem Musikplayer weiter zu werkeln. Der Grund, warum ich das Projekt wieder hervorgekramt habe ist, dass ich vor einiger Zeit sowohl auf dem Notebook als auch auf meinem PC komplett auf Linux Mint umgestiegen bin und Windows nur noch ein Schattendasein fristet und ich deshalb wieder aufs neue feststellen muss, dass die Linux-Musikplayer leider nicht meinen Geschmack treffen und Foobar2000 über Wine auch nicht sonderlich gut läuft.
Einen eigenen Musikplayer zu entwickeln ist allerdings auch nicht ganz so einfach. Vor allem die Grund-Funktionalität, nämlich das Abspielen einer mp3 ist nicht so ohne weiteres hinprogrammiert, zumindest wenn man wie ich wenig Ahnung von C oder C++ hat, denn mit bloßem JavaScript lässt sich keine Mp3 abspielen. Da mein Player aber in jedem Fall frei und OpenSource sein wird, ergeben sich einige Vorteile bei der Entwicklung. Ich kann auf Programmcode anderer freier Projekte zurückgreifen und mir anschauen, wie andere Leute das machen.
Es gibt ein paar ähnliche Projekte, die ebenfalls auf Mozillas XUL aufbauen. Hier ist als erstes natürlich Songbird zu nennen, der jedoch von seinem Konzept und der Funktionalität her nicht meinen Vorstellungen entspricht. Es war jedoch trotzdem interessant, den Quellcode zu lesen, allerdings ist es nicht so einfach, den Überblick zu behalten bei der großen Anzahl an Funktionen, die Songbird mitbringt.
Es existieren aber noch weitere freie Multimedia-Player auf XUL-Basis. "XULPlayer" ist ein universeller Video- und Audio-Player, der auf der MPlayer-Bibliothek aufbaut. Leider wird der XULPlayer auch nur für Windows entwickelt.
Eine weitere Alternative wäre XULMusic, der noch am ehesten meinen Vorstellungen entspricht, wenn es darum geht, auf dem Code aufzubauen. Leider ist genau dieser nicht mehr Verfügbar. Zwar kann man auf den XUL- und JavaScript-Code direkt zugreifen, da dieser ja nicht kompiliert wird, jedoch auf den Code der zugrunde liegenden GStreamer-Bibliothek kann nicht so einfach zu gegriffen werden. Leider funktioniert die Version nicht korrekt, was vermutlich daran liegt, dass dieses Projekt schon ein paar Jahre ohne Aktualisierungen auf dem Buckel hat.
Aktuell teste ich deshalb einige Varianten, um innerhalb einer XUL-Applikation Audio-Dateien abzuspielen und dies per JavaScript zu steuern.
Snake Game
Die Langeweile am Wochenende hat mich dazu gebracht, einen Snake-Klon zu schreiben. Wer einmal ein altes Nokia-Handy besessen hat. kennt das Spiel sicher noch, aber auch auf anderen Plattformen ist das Spiel - manchmal in Abgewandter Form - anzutreffen. Aktuell gibt es im Netz jede Menge Flash-Klone und auch im Ubuntu-Repository befinden sich einige Varianten (KTron z.B.).
Wirklich zufrieden bin ich damit aber nicht so ganz. Oft wird das simple Spielkonzept durch anderes Zeugs erweitert oder gar verfälscht. Ich persönlich mag da lieber das alte simple Snake haben. Eine Schlage, ein Spielfeld an dessen Rändern man durch schlüpfen kann um an der anderen Seite wieder heraus zu kommen und ein einfaches kleines Etwas, das man fressen kann um zu wachsen.
Hier gibt es zwar Flashvarianten, die genau das mitbringen aber ... naja es ist halt nur Flash. Irgendwie Uncool halt. Deshalb und vor allem eben wie Eingangs erwähnt aus Langeweile hab ich mich an eine HTML+JavaScript-Variante gesetzt.
Das Spiel funktioniert soweit, es kann aber sein, dass noch hier und da Fehler stecken. Zwar ist es bei dieser Art von Onlinegames für die meisten unerheblich aber ich sags trotzdem dazu: Der Quellcode steht natürlich frei zur Verfügung und kann von jedem angeschaut und verändert werden. Auch kann das Spiel gerne auf eigene Webseiten hochgeladen werden. Über Feedback freue ich mich natürlich auch sehr. Viel Spaß
Probeklausur Objektorientierte Programmierung
Hier gibt es Lösungsvorschläge für die Probeklausur Objektorientierte Programmierung. Wichtig: Alle Angaben ohne Gewehr. Das ist lediglich die Lösung, wie ich sie in der Klausur gemacht hätte, ob diese Lösung 100% richtig oder mit den Vorstellungen von Prof. Ringwelski übereinstimmt, weiss ich nicht.
C, Eclipse, JNI und Musikabspielen
Wie in der Übung versprochen, hier nochmal die Anleitung für Eclipse und C
vegan food: Pancakes und Kekse
Nach langer Zeit mal wieder ein Update im Bereich der Vegetarischen Küche: Diesmal mit Pancakes und Keksen.
Songbird nicht mehr für Linux. Wäre ja auch zu schön gewesen.
Vor einiger Zeit hatte ich hier an dieser Stelle die Idee vorgestellt, eine eigene Musik-Abspielsoftware zu schreiben oder aber eine Vorhandene freie Software auf meine Bedürfnisse anzupassen. Kurz gesagt ging es darum, dass der Musikplayer foobar2000 einige wirklich überragende und leider auch einzigartige Funktionalitäten bietet, leider jedoch nicht freie Software ist und auch nur für Windows zur Verfügung steht.
Was also Fehlt ist ein Player, der für alle relevanten Betriebssysteme (mindestens Windows und Linux) zur Verfügung steht, dabei aber viele gute Ideen von foobar2000 übernimmt, jedoch möglichst die weniger guten Ideen und Verhaltensweisen der üblichen Player, nicht übernimmt. Dazu eine Möglichst simple Konzeptionelle Grundlage auf Basis von Playlisten statt einer Medienbibliothek.
Zunächst stand die Idee im Raum, einen eigenen Player von Grund auf neu zu entwickeln. Hier könnten grundsätzliche Entscheidungen von Grund auf getroffen werden ohne auf Abhängigkeiten vorhanderer Software rücksicht nehmen zu müssen. Die andere Möglichkeit, die mir in den Sinn kam ist, eine vorhandene freie Playersoftware den eigenen Bedürfnissen anzupassen. Dafür ist freie Software ja schließlich da.
Als Fan von Mozilla-Technologien bietete sich hier natürlich Songbird an, welcher ja komplett auf eben jener Mozilla-Plattform aufbaut, und deshalb neue Funktionalität auch über Erweiterungen eingefügt werden könnte. Zwar ist Songbird ziemlich überladen mit unnötigen Funktionen, diese könnten jedoch zum großen Teil genauso auch wieder rausgenommen werden. So weit bisher.
Nun musste ich jedoch mit einer Mischung aus Entsetzen und Enttäuschung lesen, dass das Songbird-Team die Unterstützung für ihre Linux-Version einstellt (Quelle: Heise Open). Zwar wird es weiterhin Releases für Linux geben, diese werden jedoch nicht mehr getestet und neue Features werden nicht mehr Unterstützt. Für meinen Teil hat sich damit die Frage letztlich geklärt, welchen der oben kurz erwähnten Wege ich bevorzugen würde. Zwar ist es realistisch gesehen, natürlich weiterhin möglich, Songbird auch auf Linux zu benutzen und wenn man auf neue Features verzichten kann, ist dies Sicher kein Problem. Jedoch macht sich das Team mit dieser Entscheidung nicht unbedingt sympatischer. Eine aktive Unterstützung in Form von beigesteuerten Erweiterungen, macht so natürlich keinen Spaß mehr.
Da ich aktuell mit meinem Praktikum beschäftigt bin, ist diese Programmidee aber ohnehin erstmal noch Zukunftsmusik. Jedoch beschäftige ich mich in meinem Praktikum auch mit dem Mozilla-Framework und der Arbeit mit XML - beides Dinge, die für die Entwicklung eines solchen Players von Vorteil sein dürften. Gerade die Verarbeitung von XML sollte für einen Playlist-Orientierten Player wichtig seien.
Beispielprogramm aus der Vorlesung
Wie Versprochen hier das Programm, welches ich in der Vorlesung vorprogrammiert hatte. Ich habe an allen Relevanten Stellen Kommentare hinzugefügt. Für einen ersten Einstieg sollte es also sicherlich eine kleine Hilfe sein.
Für Fragen dazu ist wie immer in der Übung Gelegenheit oder auch hier in den Kommentaren.
Viel Spaß beim Lesen, (hoffentlich) Verstehen und Nachprogrammieren.
Ein Hoch auf Vektorgrafik
Am Wochenende hat mich mal wieder die Lust gepackt, ein bisschen mit dem tollen Programm InkScape rumzuspielen. Und je mehr ich mit InkScape arbeite, um so mehr gefällt mir das Programm. Und Vektorgrafik sind sowieso eine coole Angelegenheit.

