hey!
i have to program a Sequencer Variante of the MB-SEQ, by using the SEQ_BPM…
but before i have to be clear what i want… so i think loud a bit…
DRUMSEQUENCERs & ODD TACT (UNGERADE SCHLÄGE)
since i work with a guitarist, (which play with a Guitar2MidiConverter)
he want that i can program 5er, 6er, 7er
since i come from electronic sequencer music, I worked so far with drum-step-sequencers which program that 4/4Tact on a 16x1 LED-Button Hardware,
OK lets take a look on something I/we know.:
if we talk about LOOP LENGTH , and the Change of it, we have to decide which VALUES are INTERESTING…
so 16 are the maximum amount of visible STEPS on the UI(@once), i call that a PAGE >1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <
3 PAGES:
| 4 |
| 1PageLoop | Length | Sel |
| Steps | Steps | Page |
| 0 | 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
| 11 | 11 |
| 12 | 12 |
| 13 | 13 |
| 14 | 14 |
| 15 | 15 |
| 0 | 16 | 1 |
| 1 | 17 |
| 2 | 18 |
| 3 | 19 |
| 4 | 20 |
| 5 | 21 |
| 6 | 22 |
| 7 | 23 |
| 8 | 24 |
| 9 | 25 |
| 10 | 26 |
| 11 | 27 |
| 12 | 28 |
| 13 | 29 |
| 14 | 30 |
| 15 | 31 |
| 0 | 32 | 2 |
| 1 | 33 |
| 2 | 34 |
| 3 | 35 |
| 4 | 36 |
| 5 | 37 |
| 6 | 38 |
| 7 | 39 |
| 8 | 40 |
| 9 | 41 |
| 10 | 42 |
| 11 | 43 |
| 12 | 44 |
| 13 | 45 |
| 14 | 46 |
| 15 | 47 |
on a DRUMSEQUENCER with 4/4 Tact we always double the Steps, to keep in TACT with MelodySequencers (why? wait, later!):
2 x 2 = 4 (@ME: what is the multiplicator when using 5 6 or 7 TACT???)
4 x 2 = 8
8 x 2 = 16 >>> the maximal visible amount of STEPs on a single PAGE >>> so this is our minimal LENGTH
16 x 2 = 32
32 x 2 = 64 >>> the maximal Length of a Korg Electribe Rythm
64 x 2 = 128 >>> a very handy Length when using whole PAGE-Copy-Paste?, and AUTO-Completion (copy Page 1 to All the Rest…)
128x2 = 256 >>> very long for Drums if using all the Steps in one whole Loop >>> what brings us to another Point:
CHAINING PAGES or SETTING LOOP LENGTH
lets say a PAGE has 16Steps (@ME 3x5=15, 2x6=12, 2x7=14)
Chain PAGE 1+2+3+4 = 4 PAGES * 16 STEPS = 64 STEPS
Chain PAGE 1+2+3 = 3 PAGES * 16 STEPS = 48 STEPS… maybe problem: when playing with other Sequencers, e.g.we play a Bass 64 STEPs long…
DRUMS: 48*2=96
while BASS: 64*2=128, so the Baseline will differ on its way off fitting with the drums…
>>>if i think right? there is no point that they ever will meets on the same point???<<< or in a musical period of time (for me)
This is a problem when we separate DRUM and MELODY DEVICES… and change the Length while playing… such SETUP will maybe ONLY work with DOUBLEs OF PAGES
… I dont say its forbidden … specially in my case …
CASE NORMAL: DRUM SEQUENCE has a rythmic, the Melody has a rythmic >>> if they drift by (not equal @ all)… the listener will not find the COMMON RYTHMIC (especially on long Melody’s)
CASE TRIGGERMATRIX: DRUM SEQUENCE is the only rythmic, the Melodys rythmic is ignored >>> the drift that you hear is pitch based, that the played notes ON THE RYTHM are NEVER The same, @ least U find the rhythm…
… since I work on my case, i will not forbidd anything, but i will INFORM me the possible/right next PAGE to CHAIN > …but before we get to that I have to to inform you how how to handle this CHAINING via a UI (UserInterface):
SETTING LOOP LENGTH via 16 Buttons in a ROW:
We have 16 BUTTONS that are Representing 16 PAGES (a’ 16 Steps)
>Loop a single Page > short double Click a button.
>Loop from Page eg. 4 too 8 > Click&Hold Button"4" & Click Button"8" (which in First Place visualize Page4, and then Set a 4x16=64Loop to Page 8)
So to avoid that 48/64 dilemma, we have to get sure that we only select DOUBLED PAGES, and here i come to the point to INFORM me about possible FITTING PAGES:
INFORM:
I press the First PAGE (4), now following Pages get enlighten 6 8 12
| START | DOUBLE | END |
| 4 | 0 | 4 |
| 4 | 2 | 6 |
| 4 | 4 | 8 |
| 4 | 8 | 12 |
| 4 | 16 | 20 |
I decide to press “8”, and i now have a 64Step Loop, but I don’t want to set the Loop length immediately, I want it to make it in Sync, I want it to switch by the next DOUBLE…
Lets make a shorter example:
64 Steps Maximum is set for this TRACK… this has to be set before pressing the Play button, in order to get a MAIN-Timeline, to that we can return if we want back to the whole loop.
| A maximum-length-counter will ever cycles from 0-63-0-63 …. it counts the midiclock-ticks, this is our MAIN-TIMELINE |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
| 0 BAR | 1 BAR | 2 BAR | 3 BAR |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| The Loop LENGTH | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| 0 BAR | 1 BAR | 2 BAR | 3 BAR |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| for me, it is enough, to switch @then end of the current selected Loop | | New Loop Length: if (step is > 31) {step = 48;} ….. | | | | | | | | | | | | | | | | |
| In this case it is STEP 31, where the Next Step should be 48 in a loop to 63. | | | | | | | | | | | | | | | | | step+1; if(step>maxLoop){step=minLoop)…. |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | NEW Loop LENGTH |
| 0 BAR | 1 BAR | 2 BAR | 3 BAR |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 |
if i want a more stable play in interaction with melodylines, we just watch out for the Main Time Line, the switching between loop points then will take longer until it is set:
in example above, we have a loop from 0-31, while this loop is playing, i decidet to make a new Loop from 48-63… the machine now loops its rounds until the MAIN-TIMELINE comes to Step 48,
form now the New Loop take effect… This is no problem with a 4 Bar Track, where the maximum what you have to wait is 3 Bars… but what when you set the Track to a maximum off 16 Bars?
…of course it will take time until it switches… so i would say we make a hardware button, that switch between 1BAR SYNC and MAIN-TIMELINE, where MAIN-TIMELINE would kick you back in sync with extern Melody Sequencers…
MIDICLOCK and TACT
while 4/4Tact is clear, like shown in the Tutorial 17 (sequencer), its a bit more Brain Acitivity to find out how to work with 5 6 7 9 Tacts
Tutorial on 4/4
static s32 SEQ\_Tick(u32 bpm\_tick){// performs a single bpm tick // whenever we reach a new 16th note (96 ticks @384 ppqn): if( (bpm\_tick % (SEQ\_BPM\_PPQN\_Get()/4)) == 0 ) { // ensure that step number will be reseted on first bpm\_tick if( bpm\_tick == 0 ) seq\_step\_pos = 0; else { // increment step number until it reaches 16 if( ++seq\_step\_pos \>= 16 ) seq\_step\_pos = 0; } SEQ\_Handler(); if(seqMATRIX[0][seq\_step\_pos] \> 0){ APP\_NOTEPROCESS(0, 36, seqMATRIX[0][seq\_step\_pos]);}//(u8 port, u8 note, u16 velocity) Notes Back to APP.c }
The next thing is to translate that all to 5 6 7 & 9 TACTs on 16*16+X Matrices…** but that is something to sleep over it… good night**

