HK Workshop: Paneldesign!

Workshops für Reaktor-Anfänger

Moderator: herw

Gesperrt
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

HK Workshop: Paneldesign!

Beitrag von helmsklamm »

Ok, für manche eine unnötige Spielerei, für andere so wichtig wie der morgendliche Stuhlgang: sexy Oberflächen.

Wie auch Herw´s Workshops, beginne auch ich hier mit dem ganz kleinen Einmaleins, bevor wir dann später zur Bruch- und Potenzrechnung kommen und vielleicht abschliessend die Riemannsche Zetafunktion (um mal im Bild zu bleiben) streifen.
Ich setze Basiswissen in einem Photoeditor vorraus, hierauf wird nicht eingegangen.

Wie bei den meisten Anwendungen in Reaktor, so heisst es auch bei der individuellen Panelgestaltung: Viele Wege führen nach Rom.
Und die gute Nachricht gleich zuerst: Das extra für V4 geschaffene Multipicture (MP) ist in der neuen Version so gut wie obsolet. In der aktuellen Version, kann nahezu jedes Controll-Modul DIREKT als Picture-Container dienen und das bedeutet neben einem geringeren Verdrahtungsaufwand auch eine erhöhte Stabilität: denn in V4 führte die Verwendung der MP, beim gleichzeitigen Wunsch "diese" zu midifizieren, unweigerlich zu Eventloops (auch wenn Herw da widersprechen mag;-)).
Wie gesagt, gibt es nur noch wenige Gründe für die Nutzung von MPs, und diewenigen welche, sind idR mit keiner Mehrverkabelung verbunden.

Doch beginnen wir erstmal gaaaaaaaanz sachte:

Der denkbar einfachste Fall: ein Button! 2 Zustände = 2 benötigte Bilder, die den jeweiligen Zustand optisch vermitteln. Liegen in einem Bild mehrere Teilbilder vor, so sprechen wir von einem Filmstreifen oder einer Animation. In unserem Fall hat die Animationsseqeunz 2 Frames/Bilder.
Wie stellt man nun aber eine solche Sequenz her?

Bild
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von helmsklamm am 20. Mai 2006, 13:16, insgesamt 1-mal geändert.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

Auf dem Beispielbild erkennen wir 2 mal das Wort Button, einmal normal und einmal kopfstehend, sowie einen rot/grünen Hintergrund. Dieser dient nur zur Veranschaulichung (und als Orientierungsrahmen) und wird später im Photoeditor vor der Speicherung ausgeblendet. Die grünen Striche sollen den Abstand der einzelnen Frames verdeutlichen: In diesem Falle, hat das erste Frame einen 1-Pixel-Abstand zur oberen Begrenzung und das Zweite dengleichen Abstand zum ersten Frame. Jedes weitere Frame
MÜSSTE exakt dengleichen Abstand zum Vorigen haben. Doch warum hat das Letzte (in diesem Fall: Zweite) nicht ebendiesen Abstand zum unteren Rand? Nun, defacto hat keines der Frames überhaupt irgendeinen Abstand zueinander, es WIRKT NUR SO. In der Tat liegt das 1. Bild "auf Nullinie" zum Rahmen und das 2. Bild ebenso zum 1. Bild. Der Grund warum das so ist und warum es eine gute Idee ist, es so zu machen verdeutlicht hoffentlich das nächste Bild.
Bild
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von helmsklamm am 23. Mai 2006, 17:39, insgesamt 2-mal geändert.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

Hier wurde bewusst der Schärfungs-Algo des Photoeditors weggelassen.

(Exkurs: Im ersten Bild ist dieser eingeschaltet, was neben den Komopriemirungsartefacten auch erklärt warum das Bild so "dreckig" ist: In hoher Skalierung sehen wir die einzelnen "Schärfungs-Pixel" als Artefacte, in Originalauflösung wirkt die Schrift runder/deutlicher).

Wenn man genau hinschaut, erkennt man, das die Bilder sich überlappen. Nein? Gut, Brille auf und das "S" fokussiert! Ein Punkt des untereren, schwarzen "S" ist in das rote "S" rübergeflutscht - der Effekt wäre ein unsauberes Bild beim ersten Bild, oder im hypothetischen Falle eines Knobs (mit mehreren sich überlappenden Pixeln) eine sehr unsaubere Animation. Nachdem das klar ist, müssen wir nur noch unser Bild in den Button laden. Wir vergewissern uns, das der Hintergrund ausgeblendet ist und speichern unser Bild als .tga-File, in 32bit. In Reaktor: Doppelklick Button-Propertis-Augensymbol-SkinBitmap-Open from file!
Bild
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von helmsklamm am 23. Mai 2006, 17:42, insgesamt 3-mal geändert.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

So, oder so ähnlich müsste der Dialog jetzt ausschauen. Wichtig ist lediglich, das "Num Animation" immer mit der Zahl der Einzelframes korrespondiert und in den erforderlichen Fällen, das "Has Alpha Channel" aktiviert ist. Voilá!

Vielleicht noch eines: Der Animation ist es egal, welchen Wert "ihr" Controller sendet. Sie reagiert ausschliesslich auf die Position die der Controller gerade einnimmt. Im Falle unseres Buttons, ob er ein ON oder Off sendet, gleichgültig ob das ON den Value -7,3 oder +5000 sendet, wählt sie bei ON immer das erste Bild und viceversa.
Bild
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von helmsklamm am 23. Mai 2006, 17:43, insgesamt 2-mal geändert.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

Ok, soweit für heute, bis zum nächstenmal MERKE:

1. Es ist ABSOLUT notwendig, das alle Frames dengleichen Abstand zueinander haben, da sonst die Seqeunz "wackelt".

2. Bei "geschärften" Bildern immer einen "Sicherheitsabstand" zwischen die einzelnen Frames lassen, um Überlappungen zu vermeiden.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

Nachdem die Grundlagen wohl doch ausreichend klar sind, kommen wir heute zu einer fortgeschrittenen Anwendung: wir bauen uns einen horizontalen Wahlschalter mit 8 Zuständen und kleinem Lichtorgeleffekt,
sprich: der sauber im Beat pulsiert.
Wozu man sowas braucht? Ein Anwendungsbereich ist bspw. das triggern von Sequenzen oder das Abfeuern von Effekt-Variationen. Ein weiterer um unterschiedliche Ansichten des Instruments sichtbar zu machen (stacked macros). Das Blinken ist meiner Erfahrung nach kein reiner Gimmick, sondern kann in der Tat die Übersichtlichkeit erhöhen. Wenn allerdings 42 Dinge gleichzeitig blinken, dürfte das jedoch der Ergonomie eher abträglich sein.
Doch zur Sache! Als erstes basteln wir uns unser Bild in einem Photoeditor. Da unser Schalter 8 verschiedene Zustände signalisieren soll, brauchen wir folgerichtig ein Bild mit 8 Frames. Doch da dieses auch blinken sollen, brauchen wir die doppelte Anzahl, also 16 Frames. Wie zB
hier.

Bild

Natürlich brauchen wir zudem noch die Reaktor-Module. Also, man nehme 1 leeres Macro und fülle es wie im Bsp-Bild.

Bild

Das List benötigt in den Properties 8 "Entries" mit den Values beginnend bei 0 und endend bei 7. Ausserdem hat es folgende Range min=0, max=7, stepsize=1. Das <<<List ist ein IC send und wird in den Properties auf folgende Range gesetzt max=0, min=7. Zu guter Letzt wird es ebenfalls in den Properties per master/slave mit dem List connectet. (man beachte, das die Range des Sends entgegengesetzt der des List ist, ich habe keine Ahnung wieso, aber nur so funktioniert es sauber, die "korrekte" Range hingegen bringt Reaktor zum Komplettabsturz).
Sollte euer Macro graue, statt orange Kästchen zeigen, solltet ihr das MP in den Properties auf "always active" setzten. Jetzt betanken wir das MP mit unserer Animation (wie das geht, steht weiter oben).


Sorry Leute, aber ihr habt grad ein paar Schritte zuviel gemacht. Denn das MP ist, wie jedes (?) andere Panelelement auch in der Lage die Ausgabe-Schrittweite intern zu kontrollieren. Setzt in den Properties die X-Range folgend: max=8/min=0/stepsize=1. Der Effekt ist, das wir uns die Multiplation und das Modulo sparen und das MP-X direkt in das Merge führen können. Danke an TYMES 2 für diesen Tip.
Die Mehrarbeit war aber nicht ganz umsonst, so habt ihr mal gesehen, wie man beliebige Ausgabewerte sauber auf Vielfache qauntisiert.


Wechselt jetzt mal in die Panelansicht - ihr seht einmal die List (direkt) und einmal euer MP. Klickt jetzt mal in beiden Modulen rum - ihr werdet bemerken, dass sich beide aufeinander beziehen, egal welches ihr klickt, das Partnermodul übernimmt stets den korrespondierenden Wert. Um zu verstehen was hier vor sich geht, werfen wir nochmal einen Blick in unser Macro. In diesem Macro finden wir alle Zutaten für einen midifizierbaren, horizontalen Wahlschalter mit eigener Optik. Das List-Modul dient dazu, das wir tatsächlich einen Schalter erhalten, also das wir bspw. von 2 auf 7 springen können und ohne, wie bei einen Fader, die Zwischenschritte mit aufzurufen. Leider ist das List-Modul nur bedingt "desingbar", deshalb übermitteln wir dem MP diese Aufgabe. Das MP könnte übrigens (mit anderer Verdrahtung) auch allein als Schalter fungieren, aber dann hätten wir keine Möglichkeit, es per Midi fernzusteuern. Also bleibt nur dieser, etwas umständliche Weg (es gibt natürlich unendlich Wege, aber dieser ist mM nach der Effektivste). Das List wird in unser MP geführt, um uns das gewünschte Bild zu zeigen. (Auf das "puls" gehe ich später ein, denken wir es uns erstmal weg). Das "Mal8" und das Modulo sorgen für eine Rückübersetzung der MP-eigenen 0-1 Rechnung zur benötigten 0-7 Range.
siehe "rot" oben
Sowohl das MP und seine "Nachfolger" als auch das List selbst führen in ein Merge. Dieses gewährleistet das immer der Wert des zuletzt gedrückten Moduls "hinten" anliegt. Hinter dem Merge befindet sich ein IC send (<<<List), das, wie oben beschrieben, mit dem List "verdrahtet" ist. Dieses Modul "zwingt" das List seinen Zustand zu ändern, falls ein neuer Wert direkt vom MP gesendet wird. Verbleibt das "out". Dieses dient dazu das unser Macro kein Selbstzweck ist, sondern auch irgendwo irgendwas bewirkt;)
Jetzt können wir das List midifizieren. Wenn wir zudem Panel to midi aktivieren, wird der Controller stets auch die Werte, die wir per Maus in das MP klicken erhalten und seinen Status entsprechend aktualisieren (entsprechender Controller vorrausgesetzt). Zu guter Letzt setzen wir das List in den Props auf unsichtbar, es sei denn es gefällt euch;)

Noch ein Wort zur Midifizierung: Um nun tatsächlich (bspw. im Live-Spiel) von der Seqeunz #3 zur Seqeunz #6 nahtlos! zu wechseln, können wir keinen Knob als Trigger verwenden sondern brauchen Buttons. In diesem Fall 8 Stück, die logischerweise diegleichen CC-Nummern haben müssen. Die Midirange teilen wir entsprechend durch 8 und wir erhalten folgende Happen: Button 1 von 0-15, Button 2 von 16-31 uswusf. Trotzdem hat das bei meiner BCR nicht korrekt gearbeitet, erst als ich sowohl ON/OFF auf einen Wert deutlich in der Mitte der jeweiligen Range stellte, klappte alles anstandslos.


Hier eine andere Variante, diesmal sogar nutzbar mit eurer QWERTZ.

Bild

Die Buttons haben alle eine 0/1 Range, befinden sich im Gate-Modus und sind auf Midi-Note gesetzt. Alternativ hätte man auch Midi-Gates oder Controller nehmen können, ich glaub das ist völlig irrelevant. Die Value-Module sorgen dafür, dass auch bei losgelassender Tatste der Wert ihrer Constanten weiterhin erhalten bleibt (ein nichtverkabelter Eingang erzeugt idR die Constante 0, ergo muss man die nicht extra einfügen). Das erste Merge gewährleistet, das immer der Wert der zuletzt gedrückten Taste anliegt. Das zweite Merge stellt sicher, das entweder der Wert des MPs oder der Wert der Tasten "hinten" ankommt, abhängig davon ob zuletzt gedrückt oder geklickt wurde. Die Snap-Module sind nötig, wenn man sicherstellen möchte, das der aktuelle Wert auch tatsächlich in einem Snap gespeichert wird (weder das MP tut das "von sich aus", noch wird ein "flüchtiger" Wert hinter einem Merge in einem Snap gesaved). Aus diesem Grund also 2 unabhängige Snap-Module, eines zur Gewährleistung, das das korrekte Frame gezeigt wird, das andere zur Sicherstellung, das auch der gespeicherte Wert wieder aufgerufen wird.

Gut, diese Variante braucht entschieden mehr Module und zusätzlich speicherfressende SnapValues. Die andere erzeugt einen Eventloop (oder?). Welche is nun besser?

Und jetzt bringen wir das Ganze noch schnell zum blinken. Neues Macro und folgendermassen betankt:

Bild

Dieses Macro beinhaltet unseren Pulsschlag, es sendet alternierend eine 0 und eine 8 - und zwar nicht irgendwann, sondern pünktlich zu jeder Viertelzählzeit. (warum eine 8 und keine 1 erklärt sich aus unserem Zielbild, bei welchem die Partner-Frames immer 8 Schritte auseinander liegen). Die Clock und das Modulo sorgen dafür das zu jedem Viertelschlag ein Event gesendet wird. Das Start/Stop und das Relay stellen sicher, das im Stillstand eine 0 gesendet wird, der Selector und die Constante schliesslich sorgen für den Wechsel von 0 zu 8. Ehrlich gesagt, hab ich das Macro aus L3 übernommen und weiß nicht, welche Funktion in diesem Zusammenhang der Step-Filter erfüllen soll. Versuche zeigten, es geht auch ohne, aber vorsichtshalber... Wer jemand so lieb das aufzuhellen?

Bei der List Variante, müsst ihr den Ausgang einfach mit dem "puls" verdrahten, bei der QWERTZ müsst ihr noch schnell diesen Addierer einfügen und am besten hinter das SnapValue des MPs platzieren.

Nächstes mal gehts um Stacked-Macros.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Gesperrt