Jump to content

Steps, Pages, Loop Length, Clock & Unstraight (odd) TACTs


Phatline
 Share

Recommended Posts

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

 

Edited by Phatline
  • Like 1
Link to comment
Share on other sites

What about SWING? ... a good describtion here: attackmagazin

Every 2nd Note is delayed a percentage of Time, 50%= no swing...55% is more swing and so on.... we can achieve this with a number off MidiClockTicks... but later more:

Fixed SWING 8th/16th  
Matrix[17][16] STEP 1 STEP 2 STEP 3 STEP 4 STEP 5 STEP 6 STEP 7 STEP 8 STEP 9 STEP 10 STEP 11 STEP 12 STEP 13 STEP 14 STEP 15 STEP 16  
Track 1 127 0 0 127 0 0 0 127 0 0 0 127 0 0 127 0 Velocity
Track 2 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0 Velocity
Track 3 94       94       94       94   63   Velocity
Track 4 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50 Velocity
Track 5 127 0 0 127 0 0 0 127 0 0 0 127 0 0 127 0 Velocity
Track 6 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0 Velocity
Track 7 94       94       94       94   63   Velocity
Track 8 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50 Velocity
Track 9 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0 Velocity
Track 10 94       94       94       94   63   Velocity
Track 11 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50 Velocity
Track 12 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0 Velocity
Track 13 94       94       94       94   63   Velocity
Track 14 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0 Velocity
Track 15 94       94       94       94   63   Velocity
Track 16 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50 Velocity
16th Swing 0 swing 0 swing 0 swing 0 swing 0 swing 0 swing 0 swing 0 swing tics
8th Swing 0 0 swing 0 0 0 swing 0 0 0 swing 0 0 0 swing 0 tics

Here we have to have a counter that counts straight with the Midiclock, to get 16th notes.

This counter will trigger the Step Swing Track…

if the Value of SWING = 0, then also the Velocity Tracks 1-16 will be triggered out.

If the Value of the Swing-Step is e.g.+20, then the other Tracks will be triggered in +20 tics

the variable "swing" is a knob on the user-interface that set the delay in ticks for this step, when the delay is done, all Track-Velocitys on this Step are dumped out.

you can see a fixed grid for 16th or 8th mode... classical known from drum computers...

---now expand this fixed grid to something editable, never heard thing...it is self explaining:

editable SWING 8th/16th
Matrix[17][16] STEP 1 STEP 2 STEP 3 STEP 4 STEP 5 STEP 6 STEP 7 STEP 8 STEP 9 STEP 10 STEP 11 STEP 12 STEP 13 STEP 14 STEP 15 STEP 16
Track 1 127 0 0 127 0 0 0 127 0 0 0 127 0 0 127 0
Track 2 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0
Track 3 94       94       94       94   63  
Track 4 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50
Track 5 127 0 0 127 0 0 0 127 0 0 0 127 0 0 127 0
Track 6 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0
Track 7 94       94       94       94   63  
Track 8 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50
Track 9 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0
Track 10 94       94       94       94   63  
Track 11 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50
Track 12 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0
Track 13 94       94       94       94   63  
Track 14 64 0 64 0 64 0 64 0 64 0 64 0 64 0 64 0
Track 15 94       94       94       94   63  
Track 16 24 50 24 50 24 50 24 50 24 50 24 50 24 50 24 50
17 swing % 0 swing 0 swing 0 0 swing 0 0 swing 0 swing 0 0 swing 0
18 8th/16th? 0 16th 0 16th 0 0 8th 0 0 16th 0 16th 0 0 8th 0

For this UI we need a new Matrix-Page, since we come over the 16 rows Limit... and its a bit "TOO MUCH VALUES"...

Maybe its better to make a global swing for each Step, and not for each cell!

  Its easier to program if we turn the whole ting 180°
  One Step Counter, one Swing for all Tracks, the swing is the Nr. off Tics to delay bevore the next STEP is sent out.
  editable SWING 8th/16th + ADD-TIC-Bar-Ccs  
  Normal tics 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 96 normal length
  16th: 96/2=48 8th: 192/2=96 +0 +(0-48) +0 +(0-96) +0 +0 +(0-96) +0 +0 +(0-48) +0 +(0-96) +0 +0 +(0-96) +0 Tics384 ppqm
CELL Matrix[17][16] STEP 1 STEP 2 STEP 3 STEP 4 STEP 5 STEP 6 STEP 7 STEP 8 STEP 9 STEP 10 STEP 11 STEP 12 STEP 13 STEP 14 STEP 15 STEP 16  
1 set swing 0 swing16 0 swing8 0 0 swing8 0 0 swing16 0 swing8 0 0 swing16 0 toggle
2 +0 tics @ 16th                                 +0 tics @ 8th
3 2                                 4
4 4                                 8
5 6                                 12
6 8                                 16
7 10                                 20
8 12                                 24
9 14                                 28
10 16                                 32
11 18                                 36
12 20                                 40
13 22                                 44
14 24                                 48
15 26                                 52
16 +28 tics                                 56
                                     
  The Ammount of TICs can be additional offset via global „Swing8“ & „Swing16“-Rotary.

So what we need for this Swing UI:

1: Toggle Button:  switch from step-sequencer-edit-mode to  Swing Mode     (what does the 16x16BLM Matrix show/do?)

2: a new Matrix16x16 Matrix-Page...which is shown in the graphic above, which has following functions:

   1st ROW: activate/deactivate swing, and toggle between 8th and 16th SWING-TIC-RANGE. (OFF, BLUE, GREEN)

   2nd to 16th ROW: change the amount of additional SWING-Ticks per Step.

3. 4x Swing Offset Rotary, this should be encoders, and should be saved with the patch.

   1. 8th Offset Rotary, Range +- 96 ticks

  2. 16th Offset Rotary, Range +- 48 ticks,

       while negative values overturns the Values from the "additional Swing-Ticks", by end up with no SWING @ all, & Positives values add ticks where no ticks where before...

  3. Offset Rotary for NON-Swinged-Steps.... so why not... a swing is try out a thing....

  4. Delay all @ 8th Range  (which include the possibility by maximum ammount to get from onbeat 2 offbeat....when slaved to other sequencers...)

so whats that with that pulses per quarter note > ppqn? & those Midiclock TICKS?

384 PPQN
Whole  1536    Dotted Whole   2304   Whole Triplet  1024
Half    768    Dotted Half    1152   Half  Triplet   512
Quarter 384    Dotted Quarter  576   Quarter Triplet 256
Eighth  192    Dotted Eighth   288   Eighth Triplet  128
16th     96    Dotted 16th     144   16th Triplet     64
32nd     48    Dotted 32nd      72   32nd Triplet     32
64th     24    Dotted 64th      36   64th Triplet     16
128th    12    Dotted 128th     18   128th Triplet     8

Note      TICKS       NOTE                     TICKS   NOTE                      TICKS

 

oh ya have fun.

Edited by Phatline
  • Like 1
Link to comment
Share on other sites

I think i have all that i need, the rest will be made with the Triggermatrix...

I cant make all Functions with the 16x16 Matrix...i cant label 3times... so a special seperate UI has to be build..

Since the Sequencer will be integrated in the TriggerMatrix - Firmware, i will use a part of it...

TriggerMatrix - UI: (1st Display will have a seperate Sequencer-System-Page to handle Tact-System, max.LoopLength...)

Local-UI.thumb.JPG.15727fca0fa718617565a

 

 

but now to the SEQ-ONLY - UI, 2x 2x40LCDs 8 Encoders 20BTNs, 20 LEDs 4 BTN States

Drum-Step-Sequencer USER-Interface (except BLM)
                                                                                   
  TRANSPORT   MATRIX MODES   STEP VELOCITY    
BTN                                                                                  
                                                                                 
                                                                                 
                                                                                 
                                                                                   
Nr 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 2x40LCD
BTNLabel S T P   P L Y   R E C   S T P   S W N   T M R   T M F   V E 1   V E 2   V E 3   BTN DISPLAY
BTN Label C P Y   P S T   C L R   F C P   F P S   F C L   L 2 x   F 2 x   E S W   E V E  
                                                                                   
BTN                                                                                  
                                                                                 
                                                                                 
                                                                                 
                                                                                   
  LOOP Copy/Paste/Clear   FOCUS TRACK Cpy/Past/Clr   Loop2x/Focus2x   ENCODER PAGE    
                                                                                   
                                                                                   
  MidiClock-Tick-Delay     Swing 16th offset     Swing 8th offset     Non Swinged offset      
                                                                                   
ENC                                                                                  
                                                                                 
                                                                                 
                                                                                 
                                                                                   
Nr 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 2x40LCD
ENC Label D L Y ||| ||| ||| ||| ||| _ _ 1 6 T |||         _ _ ||| ||| |     8 T H _ _ ||         N O N _ _ ENCODER DISPLAY
ENC Label V E 1 ||| |||       _ _ V E 2 ||| ||| ||| |||   _ _ V E 3 ||| ||| ||| ||| ||| _ _         2 B A R _ _
                                                                                   
ENC                                                                                  
                                                                                 
                                                                                 
                                                                                 
                                                                                   
  Step-Velocity1 – SET     Step-Velocity2 – SET     Step-Velocity3 – SET     LoopSet-Sync-Rate      
Edited by Phatline
  • Like 1
Link to comment
Share on other sites

because i have to mount the Button-PCB anykind, the best solution is to solder the Encoders on this board, and screw the encoder on the frontpanel...

so i will use one Display, when i then move a encoder, the labeling and value will go to ENCODER MODE, when i press a button the the labeling goes to BUTTON-VIEW:

Drum-Step-Sequencer USER-Interface (except BLM)
                                                                                   
ENC                                                                                 ENC are mount with screw-nuts
                                                                               
                                                                               
                                                                               
                                                                                   
  Step-Velocity1 – SET     Step-Velocity2 – SET     Step-Velocity3 – SET     LoopSet-Sync-Rate      
                                                                                   
BTN                                                                                 BTN are on same PCB as ENC
                                                                               
                                                                               
                                                                               
  TRANSPORT   MATRIX MODES   STEP VELOCITY    
BTNLabel S T P   P L Y   R E C   S T P   S W N   T M R   T M F   V E 1   V E 2   V E 3   BTN DISPLAY
BTN Label C P Y   P S T   C L R   F C P   F P S   F C L   L 2 x   F 2 x   E S W   E V E  
  LOOP Copy/Paste/Clear   FOCUS TRACK Cpy/Past/Clr   Loop2x/Focus2x   ENCODER PAGE    
BTN                                                                                  
                                                                                 
                                                                                 
                                                                                 
                                                                                   
  MidiClock-Tick-Delay     Swing 16th offset     Swing 8th offset     Non Swinged offset      
ENC                                                                                 ENC will hold the Buttons on the Frontpanel
                                                                               
                                                                               
                                                                               
  • Like 1
Link to comment
Share on other sites

update

Drum-Step-Sequencer UI
  ENCODER-PAGE 0  
ENC Value ||| ||| ||| ||| ||| ||| ||| |||     ||| ||| ||| |||             ||| ||| ||| ||| ||| ||| ||| |||               2 B A R   2x40LCD
ENC Label V E L O - L O W     V E L O - M I D         V E L O - H I       B A R - S Y N C
  ENCODER-PAGE 1  
ENC Value     0                     2 0                   9 6                     9 6     2x40LCD
ENC Label M a i n D e l a y   S w i n g 1 6 T H     S w i n g 8 T H     S w i n g N o r m
CharPosi 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  
ENC           P A G E 0                                               2 0           ENC are mount with screw-nuts
          C C 1 7               1 8                   1 9         2 0          
          P A G E 1                                                            
          2 1                   2 2                   2 3         2 4          
      Stop Play REC STEP SWING TM-rout TM-CC   1     2     3   Bar/Main Shrt/Lon      
      TRANSPORT MATRIX MODES STEP VELOCITY Sync Loop      
BTN + LED                                                                                 BTN are on same PCB as ENC
                                                                               
                                                                               
            0                                               1                  
BTN + LED                                                                                  
                                                                                Page
                                                                                 
                                                                                 
      Direction Enc ---SPARE---                             Focus
      < > <> Page                                                      
                                                        Cpy   Past   Clr            
  Copy, Paste, Clear and other Execution Buttons have no LEDs and are placed seperately

IMG_0740.thumb.JPG.3e5a92c8a8c626fa841aa

Edited by Phatline
  • Like 1
Link to comment
Share on other sites

  • 3 weeks later...

AutoQuantize, some Excel again:

Base = 12tics * 8 = 96tics between 2 16th Steps
TIC Quantize 64 Quantize 32 Quantize 16
if * && if * Tic Step if * && if * Tic Step if * Tic STEP
0 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
1 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
2 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
3 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
4 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
5 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
6 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
7 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
8 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
9 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
10 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
11 <= Base 1       0 Current <= Base 2       0 Current <= Base 4 0 Current
12 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
13 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
14 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
15 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
16 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
17 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
18 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
19 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
20 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
21 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
22 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
23 > Base 1   <= Base 2 Base*2 Current <= Base 2       0 Current <= Base 4 0 Current
24 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
25 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
26 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
27 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
28 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
29 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
30 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
31 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
32 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
33 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
34 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
35 > Base 2   <= Base 3 Base*2 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
36 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
37 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
38 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
39 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
40 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
41 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
42 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
43 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
44 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
45 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
46 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
47 > Base 3   <= Base 4 Base*4 Current > Base 2   <= Base 4 Base*4 Current <= Base 4 0 Current
48 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
49 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
50 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
51 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
52 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
53 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
54 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
55 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
56 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
57 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
58 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
59 > Base 4   <= Base 5 Base*4 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
60 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
61 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
62 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
63 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
64 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
65 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
66 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
67 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
68 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
69 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
70 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
71 > Base 5   <= Base 6 Base*6 Current > Base 4   <= Base 6 Base*4 Current > Base 4 0 Next
72 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
73 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
74 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
75 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
76 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
77 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
78 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
79 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
80 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
81 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
82 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
83 > Base 6   <= Base 7 Base*6 Current >Base 6       0 Next > Base 4 0 Next
84 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
85 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
86 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
87 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
88 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
89 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
90 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
91 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
92 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
93 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
94 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
95 > Base 7       0 Next >Base 6       0 Next > Base 4 0 Next
96 Next 16th Note Next 16th Note Next 16th Note

 

 

 

this code in a Function which delivers midi-input, writes on a specific STEP, a Sequencer-TIC-Offset, and a Velocity in specific Track, which means with that you have a stepsequencer with 96tic Resulution between 2 Step entrys....StepSend is the currently played step, TicSend the currently played 96th Tic which loops from 0-96 between 2 Notes

//RECORD
  if(port == 1) { //MidiTrigger-Input (Real Drummer)
    if(Rec == 1) {//Record Switch Active
      //AutoQuantize OFF?
      if(AutQuntActive == 0) {
        Seq[note][StepSend] = velocity; // Write Velocity into current Step on Triggered Note
        SeqTic[note][StepSend] = TicSend;}   // Write a "Time-Stemp" to realize Human Timing. (you can quantize later)

	  //AutoQuantize ON?
      if(AutQuntActive == 1) {//Quantize while Recording is ON

          //32nd Quantize Mode
          if(QuantRate == 1) { //QuantRate0:16th,1:32nd, 2:64
              //Write Velocity in currently played Step
              if(TicSend <= (BaseTic*6) )  {  //12x6=72 (Tic 0-72)
                Seq[note][StepSend] = velocity; // Write Velocity into current sequenced Step with Triggered Note
                  if(TicSend <= BaseTic*2) {SeqTic[note][StepSend] = 0;}//Straight 16th without delay
                  if(TicSend > BaseTic*2 && TicSend <= BaseTic*4) {SeqTic[note][StepSend] = BaseTic*4;}//Delay 2 next 32nd Note
                  if(TicSend > BaseTic*4 && TicSend <= BaseTic*6) {SeqTic[note][StepSend] = BaseTic*4;}}//Delay 2 previus 32nd Note

              else { //Write Velocity into Next note
                 SeqTic[note][StepSend] = 0;  // kick back to zero > straight machine time > no delay
                  //Are we on Last Step of Loop?
                  if(direction == 1) {  //when in Forward Direction Sequencing Mode
                    if(note == Last) { //when Last step is arrived
                      Seq[First][StepSend] = velocity;} //then write Velocity in First Note of Loop
                    if(note < Last)  { //If not Last Step, then simply write in next Step:
                      Seq[note][StepSend+1] = velocity;} //next step
                   }
                 if(direction == 0) {  //when in Rewind Direction Sequencing Mode
                    if(note == First) { //when First step is arrived (typical 0)
                      Seq[Last][StepSend-1] = velocity;} //then write Velocity in Last Note of Loop (typical 16)
                    if(note > First)  { //If not First Step, then simply write in next Step:
                      Seq[note][StepSend-1] = velocity;} //next step
                  }}
             }

 

Edited by Phatline
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...