Voice-shift in core?

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

Moderator: herw

Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Voice-shift in core?

Beitrag von Eventmanager »

Gibts ein NON-audio voice-shift modul in core? Das aus der Prim-Sektion ist leider nur als audiovariante verfügbar, verbrät also unnötig CPU.
Quietschboy
synth doctor
Beiträge: 218
Registriert: 6. April 2011, 20:31
Wohnort: Wiesbaden

Re: Voice-shift in core?

Beitrag von Quietschboy »

Da musst du dir wohl mit To-/From-Voice Modulen etwas basteln.
In Core gibt es leider, leider keine Möglichkeit Verknüpfungen zwischen den Voices herzustellen.
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

Danke, aber das hilft mir nicht weiter. Vielleicht hast du trotzdem ne Idee:

Kernaufgabe ist: Ich möchte herausfinden(lassen) ob eine Stimme VOR der aktuellen Stimme einen bestimmten Wert hat .... Also NUR wenn bspw. Stimme 17 den Wert X hat reagiert Stimme 16... oder ähnliches Szenario.

Wenn ich "hintendran" den ganzen Strang mit bpsw. Voice+1 erneut einspeise, bekomme ich am Ende zwar verschiedene Values, aber die VOICES (als solches, die "relativ/absolute" Voice-Nummer) verändert sich nicht (nur halt mit Voice-Shift). Weisst was ich meine???

Ganz simples Beispiel, es geht um die Grundmechanik:
WENN der Wert der gewarpte (also bspw. +1) Stimme UNGLEICH der (eigentlichen) Stimme ist, dann soll hinten ein JA rauskommen, aber eben nur für diese Stimme! Das Voice-Shift erledigt den Job prima (abgesehen von CPU).
Bei anderen Konstruktionen wird zwar hinten "gewarpt", aber das eigentliche Vergleichskriterium "gleiche minus 1 Stimme" kommt hinten nicht raus. Egal wie "geshift", was sonstso getan, es heisst hinten immer voice 001, voice 002... vor dem entsprechenden Value und folglich bleiben die EIGENTLICHEN Values (ABSOLUT zur RELATIVEN Stimme gleich...).

Wie geasgt das Voice-Shift löst das Dilemma, denn es setzt NEUE "absoulte"Stimmen, resp. wrap die Adresse... aber es verbraucht schon massig CPU. Ich verstehe kaum, wie man das Teil überhaupt als AUDIO nutzen kann/will... aber komplett verstehe ich nicht, warum das Teil nicht AUCH als reine EVENT Lösung vorliegt??????? Wenn man 20, 40, 80... von diesen Teilen braucht... dann summieren sich 0.5 Cpu ziemlich schnell BEMERKBAR!
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Voice-shift in core?

Beitrag von herw »

Eventmanager hat geschrieben:Danke, aber das hilft mir nicht weiter. Vielleicht hast du trotzdem ne Idee:

Kernaufgabe ist: Ich möchte herausfinden(lassen) ob eine Stimme VOR der aktuellen Stimme einen bestimmten Wert hat .... Also NUR wenn bspw. Stimme 17 den Wert X hat reagiert Stimme 16... oder ähnliches Szenario.

Wenn ich "hintendran" den ganzen Strang mit bpsw. Voice+1 erneut einspeise, bekomme ich am Ende zwar verschiedene Values, aber die VOICES (als solches, die "relativ/absolute" Voice-Nummer) verändert sich nicht (nur halt mit Voice-Shift). Weisst was ich meine???

Ganz simples Beispiel, es geht um die Grundmechanik:
WENN der Wert der gewarpte (also bspw. +1) Stimme UNGLEICH der (eigentlichen) Stimme ist, dann soll hinten ein JA rauskommen, aber eben nur für diese Stimme! Das Voice-Shift erledigt den Job prima (abgesehen von CPU).
das geht mit polyphonen Konstanten
Bei anderen Konstruktionen wird zwar hinten "gewarpt", aber das eigentliche Vergleichskriterium "gleiche minus 1 Stimme" kommt hinten nicht raus. Egal wie "geshift", was sonstso getan, es heisst hinten immer voice 001, voice 002... vor dem entsprechenden Value und folglich bleiben die EIGENTLICHEN Values (ABSOLUT zur RELATIVEN Stimme gleich...).

Wie geasgt das Voice-Shift löst das Dilemma, denn es setzt NEUE "absoulte"Stimmen, resp. wrap die Adresse... aber es verbraucht schon massig CPU. Ich verstehe kaum, wie man das Teil überhaupt als AUDIO nutzen kann/will... aber komplett verstehe ich nicht, warum das Teil nicht AUCH als reine EVENT Lösung vorliegt??????? Wenn man 20, 40, 80... von diesen Teilen braucht... dann summieren sich 0.5 Cpu ziemlich schnell BEMERKBAR!
fromVoice geht in core, nur toVoice funkdioniert nicht. D.h. man kann Entscheidungen in Abhängigkeit einer Voice auf eine andere Voice wirken lassen (auch nur auf die andere, wenn man möchte) man kann aber nicht die Signalwerte aus einzelnen voices (quasi monophon) wirken lassen und einer anderen Voice zuordnen, also zum Beispiel keine Event oder Audiosignale verschiedener Voices addieren.
Also ich könnte zum Beispiel aus einem Gate Signal der voice 1 für die voice 2 einen Router für die Voice 2 schalten zum Beipiel Klangveränderung. Aber Alles ist sehr beschränkt und kommt auf die hoffentlich einfache Anwendung an.
Etwas konkretere Angaben helfen bei einer Entscheidung ja/nein. Beschreibe einfach ein Core-Makro mit Worten, welche Eingangsinformationen es bekommt und was es ausgeben soll; wahrscheinlich irgendeine Logik?

Ich fordere schon seit Jahren ein Voice-Managment in core, aber keiner hört auf mich. :(
Audio voice-shifting wurde glaube ich vor allem benutzt, um monophone Signale in die einzelnen Voices zu schieben (Schieberegister beim Reverb?).

Aber mach dir nicht zu viele Hoffnungen, wie mark schon sagt sind Verknüpfungen (insbesondere Events, die etwas bewirken zwischen den Voices nicht möglich, ich sage sehr beschränkt, möglich.

Ich habe lange an kleinsten Lösungen gearbeitet und nach Jahren (?) frustriert aufgegeben. Aber mich interessierte auch eher das toVoice.

Was allerdings möglich ist, mit sehr CPU-aufwendigen asynchronen Audiosignalen zu arbeiten. Da geht Vieles auch das Hin und Herschieben von polyphonen Werten und sogar ein order; aber wie gesagt nur sehr aufwendig, so dass es sich wirklich nicht lohnt darüber nachzudenken. Die Trickserei nimmt dann in Core Überhand. Hier ist das Paradigma von Stephan Schmitt (primary-Ebene) einfach genial.
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

danke Herw,

das klingt interessant, aber mir brummt schon der Schädel, bei der Formulierung der Fragestellung ;-)

Alles Event. 32 Voices (sogar "rhythmisch getaktet", falls das hilft..) Die 32 Stimmen sind überall jederzeit abgreifbar.

Jetzt soll "hinten" einmal "geshifted" werden, also bspw. voice 19 fragt ab, ob voice 18 einen bestimmten value hat. FALLS das der Fall ist, wird bspw. ein SELEKTOR oder so auf Port 1 geschaltet, es wird für diese Stimme (und nur für diese Stimme) der 2te Eingang gewählt. Soweit so klar und einfach zu bewerkstelligen.
Der entscheidende Punkt ist das "zweite Voice-Modul", denn es wird "hinten" immer wieder EBENFALLS mit 01 beginnen. Darum get es: Aus dieser 01 eine 02 zu machen! Ein Versatz, ein simples Shift.... verstehst was ich meine??? GANZ hinten soll nämlich "rückwirkend" der value für alle Voices, auf die die Bedingung zutrifft, geändert werden. Das geht relativ einfach mit dem Voice-Shifter, aber eben zu audio-kosten, obzwar nur die simple event-fähigkeit von Nöten wäre.
Der voice-shifter "modulot" die Stimmen als solche (inklusive values) wohingegen alle andere Versuche, lediglich die values shiften aber stimme 07 bleibt immer stimme 07...
Ganz plump: Stimme 07 soll rausfinden, ob Stimme 06 einen bestimmten Value hat. FALLS, soll Stimme 07 dafür sorgen das der Value von 06 entsprechend angepasst wird. Keine "Echtzeit" oder sonstwas LOOPIGES drin. Ein SOWIESO schon rückverkabeltes Table gibt die neuen Values simpel "Vorwärts".... da loopt nüscht.... , der part ist sauber...
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Voice-shift in core?

Beitrag von herw »

Eventmanager hat geschrieben:danke Herw,

das klingt interessant, aber mir brummt schon der Schädel, bei der Formulierung der Fragestellung ;-)

Alles Event. 32 Voices (sogar "rhythmisch getaktet", falls das hilft..) Die 32 Stimmen sind überall jederzeit abgreifbar.

Jetzt soll "hinten" einmal "geshifted" werden, also bspw. voice 19 fragt ab, ob voice 18 einen bestimmten value hat. FALLS das der Fall ist, wird bspw. ein SELEKTOR oder so auf Port 1 geschaltet, es wird für diese Stimme (und nur für diese Stimme) der 2te Eingang gewählt. Soweit so klar und einfach zu bewerkstelligen.
Der entscheidende Punkt ist das "zweite Voice-Modul", denn es wird "hinten" immer wieder EBENFALLS mit 01 beginnen. Darum get es: Aus dieser 01 eine 02 zu machen! Ein Versatz, ein simples Shift.... verstehst was ich meine??? GANZ hinten soll nämlich "rückwirkend" der value für alle Voices, auf die die Bedingung zutrifft, geändert werden. Das geht relativ einfach mit dem Voice-Shifter, aber eben zu audio-kosten, obzwar nur die simple event-fähigkeit von Nöten wäre.
Der voice-shifter "modulot" die Stimmen als solche (inklusive values) wohingegen alle andere Versuche, lediglich die values shiften aber stimme 07 bleibt immer stimme 07...
Ganz plump: Stimme 07 soll rausfinden, ob Stimme 06 einen bestimmten Value hat. FALLS, soll Stimme 07 dafür sorgen das der Value von 06 entsprechend angepasst wird. Keine "Echtzeit" oder sonstwas LOOPIGES drin. Ein SOWIESO schon rückverkabeltes Table gibt die neuen Values simpel "Vorwärts".... da loopt nüscht.... , der part ist sauber...
Ist die Anzahl der Stimmen 32 fest vorgegeben?
Ich würde versuchen, ein event-voice-shift Makro in primary zu basteln.

Aus welcher Quelle kommen die polyphonen Events? (Sequenzer, Midi?).
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Voice-shift in core?

Beitrag von herw »

Ich hab's mal versucht:
event-voice-shift.ens
Bild 1.png
Bild 2.png
Bild 3.png
Bild 4.png
Das Makro voice iteration erkennt selbständig die Anzahl der voices. Es liefert am oberen Ausgang die voice, von der der Wert abgegriffen wird und am unteren die geshiftete voice. Du müsstest dann natürlich deine anschließende Logik, die du bisher mit dem audio-voice-shift-Makro gemacht hast, noch anhängen.
Damit das Ganze aktiviert ist, habe ich hinter das event-voice-shift-Makro eine eventtable gehängt; das kann natürlich auch alles andere mögliche sein.

Ich hoffe, es ist einigermaßen sauber programmiert; vielleicht kontrolliert das jemand?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

Morjen Herr Frühaufsteher;-)

Das Instrument ist 32-stimmig. Insofern kommen die Stimme aus dem Instrument / dem Voice-info und werden weiter hinten von diversen RECIEVES bereitgestellt.
Der Sequencer generiert keine Stimmen, er benötigt sie, um überhaupt zu laufen.
Das letzte Modul vor diesem SHIFT-Stunt ist ein rückverkabeltes Table (resp. Snapvalue-Arrray).... An dieser Stelle nun kommen nun die Shifter zum Einsatz, die vergleichen ob eine Stimme vor/nach der aktuellen Stimme ein bestimmtes, "unerrlaubtes" Value hat. Es gibt nur integer 0,1,2 und 3. Eine 3 ist nur erlaubt wenn VORHER eine 2 stand. Und eine 2 darf nicht isoliert stehen, es müssen mindestens zwei 2en in Folge stehen. Die Abfolge ...0-2-1... oder 1-2-1 oder 0-2-0 usw. ist also ebenfalls verboten. Eine isolierte 3 oder mehrer 3en in Folge sowieso. "Hinten" soll eine 3 immer zur 2 mutieren, wenn nicht bereits eine 2 stand. Und eine 2 ist nur erlaubt wenn die Stimme davor oder dahinter dahinter entweder ne 2 oder 3 ist. Das mehrfache boolsche If-Than ist kein Problem mit zwei Voice-Shifts... So simple ist die Schalte mit nem echten DAVOR-Voice-Vergleicher/Rotstift. Hinten gibts nur eine 3 wenn vorher ne 2 stand. Am IN stehen schon unerlaubterweise ein paar 3en hintereinander oder isoliert... also 0-3 oder 1-3 oder 3-3....
(kann den screenie grad nicht laden (130 KB - JPEG????? gibt keine Fehlermeldung aber es passiert auch nichts, woran liegts))

Upsalla, da warst du ja schon fleissig, während ich mir den Mund fusslig rede. Süpi, das schau ich mir gleich mal an :-)
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Voice-shift in core?

Beitrag von herw »

Eventmanager hat geschrieben:[...]
(kann den screenie grad nicht laden (130 KB - JPEG????? gibt keine Fehlermeldung aber es passiert auch nichts, woran liegts))
[...]
moin, moin,
Ich habe auf der Administrator-Ebene kontrolliert. Man kann Dateien anhängen bis 500kB. Vielleicht mal eine anderes Bildformat verwenden (jpg, png)? Ich habe png benutzt. jpg ist noch kleiner. Falls du wie ich ein retina-Display benutzt, ist es auch besser, den screenshot auf 50-60% zu skalieren, damit die Anzeige hier nicht so groß erscheint.
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

Vielen Dank erstmal für den shifter, tut was es soll und funzt bislang hervorragend. Hab ihn mir natürlich angeschaut, aber verstehen tue ich ihn nicht. Jedenfalls ne Menge no-inits und er tut was er soll ;-)

####

Es ist ne jpg , jetzt bekomme ich auch ne Meldung "Die Datei ist zu groß. Die maximal erlaubte Dateigröße ist 90 KiB." Naja, fürs nächstemal denke ich dran, diesmal scheints ja nun nicht mehr nötig.
Jo retina und die 96dpi screenies... muss nochmal in automator schauen, muss doch bestimmt gehen, das screenies automatisch in 72 dpi umgewandelt werden???? hast du eigentlich schon mojave, löpt da alles????
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

Ich hab das Teil jetzt übrigens mal in der Hoffnung was zu verstehen ;-) in R5 ala malen nach zahlen nachgebastelt. Also PENIBEL abgeschrieben! Aber irgendwas hakt da. Es ist der core-shift hinter der Iteration - er gibt nur Einsen aus. Aber mW ist die Corecell exakt wie deine?????

Achja, ist "statisch" auf 32 Stimmen gesetzt, aber daran liegts eindeutig nicbt, bei deinem funzt es wunderbar, nur eben nicht drüber stolpern.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

Achja, hab den fehler gefunden, die math-module waren auf float, statt integer gesetzt - muss man also in core drauf achten ;-)
BTW: Kann man eigentlich ein komplettes macro/cell komplett auf integer/float switchen oder muss das für jedes "atom" separat gesetzt werden?
Auf der Funktion-Page jedenfalls nicht: BTW: was bedeutet nochmal SOLID auf der Funktion/Funktion?

Und irgendwie scheint die anordnung der out-ports wichtig zu sein: Wenn ich in der Iteration-Cell shift/init vertausche (also nur optisch verschiebe) dann funzt es plötzlich nicht mehr!!!!!
Ist also die optische reihenfolge sowas wie das core-order???????


Und der clock-ozzi taktet/triggert ja noch sparsamer als die Display-Rate - als genügsamer event-lfo oder ähnliches gut brauchbar :-)
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Voice-shift in core?

Beitrag von herw »

Eventmanager hat geschrieben:Achja, hab den fehler gefunden, die math-module waren auf float, statt integer gesetzt - muss man also in core drauf achten ;-)
BTW: Kann man eigentlich ein komplettes macro/cell komplett auf integer/float switchen oder muss das für jedes "atom" separat gesetzt werden?
Auf der Funktion-Page jedenfalls nicht: BTW: was bedeutet nochmal SOLID auf der Funktion/Funktion?
Solid areas definieren einen Anwendungsbereich für scoped buses. Alle in einem Macro definierten scoped buses gelten dort und in genesteten Makros. Möchte man aber auch Gültigkeit (Möglichkeit des Aufrufs) auch in übergeordneten Makros, dann
muss man dasjenige Makro, das den scoped bus definiert, als non solid deklarieren; siehe im core manual p53ff.
Und irgendwie scheint die anordnung der out-ports wichtig zu sein: Wenn ich in der Iteration-Cell shift/init vertausche (also nur optisch verschiebe) dann funzt es plötzlich nicht mehr!!!!!
Ist also die optische reihenfolge sowas wie das core-order???????
ja, die primary Ebene benötigt eine Reihenfolge. In primary gibt es Gleichzeitigkeit nicht. Daher ist die Reihenfolge der Ausgänge wichtig; die dort gesendeten, in core gleichzeitigen, events werden von oben nach unten ausgeführt.[...]
Eventmanager
synth doctor
Beiträge: 271
Registriert: 25. Juni 2013, 15:26

Re: Voice-shift in core?

Beitrag von Eventmanager »

Solid areas definieren einen Anwendungsbereich für scoped buses fest. Alle in einem Macro definierten scoped buses gelten dort und in genesteten Makros. Möchte man aber auch Gültigkeit (Möglichkeit des Aufrufs) auch in übergeordneten Makros, dann muss man dasjenige Makro, das den scoped bus definiert als non solid deklarieren; siehe im core manual p53ff.

Scope-Bus bedeutet also im Endeffekt "in sich geschlossen", jede "Order/Reihenfolge" erstmal hier KOMPLETT durch bevor irgendwas anderes getriggert wird???

Solid areas definieren einen Anwendungsbereich für scoped buses fest. Alle in einem Macro definierten scoped buses gelten dort und in genesteten Makros.


Dazu das Handbuch: The Solid property tells the Reaktor Core engine whether the macro is to be considered as a solid built-in module for the purposes of feedback resolution or whether it is to be con­ sidered transparent. In 99% of the cases, you would want...
???

Danke für die Port=Order Bestätigung... Neben der anderen Stolperfalle (float(integer)... stand ich da wie Ochs vor rotem Tor! Dergleichen PROMINENTE Stolperfallen gehören ganz FETT quf jede erste Seite eines Handbuches! ACHTUNG! BEVOR SIE BEGINNEN: XY verhält sich HIER / unter diesen Umständen KOMPLETT ANDERS als sie es mglw. gewohnt sind (übermütig ausprobieren)... Behalten Sie das im Hinterkopf und überprüfen Sie gegebenenfalls...

###

Deine Lösung ist klasse für den Shift nach vorn (wenn die Ports halt die Order übernehmen;-))) - Was ich partout nicht hinbekomme ist ein Shift nach hinten! Oder um einen anderen Wert als "Eins". Ich hab jetzt diverse Verzeiflungstaten, aber es ändert nix, resp bugst irgendwann! ... Mein bestes Ergebniss ist bei 32 Stimmen das bis Stimme 31 alles "rückwärts-Shift! aber Stimme 32 spinnt halt dann irgendwie... Mit anderen "Minus-Shifts" oder extremen Plus-shifts... (plus 31 oder so...) bekomme ich das Prob das der Back-Shift zwar PRINZIPIELL (bis 31 funzt) aber #32 eben "vergessen" oder sehr sültsam geshiftet wird!
Auf "linearer" Event-Ebene fixt ein simples Modulo halt das Problem, aber bei "gleichzeitigen" Stimmen... Ich versthe dein Macro auf "linearer/sequentieller" Ebene mittlerweile ETWAS, aber eben nicht auf "polyfoner" Ebene? Wie kann ich bspw. um PLUS 2 oder MINUS 7 (nicht simple shiften) sondernS HIFTEN und ZUGLEICH korrekt WRAPPEN?
(Ich verstehe WRAP "linear" aber leider nicht "polyfon"!

+++ Ich brauch den DIV nicht im aktuellen Anwendungsbereich.... "re-Positionieren" ist ja voller Fallstricke... was ist aber mit simplen Löschen???? Nicht nur hier, sondern generell-- funzt ein Core nicht mehr, weil ein Port gelöscht wurde? Aufs GANZE betrachtet veräbndert es EBENFALLS die Reihenfolge????
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: Voice-shift in core?

Beitrag von herw »

Vorweg mal eine Frage: arbeitest du mit REAKTOR 6 oder noch mit REAKTOR 5?

Deinen letzten Satz verstehe ich nicht, da du ja nur allgemein beschreibst, wie du ein event-shift-Makro benutzen möchtest.
Ich habe lediglich ein shift-nach-vorn hingehauen, da du sagst, dass alle anderen Probleme sich damit lösen lassen.
Weitere allgemeine shift-um-beliebige-steps-nach-vorn-oder-hinten-Lösungen muss man sich speziell anschauen.
Das Blöde ist leider, dass man voices nur in primary einfach behandeln kann.
Kompliziertere Aufgaben gehen in einem Wechselspiel von primary und core. Man kann sich denken, dass man ein polyphones event in eine monophone Sequenz von Stimmenadresse und Wert umwandelt, dann in core einschleust (durch eine Iteration), und in ein Array schreibt und dort umschichtet (shiftet) oder in ein zweites Array schreibt. Anschließend muss man die geshifteten Werte durch eine Triggersequenz (Iteration von primary) wieder auslesen und wieder in primary in ein polyphones Eventsignal umwandeln.
Das ist Alles nicht sehr einfach und muss gut organisiert sein. Der Aufwand ist unverhältnismäßig. Meine Forderung nach einem voice-Management in core kommt nicht von ungefähr.
Vielleicht gibt's auch andere Lösungen, aber man muss grundsätzlich darüber nachdenken, wie man durch ein allgemeines framework zwischen primary und core, ein funktionierendes Voice-Management zustande bringt.
Antworten