sequencer with adjustable step lenght for each step

Riann
Riann Member Posts: 18 Member
edited June 2022 in Reaktor

Hi :) I built a sequencer following the chapter 5 of the Reaktor primary manual. I would like to keep this setup with the multidisplay and the mouse area but i want to be able to adjust the lenght of each step individually. Any idea? Maybe some ensamble which has this function?

Best Answer

  • colB
    colB Member Posts: 761 Guru
    edited June 2022 Answer ✓

    If you have a simple sequencer (like the one I posted to stepaan's thread - are you guys on the same course asking for help with your homework? ;)) that just updates the step position when there is an input clock trigger, then it shouldn't be too difficult to add step length as long as it's in clocks - so a step can be 1, 2, 3 etc. clock ticks in length

    In that case you need a couple of things:

    A way to set the number of ticks per step - another row of knobs works well for this

    A counter (use count down).

    -------------------------

    When a clock tick arrives, instead of sending it to the sequencer, you send it to the counters decrement input.

    If the counter reaches zero, pass the tick through to the sequencer to start the next step (use separator for this)


    Each time you play a new step (ie. you passed the tick through to the sequencer):

    1 retrieve the ticks per step value for the new step

    2 set the counter to that value

    -------------------

    That's pretty much it.

    If you want some system where you can choose step lengths that are not multiples of a simple regular clock pulse, then you need something more complex where the clock itself is modified based on values stored per sequencer step... or just choose a much higher clock rate... like 12 or 24 times the bpm, and a bigger range on the ticks per step controls...

«1

Answers

  • Riann
    Riann Member Posts: 18 Member

    Hi, I mistaked in the description, the structure in the manual isn't with the mouse area and the multidisplay.. it's with the event table. For the rest my question is the same.. anyone who knows a sequencer ensamble with adjustable lenght per step?

  • Paule
    Paule Member Posts: 1,328 Expert
  • Riann
    Riann Member Posts: 18 Member

    Thanks Paul, i forgot to mention that i have Reaktor 5 :(

  • colB
    colB Member Posts: 761 Guru
    edited June 2022 Answer ✓

    If you have a simple sequencer (like the one I posted to stepaan's thread - are you guys on the same course asking for help with your homework? ;)) that just updates the step position when there is an input clock trigger, then it shouldn't be too difficult to add step length as long as it's in clocks - so a step can be 1, 2, 3 etc. clock ticks in length

    In that case you need a couple of things:

    A way to set the number of ticks per step - another row of knobs works well for this

    A counter (use count down).

    -------------------------

    When a clock tick arrives, instead of sending it to the sequencer, you send it to the counters decrement input.

    If the counter reaches zero, pass the tick through to the sequencer to start the next step (use separator for this)


    Each time you play a new step (ie. you passed the tick through to the sequencer):

    1 retrieve the ticks per step value for the new step

    2 set the counter to that value

    -------------------

    That's pretty much it.

    If you want some system where you can choose step lengths that are not multiples of a simple regular clock pulse, then you need something more complex where the clock itself is modified based on values stored per sequencer step... or just choose a much higher clock rate... like 12 or 24 times the bpm, and a bigger range on the ticks per step controls...

  • Riann
    Riann Member Posts: 18 Member

    Thanks colB! I don't want to choose step lenghts that are not multiples so i will try this solution, but just to complicate ^^ what if i want to see the increment of the step lenght in the event table or better in the multidisplay?

  • colB
    colB Member Posts: 761 Guru

    what if i want to see the increment of the step length in the event table or better in the multidisplay?

    I think in that case, you need a more complex approach. Either some separate data structure, or use iterators to update the event table each time a step length parameter is updated. Doable, but definitely intermediate to advanced difficulty. I'd likely be switching to a snap value array combined with core at that point - ditching the event table.

  • Riann
    Riann Member Posts: 18 Member
    edited June 2022

    Thanks Paul, but this length is reffered to the number of steps in the sequence, not the lenght of the single steps.. i want to be able to set lets say the first step 1/8 long, the second 1/16 and so on..

  • Riann
    Riann Member Posts: 18 Member

    May i ask you to post here an example? A screenshot or better an ensamble..

    thanks

  • Stepaan
    Stepaan Member Posts: 15 Member

    Hehe. We're not doing any homework. BUT! You act as a brilliant teacher ;-) Thanks a lot!

  • Paule
    Paule Member Posts: 1,328 Expert
    edited June 2022

    If you want to use speed as gate length you need a Delay or a Hold module, IMHO.

    If it is too short use a multiplier.

  • colB
    colB Member Posts: 761 Guru

    Ah, that's nice. Completely different from what I was suggesting, but equally useful depending on the context.

    Here's a pic of my solution:

    The highlighted part handles step length. Instead of clock going straight through to trigger the main sequencer, it drives a counter counting down, the separator only allows the trigger event through when the counter reaches zero. That then drives the sequence, but also selects a new counter value from the new selector/knobs. That value is fed back into the set input of the counter.

    This still has the 'reset starts from zero - loops back to a different selectable restart point' logic. I also added a selectable end point.

    Probably best would be to make the restart logic optional with some sort of switch. Then it would start from the first step, or the 'restart' step, depending on the panel setting.

    Maybe also better to have the manual step button ignore the start and end, so programming the different knob values is easier. That would require a bit more fettling, but shouldn't be too hard...

  • Stepaan
    Stepaan Member Posts: 15 Member

    Few more questions and @colB is going to develop The Ultimate Step Sequencer :-D

    I still can't figure out how it's possible, that the whole sequencer is one huge feedback loop without a single Unit Delay. Every time I try to do something similar, Reaktor crashes.

  • Riann
    Riann Member Posts: 18 Member

    Thanks colB! but how can i connect this to an event table?

  • colB
    colB Member Posts: 761 Guru

    I still can't figure out how it's possible, that the whole sequencer is one huge feedback loop without a single Unit Delay. Every time I try to do something similar, Reaktor crashes.

    If you look carefully, those feedback lines are connected to ports that are not immediately 'live'. The set input of the counter will not generate an output through the separator. Try setting a couple of the inputs to the step size selector to zero - those steps are now jumped, because the event goes around the loop until it hits a non zero value... if you set them all to zero, Reaktor will crash because the same event keeps going, never reaching an ending point... But because they are always set to 1 or more, this never happens - the loop always exits immediately at the separator.

    The feedback that increments the main sequencer feeds to the input port of a value module, not the trigger port - so this is acting something like a latch or z^-1 in core... almost like a unit delay for events...

    This is where Primary differs the most from core - with Primary, each event is processed to the end of its chain before the next event is handled, so if you duplicate an even using an order module (or just take multiple outs from the same port), then the first will be processed completely to it's ultimate destination before the next starts it's journey (that's why you should always use order modules, because you can't always guarantee what order Reaktor will process multiple connections from the same output port). And as long as you guarantee a logical end for each event's processing chain, there won't be a lockup/infinite loop.

    So in primary, it's possible to use feedback directly in many situations, as long as it makes sense. An example would be a Snap Value. You can have a feedback containing a Snap Value if you turn off its Write Thru parameter. That way, it only sends an output when a snapshot is loaded. So it looks like a feedback loop, visually, but it isn't really feedback, because mostly its just storing a new value - it only outputs during initialisation, one time, so there is no implicit infinite loop.

    Core uses a breadth first approach, all events that originate from the same even will be processed with 'logical simultaneity' - in other words as though they were being handled at the same time (not really possible, but virtually). This only breaks down with certain processes using OBC memory, and in those cases, there is a module and some other techniques to force any desired order.

    The consequence of this in core is that it's impossible to have feedback without a unit delay, so if you don't add one, an implicit one is added for you.

    Mostly core is much more logical, and easier to work with. But for some things Primary is more elegant - like this simple sequencer.

    Creating a complex more feature complete sequencer is significantly easier in core IMO.

Back To Top