Opomo

2009 / Software / C#, XNA


Opomo ist eine visuell programmierbare Entwicklungsumgebung für Echtzeitprozesse, welche ich im Zuge meiner Bakkalaureatsarbeit erstellte.
Motivation hinter der Entwicklung dieser Software war meine Begeisterung für Partikelsysteme. Die Einfachheit der Algorithmen und der daraus folgenden Komplexität der Ergebnisse übten lange Zeit eine große Faszination auf mich aus, besonders in der Kombination/Synchronisation mit Musikstücken. Meine ersten Versuche unternahm ich im Framework Processing und erste Videos entstanden.

 

 

Der nächste Schritt bestand darin, das Partikelsystem an ein Musikstück anzupassen. Die interessante Stellen (Taktwechsel, Harmoniewechsel,...) versuchte ich zunächst über eine schnelle Fourier-Transformation herauszufinden, stoß dabei aber sehr schnell an Grenzen (zu ungenau) und markierte die Stellen primitiv über die Tastatur.

 

 

Aber ohne richtiger Benutzeroberfläche war die Anpassung des Partikelsystems an ein Musikstück äußerst mühsam. Daher suchte ich nach einer geeigneten Benutzoberfläche, die meinen Ansprüchen gerecht wurde. Meine Wahl fiel auf eine visuell programmierbare Entwicklungsumgebung. Die Flexibilität zur Laufzeit Objekte hinzuzufügen, welche durch Verbindungen unterschiedlich kombiniert und deren Parameter leicht verändert werden können, sprach für sich. Dadurch, dass das Programm auch echtzeitprogrammierbar und der Benutzer unmittelbar auf das Ergebnis Einfluss nehmen kann, ist ein angenehmes und kreatives Arbeiten erst richtig möglich.


 

Ich setzte Opomo in C# um, für die Benutzeroberfläche wählte ich das WPF Framework und für das Rendering das XNA Framework. Das Layout besteht aus einem Hauptfenster und dem Renderfenster: im Hauptfenster sind die Arbeitsfläche, das Menü und eine Verschiebeleiste untergebracht, auf der Arbeitsfläche befindet sich, durch Tabs organisiert, eine beliebige Anzahl an Container, in dem die Objekte (Nodes) platziert werden können. Das Menü ist ebenfalls durch Tabs strukturiert und bietet neben den Hauptfunktionen eine Auswahl aller Nodes an. Im XNA Renderfenster werden in Echtzeit die gerenderten Inhalte dargestellt.


 

Für eine zeitgenaue Steuerung habe eine Zeitleiste implementiert, die einstellbare Werte für die Nodes liefert. Ein Musikstück kann geladen werden und über die Tastatur können interessante Stellen markiert und mit Werten belegt werden.


 

 

Das nachfolgende Video zeigt die Visualisierung eines von mir komponierten Musikstücks unter Verwendung der Zeitleiste, die mit Opomo erstellt wurde.