ganz kleine frage zu zählern und sequencern

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

Moderator: herw

Antworten
fweth
meister
Beiträge: 118
Registriert: 21. November 2007, 16:01
Wohnort: Österreich

ganz kleine frage zu zählern und sequencern

Beitrag von fweth »

ein ganz kleine frage noch: wie kann ich einen normalen zähler machen, der sich jedoch nach ab einer bestimmten zahl wieder resetet, also zB bis 15 zählt, und statt 16 wieder 0 ausgibt? außerdem wäre es praktisch, wenn der zähler auch mit audio funktioniert, weil der counter läuft ja nur auf event.

ich denke außerdem gerade ein wenig über sequencer nach, und frage mich wie ich am einfachsten einen stepsequencer mit mehr als 16 steps bauen kann. das selector/scanner teil, das mir da als erstes in den sinn kommt, geht leider nur bis 16 positionen. also eher mit dem zähler und einer audio/eventtable. aber dann habe ich keine buttons/regler, sondern nur die table. oder mit dem zähler und einem "Compare/Equal" module für jeden einzelnen step, das ist zwar ein bisschen langwirrig, erscheint mir aber sogar ameinfachsten. was meint ihr?
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: ganz kleine frage zu zählern und sequencern

Beitrag von herw »

fweth hat geschrieben:ein ganz kleine frage noch: wie kann ich einen normalen zähler machen, der sich jedoch nach ab einer bestimmten zahl wieder resetet, also zB bis 15 zählt, und statt 16 wieder 0 ausgibt? außerdem wäre es praktisch, wenn der zähler auch mit audio funktioniert, weil der counter läuft ja nur auf event.

ich denke außerdem gerade ein wenig über sequencer nach, und frage mich wie ich am einfachsten einen stepsequencer mit mehr als 16 steps bauen kann. das selector/scanner teil, das mir da als erstes in den sinn kommt, geht leider nur bis 16 positionen. also eher mit dem zähler und einer audio/eventtable. aber dann habe ich keine buttons/regler, sondern nur die table. oder mit dem zähler und einem "Compare/Equal" module für jeden einzelnen step, das ist zwar ein bisschen langwirrig, erscheint mir aber sogar ameinfachsten. was meint ihr?
das ist nach deinen Erfahrungen im Oszillatorenbereich eigentlich ganz einfach: Du nimmst einen ganz normalen Ramposzillator (Core ohne Antialaising) und änderst den wrapper so, dass er bei Überschreiten der 15 (also bei 16) einfach 16 subtrahiert (Rücksprung auf die 0 (oder 1 mit minus 15). Die Stephöhe ist dann kein Bruchteil der SampleRate-Frequenz sondern einfach 1.
Im Core-Handbuch findest Du einen Eventzähler. Mit dem Wrapper zusammen ensteht da auch im Audiobereich ein Ganzzahl-Oszillator.
Mit anderen Wrapperfunktionen (auch variabler Obergrenze!) hast Du den Grundstock des Sequenzers gelegt. Die Frequenz des Ganzzahl-Oszillators legst Du ganz normal mit einem Recht-Generator (als Clockgenerator) fest.
fweth
meister
Beiträge: 118
Registriert: 21. November 2007, 16:01
Wohnort: Österreich

Re: ganz kleine frage zu zählern und sequencern

Beitrag von fweth »

herw hat geschrieben:das ist nach deinen Erfahrungen im Oszillatorenbereich eigentlich ganz einfach: Du nimmst einen ganz normalen Ramposzillator (Core ohne Antialaising) und änderst den wrapper so, dass er bei Überschreiten der 15 (also bei 16) einfach 16 subtrahiert (Rücksprung auf die 0 (oder 1 mit minus 15). Die Stephöhe ist dann kein Bruchteil der SampleRate-Frequenz sondern einfach 1.
Im Core-Handbuch findest Du einen Eventzähler. Mit dem Wrapper zusammen ensteht da auch im Audiobereich ein Ganzzahl-Oszillator.
Mit anderen Wrapperfunktionen (auch variabler Obergrenze!) hast Du den Grundstock des Sequenzers gelegt. Die Frequenz des Ganzzahl-Oszillators legst Du ganz normal mit einem Recht-Generator (als Clockgenerator) fest.
ich habe jetzt aus elementen von dem saw LFO und dem eventcouter aus der core ebene zwei eigene module gebastelt. das eine funktioniert einfach als ganzzahliger oszillator, so wie du gemeint hast, und das andere als zähler (jedes mal wenn das eingangssignal 0 überschreitet, wird ein wert weitergezählt). ich bin jetzt echt ein wenig warm geworden mit core cells :) auch wenn ich noch viel recycle von anderen modulen, aber funktionieren tuts allerdings. nur weiß ich nicht, ob ich irgendwas unnötig verkompliziert habe, oder ob das schon schick ist so.

der ganzzahlige oszillator:
counterLFO.gif
der zähler:
counter.gif
jetzt sind mir nur zwei eher allgemeinere core-fragen übriggeblieben:

1. wie kann ich zwei vergleichsoperatoren am einfachsten logisch verknüpfen, so quasi nur wenn der wert größer ist als 1 UND kleiner ist als 2, soll 1 ausgegeben werden, sonst 0. oder nur wenn der wert unter 1 ODER über 2 liegt soll 1 ausgegeben werden. ich könnte das mit ein paar relays hintereinander und diesen logischen bit mudulen lösen, aber das lässt sich doch sicher einfacher machen, und sogar in eine art relayfunktion integrieren, wo man die werte für wahr oder falsch über 2 eingänge festlegen kann.

2. was ist in core ein unitdelay? ist das dieses macro, das sich auch in dem Dup Flt modul befindet?

und außerdem: wie kann ich jetzt, wo ich den grundstein zu einer art stepsequencer gelegt habe, die positionsinformation, die meine module ja quasi ausgeben, mit den eigentlichen (noten)werten verknüpfen? sicherlich ginge das mit einer reihe Compare/Equal abfragen so zB. wenn der pos-wert gleich dem wert 3 ist, dann wird 1 ausgegeben, wenn der pos-wert gleich dem wert 4 ist, dann wird 0 ausgegeben usw., aber ist das die einfachste möglichkeit?

danke
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: ganz kleine frage zu zählern und sequencern

Beitrag von herw »

fweth hat geschrieben:[...]
ich habe jetzt aus elementen von dem saw LFO und dem eventcouter aus der core ebene zwei eigene module gebastelt. das eine funktioniert einfach als ganzzahliger oszillator, so wie du gemeint hast, und das andere als zähler (jedes mal wenn das eingangssignal 0 überschreitet, wird ein wert weitergezählt). ich bin jetzt echt ein wenig warm geworden mit core cells :) auch wenn ich noch viel recycle von anderen modulen, aber funktionieren tuts allerdings. nur weiß ich nicht, ob ich irgendwas unnötig verkompliziert habe, oder ob das schon schick ist so.

der ganzzahlige oszillator:
Bild
ich würde an den Eingängen noch entscheiden, ob es sich um event- oder wirklich audio-Signale handelt: z.B der reset-Befehl oder die Frequenz des Clockgenerators werden sicherlich von Reglern oder Midisignalen gesteuert, also Eventsignalen. Durch das Umstellen auf Eventeingänge kannst Du eine Menge an CPU sparen.
jetzt sind mir nur zwei eher allgemeinere core-fragen übriggeblieben:

1. wie kann ich zwei vergleichsoperatoren am einfachsten logisch verknüpfen, so quasi nur wenn der wert größer ist als 1 UND kleiner ist als 2, soll 1 ausgegeben werden, sonst 0. oder nur wenn der wert unter 1 ODER über 2 liegt soll 1 ausgegeben werden. ich könnte das mit ein paar relays hintereinander und diesen logischen bit mudulen lösen, aber das lässt sich doch sicher einfacher machen, und sogar in eine art relayfunktion integrieren, wo man die werte für wahr oder falsch über 2 eingänge festlegen kann.
Das ist die so genannte Pulse-Funktion, wenn man auf alle Eventualitäten vorbereitet sein will, dann ist dies nicht ganz so einfach. Du findest die Funktion unter anderen in der user library:
FUNCTIONS (core) v1.0

2. was ist in core ein unitdelay? ist das dieses macro, das sich auch in dem Dup Flt modul befindet?
nein, Dup Flt filtert, wie der Name schon sagt, gleiche Zahlenwerte die direkt hintereinander folgen aus, gibt sie also nur einmal aus. Das Unit-Delay auf primary entspricht dem Modul Z^-1. Das ist nichts anderes als ein Lese-Schreib-Speicher. Bei jedem Sample-Clock liest es zunächst den aktuellen Speicherwert aus und überschreibt dann diesen mit dem neuen Wert. D.h. bei jedem Clock wird der vorangegangene Wert ausgegeben und dann erst der neue gespeichert. Der Ausgang hinkt also immer ein Sample hinter dem aktuellen her. Genau das macht auch das untidelay auf primary-Ebene.
Im oben erwähnten Oszillator wird der Speicher ähnlich benutzt: es wird zunächst der alte Speicherwert ausgelesen, dann ein neuer Wert durch den Stufenwert erzeugt und dann abgespeichert; allerdings wird der aktuelle Wert sofort ausgegeben. Würde man vor der Addition des Stufenwertes den Speicherwert ausgegeben, dann hätte man auch einen um ein Sample "nachhinkenden" Oszillator.
und außerdem: wie kann ich jetzt, wo ich den grundstein zu einer art stepsequencer gelegt habe, die positionsinformation, die meine module ja quasi ausgeben, mit den eigentlichen (noten)werten verknüpfen? sicherlich ginge das mit einer reihe Compare/Equal abfragen so zB. wenn der pos-wert gleich dem wert 3 ist, dann wird 1 ausgegeben, wenn der pos-wert gleich dem wert 4 ist, dann wird 0 ausgegeben usw., aber ist das die einfachste möglichkeit?

danke
Damit kann ich jetzt im Moment nicht viel anfangen, da mir die Wertezuordnung nicht ganz einsichtig erscheint: nur soviel, wenn es um eine nicht berechenbare Wertetabelle handelt, dann kannst Du ja eine event-Table nehmen. Aber ich ahne, dass das nicht dein Ziel ist, da die Werte sicherlich veränderlich sein sollen.
Da muss man schon etwas mehr Informationen haben.

Ich finde es übrigens toll, dass du dich in diese Sache so hinein beißt. Genau so lernt man REAKTOR!

ciao herw ::kaffee::
fweth
meister
Beiträge: 118
Registriert: 21. November 2007, 16:01
Wohnort: Österreich

Re: ganz kleine frage zu zählern und sequencern

Beitrag von fweth »

herw hat geschrieben:
fweth hat geschrieben: 1. wie kann ich zwei vergleichsoperatoren am einfachsten logisch verknüpfen, so quasi nur wenn der wert größer ist als 1 UND kleiner ist als 2, soll 1 ausgegeben werden, sonst 0. oder nur wenn der wert unter 1 ODER über 2 liegt soll 1 ausgegeben werden. ich könnte das mit ein paar relays hintereinander und diesen logischen bit mudulen lösen, aber das lässt sich doch sicher einfacher machen, und sogar in eine art relayfunktion integrieren, wo man die werte für wahr oder falsch über 2 eingänge festlegen kann.
Das ist die so genannte Pulse-Funktion, wenn man auf alle Eventualitäten vorbereitet sein will, dann ist dies nicht ganz so einfach. Du findest die Funktion unter anderen in der user library:
FUNCTIONS (core) v1.0
ist das etwa so kompliziert? ich dachte einfach an zwei verknüpfte relays, sowie hier
Doppelte_Bedingung.gif
und da habe ich mich nur gefragt ob man noch einfacher zwei vergleichsoperatoren verknüpfen kann, vielleicht ohne die vier latchmodule, aber ansonsten reicht mir diese lösung auch schon.
herw hat geschrieben:
fweth hat geschrieben: 2. was ist in core ein unitdelay? ist das dieses macro, das sich auch in dem Dup Flt modul befindet?
nein, Dup Flt filtert, wie der Name schon sagt, gleiche Zahlenwerte die direkt hintereinander folgen aus, gibt sie also nur einmal aus. Das Unit-Delay auf primary entspricht dem Modul Z^-1. Das ist nichts anderes als ein Lese-Schreib-Speicher. Bei jedem Sample-Clock liest es zunächst den aktuellen Speicherwert aus und überschreibt dann diesen mit dem neuen Wert. D.h. bei jedem Clock wird der vorangegangene Wert ausgegeben und dann erst der neue gespeichert. Der Ausgang hinkt also immer ein Sample hinter dem aktuellen her. Genau das macht auch das untidelay auf primary-Ebene.
danke, ich meinte eigentlich auch das Z^-1 modul, hab mich nur schlampig ausgedrückt, aber das befindet sich ja im Dup Flt modul. nun habe ich aber noch zwei probleme mit dem:

1. es verzögert die zwar die WERTE, aber durch die integrierte SR.C werden einzelne IMPULSE (die möglicherweise alle den selben wert besitzen, zB ein latch modul das als clockimpuls immer 1 ausgibt) zu der SR getaktet, also die information über einzelne impulse geht verloren. daher wollte ich fragen: gibt es auch die möglichkeit wert UND impuls um 1 sample zu verzögern?

2. mir ist außerdem aufgefallen, dass das Z^-1 modul aus dem wert 0, den wer 1e-20 macht, also einen wert größer als 0. manchmal ist das nervig, wenn man mit relays arbeitet, und das Z^-1 modul davor setzt. natürlich kann man sich da leicht mit Int ein/augängen helfen, aber gibt es noch eine andere möglichkeit diesen bug zu beheben?
herw hat geschrieben:
fweth hat geschrieben: und außerdem: wie kann ich jetzt, wo ich den grundstein zu einer art stepsequencer gelegt habe, die positionsinformation, die meine module ja quasi ausgeben, mit den eigentlichen (noten)werten verknüpfen? sicherlich ginge das mit einer reihe Compare/Equal abfragen so zB. wenn der pos-wert gleich dem wert 3 ist, dann wird 1 ausgegeben, wenn der pos-wert gleich dem wert 4 ist, dann wird 0 ausgegeben usw., aber ist das die einfachste möglichkeit?
Damit kann ich jetzt im Moment nicht viel anfangen, da mir die Wertezuordnung nicht ganz einsichtig erscheint: nur soviel, wenn es um eine nicht berechenbare Wertetabelle handelt, dann kannst Du ja eine event-Table nehmen. Aber ich ahne, dass das nicht dein Ziel ist, da die Werte sicherlich veränderlich sein sollen.
Da muss man schon etwas mehr Informationen haben.
ich hab das jetzt vielleicht zu kompliziert ausgedrückt, ich meine tatsächlich nur das gaanz banale sequencingprinzip. position als eingang, frei wählbare wert für jeden step als ausgang. wirklich genau so wie mit der event/audiotable, nur hätte ich zu eingabe gerne regler/buttons/fader. als erstes kommt mir da der Selector/Scanner in den sinn, aber der geht leider nur bis 16 steps. wenn ich mit mehr als 16 steps arbeiten möchte, was bietet sich da am ehersten an? ich hab das mal folgendermaßen gelöst (sind zwar weniger wie 16 steps, und pitchwerte als eingang, aber das prinzip funktioniert ja auch andersrum und mit mehr als 16 steps)
Selectorfunktion.gif
so geht das auf jeden fall, aber gibt es noch eine einfachere/gängigere lösung?

danke
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
fweth
meister
Beiträge: 118
Registriert: 21. November 2007, 16:01
Wohnort: Österreich

Re: ganz kleine frage zu zählern und sequencern

Beitrag von fweth »

fweth hat geschrieben: 2. mir ist außerdem aufgefallen, dass das Z^-1 modul aus dem wert 0, den wer 1e-20 macht, also einen wert größer als 0. manchmal ist das nervig, wenn man mit relays arbeitet, und das Z^-1 modul davor setzt. natürlich kann man sich da leicht mit Int ein/augängen helfen, aber gibt es noch eine andere möglichkeit diesen bug zu beheben?
nun, das hat sich geklärt. dieser fehler wird durch das DNC verursacht, nimmt man statt dem Z^-1 einfach das Z^-1 ndc modul, dann gibt es keine probleme mehr.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: ganz kleine frage zu zählern und sequencern

Beitrag von herw »

fweth hat geschrieben:
fweth hat geschrieben: 2. mir ist außerdem aufgefallen, dass das Z^-1 modul aus dem wert 0, den wer 1e-20 macht, also einen wert größer als 0. manchmal ist das nervig, wenn man mit relays arbeitet, und das Z^-1 modul davor setzt. natürlich kann man sich da leicht mit Int ein/augängen helfen, aber gibt es noch eine andere möglichkeit diesen bug zu beheben?
nun, das hat sich geklärt. dieser fehler wird durch das DNC verursacht, nimmt man statt dem Z^-1 einfach das Z^-1 ndc modul, dann gibt es keine probleme mehr.
;-) die Wahrscheinlichkeit, dass ein angeblicher Bug eines Programms der User ist, ist ziemlich groß! ;-)

Man kann davon ausgehen, dass gerade solche "Fehler" keine sind; alle Programmiersprachen haben durch die Digitalisierung zwangsläufig bei bestimmten Zahlen Schwierigkeiten mit der Darstellung. Dies kann zu CPU-Überlastungen führen, die man durch DC (denormal cancellation) unterdrückt wird. Kann der Programmierer eindeutig sicherstellen, dass es zu keinen denormalen Zahlen kommt, kann er darauf verzichten. Gerade in Fällen, in denen man nach exakter Gleichheit fragt ("gleich Null" etc.) kann es im Bereich der Fließkommazahlen sehr schnell zu einer Überlastung kommen. In deinem Fall ging es ja nur um die Position, also einem Ganzzahlwert. Hier kann exakt nach Gleichheit gefragt werden und dann kann es nicht zu denormalen Zahlen kommen. Abfrage nach Gleichheit wird im Bereich der Fließkommazahlen eigentlich in der Regel durch eine Größer-Abfrage umgangen.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: ganz kleine frage zu zählern und sequencern

Beitrag von herw »

fweth hat geschrieben:[...]
ich hab das jetzt vielleicht zu kompliziert ausgedrückt, ich meine tatsächlich nur das gaanz banale sequencingprinzip. position als eingang, frei wählbare wert für jeden step als ausgang. wirklich genau so wie mit der event/audiotable, nur hätte ich zu eingabe gerne regler/buttons/fader. als erstes kommt mir da der Selector/Scanner in den sinn, aber der geht leider nur bis 16 steps. wenn ich mit mehr als 16 steps arbeiten möchte, was bietet sich da am ehersten an? ich hab das mal folgendermaßen gelöst (sind zwar weniger wie 16 steps, und pitchwerte als eingang, aber das prinzip funktioniert ja auch andersrum und mit mehr als 16 steps)
[...]
Ein Sequenzer interessiert mich im Moment auch, daher vorweg folgende Klarstellung:
  • Der Sequenzer soll der Reihe nach eine größere Anzahl (16, 32 ...) Werte einlesen und ausgeben können.
  • Jeder Wert soll durch einen Regler einstellbar sein.
  • weitere Option: Die Sequenz soll abgespeichert werden und wieder abrufbar sein
korrekt?
fweth
meister
Beiträge: 118
Registriert: 21. November 2007, 16:01
Wohnort: Österreich

Re: ganz kleine frage zu zählern und sequencern

Beitrag von fweth »

herw hat geschrieben:Ein Sequenzer interessiert mich im Moment auch, daher vorweg folgende Klarstellung:
  • Der Sequenzer soll der Reihe nach eine größere Anzahl (16, 32 ...) Werte einlesen und ausgeben können.
  • Jeder Wert soll durch einen Regler einstellbar sein.
  • weitere Option: Die Sequenz soll abgespeichert werden und wieder abrufbar sein
korrekt?
ja im prinzip schon, nur über das speichern habe ich mir noch keine gedanken gemacht, aber das dürfte doch dank snapshots kein problem sein, oder?

es gibt ja viele wege so etwas zu erreichen, und daher stellt es für mich auch kein unmittelbares problem dar, ich wollte mich nur nach dem einfachsten weg erkundigen, damit ich nicht mit einem uneffektiven prinzip anfange, und später einmal probleme habe.
Benutzeravatar
herw
moderator
Beiträge: 3122
Registriert: 13. März 2006, 18:28
Wohnort: Dortmund

Re: ganz kleine frage zu zählern und sequencern

Beitrag von herw »

ja - ich werde mich in den nächsten Tagen mal daransetzen; allerdings gehe ich immer sehr langsam vor, da ich immer an mehreren Sachen gleichzeitig arbeite je nach Laune.
Antworten