Uni Stuff #1: MIDI zu Minecraft Sound-Blocks

Dies ist der erste Teil einer kleinen Reihe namens Uni Stuff. Mein Informatik-Studium ist jetzt seit über einem Jahr vorbei; in dieser Zeit sind eine Menge Projekte entstanden und Erinnerungen zusammengekommen, von denen so manche besser niemals das Licht der Öffentlichkeit erblicken. Alles andere ist teilweise ganz cool, und mit diesen Posts würde ich das gerne festhalten, denn Erinnerungen halten leider auch nicht ewig.

Dies ist gleichzeitig auch ein Collab mit meinem ehemals Kommilitonen, jetzt Kollegen, Jan. Der Plan ist, dass die Posts abwechselnd auf beiden Blogs erscheinen (werden dann unten verlinkt).

Im ersten Semester wurden wir in eine Art Intro-Projekt gesteckt – die Prämisse des Ganzen war, dass Projektarbeit einen größeren Teil des Studiums ausmacht und wir deshalb so früh wie möglich Übung darin bekommen sollten. Man stelle sich vor, Erstsemester ohne jegliche Informatikkenntnisse müssen in Gruppen irgendetwas Informatik-würdiges produzieren… es standen zur Auswahl Dinge wie Core War, Vier Gewinnt Simulationen und Schaltungen in Minecraft. Die Zuteilung zum jeweiligen Thema war vorbestimmt und wo ich gelandet bin liegt wohl nahe.

Was tut man also mit Minecraft, einem Spiel das mich nie großartig interessiert hat und welches man aus unzähligen Let’s Plays der jüngeren Generation kennt? Man konnte sich sicher sein: Alles was man in diesem Spiel mittels Logikschaltungen bauen kann wurde entweder bereits gebaut oder würde den zeitlichen Rahmen sprengen.

Der Name unseres Projektes war das selbst gewählte Javaception, vermutlich weil irgendjemand die Idee hatte, eine JVM in Minecraft aufzusetzen. Der eigentliche Plan war aber letztendlich ein anderer: Statt einer Ingame-Schaltung sollte es ein Mod werden, welcher die ebenfalls auf YouTube in Massen anzutreffenden Musik-Schaltungen (die mittels logischen Bausteinen und Tönen erzeugenden Blöcken Melodien wiedergeben können) automatisiert aus MIDI-Dateien herstellt.

Wir waren zu viert, zwei davon mit Erfahrung im Programmieren, so nahmen wir den Minecraft-Quelltext auseinander, experimentierten mit MIDI und versuchten irgendwie einen MIDI-Parser und Block-Generator gewaltsam mit dem riesigen Haufen dekompilierten und unkommentierten Code in Einklang zu bringen. Jeder der morgens um Acht programmieren musste weiß welch psychische Folter man dadurch erlebt, vor allem wenn man dann auch noch Java und Eclipse anfassen muss.

Wir benutzen die Stromschiene und das zugehörige Cart als Taktgeber und fahren hiermit an den braunen „Sound-Blocks“ vorbei, diese werden dadurch automatisch aktiviert.

Die MIDI-Events durchlaufen eine Pipeline: Zuerst werden diese repariert, da sie in einem absurden Durcheinander vom Java-internen MIDI-Framework ausgespuckt werden. Hierbei können wir gleich das Event für die BPM abfangen, denn darüber steuern wir die Geschwindigkeit des Carts.

Anschließend folgt der interessante Teil, denn wir müssen jetzt herausfinden, wie wir die zeitlich sehr präzisen Events auf das doch eher unpräzise Minecraft-„Grid“ abbilden. Hierfür nutzen wir Coding und Algorithmen (letztendlich doch eher ein Bruteforce-Ansatz…), am Ende haben wir ein relativ gutes Ergebnis, können noch einige leicht verrutschte Anschläge quantisieren und schmeißen alles andere weg. In einem letzten Schritt schieben wir die 127 in MIDI verfügbaren Noten in den unfassbar großen, 24 Noten umfassenden Minecraft-Bereich indem wir um Oktaven transponieren, platzieren die Blöcke und voilà: Der Ghettoblaster war geboren.

Die Noten sind übrigens nur wirklich „In-Sync“ wenn Java gerade Lust darauf hat. Man sieht es vor allem gegen Ende der Videos – die Demo lief teilweise auf einem MacBook Air flüssiger als in der Aufnahme. Ist es der Garbage Collector, der JIT-Compiler? Man weiß es nicht. Der Traum vom Minecraft Media Player… er ist geplatzt.

Hey Kids, wollt ihr auch auf eurem jährlichen Projektwettbewerb der Hochschule bleibenden Eindruck hinterlassen und den ersten Platz einsahnen? Baut einfach etwas lautes nervtötendes und präsentiert es penetrant während des Besucher-Rundgangs. Stellt euch frech mit Lautsprechern zwischen die anderen Teilnehmer und spielt eine Stunde lang Rhythm Is A Dancer und Blue auf 24 Minecraft-Noten.

Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s