|
|
@@ -36,6 +36,7 @@ bool follower_select; |
|
|
bool mod_follower; |
|
|
uint8_t follower; |
|
|
bool kriaAltModeBlink; // flag gets flipped for the blinking |
|
|
bool kriaMetaLockBlink; |
|
|
|
|
|
u8 grid_varibrightness = 16; |
|
|
u8 key_count = 0; |
|
|
@@ -563,13 +564,17 @@ uint8_t meta_pos; |
|
|
uint8_t meta_count; |
|
|
uint8_t meta_next; |
|
|
uint8_t meta_edit; |
|
|
bool meta_lock; |
|
|
uint8_t edit_pattern; |
|
|
|
|
|
static void kria_off(void* o); |
|
|
static void kria_blink_off(void* o); |
|
|
static void kria_rpt_off(void* o); |
|
|
static void kria_alt_mode_blink(void* o); |
|
|
static void kria_set_alt_blink_timer(kria_modes_t mode); |
|
|
static void kria_meta_lock_blink(void* o); |
|
|
softTimer_t altBlinkTimer = { .next = NULL, .prev = NULL }; |
|
|
softTimer_t metaLockBlinkTimer = { .next = NULL, .prev = NULL }; |
|
|
bool k_mode_is_alt = false; |
|
|
|
|
|
bool kria_next_step(uint8_t t, uint8_t p); |
|
|
@@ -631,6 +636,7 @@ void default_kria() { |
|
|
k.p[i1] = k.p[0]; |
|
|
|
|
|
k.pattern = 0; |
|
|
edit_pattern = k.pattern; |
|
|
|
|
|
k.meta_start = 0; |
|
|
k.meta_end = 3; |
|
|
@@ -659,6 +665,7 @@ void init_kria() { |
|
|
preset = f.kria_state.preset; |
|
|
|
|
|
k.pattern = f.kria_state.k[preset].pattern; |
|
|
edit_pattern = k.pattern; |
|
|
|
|
|
k = f.kria_state.k[preset]; |
|
|
|
|
|
@@ -709,17 +716,18 @@ void grid_keytimer_kria(uint8_t held_key) { |
|
|
if(held_key < 16) { |
|
|
memcpy((void *)&k.p[held_key], &k.p[k.pattern], sizeof(k.p[k.pattern])); |
|
|
k.pattern = held_key; |
|
|
if (!meta_lock) edit_pattern = k.pattern; |
|
|
// pos_reset = true; |
|
|
} |
|
|
break; |
|
|
case mRpt: |
|
|
if(held_key < 16) { |
|
|
k.p[k.pattern].t[track].rpt[held_key] -= 1; |
|
|
k.p[k.pattern].t[track].rptBits[held_key] = ~(0xff << k.p[k.pattern].t[track].rpt[held_key]); |
|
|
k.p[edit_pattern].t[track].rpt[held_key] -= 1; |
|
|
k.p[edit_pattern].t[track].rptBits[held_key] = ~(0xff << k.p[edit_pattern].t[track].rpt[held_key]); |
|
|
} |
|
|
else if(held_key >= R6 && held_key < R7) { |
|
|
k.p[k.pattern].t[track].rpt[held_key - R6] = 1; |
|
|
k.p[k.pattern].t[track].rptBits[held_key - R6] = 1; |
|
|
k.p[edit_pattern].t[track].rpt[held_key - R6] = 1; |
|
|
k.p[edit_pattern].t[track].rptBits[held_key - R6] = 1; |
|
|
} |
|
|
break; |
|
|
default: |
|
|
@@ -1043,8 +1051,15 @@ static void kria_alt_mode_blink(void* o) { |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
|
|
|
static void kria_meta_lock_blink(void* o) { |
|
|
kriaMetaLockBlink = !kriaMetaLockBlink; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
|
|
|
|
|
|
void change_pattern(uint8_t x) { |
|
|
k.pattern = x; |
|
|
if (!meta_lock) edit_pattern = k.pattern; |
|
|
pos_reset = true; |
|
|
calc_scale(k.p[k.pattern].scale); |
|
|
} |
|
|
@@ -1539,57 +1554,57 @@ static void kria_set_tmul(uint8_t track, kria_modes_t mode, uint8_t new_tmul) { |
|
|
case 1: |
|
|
if (note_div_sync) { |
|
|
if (mode == mTr || mode == mNote) { |
|
|
k.p[k.pattern].t[track].tmul[mTr] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mNote] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mTr] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mNote] = new_tmul; |
|
|
} else { |
|
|
k.p[k.pattern].t[track].tmul[mRpt] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mAltNote] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mOct] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mGlide] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mDur] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mRpt] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mAltNote] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mOct] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mGlide] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mDur] = new_tmul; |
|
|
} |
|
|
} else { |
|
|
k.p[k.pattern].t[track].tmul[mTr] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mNote] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mRpt] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mAltNote] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mOct] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mGlide] = new_tmul; |
|
|
k.p[k.pattern].t[track].tmul[mDur] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mTr] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mNote] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mRpt] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mAltNote] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mOct] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mGlide] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mDur] = new_tmul; |
|
|
} |
|
|
break; |
|
|
case 2: |
|
|
for (uint8_t i = 0; i < 4; i++) { |
|
|
if (note_div_sync) { |
|
|
if (mode == mTr || mode == mNote) { |
|
|
k.p[k.pattern].t[i].tmul[mTr] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mNote] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mTr] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mNote] = new_tmul; |
|
|
} else { |
|
|
k.p[k.pattern].t[i].tmul[mRpt] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mAltNote] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mOct] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mGlide] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mDur] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mRpt] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mAltNote] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mOct] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mGlide] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mDur] = new_tmul; |
|
|
} |
|
|
} else { |
|
|
k.p[k.pattern].t[i].tmul[mTr] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mNote] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mRpt] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mAltNote] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mOct] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mGlide] = new_tmul; |
|
|
k.p[k.pattern].t[i].tmul[mDur] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mTr] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mNote] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mRpt] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mAltNote] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mOct] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mGlide] = new_tmul; |
|
|
k.p[edit_pattern].t[i].tmul[mDur] = new_tmul; |
|
|
} |
|
|
} |
|
|
break; |
|
|
default: |
|
|
k.p[k.pattern].t[track].tmul[mode] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mode] = new_tmul; |
|
|
if (note_div_sync) { |
|
|
if (mode == mTr) { |
|
|
k.p[k.pattern].t[track].tmul[mNote] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mNote] = new_tmul; |
|
|
} |
|
|
if (mode == mNote) { |
|
|
k.p[k.pattern].t[track].tmul[mTr] = new_tmul; |
|
|
k.p[edit_pattern].t[track].tmul[mTr] = new_tmul; |
|
|
} |
|
|
} |
|
|
break; |
|
|
@@ -2073,7 +2088,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
switch(k_mod_mode) { |
|
|
case modNone: |
|
|
if(z) { |
|
|
k.p[k.pattern].t[y].tr[x] ^= 1; |
|
|
k.p[edit_pattern].t[y].tr[x] ^= 1; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2101,7 +2116,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[loop_edit].lstart[mTr]) { |
|
|
if(loop_first == k.p[edit_pattern].t[loop_edit].lstart[mTr]) { |
|
|
update_loop_start(loop_edit, loop_first, mTr); |
|
|
update_loop_end(loop_edit, loop_first, mTr); |
|
|
if (note_sync) { |
|
|
@@ -2127,7 +2142,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mTr][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mTr][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2140,15 +2155,15 @@ void handler_KriaGridKey(s32 data) { |
|
|
case modNone: |
|
|
if(z) { |
|
|
if(note_sync) { |
|
|
if(k.p[k.pattern].t[track].tr[x] && k.p[k.pattern].t[track].note[x] == 6-y) |
|
|
k.p[k.pattern].t[track].tr[x] = 0; |
|
|
if(k.p[edit_pattern].t[track].tr[x] && k.p[edit_pattern].t[track].note[x] == 6-y) |
|
|
k.p[edit_pattern].t[track].tr[x] = 0; |
|
|
else { |
|
|
k.p[k.pattern].t[track].tr[x] = 1; |
|
|
k.p[k.pattern].t[track].note[x] = 6-y; |
|
|
k.p[edit_pattern].t[track].tr[x] = 1; |
|
|
k.p[edit_pattern].t[track].note[x] = 6-y; |
|
|
} |
|
|
} |
|
|
else |
|
|
k.p[k.pattern].t[track].note[x] = 6-y; |
|
|
k.p[edit_pattern].t[track].note[x] = 6-y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2175,7 +2190,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[track].lstart[mNote]) { |
|
|
if(loop_first == k.p[edit_pattern].t[track].lstart[mNote]) { |
|
|
update_loop_start(track, loop_first, mNote); |
|
|
update_loop_end(track, loop_first, mNote); |
|
|
if (note_sync) { |
|
|
@@ -2201,7 +2216,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mNote][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mNote][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2214,12 +2229,12 @@ void handler_KriaGridKey(s32 data) { |
|
|
if(z) { |
|
|
if(y==0) { |
|
|
if (x <= 5) { |
|
|
k.p[k.pattern].t[track].octshift = x; |
|
|
k.p[edit_pattern].t[track].octshift = x; |
|
|
} |
|
|
} |
|
|
else { |
|
|
uint8_t abs_oct = 6 - y; |
|
|
k.p[k.pattern].t[track].oct[x] = (int)abs_oct - (int)k.p[k.pattern].t[track].octshift; |
|
|
k.p[edit_pattern].t[track].oct[x] = (int)abs_oct - (int)k.p[edit_pattern].t[track].octshift; |
|
|
} |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
@@ -2243,7 +2258,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[track].lstart[mOct]) { |
|
|
if(loop_first == k.p[edit_pattern].t[track].lstart[mOct]) { |
|
|
update_loop_start(track, loop_first, mOct); |
|
|
update_loop_end(track, loop_first, mOct); |
|
|
} |
|
|
@@ -2262,7 +2277,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mOct][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mOct][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2274,9 +2289,9 @@ void handler_KriaGridKey(s32 data) { |
|
|
case modNone: |
|
|
if(z) { |
|
|
if(y==0) |
|
|
k.p[k.pattern].t[track].dur_mul = x+1; |
|
|
k.p[edit_pattern].t[track].dur_mul = x+1; |
|
|
else |
|
|
k.p[k.pattern].t[track].dur[x] = y-1; |
|
|
k.p[edit_pattern].t[track].dur[x] = y-1; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2300,7 +2315,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[track].lstart[mDur]) { |
|
|
if(loop_first == k.p[edit_pattern].t[track].lstart[mDur]) { |
|
|
update_loop_start(track, loop_first, mDur); |
|
|
update_loop_end(track, loop_first, mDur); |
|
|
} |
|
|
@@ -2320,7 +2335,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mDur][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mDur][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2332,28 +2347,28 @@ void handler_KriaGridKey(s32 data) { |
|
|
case modNone: |
|
|
if (z) { |
|
|
if ( y == 0 ) { |
|
|
if (k.p[k.pattern].t[track].rpt[x] < 5) { |
|
|
k.p[k.pattern].t[track].rpt[x]++; |
|
|
if (k.p[edit_pattern].t[track].rpt[x] < 5) { |
|
|
k.p[edit_pattern].t[track].rpt[x]++; |
|
|
} |
|
|
else { |
|
|
k.p[k.pattern].t[track].rpt[x] = 5; |
|
|
k.p[edit_pattern].t[track].rpt[x] = 5; |
|
|
} |
|
|
} |
|
|
if ( y > 0 && y < 6 ) { |
|
|
uint8_t rptBits = k.p[k.pattern].t[track].rptBits[x] ^ (1 << (5 - y)); |
|
|
uint8_t rptBits = k.p[edit_pattern].t[track].rptBits[x] ^ (1 << (5 - y)); |
|
|
uint8_t rpt = 1; |
|
|
k.p[k.pattern].t[track].rptBits[x] = rptBits; |
|
|
k.p[edit_pattern].t[track].rptBits[x] = rptBits; |
|
|
while (rptBits >>= 1) rpt++; |
|
|
k.p[k.pattern].t[track].rpt[x] = rpt; |
|
|
k.p[edit_pattern].t[track].rpt[x] = rpt; |
|
|
|
|
|
monomeFrameDirty++; |
|
|
} |
|
|
if ( y == 6 ) { |
|
|
if (k.p[k.pattern].t[track].rpt[x] > 1) { |
|
|
k.p[k.pattern].t[track].rpt[x]--; |
|
|
if (k.p[edit_pattern].t[track].rpt[x] > 1) { |
|
|
k.p[edit_pattern].t[track].rpt[x]--; |
|
|
} |
|
|
else { |
|
|
k.p[k.pattern].t[track].rpt[x] = 1; |
|
|
k.p[edit_pattern].t[track].rpt[x] = 1; |
|
|
} |
|
|
} |
|
|
} |
|
|
@@ -2369,7 +2384,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
loop_last = x; |
|
|
if(loop_last == loop_first) { |
|
|
vrange_last = y; |
|
|
k.p[k.pattern].t[track].rpt[x] = 6 - y; |
|
|
k.p[edit_pattern].t[track].rpt[x] = 6 - y; |
|
|
} |
|
|
else { |
|
|
update_loop_start(track, loop_first, mRpt); |
|
|
@@ -2384,9 +2399,9 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[track].lstart[mRpt]) { |
|
|
if(loop_first == k.p[edit_pattern].t[track].lstart[mRpt]) { |
|
|
if(vrange_last == -1 && x == loop_first) { |
|
|
k.p[k.pattern].t[track].rpt[x] = 6 - y; |
|
|
k.p[edit_pattern].t[track].rpt[x] = 6 - y; |
|
|
} |
|
|
else { |
|
|
update_loop_start(track, loop_first, mRpt); |
|
|
@@ -2409,7 +2424,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mRpt][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mRpt][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2420,7 +2435,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
switch(k_mod_mode) { |
|
|
case modNone: |
|
|
if(z) { |
|
|
k.p[k.pattern].t[track].alt_note[x] = 6-y; |
|
|
k.p[edit_pattern].t[track].alt_note[x] = 6-y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2443,7 +2458,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[track].lstart[mAltNote]) { |
|
|
if(loop_first == k.p[edit_pattern].t[track].lstart[mAltNote]) { |
|
|
update_loop_start(track, loop_first, mAltNote); |
|
|
update_loop_end(track, loop_first, mAltNote); |
|
|
} |
|
|
@@ -2462,7 +2477,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mAltNote][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mAltNote][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2474,7 +2489,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
case modNone: |
|
|
if(z) { |
|
|
// if(y>2) |
|
|
k.p[k.pattern].t[track].glide[x] = 6-y; |
|
|
k.p[edit_pattern].t[track].glide[x] = 6-y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2497,7 +2512,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
|
|
|
if(loop_count == 0) { |
|
|
if(loop_last == -1) { |
|
|
if(loop_first == k.p[k.pattern].t[track].lstart[mGlide]) { |
|
|
if(loop_first == k.p[edit_pattern].t[track].lstart[mGlide]) { |
|
|
update_loop_start(track, loop_first, mGlide); |
|
|
update_loop_end(track, loop_first, mGlide); |
|
|
} |
|
|
@@ -2516,7 +2531,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
case modProb: |
|
|
if(z && y > 1 && y < 6) { |
|
|
k.p[k.pattern].t[track].p[mGlide][x] = 5 - y; |
|
|
k.p[edit_pattern].t[track].p[mGlide][x] = 5 - y; |
|
|
monomeFrameDirty++; |
|
|
} |
|
|
break; |
|
|
@@ -2527,18 +2542,18 @@ void handler_KriaGridKey(s32 data) { |
|
|
if(z) { |
|
|
if ( y < 4 && x <= 7 ) { |
|
|
if (x == 0){ |
|
|
k.p[k.pattern].t[y].tt_clocked = !k.p[k.pattern].t[y].tt_clocked; |
|
|
k.p[edit_pattern].t[y].tt_clocked = !k.p[edit_pattern].t[y].tt_clocked; |
|
|
} |
|
|
if (x == 1) { |
|
|
k.p[k.pattern].t[y].trigger_clocked = !k.p[k.pattern].t[y].trigger_clocked; |
|
|
k.p[edit_pattern].t[y].trigger_clocked = !k.p[edit_pattern].t[y].trigger_clocked; |
|
|
} |
|
|
if (x >= 3 && x <= 7) { |
|
|
k.p[k.pattern].t[y].direction = x - 3; |
|
|
k.p[edit_pattern].t[y].direction = x - 3; |
|
|
} |
|
|
} |
|
|
else if(x < 8) { |
|
|
if(y > 4) { |
|
|
k.p[k.pattern].scale = (y - 5) * 8 + x; |
|
|
k.p[edit_pattern].scale = (y - 5) * 8 + x; |
|
|
for (uint8_t i = 0; i < 8; i++) { |
|
|
scale_adj[i] = 0; |
|
|
} |
|
|
@@ -2547,18 +2562,18 @@ void handler_KriaGridKey(s32 data) { |
|
|
else { |
|
|
uint8_t i; |
|
|
for (i = 0; i < key_count; i++) { |
|
|
if (held_keys[i] == 16*y + scale_data[k.p[k.pattern].scale][6 - y] + 8) { |
|
|
scale_adj[6 - y] = x - 8 - scale_data[k.p[k.pattern].scale][6 - y]; |
|
|
if (held_keys[i] == 16*y + scale_data[k.p[edit_pattern].scale][6 - y] + 8) { |
|
|
scale_adj[6 - y] = x - 8 - scale_data[k.p[edit_pattern].scale][6 - y]; |
|
|
break; |
|
|
} |
|
|
} |
|
|
if (i == key_count) { |
|
|
scale_data[k.p[k.pattern].scale][6-y] = x-8; |
|
|
scale_data[k.p[edit_pattern].scale][6-y] = x-8; |
|
|
scale_adj[6 - y] = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
calc_scale(k.p[k.pattern].scale); |
|
|
calc_scale(k.p[edit_pattern].scale); |
|
|
|
|
|
monomeFrameDirty++; |
|
|
} |
|
|
@@ -2606,6 +2621,7 @@ void handler_KriaGridKey(s32 data) { |
|
|
else if(z && y == 6) { |
|
|
if(cue) { |
|
|
meta ^= 1; |
|
|
if (!meta) meta_lock = false; |
|
|
} |
|
|
else { |
|
|
k.meta_steps[meta_edit] = x; |
|
|
@@ -2621,6 +2637,23 @@ void handler_KriaGridKey(s32 data) { |
|
|
break; |
|
|
} |
|
|
} |
|
|
else if(z && y == 0) { |
|
|
if (cue) { |
|
|
if (meta) { |
|
|
if (meta_lock && x == edit_pattern) { |
|
|
meta_lock = false; |
|
|
timer_remove( &metaLockBlinkTimer ); |
|
|
} |
|
|
else { |
|
|
edit_pattern = x; |
|
|
if (!meta_lock) { |
|
|
timer_add( &metaLockBlinkTimer, 100, &kria_meta_lock_blink, NULL ); |
|
|
meta_lock = true; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
monomeFrameDirty++; |
|
|
break; |
|
|
|
|
|
@@ -2679,50 +2712,54 @@ static void update_meta_end(u8 x) { |
|
|
static void adjust_loop_start(u8 t, u8 x, u8 m) { |
|
|
s8 temp; |
|
|
|
|
|
temp = pos[t][m] - k.p[k.pattern].t[t].lstart[m] + x; |
|
|
if(temp < 0) temp += 16; |
|
|
else if(temp > 15) temp -= 16; |
|
|
pos[t][m] = temp; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
temp = pos[t][m] - k.p[k.pattern].t[t].lstart[m] + x; |
|
|
if(temp < 0) temp += 16; |
|
|
else if(temp > 15) temp -= 16; |
|
|
pos[t][m] = temp; |
|
|
} |
|
|
|
|
|
k.p[k.pattern].t[t].lstart[m] = x; |
|
|
temp = x + k.p[k.pattern].t[t].llen[m]-1; |
|
|
k.p[edit_pattern].t[t].lstart[m] = x; |
|
|
temp = x + k.p[edit_pattern].t[t].llen[m]-1; |
|
|
if(temp > 15) { |
|
|
k.p[k.pattern].t[t].lend[m] = temp - 16; |
|
|
k.p[k.pattern].t[t].lswap[m] = 1; |
|
|
k.p[edit_pattern].t[t].lend[m] = temp - 16; |
|
|
k.p[edit_pattern].t[t].lswap[m] = 1; |
|
|
} |
|
|
else { |
|
|
k.p[k.pattern].t[t].lend[m] = temp; |
|
|
k.p[k.pattern].t[t].lswap[m] = 0; |
|
|
k.p[edit_pattern].t[t].lend[m] = temp; |
|
|
k.p[edit_pattern].t[t].lswap[m] = 0; |
|
|
} |
|
|
} |
|
|
|
|
|
static void adjust_loop_end(u8 t, u8 x, u8 m) { |
|
|
s8 temp; |
|
|
|
|
|
k.p[k.pattern].t[t].lend[m] = x; |
|
|
temp = k.p[k.pattern].t[t].lend[m] - k.p[k.pattern].t[t].lstart[m]; |
|
|
k.p[edit_pattern].t[t].lend[m] = x; |
|
|
temp = k.p[edit_pattern].t[t].lend[m] - k.p[edit_pattern].t[t].lstart[m]; |
|
|
if(temp < 0) { |
|
|
k.p[k.pattern].t[t].llen[m] = temp + 17; |
|
|
k.p[k.pattern].t[t].lswap[m] = 1; |
|
|
k.p[edit_pattern].t[t].llen[m] = temp + 17; |
|
|
k.p[edit_pattern].t[t].lswap[m] = 1; |
|
|
} |
|
|
else { |
|
|
k.p[k.pattern].t[t].llen[m] = temp+1; |
|
|
k.p[k.pattern].t[t].lswap[m] = 0; |
|
|
k.p[edit_pattern].t[t].llen[m] = temp+1; |
|
|
k.p[edit_pattern].t[t].lswap[m] = 0; |
|
|
} |
|
|
|
|
|
temp = pos[t][m]; |
|
|
if(k.p[k.pattern].t[t].lswap[m]) { |
|
|
if(temp < k.p[k.pattern].t[t].lstart[m] && temp > k.p[k.pattern].t[t].lend[m]) |
|
|
pos[t][m] = k.p[k.pattern].t[t].lstart[m]; |
|
|
} |
|
|
else { |
|
|
if(temp < k.p[k.pattern].t[t].lstart[m] || temp > k.p[k.pattern].t[t].lend[m]) |
|
|
pos[t][m] = k.p[k.pattern].t[t].lstart[m]; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
temp = pos[t][m]; |
|
|
if(k.p[k.pattern].t[t].lswap[m]) { |
|
|
if(temp < k.p[k.pattern].t[t].lstart[m] && temp > k.p[k.pattern].t[t].lend[m]) |
|
|
pos[t][m] = k.p[k.pattern].t[t].lstart[m]; |
|
|
} |
|
|
else { |
|
|
if(temp < k.p[k.pattern].t[t].lstart[m] || temp > k.p[k.pattern].t[t].lend[m]) |
|
|
pos[t][m] = k.p[k.pattern].t[t].lstart[m]; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
static void adjust_loop_len(u8 t, u8 x, u8 m) { |
|
|
adjust_loop_end(t, (x - 1 + k.p[k.pattern].t[t].lstart[m]) & 0xf, m); |
|
|
adjust_loop_end(t, (x - 1 + k.p[edit_pattern].t[t].lstart[m]) & 0xf, m); |
|
|
} |
|
|
|
|
|
static void update_loop_start(u8 t, u8 x, u8 m) { |
|
|
@@ -2877,7 +2914,7 @@ void refresh_kria(void) { |
|
|
monomeLedBuffer[R7 + 11] = L0; |
|
|
monomeLedBuffer[R7 + 12] = L0; |
|
|
monomeLedBuffer[R7 + 14] = L0; |
|
|
monomeLedBuffer[R7 + 15] = L0; |
|
|
monomeLedBuffer[R7 + 15] = (meta && meta_lock && kriaMetaLockBlink) ? L1 : L0; |
|
|
|
|
|
for ( uint8_t i=0; i<4; i++ ) |
|
|
{ |
|
|
@@ -2912,7 +2949,12 @@ void refresh_kria(void) { |
|
|
activeModeIndex = R7+0; break; |
|
|
} |
|
|
|
|
|
monomeLedBuffer[activeModeIndex] = (k_mode_is_alt && kriaAltModeBlink) ? L1 : L2; |
|
|
if (k_mode == mPattern) { |
|
|
monomeLedBuffer[activeModeIndex] = (meta && meta_lock && kriaMetaLockBlink) ? L1 : L2; |
|
|
} |
|
|
else { |
|
|
monomeLedBuffer[activeModeIndex] = (k_mode_is_alt && kriaAltModeBlink) ? L1 : L2; |
|
|
} |
|
|
|
|
|
|
|
|
if (refresh_kria_mod()) return; |
|
|
@@ -2955,14 +2997,14 @@ bool refresh_kria_mod(void) { |
|
|
case modTime: |
|
|
monomeLedBuffer[R7 + 11] = L1; |
|
|
memset(monomeLedBuffer + R1, 3, 16); |
|
|
monomeLedBuffer[R1 + k.p[k.pattern].t[track].tmul[k_mode] - 1] = L1; |
|
|
monomeLedBuffer[R1 + k.p[edit_pattern].t[track].tmul[k_mode] - 1] = L1; |
|
|
return true; |
|
|
case modProb: |
|
|
monomeLedBuffer[R7 + 12] = L1; |
|
|
memset(monomeLedBuffer + R5, 3, 16); |
|
|
for(uint8_t i=0;i<16;i++) { |
|
|
if(k.p[k.pattern].t[track].p[k_mode][i]) { |
|
|
monomeLedBuffer[(5 - k.p[k.pattern].t[track].p[k_mode][i]) * 16 + i] = i == pos[track][k_mode] ? 10 : 6; |
|
|
if(k.p[edit_pattern].t[track].p[k_mode][i]) { |
|
|
monomeLedBuffer[(5 - k.p[edit_pattern].t[track].p[k_mode][i]) * 16 + i] = i == pos[track][k_mode] ? 10 : 6; |
|
|
} |
|
|
} |
|
|
return true; |
|
|
@@ -2975,63 +3017,67 @@ void refresh_kria_tr(void) { |
|
|
// steps |
|
|
for(uint8_t i=0;i<4;i++) { |
|
|
for(uint8_t j=0;j<16;j++) { |
|
|
if(k.p[k.pattern].t[i].tr[j]) |
|
|
if(k.p[edit_pattern].t[i].tr[j]) |
|
|
monomeLedBuffer[i*16 + j] = 3; |
|
|
} |
|
|
// playhead |
|
|
// if(tr[i2]) |
|
|
monomeLedBuffer[i*16 + pos[i][mTr]] += 4; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
monomeLedBuffer[i*16 + pos[i][mTr]] += 4; |
|
|
} |
|
|
} |
|
|
|
|
|
// loop highlight |
|
|
for(uint8_t i=0;i<4;i++) { |
|
|
if(k.p[k.pattern].t[i].lswap[mTr]) { |
|
|
for(uint8_t j=0;j<k.p[k.pattern].t[i].llen[mTr];j++) |
|
|
monomeLedBuffer[i*16 + (j+k.p[k.pattern].t[i].lstart[mTr])%16] += 2 + (k_mod_mode == modLoop); |
|
|
if(k.p[edit_pattern].t[i].lswap[mTr]) { |
|
|
for(uint8_t j=0;j<k.p[edit_pattern].t[i].llen[mTr];j++) |
|
|
monomeLedBuffer[i*16 + (j+k.p[edit_pattern].t[i].lstart[mTr])%16] += 2 + (k_mod_mode == modLoop); |
|
|
} |
|
|
else { |
|
|
for(uint8_t j=k.p[k.pattern].t[i].lstart[mTr];j<=k.p[k.pattern].t[i].lend[mTr];j++) |
|
|
for(uint8_t j=k.p[edit_pattern].t[i].lstart[mTr];j<=k.p[edit_pattern].t[i].lend[mTr];j++) |
|
|
monomeLedBuffer[i*16 + j] += 2 + (k_mod_mode == modLoop); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
void refresh_kria_note(bool isAlt) { |
|
|
kria_modes_t noteMode = isAlt ? mAltNote : mNote; |
|
|
u8 (*notesArray)[16] = isAlt ? &k.p[k.pattern].t[track].alt_note : &k.p[k.pattern].t[track].note; |
|
|
u8 (*notesArray)[16] = isAlt ? &k.p[edit_pattern].t[track].alt_note : &k.p[edit_pattern].t[track].note; |
|
|
|
|
|
if(!isAlt && note_sync) { |
|
|
for(uint8_t i=0;i<16;i++) |
|
|
monomeLedBuffer[i + (6 - (*notesArray)[i] ) * 16] = |
|
|
k.p[k.pattern].t[track].tr[i] * 3; |
|
|
k.p[edit_pattern].t[track].tr[i] * 3; |
|
|
} |
|
|
else { |
|
|
for(uint8_t i=0;i<16;i++) |
|
|
monomeLedBuffer[i + (6 - (*notesArray)[i] ) * 16] = 3; |
|
|
} |
|
|
|
|
|
monomeLedBuffer[pos[track][noteMode] + (6-(*notesArray)[pos[track][noteMode]])*16] += 4; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
monomeLedBuffer[pos[track][noteMode] + (6-(*notesArray)[pos[track][noteMode]])*16] += 4; |
|
|
} |
|
|
|
|
|
if(k.p[k.pattern].t[track].lswap[noteMode]) { |
|
|
for(uint8_t i=0;i<k.p[k.pattern].t[track].llen[noteMode];i++) { |
|
|
uint8_t x = (k.p[k.pattern].t[track].lstart[noteMode] + i) % 16; |
|
|
if(k.p[edit_pattern].t[track].lswap[noteMode]) { |
|
|
for(uint8_t i=0;i<k.p[edit_pattern].t[track].llen[noteMode];i++) { |
|
|
uint8_t x = (k.p[edit_pattern].t[track].lstart[noteMode] + i) % 16; |
|
|
uint8_t y = 6 - (*notesArray)[x]; |
|
|
monomeLedBuffer[16*y + x] += 3 + (k_mod_mode == modLoop)*2; |
|
|
} |
|
|
} |
|
|
else { |
|
|
for(uint8_t i=k.p[k.pattern].t[track].lstart[noteMode];i<=k.p[k.pattern].t[track].lend[noteMode];i++) |
|
|
for(uint8_t i=k.p[edit_pattern].t[track].lstart[noteMode];i<=k.p[edit_pattern].t[track].lend[noteMode];i++) |
|
|
monomeLedBuffer[i+(6-(*notesArray)[i])*16] += 3 + (k_mod_mode == modLoop)*2; |
|
|
} |
|
|
} |
|
|
|
|
|
void refresh_kria_oct(void) { |
|
|
memset(monomeLedBuffer, 2, 6); |
|
|
monomeLedBuffer[R0+k.p[k.pattern].t[track].octshift] = L1; |
|
|
monomeLedBuffer[R0+k.p[edit_pattern].t[track].octshift] = L1; |
|
|
|
|
|
for(uint8_t i=0;i<16;i++) { |
|
|
const uint8_t octshift = k.p[k.pattern].t[track].octshift; |
|
|
const int8_t octsum = sum_clip(k.p[k.pattern].t[track].oct[i], (int)octshift, 5); |
|
|
const uint8_t octshift = k.p[edit_pattern].t[track].octshift; |
|
|
const int8_t octsum = sum_clip(k.p[edit_pattern].t[track].oct[i], (int)octshift, 5); |
|
|
|
|
|
for(uint8_t j=0;j<=5;j++) { |
|
|
if (octsum >= octshift) { |
|
|
@@ -3042,16 +3088,16 @@ void refresh_kria_oct(void) { |
|
|
} |
|
|
monomeLedBuffer[R6-16*j+i] = grid_varibrightness < 16 ? L0 : 3; |
|
|
|
|
|
if(k.p[k.pattern].t[track].lswap[mOct]) { |
|
|
if((i < k.p[k.pattern].t[track].lstart[mOct]) && (i > k.p[k.pattern].t[track].lend[mOct])) { |
|
|
if(k.p[edit_pattern].t[track].lswap[mOct]) { |
|
|
if((i < k.p[edit_pattern].t[track].lstart[mOct]) && (i > k.p[edit_pattern].t[track].lend[mOct])) { |
|
|
monomeLedBuffer[R6-16*j+i] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop ) { |
|
|
monomeLedBuffer[R6-16*j+i] += 1; |
|
|
} |
|
|
} |
|
|
else { |
|
|
if((i < k.p[k.pattern].t[track].lstart[mOct]) || (i > k.p[k.pattern].t[track].lend[mOct])) { |
|
|
if((i < k.p[edit_pattern].t[track].lstart[mOct]) || (i > k.p[edit_pattern].t[track].lend[mOct])) { |
|
|
monomeLedBuffer[R6-16*j+i] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop ) { |
|
|
@@ -3060,28 +3106,31 @@ void refresh_kria_oct(void) { |
|
|
} |
|
|
} |
|
|
|
|
|
if(i == pos[track][mOct]) { |
|
|
monomeLedBuffer[R6 - octsum*16 + i] += 4; |
|
|
|
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
if(i == pos[track][mOct]) { |
|
|
monomeLedBuffer[R6 - octsum*16 + i] += 4; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
void refresh_kria_dur(void) { |
|
|
monomeLedBuffer[k.p[k.pattern].t[track].dur_mul - 1] = L1; |
|
|
monomeLedBuffer[k.p[edit_pattern].t[track].dur_mul - 1] = L1; |
|
|
|
|
|
for(uint8_t i=0;i<16;i++) { |
|
|
for(uint8_t j=0;j<=k.p[k.pattern].t[track].dur[i];j++) { |
|
|
for(uint8_t j=0;j<=k.p[edit_pattern].t[track].dur[i];j++) { |
|
|
monomeLedBuffer[R1+16*j+i] = grid_varibrightness < 16 ? L0 : 3; |
|
|
if(k.p[k.pattern].t[track].lswap[mDur]) { |
|
|
if((i < k.p[k.pattern].t[track].lstart[mDur]) && (i > k.p[k.pattern].t[track].lend[mDur])) { |
|
|
if(k.p[edit_pattern].t[track].lswap[mDur]) { |
|
|
if((i < k.p[edit_pattern].t[track].lstart[mDur]) && (i > k.p[edit_pattern].t[track].lend[mDur])) { |
|
|
monomeLedBuffer[R1+16*j+i] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop ) { |
|
|
monomeLedBuffer[R1+16*j+i] += 1; |
|
|
} |
|
|
} |
|
|
else { |
|
|
if((i < k.p[k.pattern].t[track].lstart[mDur]) || (i > k.p[k.pattern].t[track].lend[mDur])) { |
|
|
if((i < k.p[edit_pattern].t[track].lstart[mDur]) || (i > k.p[edit_pattern].t[track].lend[mDur])) { |
|
|
monomeLedBuffer[R1+16*j+i] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop ) { |
|
|
@@ -3090,44 +3139,48 @@ void refresh_kria_dur(void) { |
|
|
} |
|
|
} |
|
|
|
|
|
if(i == pos[track][mDur]) |
|
|
monomeLedBuffer[R1+i+16*k.p[k.pattern].t[track].dur[i]] += 4; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
if(i == pos[track][mDur]) |
|
|
monomeLedBuffer[R1+i+16*k.p[k.pattern].t[track].dur[i]] += 4; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
void refresh_kria_rpt(void) { |
|
|
for ( uint8_t i=0; i<16; i++ ) { |
|
|
uint8_t rptBits = k.p[k.pattern].t[track].rptBits[i]; |
|
|
uint8_t rptBits = k.p[edit_pattern].t[track].rptBits[i]; |
|
|
for ( uint8_t j=0; j<5; j++) { |
|
|
uint8_t led = 16*(5-j) + i; |
|
|
monomeLedBuffer[led] = 0; |
|
|
if (rptBits & (1 << j)) { |
|
|
monomeLedBuffer[led] = L0; |
|
|
} |
|
|
if (j < k.p[k.pattern].t[track].rpt[i]) { |
|
|
if (j < k.p[edit_pattern].t[track].rpt[i]) { |
|
|
monomeLedBuffer[led] += grid_varibrightness < 16 ? 4 : 2; |
|
|
|
|
|
if ( k.p[k.pattern].t[track].lswap[mRpt] ) { |
|
|
if ( (i < k.p[k.pattern].t[track].lstart[mRpt]) && (i > k.p[k.pattern].t[track].lend[mRpt]) ) { |
|
|
if ( k.p[edit_pattern].t[track].lswap[mRpt] ) { |
|
|
if ( (i < k.p[edit_pattern].t[track].lstart[mRpt]) && (i > k.p[edit_pattern].t[track].lend[mRpt]) ) { |
|
|
monomeLedBuffer[led] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop && j < k.p[k.pattern].t[track].rpt[i] ) { |
|
|
else if ( k_mod_mode == modLoop && j < k.p[edit_pattern].t[track].rpt[i] ) { |
|
|
monomeLedBuffer[led] += 1; |
|
|
} |
|
|
} |
|
|
else { |
|
|
if ( (i < k.p[k.pattern].t[track].lstart[mRpt]) || (i > k.p[k.pattern].t[track].lend[mRpt]) ) { |
|
|
if ( (i < k.p[edit_pattern].t[track].lstart[mRpt]) || (i > k.p[edit_pattern].t[track].lend[mRpt]) ) { |
|
|
monomeLedBuffer[led] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop && j < k.p[k.pattern].t[track].rpt[i] ) { |
|
|
else if ( k_mod_mode == modLoop && j < k.p[edit_pattern].t[track].rpt[i] ) { |
|
|
monomeLedBuffer[led] += 1; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
if ( i == pos[track][mRpt]) { |
|
|
uint8_t y = max(1, activeRpt[track] - repeats[track]); |
|
|
monomeLedBuffer[R6 - y*16 + i] += (rptBits & (1 << y)) ? 4 : 2; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
if ( i == pos[track][mRpt]) { |
|
|
uint8_t y = max(1, activeRpt[track] - repeats[track]); |
|
|
monomeLedBuffer[R6 - y*16 + i] += (rptBits & (1 << y)) ? 4 : 2; |
|
|
} |
|
|
} |
|
|
monomeLedBuffer[i] = 2; |
|
|
monomeLedBuffer[R6+i] = 2; |
|
|
@@ -3136,10 +3189,10 @@ void refresh_kria_rpt(void) { |
|
|
|
|
|
void refresh_kria_glide(void) { |
|
|
for(uint8_t i=0;i<16;i++) { |
|
|
for(uint8_t j=0;j<=k.p[k.pattern].t[track].glide[i];j++){ |
|
|
monomeLedBuffer[R6-16*j+i] = L1 - (k.p[k.pattern].t[track].glide[i]-j); |
|
|
if(k.p[k.pattern].t[track].lswap[mGlide]) { |
|
|
if((i < k.p[k.pattern].t[track].lstart[mGlide]) && (i > k.p[k.pattern].t[track].lend[mGlide])) { |
|
|
for(uint8_t j=0;j<=k.p[edit_pattern].t[track].glide[i];j++){ |
|
|
monomeLedBuffer[R6-16*j+i] = L1 - (k.p[edit_pattern].t[track].glide[i]-j); |
|
|
if(k.p[edit_pattern].t[track].lswap[mGlide]) { |
|
|
if((i < k.p[edit_pattern].t[track].lstart[mGlide]) && (i > k.p[edit_pattern].t[track].lend[mGlide])) { |
|
|
monomeLedBuffer[R6-16*j+i] -= 2; |
|
|
|
|
|
} |
|
|
@@ -3149,15 +3202,17 @@ void refresh_kria_glide(void) { |
|
|
} |
|
|
else |
|
|
{ |
|
|
if((i < k.p[k.pattern].t[track].lstart[mGlide]) || (i > k.p[k.pattern].t[track].lend[mGlide])) { |
|
|
if((i < k.p[edit_pattern].t[track].lstart[mGlide]) || (i > k.p[edit_pattern].t[track].lend[mGlide])) { |
|
|
monomeLedBuffer[R6-16*j+i] -= 2; |
|
|
} |
|
|
else if ( k_mod_mode == modLoop ) { |
|
|
monomeLedBuffer[R6-16*j+i] += 1; |
|
|
} |
|
|
} |
|
|
if(i == pos[track][mGlide]) { |
|
|
monomeLedBuffer[R6 - k.p[k.pattern].t[track].glide[i]*16 + i] += 4; |
|
|
if (!meta_lock || edit_pattern == k.pattern) { |
|
|
if(i == pos[track][mGlide]) { |
|
|
monomeLedBuffer[R6 - k.p[k.pattern].t[track].glide[i]*16 + i] += 4; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
@@ -3166,12 +3221,12 @@ void refresh_kria_glide(void) { |
|
|
void refresh_kria_scale(void) { |
|
|
for ( uint8_t y=0; y<4; y++ ) { |
|
|
// highlight TT clock enables and trigger steps |
|
|
monomeLedBuffer[0+16*y] = k.p[k.pattern].t[y].tt_clocked ? L1 : L0; |
|
|
monomeLedBuffer[1+16*y] = k.p[k.pattern].t[y].trigger_clocked ? L1 : L0; |
|
|
monomeLedBuffer[0+16*y] = k.p[edit_pattern].t[y].tt_clocked ? L1 : L0; |
|
|
monomeLedBuffer[1+16*y] = k.p[edit_pattern].t[y].trigger_clocked ? L1 : L0; |
|
|
|
|
|
// show selected direction |
|
|
for ( uint8_t x=3; x<=7; x++ ) { |
|
|
monomeLedBuffer[x+16*y] = (k.p[k.pattern].t[y].direction == (x - 3)) ? 4 : 2; |
|
|
monomeLedBuffer[x+16*y] = (k.p[edit_pattern].t[y].direction == (x - 3)) ? 4 : 2; |
|
|
} |
|
|
} |
|
|
|
|
|
@@ -3184,11 +3239,11 @@ void refresh_kria_scale(void) { |
|
|
monomeLedBuffer[R6 + i] = 2; |
|
|
} |
|
|
// highlight the selected scale |
|
|
monomeLedBuffer[R5 + (k.p[k.pattern].scale >> 3) * 16 + (k.p[k.pattern].scale & 0x7)] = L1; |
|
|
monomeLedBuffer[R5 + (k.p[edit_pattern].scale >> 3) * 16 + (k.p[edit_pattern].scale & 0x7)] = L1; |
|
|
|
|
|
// the intervals of the selected scale |
|
|
for(uint8_t i=0;i<7;i++) { |
|
|
uint8_t scale_pos = scale_data[k.p[k.pattern].scale][i] + 8 + (6-i)*16; |
|
|
uint8_t scale_pos = scale_data[k.p[edit_pattern].scale][i] + 8 + (6-i)*16; |
|
|
monomeLedBuffer[(int)scale_pos + scale_adj[i]] = L0; |
|
|
monomeLedBuffer[scale_pos] = L1; |
|
|
} |
|
|
@@ -3230,6 +3285,9 @@ void refresh_kria_pattern(void) { |
|
|
if(cue_pat_next) { |
|
|
monomeLedBuffer[cue_pat_next-1] = L2; |
|
|
} |
|
|
if (meta_lock && kriaMetaLockBlink) { |
|
|
monomeLedBuffer[edit_pattern] += 4; |
|
|
} |
|
|
switch(k_mod_mode) { |
|
|
case modTime: |
|
|
monomeLedBuffer[16 + cue_count] = L0; |
|
|
|