-> Warning: Cannot modify header information - headers already sent by (output started at /var/www/morb/textpattern/lib/txplib_db.php:14) on line 257
-> Warning: Cannot modify header information - headers already sent by (output started at /var/www/morb/textpattern/lib/txplib_db.php:14) on line 271
svn+ssh://yourname@icemserv.folkwang-hochschule.de/icemserv-snd/morb
Da sind dummerweise 2 Repositories gelanded. Bitte das mit grossem M auschecken.
]]>Ein (nicht M)ORB kann auf klassische Remote Procedure Calls abgebildet werden. Der Client fragt den Server nach den Daten, der Server liefert, damit ist die Transaktion beendet. Aus Sicht der Anwendung wurde lediglich eine lokale Prozedur aufgerufen, der dazwischen liegende Netzwerklayer ist transparent.
Dieser Ansatz führt bei unserem Modell nicht weiter, denn der Client will die Daten, wenn sie anfallen, sobald als möglich haben, ohne überflüssigerweise Abfragen starten zu müssen, die nichts bringen, wenn sich die Daten nicht verändert haben. Wir müssen also von einem Abfrage- oder Pull-Modell zu einem Abonnement- oder Push- modell.
In diesem ist das Entstehen eines neuen Datensatzes beim Server für den Client ein Event, auf das er eine Reaktion definieren kann, ähnlich dem lokalen Eintreffen eines MIDI- oder OSC Ereignisses.
Die zunächst geplanten Plattformen (Max/MSP und ChucK) bieten von sich aus ein Datenflussmodell, dass ein solches Eventhandling “von Hause aus” bietet oder sogar paradigmatisch darauf basiert (Max).
Bleibt, pragmatische Lösungen für den unteren (Netzwerk-)layer zu finden.
Auch hier hilft das RPC Modell nicht weiter, denn jeder RPC Call stellt eine 1:1-Verbindung zwischen einem Server und einem client dar.
Dies abgebildet auf ein 1:N Abonnement Modell bedeutet, dass der Server für jeden seiner Dienste eine Liste von Abonnenten unterhält, und jeden dieser Abonnenten beschickt, sobald neue Daten entstehen. In einem Netzwerk, wo mittels geeigneter Hardware (Switches) bei einer 1:1 Verbindung die volle Bandbreite zur Verfügung steht, wäre dieser Ansatz wahrscheinlich der Netz-ökonomischste. Da der Funkkanal eines WLAN Netzes jedoch ein geteiltes Medium ist (siehe hier ), und wir ja kabelarm arbeiten wollen, entfällt dieser Vorteil, und wir können uns etwas anderes überlegen. Ausserdem müsste der Server möglicherweise jede Datenveränderung mehrmals (an jeden client einmal) versenden, was die Serverlast erhöht.
Broadcasting, bei dem alle alles mithören müssen, führt auf der anderen Seite zu einer überflüssigen Last auf dem client.
Ein möglicher Kompromiss wäre eventuell IP-Multicasting (siehe hier )
Da die Multicast Adressen netzwerkübergreifend gleich sind, wäre insbesondere der Beitritt zu einem MORB Ensemble ohne weitere Netz-Infrastruktur (Dhcp-server etc.) möglich.
Das ganze könnte so aussehen:
…more to come… please comment
]]>Spezifizierung des MORB-Protokolls
Konstellationen
Es gibt eigentlich nur zwei grundlegende Konstellationen
1. Daten zu MORB
2. Daten vom MORB
Im ersten Fall Daten zu MORB werden Daten generiert und an das MORB-System gesendet.
Typen der Generierung
Interface produziert Daten (Midi-Controller, iPod, Joystick, Tastatur, WEE)
Strukturgeneratoren: Unterprogramme des Environments (FLEM/JMX), die Daten erzeugen (Listen, Trigger, Kontroll-Envelopes), um Parameter automatisiert zu steuern (Amplitude, Frequenz)
Im zweiten Fall Daten vom MORB werden Information vom MORB abgeholt und interpretiert
Typen der Interpretation
Audiogenerator oder -modulator empfängt die Daten und wendet sie auf den angegeben Parameter an
ein in Reihe geschalteter Strukturgenerator verarbeitet die Daten und gibt sie weiter
Für die Registrierung der Metadaten
ID : Benutzer(Source) : Generatortyp : Generatorname : Datentyp
Daten des Brokers (Welche Daten gehen von wem zu wem)
Benutzer (Source) : Benutzer (Target) : Generatorname/ID
Daten-Stream (Object-Message)
Benutzer (Source) : Generatorname/ID : Parametername : Value
als OSC Message könnte das so aussehen /jschmidt/sinus/amp/0.3
Generator-Anfrage (Request)
Der Benutzer (Target) wählt einen Eintrag vom Broker aus
Diese Einträge könnten durch ein Dropdown-Menü angezeigt werden, in dem alle Generatoren aufgelistet werden
Use-Cases
1.Anmelden an Broker
Benutzer startet seine Umgebung (FLEM/JMX), MORB wird aktiviert und prüft auf weitere Instanzen im Netz. Gibt es schon vorhandene Registrierungen, so werden diese mit aufgenommen und der neue Benutzer mit eingetragen.
2.Generator-Anfrage (Request)
Wird einem Interpeter ein Generator zugewiesen, so wird diese Konstellation im MORB festgehalten
3.Verteilen der Daten
Der Broker wird anhand der Requests die Daten an alle registrierten Benutzer schicken, die sich über die Generator-Anfrage beim Verteiler gemeldet haben.
a) Laptops untereinander
b) Laptops und andere Gerätschaften (MIDI, elektronische Musikinstrumente)
c) Laptops und akustische Musikinstrumente (auch und vor allem, Stimme)
zu a)
Da möchte ich gerne wissen:
Wer macht
Was
mit Welchem Programm
Wieviele BPM (Angleichung möglich, siehe MIDI?)
Welche Lautstärke (vielleicht eine Art Zeitfenster von den vergangenen Lautstärkeschwankungen, das immer mitwandert, wie weit man sich nach vorne begiebt, natürlich)
Welche FX (davon die Werte)
Welcher Frequenzbereich ( weiteres siehe Lautstärke)
Welcher Rhythmus (nicht nur BPM eben)
Dann: ich möchte darauf reagieren, meine Parameter daran anpassen, die Schnittmenge nehmen, das genaue Gegenteil, etc. pp.
Ich möchte Akzente setzen.
Ich möchte eine Fläche darunter legen.
etc. Dies als einfache Beispiele.
Jeder Parameter sollte einsichtig sein.
______________________________________
Es stellt sich nun die Frage, ob das alles nicht zuviele Informationen sind, die man also gleichzeitig wahrnehmen, verarbeiten muss und dann auch noch darauf reagieren soll, also gleich Drei Sachen auf einmal.
_________________
Das also von mir soweit. Wer Ideen hat, etwas hinzufügen oder grundsätzlich bestreiten möchte, bitte, der Ring ist eröffnet. :-)
]]>im Wintersemester 2008/09 schlugen mich zwei Gruppen von Studierenden am ICEM für den „Preis für besonders gute Lehre“ der Studierendenschaft vor, und verbanden diesen Vorschlag mit einer Projektidee, die mit dem möglichen Preisgeld realisiert werden soll.
Die eine Projektidee, FLEM (Folkwang Laptop Ensemble), entstand aus der Beschäftigung mit SLork, dem Stanford Laptop Orchestra (http://slork.stanford.edu/). Hier stand die Entwicklung autarker Laptopstationen inklusive Lautsprecher und Verstärker, sowie diverser Eingabesensoren entstehen, die unabhängig von Stromnetz- und anderen Infrastrukturen an jedem Ort zusammen agieren können.
Der zweiten Projektidee, JMX (Johannes‘ MaX ??) liegt ebenfalls die Idee von live miteinander spielenden Rechnersystemen zu Grunde, jedoch gingen die Studierenden hier ein eher von einer Client/Server-Architektur aus, bei der ein zenraler Soundserver für die Klangsynthese verantwortlich ist, der von den anderen beteiligten Rechnersystemen parallel gesteuert wird.
Beiden Ansätzen ist gemein, dass menschliche Spieler die jeweiligen Systeme live und in Echtzeit steuern, und damit quasi Mitglieder eines rechnerbasierten Ensembles werden.
Um nun nicht allein das eine Projekt 1:1 umzusetzen und das andere zu lassen, sondern eine gemeinsame Basis zu schaffen, auf der möglichst beide Projekte umzusetzen sind, entstand nach einigen Diskussionen mit den Studierenden die Idee zu MORB
Egal, ob es sich um das egalitäre FLEM oder das hierarchisch organisierte JMX handelt, in beiden Fällen muss jeder der Beteiligten wissen, was die jeweils anderen an Möglichkeiten zur Klangsteuerung und -generierung anbieten, und muss ihnen wiederum seine Fähigkeiten mitteilen.
Darüberhinaus soll jeder Beteiligte Mitteilungen über Änderungen eines anderen Beteiligten „abonnieren“ können, um seinerseits darauf reagieren zu können.
Drittens sollen zu jedem Zeitpunkt neue Beteiligte hinzukommen und andere sich verabschieden können (Jam-Session)
Da die Beteiligten Gruppen unterschiedliche Basissoftware einsetzen möchten (FLEM: ChucK, JMX: Max/MSP) soll diese Kommunikation plattformunabhängig erfolgen
Wir haben es hier also mit einem dynamischen verteilten System zu tun, dessen Beteiligte jederzeit Struktur und Zustand (oder Teile davon) ändern können, und jede Änderung für alle Beteiligten transparent ist.
Da die Anforderungen von Ferne an eine Softwaretechnik erinnern, die unter dem Namen Object Request Broker bekannt ist, lag der Name „Musical Object Request Broker“, also MORB nahe.
Für FLEM:
Für JMX:
Für Alle:
Geeignete Sensorik, Remote Controls, zusätzliche Effektoren (Ipod Touch, Arduino etc.)