Disabled sequencer for T_3.6 due to CPU limitations.

pull/112/head
Holger Wirtz 3 years ago
parent 0799e349c7
commit 0412e88ba4
  1. 17
      MicroDexed.ino
  2. 10
      UI.hpp
  3. 30
      UI_FX.h
  4. 31
      UI_NO_FX.h
  5. 10
      config.h
  6. 15
      dexed_sd.cpp
  7. 2
      effect_freeverb_simd.cpp
  8. 3
      effect_freeverb_simd.h
  9. 24
      sequencer.h

@ -364,7 +364,10 @@ extern LCDMenuLib2 LCDML;
#endif #endif
extern void getNoteName(char* noteName, uint8_t noteNumber); extern void getNoteName(char* noteName, uint8_t noteNumber);
PeriodicTimer timer1;
#ifdef USE_SEQUENCER
PeriodicTimer sequencer_timer;
#endif
/*********************************************************************** /***********************************************************************
SETUP SETUP
@ -565,8 +568,10 @@ void setup()
} }
} }
#ifdef USE_SEQUENCER
// Start timer (to avoid a crash when loading the performance data) // Start timer (to avoid a crash when loading the performance data)
timer1.begin(sequencer, seq.seq_tempo_ms / 2, false); sequencer_timer.begin(sequencer, seq.seq_tempo_ms / 2, false);
#endif
// Load initial Performance or the last used one // Load initial Performance or the last used one
initial_values(false); initial_values(false);
@ -1766,7 +1771,9 @@ void handleStart(void)
seq.seq_step = 0; seq.seq_step = 0;
seq.seq_chain_active_step = 0; seq.seq_chain_active_step = 0;
seq.seq_running = true; seq.seq_running = true;
timer1.start(); #ifdef USE_SEQUENCER
sequencer_timer.start();
#endif
} }
@ -1777,7 +1784,9 @@ void handleContinue(void)
void handleStop(void) void handleStop(void)
{ {
timer1.stop(); #ifdef USE_SEQUENCER
sequencer_timer.stop();
#endif
seq.seq_running = false; seq.seq_running = false;
seq.seq_recording = false; seq.seq_recording = false;
seq.seq_note_in = 0; seq.seq_note_in = 0;

@ -53,7 +53,9 @@
#endif #endif
#define _LCDML_DISP_cfg_scrollbar 1 // enable a scrollbar #define _LCDML_DISP_cfg_scrollbar 1 // enable a scrollbar
extern PeriodicTimer timer1; #ifdef USE_SEQUENCER
extern PeriodicTimer sequencer_timer;
#endif
extern void sequencer(void); extern void sequencer(void);
extern bool check_sd_performance_exists(uint8_t number); extern bool check_sd_performance_exists(uint8_t number);
@ -4404,8 +4406,10 @@ void UI_func_seq_tempo(uint8_t param)
} }
} }
#endif #endif
//timer1.stop(); //sequencer_timer.stop();
timer1.begin(sequencer, seq.seq_tempo_ms / 2); #ifdef USE_SEQUENCER
sequencer_timer.begin(sequencer, seq.seq_tempo_ms / 2);
#endif
} }
if (LCDML.FUNC_close()) // ****** STABLE END ********* if (LCDML.FUNC_close()) // ****** STABLE END *********
{ {

@ -114,26 +114,12 @@ LCDML_add(80, LCDML_0_4, 2, "Drum Volumes", UI_func_drum_volume);
LCDML_add(81, LCDML_0_4, 3, "Drum Pan", UI_func_drum_pan); LCDML_add(81, LCDML_0_4, 3, "Drum Pan", UI_func_drum_pan);
LCDML_add(82, LCDML_0_4, 4, "Drum Rev.Send", UI_func_drum_reverb_send); LCDML_add(82, LCDML_0_4, 4, "Drum Rev.Send", UI_func_drum_reverb_send);
LCDML_add(83, LCDML_0_4, 5, "MIDI Channel", UI_func_drum_midi_channel); LCDML_add(83, LCDML_0_4, 5, "MIDI Channel", UI_func_drum_midi_channel);
LCDML_add(84, LCDML_0, 5, "Sequencer", NULL); LCDML_add(84, LCDML_0, 5, "System", NULL);
LCDML_add(85, LCDML_0_5, 1, "Pattern Editor", UI_func_seq_pattern_editor); LCDML_add(85, LCDML_0_5, 1, "Stereo/Mono", UI_func_stereo_mono);
LCDML_add(86, LCDML_0_5, 2, "Vel./Chrd Edit", UI_func_seq_vel_editor); LCDML_add(86, LCDML_0_5, 2, "MIDI Soft THRU", UI_func_midi_soft_thru);
LCDML_add(87, LCDML_0_5, 3, "Pattern Chain", UI_func_seq_pat_chain); LCDML_add(87, LCDML_0_5, 3, "Favorites", UI_func_favorites);
LCDML_add(88, LCDML_0_5, 4, "Arpeggio", UI_func_arpeggio); LCDML_add(88, LCDML_0_5, 4, "Startup", UI_func_startup);
LCDML_add(89, LCDML_0_5, 5, "Seq. Settings", NULL); LCDML_add(89, LCDML_0, 6, "Info", UI_func_information);
LCDML_add(90, LCDML_0_5_5, 1, "Tempo", UI_func_seq_tempo); LCDML_addAdvanced(90, LCDML_0, 7, COND_hide, "Volume", UI_func_volume, 0, _LCDML_TYPE_default);
LCDML_add(91, LCDML_0_5_5, 2, "Seq. Length", UI_func_seq_lenght); #define _LCDML_DISP_cnt 90
LCDML_add(92, LCDML_0_5_5, 3, "Track Setup", UI_func_seq_track_setup);
LCDML_add(93, LCDML_0_5_5, 4, "Seq.Disp.Style", UI_func_seq_display_style);
LCDML_add(94, LCDML_0_5_5, 5, "Dexed Assign", UI_func_dexed_assign);
LCDML_add(95, LCDML_0_5_5, 6, "Shift&Transp.", UI_func_arp_shift);
LCDML_add(96, LCDML_0_5_5, 7, "ChordTrack Keys", UI_func_seq_chord_keys_ammount);
LCDML_add(97, LCDML_0_5_5, 8, "L.Transp.Key", UI_func_seq_live_transpose_oct);
LCDML_add(98, LCDML_0, 6, "System", NULL);
LCDML_add(99, LCDML_0_6, 1, "Stereo/Mono", UI_func_stereo_mono);
LCDML_add(100, LCDML_0_6, 2, "MIDI Soft THRU", UI_func_midi_soft_thru);
LCDML_add(101, LCDML_0_6, 3, "Favorites", UI_func_favorites);
LCDML_add(102, LCDML_0_6, 4, "Startup", UI_func_startup);
LCDML_add(103, LCDML_0, 7, "Info", UI_func_information);
LCDML_addAdvanced(104, LCDML_0, 8, COND_hide, "Volume", UI_func_volume, 0, _LCDML_TYPE_default);
#define _LCDML_DISP_cnt 104
#endif #endif

@ -87,27 +87,12 @@ LCDML_add(53, LCDML_0_3, 1, "Drums Main Vol", UI_func_drums_main_volume);
LCDML_add(54, LCDML_0_3, 2, "Drum Volumes", UI_func_drum_volume); LCDML_add(54, LCDML_0_3, 2, "Drum Volumes", UI_func_drum_volume);
LCDML_add(55, LCDML_0_3, 3, "Drum Pan", UI_func_drum_pan); LCDML_add(55, LCDML_0_3, 3, "Drum Pan", UI_func_drum_pan);
LCDML_add(56, LCDML_0_3, 4, "MIDI Channel", UI_func_drum_midi_channel); LCDML_add(56, LCDML_0_3, 4, "MIDI Channel", UI_func_drum_midi_channel);
LCDML_add(57, LCDML_0, 4, "Sequencer", NULL); LCDML_add(57, LCDML_0, 4, "System", NULL);
LCDML_add(58, LCDML_0_4, 1, "Pattern Editor", UI_func_seq_pattern_editor); LCDML_add(58, LCDML_0_4, 1, "Stereo/Mono", UI_func_stereo_mono);
LCDML_add(59, LCDML_0_4, 2, "Vel./Chrd Edit", UI_func_seq_vel_editor); LCDML_add(59, LCDML_0_4, 2, "MIDI Soft THRU", UI_func_midi_soft_thru);
LCDML_add(60, LCDML_0_4, 3, "Pattern Chain", UI_func_seq_pat_chain); LCDML_add(60, LCDML_0_4, 3, "Favorites", UI_func_favorites);
LCDML_add(61, LCDML_0_4, 4, "Arpeggio", UI_func_arpeggio); LCDML_add(61, LCDML_0_4, 4, "Startup", UI_func_startup);
LCDML_add(62, LCDML_0_4, 5, "Mute Matrix", UI_func_seq_mute_matrix); LCDML_add(62, LCDML_0, 5, "Info", UI_func_information);
LCDML_add(63, LCDML_0_4, 6, "Seq. Settings", NULL); LCDML_addAdvanced(63, LCDML_0, 6, COND_hide, "Volume", UI_func_volume, 0, _LCDML_TYPE_default);
LCDML_add(64, LCDML_0_4_6, 1, "Tempo", UI_func_seq_tempo); #define _LCDML_DISP_cnt 63
LCDML_add(65, LCDML_0_4_6, 2, "Seq. Length", UI_func_seq_lenght);
LCDML_add(66, LCDML_0_4_6, 3, "Track Setup", UI_func_seq_track_setup);
LCDML_add(67, LCDML_0_4_6, 4, "Seq.Disp.Style", UI_func_seq_display_style);
LCDML_add(68, LCDML_0_4_6, 5, "Dexed Assign", UI_func_dexed_assign);
LCDML_add(69, LCDML_0_4_6, 6, "Shift&Transp.", UI_func_arp_shift);
LCDML_add(70, LCDML_0_4_6, 7, "L.Transp.Key", UI_func_seq_live_transpose_oct);
LCDML_add(71, LCDML_0_4_6, 8, "ChordTrack Keys", UI_func_seq_chord_keys_ammount);
LCDML_add(72, LCDML_0, 5, "System", NULL);
LCDML_add(73, LCDML_0_5, 1, "Stereo/Mono", UI_func_stereo_mono);
LCDML_add(74, LCDML_0_5, 2, "MIDI Soft THRU", UI_func_midi_soft_thru);
LCDML_add(75, LCDML_0_5, 3, "Favorites", UI_func_favorites);
LCDML_add(76, LCDML_0_5, 4, "Startup", UI_func_startup);
LCDML_add(77, LCDML_0, 6, "Info", UI_func_information);
LCDML_addAdvanced(78, LCDML_0, 8, COND_hide, "Volume", UI_func_volume, 0, _LCDML_TYPE_default);
#define _LCDML_DISP_cnt 78
#endif #endif

@ -96,7 +96,7 @@
#define SHOW_CPU_LOAD_MSEC 5000 #define SHOW_CPU_LOAD_MSEC 5000
//************************************************************************************************* //*************************************************************************************************
//* DEXED AND EFFECTS SETTINGS //* DEXED SEQEUNCER AND EFFECTS SETTINGS
//************************************************************************************************* //*************************************************************************************************
// Number of Dexed instances // Number of Dexed instances
#if defined(TEENSY3_6) #if defined(TEENSY3_6)
@ -128,13 +128,10 @@
#endif #endif
// SEQUENCER // SEQUENCER
#ifdef TEENSY4
#define NUM_SEQ_PATTERN 24 #define NUM_SEQ_PATTERN 24
#define NUM_SEQ_TRACKS 6 #define NUM_SEQ_TRACKS 6
#else #ifdef TEENSY4
#define NUM_SEQ_PATTERN 10 #define USE_SEQUENCER
#define NUM_SEQ_TRACKS 2
#endif #endif
// CHORUS parameters // CHORUS parameters
@ -351,6 +348,7 @@
// Teensy-3.6 settings // Teensy-3.6 settings
#if defined(TEENSY3_6) #if defined(TEENSY3_6)
#undef USE_SEQUENCER
# if defined(USE_FX) # if defined(USE_FX)
# warning >>> With enabled FX a maximum of 12 voices is possible (due to RAM and CPU limitations) # warning >>> With enabled FX a maximum of 12 voices is possible (due to RAM and CPU limitations)
# define MAX_NOTES 12 # define MAX_NOTES 12

@ -45,7 +45,9 @@ extern void check_configuration_performance(void);
extern void check_configuration_fx(void); extern void check_configuration_fx(void);
extern void sequencer(); extern void sequencer();
extern sequencer_t seq; extern sequencer_t seq;
extern PeriodicTimer timer1; #ifdef USE_SEQUENCER
extern PeriodicTimer sequencer_timer;
#endif
extern float midi_volume_transform(uint8_t midi_amp); extern float midi_volume_transform(uint8_t midi_amp);
extern void set_sample_note(uint8_t sample, uint8_t note); extern void set_sample_note(uint8_t sample, uint8_t note);
extern void set_sample_pitch(uint8_t sample, float playbackspeed); extern void set_sample_pitch(uint8_t sample, float playbackspeed);
@ -1514,6 +1516,7 @@ bool load_sd_seq_sub_patterns_json(uint8_t seq_number)
bool load_sd_performance_json(uint8_t seq_number) bool load_sd_performance_json(uint8_t seq_number)
{ {
#ifdef USE_SEQUENCER
bool seq_was_running = false; bool seq_was_running = false;
if (seq.seq_running) if (seq.seq_running)
@ -1521,6 +1524,8 @@ bool load_sd_performance_json(uint8_t seq_number)
seq_was_running = true; seq_was_running = true;
seq.seq_running = false; seq.seq_running = false;
} }
#endif
dac_mute(); dac_mute();
handleStop(); handleStop();
seq_number = constrain(seq_number, 0, 99); seq_number = constrain(seq_number, 0, 99);
@ -1622,13 +1627,17 @@ bool load_sd_performance_json(uint8_t seq_number)
dac_unmute(); dac_unmute();
seq.seq_step = 0; seq.seq_step = 0;
seq.seq_chain_active_step = 0; seq.seq_chain_active_step = 0;
#ifdef USE_SEQUENCER
if (seq_was_running) if (seq_was_running)
{ {
timer1.begin(sequencer, seq.seq_tempo_ms / 2); sequencer_timer.begin(sequencer, seq.seq_tempo_ms / 2);
seq.seq_running = true; seq.seq_running = true;
} }
else else
timer1.begin(sequencer, seq.seq_tempo_ms / 2, false); sequencer_timer.begin(sequencer, seq.seq_tempo_ms / 2, false);
#else
seq.seq_running = false;
#endif
return (true); return (true);
} }
#ifdef DEBUG #ifdef DEBUG

@ -24,6 +24,7 @@
THE SOFTWARE. THE SOFTWARE.
*/ */
#ifdef USE_FREEVERB_SIMD
// A fixed point implementation of Freeverb by Jezar at Dreampoint // A fixed point implementation of Freeverb by Jezar at Dreampoint
// http://blog.bjornroche.com/2012/06/freeverb-original-public-domain-code-by.html // http://blog.bjornroche.com/2012/06/freeverb-original-public-domain-code-by.html
// https://music.columbia.edu/pipermail/music-dsp/2001-October/045433.html // https://music.columbia.edu/pipermail/music-dsp/2001-October/045433.html
@ -843,3 +844,4 @@ void AudioEffectFreeverbSIMDStereo::update()
if (block) release(block); if (block) release(block);
#endif #endif
} }
#endif

@ -24,6 +24,7 @@
THE SOFTWARE. THE SOFTWARE.
*/ */
#ifdef USE_FREEVERB_SIMD
#ifndef effect_freeverb_simd_h_ #ifndef effect_freeverb_simd_h_
#define effect_freeverb_simd_h_ #define effect_freeverb_simd_h_
#include <Arduino.h> #include <Arduino.h>
@ -180,5 +181,5 @@ class AudioEffectFreeverbSIMDStereo : public AudioStream
uint16_t allpass4indexR; uint16_t allpass4indexR;
}; };
#endif
#endif #endif

@ -25,17 +25,13 @@
#ifndef _SEQUENCER_H #ifndef _SEQUENCER_H
#define _SEQUENCER_H #define _SEQUENCER_H
typedef struct sequencer_s { typedef struct sequencer_s
{
float drums_volume; float drums_volume;
uint8_t seq_active_track = 0; uint8_t seq_active_track = 0;
uint8_t seq_menu; uint8_t seq_menu;
#ifdef TEENSY4
bool seq_noteoffsent[NUM_SEQ_TRACKS] = {false, false, false, false, false, false}; bool seq_noteoffsent[NUM_SEQ_TRACKS] = {false, false, false, false, false, false};
uint8_t seq_inst_dexed[NUM_SEQ_TRACKS] = { 0, 0, 1, 1 , 1, 1 }; uint8_t seq_inst_dexed[NUM_SEQ_TRACKS] = { 0, 0, 1, 1 , 1, 1 };
#else
bool seq_noteoffsent[NUM_SEQ_TRACKS] = {false, false};
uint8_t seq_inst_dexed[NUM_SEQ_TRACKS] = { 0, 0 };
#endif
uint8_t seq_step = 0; uint8_t seq_step = 0;
bool seq_running = false; bool seq_running = false;
bool seq_recording = false; bool seq_recording = false;
@ -54,7 +50,7 @@ typedef struct sequencer_s {
int seq_oct_shift = 0; int seq_oct_shift = 0;
uint8_t arp_style = 0; // up, down, up&down, random uint8_t arp_style = 0; // up, down, up&down, random
uint8_t seq_arps[6][23] = { const uint8_t seq_arps[6][23] = {
{ 0, 4, 7, 12, 16, 19, 24, 28, 31, 36, 40, 43, 48, 52, 55, 60, 64, 67, 72, 76, 79, 84, 0}, //major { 0, 4, 7, 12, 16, 19, 24, 28, 31, 36, 40, 43, 48, 52, 55, 60, 64, 67, 72, 76, 79, 84, 0}, //major
{ 0, 3, 7, 12, 15, 19, 24, 27, 31, 36, 39, 43, 48, 51, 55, 60, 63, 67, 72, 75, 79, 84, 0}, //minor { 0, 3, 7, 12, 15, 19, 24, 27, 31, 36, 39, 43, 48, 51, 55, 60, 63, 67, 72, 75, 79, 84, 0}, //minor
{ 0, 4, 7, 10, 12, 16, 19, 22, 24, 28, 31, 34, 36, 40, 43, 46, 48, 52, 55, 58, 60, 64, 0}, //seventh { 0, 4, 7, 10, 12, 16, 19, 22, 24, 28, 31, 34, 36, 40, 43, 46, 48, 52, 55, 58, 60, 64, 0}, //seventh
@ -63,7 +59,7 @@ typedef struct sequencer_s {
{ 0, 4, 7, 11, 12, 16, 19, 23, 24, 28, 31, 35, 36, 40, 43, 47, 48, 52, 55, 59, 60, 64, 0} //maj7 { 0, 4, 7, 11, 12, 16, 19, 23, 24, 28, 31, 35, 36, 40, 43, 47, 48, 52, 55, 59, 60, 64, 0} //maj7
}; };
char seq_chord_names[7][4] = { const char seq_chord_names[7][4] = {
{'M', 'a', 'j', ' '}, //major {'M', 'a', 'j', ' '}, //major
{'M', 'i', 'n', ' '}, {'M', 'i', 'n', ' '},
{'s', 'e', 'v', ' '}, {'s', 'e', 'v', ' '},
@ -73,7 +69,7 @@ typedef struct sequencer_s {
{ 'N', 'o', 'C', 'd'} { 'N', 'o', 'C', 'd'}
}; };
char arp_style_names[4][3] = { const char arp_style_names[4][3] = {
{ 'u', 'p', ' '}, { 'u', 'p', ' '},
{'d', 'w', 'n'}, {'d', 'w', 'n'},
{'u', '&', 'd'}, {'u', '&', 'd'},
@ -124,7 +120,6 @@ typedef struct sequencer_s {
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
}; };
uint8_t seq_content_type[NUM_SEQ_PATTERN] = { 0, 0, 0, 0 , 0, 0, 0 , 0 , 0 , 0 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord or Arpeggio uint8_t seq_content_type[NUM_SEQ_PATTERN] = { 0, 0, 0, 0 , 0, 0, 0 , 0 , 0 , 0 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord or Arpeggio
#ifdef TEENSY4
uint8_t seq_patternchain[4][NUM_SEQ_TRACKS] = { uint8_t seq_patternchain[4][NUM_SEQ_TRACKS] = {
{ 0 , 2 , 6 , 9 , 99, 99 }, { 0 , 2 , 6 , 9 , 99, 99 },
{ 1 , 2 , 5 , 8 , 99, 99 }, { 1 , 2 , 5 , 8 , 99, 99 },
@ -132,15 +127,6 @@ typedef struct sequencer_s {
{ 1 , 2 , 5 , 7 , 99, 99 } { 1 , 2 , 5 , 7 , 99, 99 }
}; };
uint8_t seq_track_type[NUM_SEQ_TRACKS] = { 0, 0, 1, 1, 1, 1 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord, 3 = Arp uint8_t seq_track_type[NUM_SEQ_TRACKS] = { 0, 0, 1, 1, 1, 1 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord, 3 = Arp
#else
uint8_t seq_patternchain[4][NUM_SEQ_TRACKS] = {
{ 0 , 2 },
{ 1 , 2 },
{ 0 , 2 },
{ 1 , 2 },
};
uint8_t seq_track_type[NUM_SEQ_TRACKS] = { 0, 0 }; // 0 = track is Drumtrack, 1 = Instrumenttrack, 2 = Chord, 3 = Arp
#endif
} sequencer_t; } sequencer_t;
#endif #endif

Loading…
Cancel
Save