Arpeggiator fixes, UI fixes

pull/72/head
positionhigh 3 years ago
parent da9f5c0fd5
commit 4e76a3f886
  1. 10
      MicroDexed.ino
  2. 5
      dexed_sd.cpp
  3. 30
      sequencer.cpp
  4. 23
      sequencer.h

@ -363,7 +363,7 @@ extern LCDMenuLib2 LCDML;
extern void getNoteName(char* noteName, uint8_t noteNumber); extern void getNoteName(char* noteName, uint8_t noteNumber);
PeriodicTimer timer1; PeriodicTimer timer1;
extern char seq_chord_names[6][4]; extern char seq_chord_names[7][4];
/*********************************************************************** /***********************************************************************
SETUP SETUP
@ -679,10 +679,10 @@ void setup()
else if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_arpeggio)) //is in UI of Arpeggiator else if (LCDML.FUNC_getID() == LCDML.OTHER_getIDFromFunction(UI_func_arpeggio)) //is in UI of Arpeggiator
{ {
lcd.setCursor(7, 0); lcd.setCursor(7, 0);
lcd.print( seq_chord_names[arp_chord - 200][0]); lcd.print( seq_chord_names[arp_chord][0]);
lcd.print( seq_chord_names[arp_chord - 200][1]); lcd.print( seq_chord_names[arp_chord][1]);
lcd.print( seq_chord_names[arp_chord - 200][2]); lcd.print( seq_chord_names[arp_chord][2]);
lcd.print( seq_chord_names[arp_chord - 200][3]); lcd.print( seq_chord_names[arp_chord][3]);
} }
} }
} }

@ -830,8 +830,6 @@ bool save_sd_seq_json(uint8_t seq_number)
for (uint8_t i = 0; i < MAX_DEXED; i++) for (uint8_t i = 0; i < MAX_DEXED; i++)
{ {
data_json["reverb_send"][i] = configuration.fx.reverb_send[i]; data_json["reverb_send"][i] = configuration.fx.reverb_send[i];
data_json["perform_attack_mod"][i] = perform_attack_mod[i];
data_json["perform_release_mod"][i] = perform_release_mod[i];
} }
data_json["reverb_roomsize"] = configuration.fx.reverb_roomsize; data_json["reverb_roomsize"] = configuration.fx.reverb_roomsize;
@ -955,9 +953,6 @@ bool load_sd_seq_json(uint8_t seq_number)
for (uint8_t i = 0; i < MAX_DEXED; i++) for (uint8_t i = 0; i < MAX_DEXED; i++)
{ {
configuration.fx.reverb_send[i] = data_json["reverb_send"][i]; configuration.fx.reverb_send[i] = data_json["reverb_send"][i];
//perform_attack_mod[i] = data_json["perform_attack_mod"][i];
//perform_release_mod[i] = data_json["perform_release_mod"][i];
} }
configuration.fx.reverb_roomsize = data_json["reverb_roomsize"]; configuration.fx.reverb_roomsize = data_json["reverb_roomsize"];
configuration.fx.reverb_damping = data_json["reverb_damping"]; configuration.fx.reverb_damping = data_json["reverb_damping"];

@ -49,9 +49,9 @@ void sequencer_part1(void)
else { else {
if (seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] > 0 && seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step] > 0) // instrument track if (seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] > 0 && seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step] > 0) // instrument track
{ {
if (seq_track_type[d] == 1 || seq_track_type[d] == 3 ) if (seq_track_type[d] == 1 || (seq_track_type[d] == 3 && arp_play_basenote) )
{ {
handleNoteOn(configuration.dexed[seq_inst_dexed[d]].midi_channel, seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] + seq_transpose , seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step]); handleNoteOn(configuration.dexed[seq_inst_dexed[d]].midi_channel, seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] + seq_transpose , seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step]);
} }
seq_prev_note[d] = seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] + seq_transpose; seq_prev_note[d] = seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] + seq_transpose;
seq_prev_vel[d] = seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step]; seq_prev_vel[d] = seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step];
@ -68,34 +68,37 @@ void sequencer_part1(void)
arp_step = 0; arp_step = 0;
arp_counter = 0; arp_counter = 0;
arp_note = seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] + seq_transpose; arp_note = seq_data[ seq_patternchain[seq_chain_active_step][d] ][seq_step] + seq_transpose;
arp_chord = seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step]; if (seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step]-200>=0)
arp_chord = seq_vel[ seq_patternchain[seq_chain_active_step][d] ][seq_step]-200;
} }
} }
} }
if (seq_track_type[d] == 3) if (seq_track_type[d] == 3)
{ //Arp { //Arp
if (arp_speed == 0 || (arp_speed == 1 && arp_counter == 2) ) { if (arp_speed == 0 || (arp_speed == 1 && arp_counter == 0) ) {
if (arp_step == 0 ) {
if (arp_step % 8 ==0 ) {
handleNoteOn(configuration.dexed[seq_chord_dexed_inst].midi_channel, arp_note + arp_octave * 12 , seq_chord_velocity); handleNoteOn(configuration.dexed[seq_chord_dexed_inst].midi_channel, arp_note + arp_octave * 12 , seq_chord_velocity);
arp_note_prev = arp_note + arp_octave * 12; arp_note_prev = arp_note + arp_octave * 12;
} }
else else
{ if (arp_style == 0) { //arp up { if (arp_style == 0) { //arp up
handleNoteOn(configuration.dexed[seq_chord_dexed_inst].midi_channel, arp_note + seq_chords[arp_chord - 200][arp_step - 1] + arp_octave * 12, seq_chord_velocity); handleNoteOn(configuration.dexed[seq_chord_dexed_inst].midi_channel, arp_note + seq_chords[arp_chord][arp_step] + arp_octave * 12, seq_chord_velocity);
arp_note_prev = arp_note + seq_chords[arp_chord - 200][arp_step - 1] + arp_octave * 12; arp_note_prev = arp_note + seq_chords[arp_chord][arp_step] + arp_octave * 12;
} }
else if (arp_style == 3) { //arp random else if (arp_style == 3) { //arp random
uint8_t rnd1 = random(4); uint8_t rnd1 = random(4);
uint8_t rnd2 = random(arp_oct_usersetting + 1) * 12; uint8_t rnd2 = random(arp_oct_usersetting + 1) * 12;
handleNoteOn(configuration.dexed[seq_chord_dexed_inst].midi_channel, arp_note + seq_chords[arp_chord - 200][rnd1] + rnd2, seq_chord_velocity); handleNoteOn(configuration.dexed[seq_chord_dexed_inst].midi_channel, arp_note + seq_chords[arp_chord][rnd1] + rnd2, seq_chord_velocity);
arp_note_prev = arp_note + seq_chords[arp_chord - 200][rnd1] + rnd2; arp_note_prev = arp_note + seq_chords[arp_chord][rnd1] + rnd2;
} }
} }
} }
} }
seq_noteoffsent[d] = false; seq_noteoffsent[d] = false;
} }
arp_counter++;
seq_step++; seq_step++;
if (arp_speed == 0) // Arp Speed 1/16 if (arp_speed == 0) // Arp Speed 1/16
@ -110,13 +113,14 @@ void sequencer_part1(void)
arp_counter = 0; arp_counter = 0;
arp_step++; arp_step++;
} }
arp_counter++;
} }
} }
if (arp_step > 3 || seq_chords[arp_chord - 200][arp_step] == 0 ) { //if (arp_step > 3 || seq_chords[arp_chord][arp_step] == 0 ) {
if (arp_step > 3 || seq_chords[arp_chord][arp_step] == 0 ) {
arp_step = 0; arp_step = 0;
arp_octave++; arp_octave++;
if (arp_octave > arp_oct_usersetting) arp_octave = 0; if (arp_octave >= arp_oct_usersetting) arp_octave = 0;
} }
if (seq_step > 15) { if (seq_step > 15) {
seq_step = 0; seq_step = 0;

@ -9,23 +9,25 @@ bool seq_recording = false;
uint8_t seq_note_in; uint8_t seq_note_in;
uint8_t seq_note_in_velocity; uint8_t seq_note_in_velocity;
int seq_transpose; int seq_transpose;
uint8_t seq_inst_dexed[4] = { 0, 0, 0, 1 }; uint8_t seq_inst_dexed[4] = { 0, 0, 1, 1 };
uint8_t seq_chord_dexed_inst = 0; uint8_t seq_chord_dexed_inst = 0;
uint8_t seq_chord_velocity = 50; uint8_t seq_chord_velocity = 50;
uint8_t arp_style = 0; // up, down, up&down, random uint8_t arp_style = 0; // up, down, up&down, random
uint8_t seq_chords[6][4] = { 4, 7, 12, 0, //major uint8_t seq_chords[7][4] = { 4, 7, 0, 0, //major
3, 7, 12, 0, //minor 3, 7, 0, 0, //minor
4, 7, 10, 12, //seventh 4, 7, 10, 0, //seventh
4, 8, 12, 0, //augmented 4, 8, 0, 0, //augmented
3, 6, 12, 0, //dim 3, 6, 0 , 0, //dim
4, 7, 11 , 0 //maj7, 4, 7, 11, 0, //maj7,
0, 0, 0 , 0 //no Chord
}; };
char seq_chord_names[6][4] = { 'M', 'a', 'j', ' ' , //major char seq_chord_names[7][4] = { 'M', 'a', 'j', ' ' , //major
'M', 'i', 'n', ' ' , 'M', 'i', 'n', ' ' ,
's', 'e', 'v', ' ' , 's', 'e', 'v', ' ' ,
'a', 'u', 'g', ' ' , 'a', 'u', 'g', ' ' ,
'd', 'i', 'm', ' ' , 'd', 'i', 'm', ' ' ,
'M', 'a', 'j', '7' , 'M', 'a', 'j', '7' ,
'N', 'o', 'C', 'd' ,
}; };
@ -45,7 +47,8 @@ uint8_t seq_prev_note[4]; // note_offs for every (instr.) track
uint8_t seq_prev_vel[4]; uint8_t seq_prev_vel[4];
uint8_t arp_step; uint8_t arp_step;
uint8_t arp_note; uint8_t arp_note;
uint8_t arp_chord; uint8_t arp_chord = 6;
bool arp_play_basenote=true;
uint8_t arp_note_prev; uint8_t arp_note_prev;
uint8_t arp_octave; uint8_t arp_octave;
uint8_t arp_prev_oct; uint8_t arp_prev_oct;
@ -78,7 +81,7 @@ uint8_t seq_vel[10][16] = {120, 0, 0, 0, 120, 0, 0, 0, 120, 0, 0, 0, 120, 0, 0,
uint8_t seq_patternchain[4][4] = { 0 , 1 , 6 , 9 , 0 , 1 , 5 , 8 , 0 , 1 , 6 , 9 , 2 , 1 , 5 , 7 uint8_t seq_patternchain[4][4] = { 0 , 1 , 6 , 9 , 0 , 1 , 5 , 8 , 0 , 1 , 6 , 9 , 2 , 1 , 5 , 7
}; };
uint8_t seq_content_type[10] = { 0, 0, 0, 0 , 1, 1, 1 , 1 , 1 , 1 }; // 0 = track is Drumtrack, 1= Instrumenttrack, 2= Chord or Arpeggio uint8_t seq_content_type[10] = { 0, 0, 0, 0 , 1, 1, 1 , 1 , 1 , 1 }; // 0 = track is Drumtrack, 1= Instrumenttrack, 2= Chord or Arpeggio
uint8_t seq_track_type[4] = { 0, 0, 1, 1 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord, 3 = Arp uint8_t seq_track_type[4] = { 0, 0, 3, 1 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord, 3 = Arp
//uint8_t seq_reverb[4][16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, //uint8_t seq_reverb[4][16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
// 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, // 0, 0, 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0,

Loading…
Cancel
Save