Shuffle algorithms

Hello,

I noticed that the shuffle is based on the following values:

const float seq_shuffleTable[16] =
{
        0.f,
        0.015625f,
        0.0625f,
        0.140625f,
        0.25f,
        0.390625f,
        0.5625f,
        0.765625f,
        1.f,
        0.984375f,
        0.9375f,
        0.859375f,
        0.75f,
        0.609375f,
        0.4375f,
        0.234375f,
};


Can someone tell me ;-) where those values comes from ?
I would like to try some others....

Any link to an article about that ?

Thanks!!


Comments

  • edited January 2015
    oh its been a while since I wrote that ;)

    if you look at the sequencer code:

            //every 2nd and 4th 16th note in a beat is shifted full
            //=> step 8 and step 24
            //every 2nd 16th note in half a beat
            //every beat has 32 steps => half = 16
            uint8_t stepInHalfBeat = seq_masterStepCnt&0xf;
            const float shuffleFactor = seq_shuffleTable[stepInHalfBeat] * seq_shuffle;
            const float originalDeltaT = seq_deltaT;

            seq_deltaT += shuffleFactor * originalDeltaT * 16.f;
            seq_deltaT -= seq_lastShuffle * originalDeltaT * 16.f;


    so this translates to the shift amounts of the (sub)steps in one beat. A bar with 128 substeps has 4 beats with 32 steps each.

    Normally when you only have a 16 step sequencer implementing shuffle is quite straight forward, because you only shift every other step. With the LXR subSteps I needed a way to translate the shuffle to the sub steps as well.

    So this table is the relative shuffle amount for all steps in half a beat. If the value is 1, the according step is shiftet with the full shuffle amount, if it is 0.5 only half the shuffle amount is applied.

    So you will not hear much change in a pattern without substeps when you change those values.

    originalDeltaT is the time a step will be shifted wich gets included in the normal seq_deltaT which indicates the time till the next step.
  • Oki, I see :-)
    So If I understand, you choose the values by "random" - by yourself - you did not took those values from another program or theory ?

    Next, I am wondering if changing the global tempo over the steps would be significant. I explain:
    - I notice on my tb303 or my Future ORB sequencer that the tempo changes drastically... if I set a tempo of 124, I can see that the tempo oscillates between 123 and 125bpm over the time.

    I am checking your code and I think I could try to change the tempo over the steps but I am wondering if this could give more groove ?

    What do you think ?
    Cheers.

  • The LXR shuffle algorithm seems similar to the MPC swing algorithm. I think a big difference is that the MPC takes into account the quantization setting. For example, if the box is quantizing on 16th notes then every other 2nd 16th-note is shifted. The current LXR shuffle implementation is too granular. Like you said, unless you are really using a bunch of substeps the shuffle config changes will have little or no effect. The setting would be more noticeable if it only affected 16th or 32nd notes. Basing it on the quantization setting would really be helpful.
Sign In or Register to comment.