controller-werte zu x/y-werte konvertieren

Diskussionsforum für Fragen zur Struktur und Implementation in REAKTOR, auch DSP, Literatur und begleitende Software

Moderator: herw

Antworten
Benutzeravatar
toxonic
synth professor
Beiträge: 322
Registriert: 2. Januar 2007, 20:46
Wohnort: Stuttgart
Kontaktdaten:

controller-werte zu x/y-werte konvertieren

Beitrag von toxonic »

so, weil herw unter projekte das thema "mousearea midifizierung" angesprochen hat, bin ich auf folgendes selbstgebautes macro gekommen, dessen mousearea module ich ebenfalls "pseudo-midifiziert" habe *grins*.... dabei haben mir die 2 dimensionalen preset-wahl-mouseareas echte probleme bereitet, da ich bisher keine elegante lösung gefunden habe, die eingehenden controllerwerte in 2 dimensionale werte umzurechnen, die für das (unter dem mousearea modul verstecktem) multidisplay modul brauchbar sind! die jeweiligen controllernummern stehen in der labelleiste der einzelnen macros, also cc35 bis 39....
wenn jemand tips hat, bitte ich doch sehr darum....
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: controller-werte zu x/y-werte konvertieren

Beitrag von herw »

toxonic hat geschrieben:so, weil herw unter projekte das thema "mousearea midifizierung" angesprochen hat, bin ich auf folgendes selbstgebautes macro gekommen, dessen mousearea module ich ebenfalls "pseudo-midifiziert" habe *grins*.... dabei haben mir die 2 dimensionalen preset-wahl-mouseareas echte probleme bereitet, da ich bisher keine elegante lösung gefunden habe, die eingehenden controllerwerte in 2 dimensionale werte umzurechnen, die für das (unter dem mousearea modul verstecktem) multidisplay modul brauchbar sind! die jeweiligen controllernummern stehen in der labelleiste der einzelnen macros, also cc35 bis 39....
wenn jemand tips hat, bitte ich doch sehr darum....
ui das ist ein sehr großes Makro, außerdem nicht angeschlossen. Was kann man dahinter anschließen? einfach den eventwatcher?
Was bedeutet es, wenn Du sagst, du möchtest eindimensionale Werte in zweidimensionale Werte umrechnen?
Vielleicht kannst Du das Beispiel auf das Wesentliche reduzieren, so dass man diese spezielle Frage beantworten kann.

ciao herw
Benutzeravatar
toxonic
synth professor
Beiträge: 322
Registriert: 2. Januar 2007, 20:46
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von toxonic »

jep, also das ding ist tatsächlich nicht angeschlossen, hab's so wie es ist aus nem instrument kopiert, weil ich's in der midifizierten variante noch nicht abgespeichert habe.....
jeder der 10 ausgänge des makros gibt werte zwischen 0 und 1 aus, abhängig von den beiden gewählten ausgangspresets und der stellung des morphing-faders, welcher einen linearen verlauf zwischen den werten der beiden presets errechnet - wie man das makro verwendet ist erstmal zweitrangig, ich hab's erstmal gebaut, um damit verschiedene effekt-parameter auf einmal zu steuern, also im prinzip so wie in vectory auch!
aber zur sache: mein hauptproblem bestand bei der midifizierung der preset-wahl-multidisplays: wenn einer der ausgänge des makros angeschlossen ist, kann man erkennen, daß selbiges aus einem 2 dimensionalen raster aus 4x4, also 16 preset positionen besteht! jeden dieser preset-wähler wollte ich je einem midi-controller zuweisen!
das bedeutet, das die controllerwerte zu werten für x und y koordinaten des multidisplays konvertiert werden müssen! das - und den umkehrprozess - übernehmen die beiden macros in folgendem bild:
Bild
wer sich die dinger mal genauer anschaut, wird erkennen, das die nicht gerade nach einer eleganten lösung anmuten.... und darum geht's mir! :D
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

äh, ich versteh den ganzen aufwand nich.

1. gibts kein x/y als solches, hinten ist alles z.
2. dir gehts doch ums jammen, oder?

nimm doch einfach 8 controller (bspw. deine qwertzui = note, du brauchst also noch korrekt "konstatierte" value-module dahinter; resp. bei buttons auf gate setzen und snap-deaktivieren) und merge die hinter den beiden snaps (für korrekte snapverhalten bevorzugt in den oberen mergeport). (falls lustig, mach 2 blöcke, sepreat für x und y).

voila. jetzt reagiert die gesamtausgabe und das MD auf maus und midi.


achtung:
zwar is das MD "midifiziert" die eigentliche mausarea aber nicht - die mauspos folgt also nicht den mididaten und nach midieinsatz kanns vorkommen, das die maus bei erneuter wiederberührung auf zick, statt auf zack ist. deshalb das teil in den optionen nicht auf inkrementell setzen.

mit beleuchteten tastern die auf maus-remote reagieren sollen, wirds idT deutlich aufwändiger.
bitte vor jeder frage erstmal überprüfen, ob das kapitel "mein erster synth" S. 76 im hnadbuch, schon gelesen wurde.
Benutzeravatar
toxonic
synth professor
Beiträge: 322
Registriert: 2. Januar 2007, 20:46
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von toxonic »

:shock: :?: was??? ich versteh nur bahnhof............
in der tat ist das md, nicht das mousearea midigesteuert, daher auch meine irrwitzige begriffskreation "pseudomidifiziert".... :lol:
den rest deiner mail check ich net, sorry.....
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

toxonic hat geschrieben::shock: :?: was??? ich versteh nur bahnhof............
in der tat ist das md, nicht das mousearea midigesteuert, daher auch meine irrwitzige begriffskreation "pseudomidifiziert".... :lol:
den rest deiner mail check ich net, sorry.....
@helmsklamm: toxonics Frage bezieht sich nur (!) auf ein Steuerelement, das primär aus einer quadratischen Mausarea besteht und ein Auswahlelement für 16 Zustände ist. Da eine MausArea nicht die Midilearn-Funktion besitzt, wählt toxonic einen Trick, indem er dieses Steuerelement gleichzeitig von einem Controller steuern lässt. Das Drumherum ist für diese Frage nicht von Belang.

@toxonic
ja Deine Idee ist richtig, doch sehr unübersichtlich. Ich habe das Problem neu aufgerollt; dazu zwei Vorbemerkungen:
1) Du benutzt ein MausArea zum Abrufen eines Wertes und ein Multidisplay zur Anzeige. Damit diese Elemente gut in ein Panel einfügbar sind solltest Du Größen wählen, die Vielfache von 4 sind. Helmsklamm hat darauf auch schon einmal in einem Thread hingewiesen. Das Anzeige-Raster von Reaktor basiert auf vier Pixeln. Ich habe daher beide Elemente auf eine Größe von 76 Pixeln Randbereite gesetzt.
2) Du wählst für die Ausgabe sowohl der X/Y-Koordinaten wie auch die Controller-Daten Werte zwischen 0 und 1. Dies ist zunächst einmal richtig gedacht, da das Multidisplay auch auf diese Werte
bereiche eingestellt ist. Für eine passende Logik ist dies sehr ungünstig, wie man auch an den vielen Rundungen und Vervielfachungen in Deinen Makros erkennt. Beim letzten Wert, der aus dem Makro CC35 herauskommt erkennt man, dass Du nur 16 snaps aufrufen möchtest.

Ich benutze daher bei solchen Panelelementen grundsätzlich ganze Zahlen und passe danach erst die benötigten Werte entsprechend an.

das Panel:

Bild

Oben links ist das Panelelement: ein Quadrat, das man sich in 16 Teilquadrate eingelteilt vorstellen muss, vier Zeilen und vier Spalten.

das Ziel: Klickt man auf einen Bereich, so wird das entsprechende Quadrat angezeigt und die entsprechende Snapnummer (0..15) ausgegeben.
Alternativ kann dies mit dem Controller 35 auch über Midi eingestellt werden.

grundsätzlicher Aufbau:
Bild

Rechts sehen wir die Anzeige des Multipictures. Etwas ungewöhnlich ist, dass die Quadrate nicht extra erzeugt werden, sondern nur eines durch Steuerung der X0/Y0-Eingänge in dem Anzeigebereich verschoben werden.
Links sehen wir einerseits den Controller (ich habe zu Testzwecken einen Fader eingebaut) und die MausArea.
Der Controller liefert die Midiwerte 0..127. Diese müssen auf einen Bereich von 0..15 getrimmt werden. Gleichzeitig sollen ja auch die Koordinaten des Multidisplays daraus ermittelt werden, um die Anzeige zu steuern. Dies liefert das Makro MIDI (zum inneren Aufbau komme ich gleich).
Andereseits liefert die MausArea direkt die Koordinaten (mit einigen Rechnungen), es müssen aus diesen Koordinaten die Werte 0..15 errechnet werden. Das macht das Makro MAUS.
Alle Informationen, die von beiden Panelelementen kommen, werden im Makro Merge&Snap zusammengeführt und gespeichert.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von herw am 9. Mai 2007, 21:36, insgesamt 2-mal geändert.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Beitrag von herw »

der Controller

Bild

Ich habe die Properties des Controllers geändert. Midi liefert ganze Zahlwerte, also stelle ich den Berecih ebenfalls auf 0..127 mit Stepweite 1. Den Testfader habe ich genauso präpariert.

Nun zum Inneren:

das Makro MIDI:

Bild

Dividiert man die Werte von 0..127 ganzzahlig (ohne Rest) durch 8, so liefert dies die Werte 0..15. Das wäre schon erledigt. Der Wert wird an den Ausgang preset ausgegeben.
Wie kommt man nun an Koordinaten 0..3/0..3 ? auch durch die Modulo-Funktion MOD 4. Sie liefert einerseits die Ganzahldivision als auch den Rest. Genau das brauchen wir. Anschließend müssen diese Werte auf den Anzeigebereich 0..1 genormt, also durch 4 dividiert werden.

das Makro MAUS:

Bild

Ich benutze dabei nicht die Werte-Ausgänge der MausArea, sondern die absoluten Pixelwerte. Ich erhalte also jeweils Werte aus 0..75. Diese kann man sehr leicht durch MOD 19 auf den Bereich 0..3 trimmen. Wie im Maus-Makro werden die Werte wieder durch die Division durch 4 auf den Bereich 0..1 getrimmt.
Andererseits kann man aus den X/Y-Werten sehr leicht die lineare Werteskala 0..15 errechnen (siehe oberen Teil).

das Makro MERGE&Snap

Bild

.. erklärt sich selbst. Das Mathe-Modul -x ist nur eine Anpasung an die Koordinatenstruktur des Multidisplay. Der Ursprung liegt unten links. Hier soll aber der Ursprung oben links liegen.

Schlussbemerkung:

Durch die vielen Rechenoperation auf primary-Level werden alle Werte mehrfach ausgegeben. Falls dadurch etwas getriggert wird kann es zu Fehlinterpretationen kommen. Sinnvoller und auch einfacher ist es, dieselbe Struktur in eine Event-Core-Zelle zu packen.

Noch etwas zur Struktur insgesamt. Sie hat einen EventLoop. Du solltest nochmals überdenken, ob sie wirklich nötig ist. Aus Zeitgründen kann ich darauf leider nicht eingehen. Auch wenn die aufgezeigte Struktur fehlerlos erscheint, so muss sie doch in der konkreten Umgebenung ausgiebig getestet werden, insbesondere wegen der mehrfach ausgesendeten Werte - viel Erfolg!

ciao herw
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von herw am 9. Mai 2007, 21:57, insgesamt 2-mal geändert.
helmsklamm
synth gott
Beiträge: 1011
Registriert: 10. Mai 2006, 16:21
Wohnort: 030

Beitrag von helmsklamm »

nun, der rest der post bezog ich auf das, von dem ich annahm, das es das wäre, was du wünschtest. ich ging von ner jam-situation aus.

du möchtest dein "xy" sowohl per maus als auch midi bedienen? die mausare als solche is völlig irrerelavant (non-incrementell), aber änderungen (egal von welcher qeulle) sollen im "display" gezeigt werden?
und natürlich soll hinten der letzte wert anliegen?
nicht so wichtig ist die übermittlung/aktivstatus zurück zum controller und der hw-controllerstatus muss auch nicht gespeichert werden?


dein XY besispiel ist ein teil, wo das "2 dimensionale" ausschliesslich der mausinterkation geschuldet ist. heisst: hinten kommt nicht x und y seperat raus sondern z, mit andern worten ne addition aus beidem. um nun kein msichmasch zu bekommen, sondern ne ein-eindeutigkeit des z-wertes zu gewährleisten wird einer der beiden höher multipliziert. das ist nötig damit bspw. bei x =0 und y =1 hinten nicht dasgleiche wie bei x=1 und y=0 rauskommt, wie es bei simpler addition der fall wäre.
am besten du klemmst dir jeweils n numeric hinter die beiden snaps und nochmal eins hinter die "summe" und obeservierst mal die ziffern bei rein horizont/vertkal mausbewegung.

ich bin mir sicher, das du das system schnell begreifst. mit diesem wissen (den nötigen trigger-values) stattest du nun deine controller aus (bspw. die X mit den trig-werten 0,1,2,3 und die Y mit 4,8,12,16 oder so ähnlich, vielleicht auch alles +1).
jedem cc-block spendierst du nen merge, und der out dieser wird mit den "originalen" x/y an der letzen stelle, vor dem MD und der "summe" nochmal gemergt.

(es ist wichtig, das sich deine button, cc, note wasauchimmer immer im gate modus befinden und im falle buttons im snap-isolat).

oki, das vielleicht doch n bissl abstarkt - ich bastel dir morgen das teil.
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: @helmsklamm: toxonics Frage bezieht sich nur (!) auf ein Steuerelement, das primär aus einer quadratischen Mausarea besteht und ein Auswahlelement für 16 Zustände ist. Da eine MausArea nicht die Midilearn-Funktion besitzt, wählt toxonic einen Trick, indem er dieses Steuerelement gleichzeitig von einem Controller steuern lässt. Das Drumherum ist für diese Frage nicht von Belang.
@herw:
jup, das hatte ich schon verstanden und um im prinzip habe ich exakt das geliche vorgeschlagen, wie du es im midi-macro in wort UND bild nochmals vorbildlich erläutert hast. der unterschied: ich hatte rausgelesen, das er sepearte controller (plural und buttons oder keys) verwenden wollte, bspw. 8 stück und demzufolge die gemergte qwertz mit den values 0-7 "konstatiert" angeboten. in diesem falle könnte man sich das erste modulo (ausgabe zum preset) sparen. (übrignes auch wenn man als controller n unsichtbaren fader wählt und den von vornerein so beschneidet - falls zum jammen gedacht snapisolat deaktiv nicht vergessen, ebenso nicht VOR dem SV mergen, erst dahinter!!!)
aber dergleichen ist wohl ohne screenies wahrscheinlich echt zu kryptisch.


aber andres ding: ich hatte ja offensichtlich nach dir erneut gepostet, aber gestern deine "vor"posts nicht gesehen, wie das?
bitte vor jeder frage erstmal überprüfen, ob das kapitel "mein erster synth" S. 76 im hnadbuch, schon gelesen wurde.
Antworten