Phatline Posted January 19, 2016 Report Share Posted January 19, 2016 (edited) 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 January 20, 2016 by Phatline 1 Quote Link to comment Share on other sites More sharing options...
Phatline Posted January 21, 2016 Author Report Share Posted January 21, 2016 (edited) 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 January 25, 2016 by Phatline 1 Quote Link to comment Share on other sites More sharing options...
Phatline Posted January 22, 2016 Author Report Share Posted January 22, 2016 (edited) 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...) 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 January 22, 2016 by Phatline 1 Quote Link to comment Share on other sites More sharing options...
Phatline Posted January 22, 2016 Author Report Share Posted January 22, 2016 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 1 Quote Link to comment Share on other sites More sharing options...
Phatline Posted January 22, 2016 Author Report Share Posted January 22, 2016 (edited) 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 Edited January 24, 2016 by Phatline 1 Quote Link to comment Share on other sites More sharing options...
electrodancer Posted January 23, 2016 Report Share Posted January 23, 2016 wow this looks awesome ! Quote Link to comment Share on other sites More sharing options...
Phatline Posted February 12, 2016 Author Report Share Posted February 12, 2016 (edited) 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 February 12, 2016 by Phatline Quote Link to comment Share on other sites
Recommended Posts