der MODULAR

Hier soll es ausschließlich um Arbeiten zu neuen und alten Ensembles gehen.

Moderator: herw

Antworten
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Das Bussystem 1

Beitrag von herw »

Das Bussystem 1
Ich beginne mal mit dem Bussystem, also den Verbindungen zwischen den Racks.
Bussystem.gif
In der obigen Abbildung sieht man, wie die Parameter an die Racks übergeben werden: Bis auf die letzten beiden Ausgänge L und R, handelt es sich ausschließlich um ein System von monophonen Event-Leitungen, die lediglich Information über die Ein- und Ausgänge weitergeben.
Ich erkläre die Busleitungen von oben nach unten, und zwar zunächst die Initialisierungsbusse.
  • A#
    • gibt die Anzahl aller vorhandenen Ausgänge des Systems an. Die Anzahl wird beim Einfügen eines Racks oder eines Moduls automatisch aktualisiert.
  • A+
    • Von Rack zu Rack und Modul zu Modul werden die Ausgänge gezählt, so dass am Ende dieses Busses schließlich die Gesamtzahl an den Parameter A# übergeben wird. Im Bild zur Übersicht erkennt man die Übergabe an eine internen Verbindung Ü A+. Die Übergabe geschieht im Makro INIT. Jeder Ausgang hat also eine Nummer als Adresse.
  • E+
    • Entsprechend wird auch jeder Eingang automatisch nummeriert.
  • XM+, YM+
    • Alle Aus- und Eingänge haben in ihren Modulen und damit auch in den Racks Koordinaten, die deren Position angeben. Damit nicht für jeden einzelnen Aus- und Eingang die Koordinaten umständlich „ausgezählt” werden müssen, erhalten alle Racks und Module einen eigenen Koordinaten-Ursprung. Dies ist jeweils links oben die Ecke eines Racks bzw. Moduls. Innerhalb des Racks haben alle Aus- und Eingänge relative Koordinaten. Dadurch braucht man nur einmal die relativen Koordinaten innerhalb eines Moduls festzulegen und kann so solche Module mehrfach verwenden; man muss sich dann nicht mehr um die Koordinaten kümmern. Hinter den beiden Busausgängen erkennt man, wie das nächste Rack wiederum seinen neuen Bezugspunkt bekommt. Die angegebenen Einheiten stimmen mit dem neuen System nicht mehr überein, da ich in Zukunft Koordinaten pixelweise übergebe und nicht wie in der Abbildung mit sehr groben Rastereinheiten; in den zur Zeit veröffentlichten Versionen ist das Raster 24 Pixel weit.
Die erwähnten Busse werden eigentlich nur einmal benötigt, nämlich bei der Initialisierung des gesamten System, also beim Aufruf des Ensembles.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von herw am 25. November 2006, 18:51, insgesamt 5-mal geändert.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

buh, mir raucht der schädel - hört sich aber alles ziemlich clever an.
bitte vor jeder frage erstmal überprüfen, ob das kapitel "mein erster synth" S. 76 im hnadbuch, schon gelesen wurde.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

herw hat geschrieben: Die beiden kleinen Makros vor den Audioausgängen L und R, nehmen Rücksicht auf die Ohren des Users beim Umschalten von Snaps;

was passiert da drinnen?
bitte vor jeder frage erstmal überprüfen, ob das kapitel "mein erster synth" S. 76 im hnadbuch, schon gelesen wurde.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

helmsklamm hat geschrieben:
herw hat geschrieben: Die beiden kleinen Makros vor den Audioausgängen L und R, nehmen Rücksicht auf die Ohren des Users beim Umschalten von Snaps;
was passiert da drinnen?
lade einfach MODULAR MINI 2 und schau nach; ich habe keine Geheimnisse; es erklärt sich von selbst.
Beim Umschalten der snaps, gab es in der ersten Version schreckliche Knallgeräusche, wenn Tubolator und Echo gleichzeitig umgeschaltet wurden. Durch Trial und Error habe ich hier eine akzeptable Lösung gefunden; NI offenbar noch nicht, denn bei manchen Snap-Umschaltungen im neuen FM8 kann es auch ordentlich Knallgeräusche geben. Diese rühren daher, dass der Tubolator sehr hohe Signalpegel erzeugt, wodurch spontane Signalpegel-Änderungen noch mehr verstärkt werden. Ein dahinter geschaltetes Delay vervielfacht unter Umständen diese Knallgeräusche. Ich habe versucht, dies durch Phasenverschiebungen (1-pole-Filter) einerseits und durch ein kurzes Ausschalten des Audiosignalweges für ca. drei Zehntel Sekunden in den Griff zu bekommen, was eben wie schon gesagt größtenteils gelungen ist. Eine Idelalösung ist es noch nicht, aber ein Kompromiss. Diese Maßnahmen habe ich an weiteren kritischen Stellen (den Effektmodulen) ebenfalls vorgenommen. Der Tubolator ist ein Modul, das noch einer Aufbereitung bedarf.
Zuletzt geändert von herw am 29. Dezember 2006, 18:07, insgesamt 4-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

das Bussystem 2

Beitrag von herw »

Das Bussystem 2

Die nachfolgenden Busse sind Datenbahnen, die die eigentlichen Verknüpfungen zwischen den Ein- und Ausgängen steuern und gleichzeitig die Grafik die entsprechenden Kabel zeichnen lässt.
Ich übergehe für einen Moment den nächsten Anschluss:
  • >A>
    • Wird ein Ausgang angeklickt, so wird die Nummer des jeweiligen Ausgangs über diesen Bus gesendet bzw. durch alle Module und Racks bis zum Ende der Kette weitergeleitet. Jeder Ausgang greift (über ein Merge-Modul) schreibend auf diesen Datenbus zu. Wie man dem Übersichtsbild entnehmen kann, wird diese Information vom letzten Rack über eine interne Verbindung „Ü A>E” an das Initialisierungsmodul übergeben und dann in den Bus „A>E” eingespeist. Dies ist nötig, da alle Busse Einbahnstraßen sind und daher diese Informatiuon ja auch den weiter links stehenden Modulen zur Verfügung stehen müssen.
  • A>E
    • wie oben beschrieben, erhält über diesen Bus jeder Eingang E die Verbindungesinformation.
  • >E>
    • Jeder angeklickte Eingang gibt seine Nummer über diesen Bus weiter zum SnapValueArray, in dem alle virtuellen Kabelverbindungen gespeichert sind. Um einen Vergleich mit einem Hardware-System zu geben, sollte man sich vorstellen, dass an allen Eingängen Kabel hängen (fest verdrahtet), die in beliebige Ausgänge gesteckt werden können. D.h. es kann in jeden Eingang immer nur ein Signal hineingeführt werden, während alle Ausgänge beliebig viele Eingänge versorgen können. Jeder Eingang „besitzt” also ein Kabel. Sollen mehrere Quellen auf einen Eingang wirken, muss man einen Mixer dazwischen schalten. Natürlich könnte man auch auf den Gedanken kommen, mehrere Kabel in einem Eingang enden zu lassen; REAKTOR bietet aber dies mit seinen internen Verknüpfunge (SEND-RECEIVE) leider nicht an, so dass man automatisch zu diesem Konzept geleitet wird, bzw. es keine Alternative gibt. Im Gegensatz zu Hardwaresystemen spart man hier also so genannte Verteiler-Patches.
  • >X1>, >Y1>
    • Koordinaten des gewählten Ausgangs
  • >X2>, >Y2>
    • Koordinaten des gewählten Eingangs
Die letzten vier Busse geben die nötigen Anfangs- und Endpunkte des zu zeichnenden Kabels an das SnapValueArray und die Grafik weiter.
Zuletzt geändert von herw am 29. Dezember 2006, 14:53, insgesamt 2-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

das Modul INIT

Beitrag von herw »

Das Modul INIT
INIT.gif
Das Modul INIT übernimmt einerseits die Funktion der Initialisierung für die Koordinatensysteme (orangener Kasten), andererseits fungiert es auch als ein Dummie-Modul mit dem Eingang 0, damit stumm geschaltete Eingänge eine Scheinverbindung haben (send-Modul Q 01 NIL im gelben Kasten).
Aus Gründen, die in den Beschränkungen von REAKTOR 5 liegen, brauche ich für die Regler ein Klocksignal. Ich leite es aus dem SystemInfo-Modul ab: DClk. Es sendet einen Event 1 vor jedem Update des Displays.

Es ist eine CPU-mäßig preiswerte Eventquelle, um einfache zeitunkritische Routinen zu übernehmen. Ich gehe auf diese Eventquelle bei der Besprechung der neuen Drehknöpfe noch ein. Sie steht allen Modulen über die IC-Send „IC DClk” zur Verfügung.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von herw am 29. Dezember 2006, 14:56, insgesamt 2-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

die Rahmenmodule

Beitrag von herw »

die Rahmenmodule
Das Rahmenmodul „oben” ist schnell erklärt. Das Modul „oben” zeigt im Panel die Versionsnummer und den Namen des MODULARs an.

Das Modul „unten” kümmert sich um das virtuelle Keyboard und Transponierungen der MIDI-Pitch-Signale bzw. Wahl des Ausschnitts des virtuellen Keyboards.
unten.gif
Das virtuelle Keyboard selbst besteht im Wesentlichen aus einem Mouse-Area-Modul, das transparent über dem eigentlichen Tastatur liegt. Im Gegensatz zu NIs Keyboard beherrscht dieses sogar den Glissandoeffekt (Überstreichen der Tastatur bei gedrückter Maus liefert neue Gate- und Pitchbefehle) als auch Velocity-Befehle. D.h. betätigt man eine Taste in der oberen Hälfte, so werden abhängig von der Mausposition verschiedene Velocity-Wert gesendet. Da dies in den Gate-Befehl eingearbeitet ist, wird damit meistens eine Hüllkurve unterschiedlich angesteuert, so dass sie zur Filter- oder Lautstärke-Regulierung benutzt werden kann. Mit dem Velocity-Taster kann man die Velocity-Signale, die das virtuelle Keyboard ausgibt, ausschalten.
Die Tastengrafik (hat mir ein netter Mitarbeiter von NI vor einigen Jahren geschickt) bestand ursprünglich aus einem Multipicture mit dreizehn Bildern einer Oktave mit ungedrückten bzw. einer gedrückten Taste. Dadurch ist die Ansteuerung sehr einfach zu gestalten. Ich habe diese Grafik zerschnitten, so dass jede Taste gedrückt wie auch ungedrückt dargestellt werden kann. Das Erzeugen von Gate-Implusen beim Glissando war am schwierigsten zu realisieren, da man einen Event-Loop benötigt. Durch Einbau eines Unitdelays wurde diese Schleife aufgelöst. Die Einzelanimation hat den Vorteil, dass man gleichzeitig die Tasten des Computer-Keyboards, die Maus oder ein Midi-Keyboard benutzen kann und alle gedrückten Tasten gleichzeitig angezeigt werden.
Es gibt hier leider einen Bug in REAKTOR beim Drücken der Tasten auf dem Computer-Keyboard: drei aufeinander folgende Halbtöne und auch andere Mehrfachkombinationen werden nicht vollständig angezeigt. Anscheinend ist noch niemandem dieser Bug aufgefallen, wobei dies auch nicht sehr bedeutend ist.
Da es bei Modularen immer mal zu unvorhergesehenen Fehlschaltungen durch den Nutzer geben kann, dient der Paniktaster zum sofortigen Ausschalten aller Midi-Gate-Signalen. Hängende Noten werden dadurch vermieden.
Mit dem Regler Transparency wird die Transparenz der virtuellen Kabel eingestellt.
In den neuen Versionen wird man hier auch die Kabelfarbe wählen können.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von herw am 26. November 2006, 09:23, insgesamt 3-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

SnapValueArray und Grafik

Beitrag von herw »

SnapValueArray und Grafik
Die beiden Makros rechts, erhalten, wie schon im Bussystem beschrieben, die nötigen Informationen zur Abspeicherung der Kabelverbindung (SnapVa-lueArray) und der Darstellung durch das Multipicture.
Grafikverwaltung.gif
Vom Bussystem werden nur die Koordinaten der Aus- und Eingänge übergeben. Um daraus auch Linien der nötigen Breite zu machen, müssen für jeden Zeichenbefehl vier Linien (früher 16) erzeugt werden. Deren Koordinaten, Farbe, Transparenz müssen in einer bestimmten Reihenfolge an das SnapArray-Modul und an das Multipicture übergeben werden. Man muss mit vielen Order-Befehlen (in der alten Version) oder Latches (in der neuen Version) arbeiten.
Die wesentliche Arbeit wird in den Makros Fusspunkte und 4 Linien geleistet.
SnapValueArray.gif
Die Koordinaten der Linien-Endpunkte werden aus den Koordinaten der Ausgänge und Eingänge an die Grafik des Multipictures angepasst; wir erinnern uns, dass die Koordinatenursprünge und die Ausrichtung des zu Grunde gelegten Panels nicht mit denen des REAKTOR-internen Koordinatensystems beim Multipicture übereinstimmen.
Im Makro 4 Linien (in den aktuellen Versionen 16 Linien), findet man dies durch Iteration und zwei Modulo-Module realisiert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Das Rack

Beitrag von herw »

Das Rack
Ein Rack besteht aus einer größeren Anzahl von Modulen, vergleichbar mit den Modulen eines Hardwaresystems wie dem berühmten Moog MODULAR. (Quelle: Synthesizer / Sequenzer http://www.synthesizerforum.de/synthesizer/)
Das Bild lässt die Herzen aller Hardware-Freaks höher schlagen. Ähnlich ist auch ein Rack eines herw MODULAR aufgebaut (sorry, hier musste ich zur Unterscheidung mal meinen Namen voranstellen):
Rack Panel.gif
Man erkennt hier die beiden Module MIDI und ADSR und einige Leermodule; sie können wie in einem Hardwaresystem verschiedene Breiten haben.

Die Struktur des Racks spiegelt genau diese Tatsache wider.
Rack Struktur.gif
Die Idee eines modularen Systems ist ja, unabhängige Module zu schaffen, die beliebig zu einem umfangreicheren System zusammengestellt werden können. Die Module lassen sich an beliebiger Stelle innerhalb des Racks einbauen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

ein Modul

Beitrag von herw »

ein Modul
Wir werfen mal einen Blick in die Struktur des Moduls ADSR:
Modul ADSR.gif
Ich hätte auch jedes andere Modul zeigen können, alle sind ähnlich aufgebaut.Wir erkennen wieder die Busse der Hauptstruktur, die hier auch von Modul zu Modul weitergereicht werden. Links ist ein Makro für die Panelelemente der Ein- und Ausgänge. Rechts ist die Signalverarbeitung, also die „Elektronik” eines Moduls; hier findet man Oszillatoren, Hüllkurvengeneratoren oder Filter oder ... und die restlichen Panelelemente wie Regler und Schalter. Das große Core-Makro in der Mitte verwaltet die Informationen aus dem Makro Ausgänge/Eingänge und bindet sie in die Busse ein. Das eigentlich Neue an dem MODULAR sind die beiden kleinen Module rechts davon:
virtuelles Kabel.gif
Hier liegt das eigentliche „Geheimnis” des MODULAR, ein virtuelles Kabel - überraschend unscheinbar.
Es besteht aus dem IC-Send Modul „->SW In 1” und dem dazugehörigen Receive-Modul „SW1” (kein IC-Receive !!). Das IC-Send-Modul schaltet das Receive-Modul und schafft damit eine Verbindung zu einem Signalausgang (man erkennt die zwei Signalausgänge des ADSR-Moduls rechts hinter der Signalverarbeitung). Es handelt sich dabei um ein gewöhnliche Send-Module.
Die Funktionsweise erkläre ich in einem späteren Abschnitt.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: ein Modul

Beitrag von herw »

Ausgänge und Eingänge

Ausgangs- und Eingangsbuchsen, dienen sowohl als Anzeige für den Beginn und das Ende eines virtuellen Kabels, als auch als Panelelement zum Einrichten und Löschen einer solchen Verbindung.
Ausgang_Eingang Panel.gif
Im PrimaryLevel-Makro Ausgänge/Eingänge sind die Panelelemente zusammengefasst (gelber Kasten).
Beide Arten bestehen aus einem MouseArea-Modul zur Bedienung und einem picture- bzw. multipicture-Modul zur Anzeige.
Ausgang_Eingang.gif
Ausgang:
Ausgang.gif
Eingang:
Eingang.gif
Der Ausgang wird nur durch einen Rechtsklick (BR) gesteuert (Auswahl), der Eingang dagegen durch Rechts- und Doppelklick (BR bzw. DB). Dabei gibt der Rechtsklick den Befehl zum Einrichten, der Doppelklick zum Auflösen eines viruellen Kabels. Zu beachten ist, dass der Rechtsklick ein Gate-Event erzeugt. Alle Klickbefehle sollen als Gate-Events (1-0) übergeben werden. Da der Doppelklick des MouseArea-Moduls nur ein Trigger (1) ist, wird er durch einen kleinen Trick in ein Gate-Event umgewandelt:
trg2gate.gif
Core-Cells geben gleichzeitige Events jeweils von oben nach unten aus; durch die Aufsplittung in zwei Ausgänge wird aus dem 1-Event ein 1-0-Event. Das anschließende Merge-Modul vereint die beiden Events wieder in einer Datenleitung. Ein Merge-Modul innerhalb der Core-Cell würde nichts bringen, da Core-Cells bei Gleichzeitigkeit immer den unteren Part auswählen würden, also in diesem Fall nur eine 0 erzeugt würde. Zur Unterscheidung von einem Event mit dem Wert 1 (Eingang 1) wird hier der Wert -1 ausgegeben.
Man könnte auch auf die Idee kommen, nur Triggerimpulse zu nehmen. Doch dann ist die Verwaltung der virtuellen Kabel etwas schwieriger, IC-Send-Verknüpfungen übergeben nur dann einen Event, wenn er vom vorangegangenen verschieden ist.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von herw am 29. Dezember 2006, 17:52, insgesamt 2-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: ein Modul

Beitrag von herw »

kleine Bemerkung zum Zeitaufwand: vergleicht man mal das Datum der letzten Post (26.11.2006) mit dem heutigen (29.12.2006), dann kann man daran ermessen, wie wichtig eine begleitende Dokumentation bei großen Projekten ist. Nach einem Monat müsste ich mich wieder neu in die Schaltung hineindenken, um weiter arbeiten zu können. Das sporadische Arbeiten würde sonst zu einer immerwährenden Aufarbeitung führen.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

zu deiner letzten bemerkung:

da hast du leider recht - der mehraufwand des notierens könnte sich tatsächlich richtig lohnen. ich hab jetzt ne weile "ausgesetzt" und muss ehrlich sagen, das ich augenblicklich enorme schwierigkeiten habe einige meiner eigenen schalten nachzuvollziehen. speziell bei multi-bedignungs-logik teilen oder manch anderen geschichten fang ich praktisch wieder bei 0 an:(

villeicht n guter vorsatz fürs neue.
bitte vor jeder frage erstmal überprüfen, ob das kapitel "mein erster synth" S. 76 im hnadbuch, schon gelesen wurde.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

leider muss ich hier eine kurze Denkpause einlegen. Da ich die Verwaltung der Ein- und Ausgänge in eine CoreCell legen will (wollte?), kam es zu einem Eventloop beim Einschalten des Ensembles

wir erinnern uns: jeder Ausgang übergibt seine Adresse beim Anklicken an den Bus >A>. Diese Information wird am Ende des Racks über die IC-Send-Receive-Verbindung im Modul Init an den Bus A>E übergeben; alle Eingänge erhalten die Information über den angebotenen Ausgang. Da dieser Bus auch wieder in dieselbe Event-CoreCell führt, "errechnet" REAKTOR offenbar für den ersten Event einen Eventloop.

Neu für mich ist, dass Eventloops in Event-Zellen generell nicht zugelassen werden. Komischerweise trat eine entsprechende Fehlermeldung nur direkt nach dem Start des Ensembles beim Anklicken eines Ausgangs auf. Die globalen Einstellungen (globaly disable ...) haben keinen Einfluss darauf. Es ist erstaunlich, dass REAKTOR diese Loops über so große "Distanzen" erkennt.
Ich habe nun zwei Möglichkeiten zur Auflösung des Eventloops:
  • Trennung der Eingangs- und Ausgangsverwaltung
  • Konstruktion eines Eventdelays mit Hilfe von Geralds (cookiemonster, krümelmonster) Audio-Event-CoreCell.
Die Trennung wird wohl in jedem Fall funktionieren; aber die zweite Lösung reizt mich natürlich auch ;-)

ciao herw
Zuletzt geändert von herw am 5. Januar 2007, 15:38, insgesamt 1-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

die Lösung war sehr einfach:
event-loop-blocker.gif
Ein A to E Trig-Modul verhindert den eventloop beim ersten Event nach der Initialisierung. Offenbar akzeptiert REAKTOR nun den loop als nicht problematisch, da er eindeutig ausgelöst wird und somit eine Reihenfolge innerhalb der Event-Core-Cell gewährleistet ist. Fragt mich jetzt nicht, warum das so ist; ich habe beim Experimentieren einfach Glück gehabt und mir fiel diese einfache Lösung in den Schoß.

ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Antworten