From a3f9b646dec2d59b963157e6e85754ef84088d87 Mon Sep 17 00:00:00 2001 From: Dirk Niggemann Date: Sun, 27 Oct 2019 00:44:31 +0100 Subject: [PATCH] Now Dexed is a parent class of AudioSourceMicroDexed --- MicroDexed.ino | 43 ++++++++++++++++++++++++++----------------- UI.hpp | 2 +- dexed.h | 3 ++- dexed_sysex.cpp | 4 ++-- dexed_sysex.h | 2 +- source_microdexed.h | 16 +++------------- 6 files changed, 35 insertions(+), 35 deletions(-) diff --git a/MicroDexed.ino b/MicroDexed.ino index 3453404..95289a0 100644 --- a/MicroDexed.ino +++ b/MicroDexed.ino @@ -43,9 +43,10 @@ AudioAnalyzePeak peak1; -AudioSourceMicroDexed microdexed1; //AudioPlayQueue queue1; +AudioSourceMicroDexed* MicroDexed[NUM_DEXED]; + AudioEffectDelay delay1; AudioEffectModulatedDelay modchorus; AudioSynthWaveform modulator; @@ -58,11 +59,6 @@ AudioAmplifier volume_l; AudioOutputUSB usb1; #endif AudioEffectStereoMono stereomono1; -AudioConnection patchCord0(microdexed1, peak1); -AudioConnection patchCord1(microdexed1, 0, delay_fb_mixer, 0); -AudioConnection patchCord2(microdexed1, 0, modchorus, 0); -AudioConnection patchCord3(microdexed1, 0 , master_mixer_r, 0); -AudioConnection patchCord4(microdexed1, 0 , master_mixer_l, 0); AudioConnection patchCord5(modulator, 0, modchorus, 1); #if MOD_FILTER_OUTPUT != MOD_NO_FILTER_OUTPUT AudioFilterBiquad modchorus_filter; @@ -75,8 +71,6 @@ AudioConnection patchCord10(modchorus, 0, master_mixer_l, 3); #endif #if defined(USE_REVERB) AudioEffectFreeverbStereo freeverbs1; -AudioConnection patchCord11(microdexed1, 0, freeverbs1, 0); -AudioConnection patchCord12(microdexed1, 0, freeverbs1, 1); AudioConnection patchCord13(freeverbs1, 0, master_mixer_r, 1); AudioConnection patchCord14(freeverbs1, 1, master_mixer_l, 1); #endif @@ -123,7 +117,22 @@ AudioConnection patchCord36(stereomono1, 0, dacOut, 0); AudioConnection patchCord37(stereomono1, 1, dacOut, 1); #endif -Dexed* MicroDexed[NUM_DEXED]; +//Dexed* MicroDexed[NUM_DEXED]; +AudioConnection * dynamicConnections[NUM_DEXED * 7]; +int nDynamic = 0; + +void create_audio_connections(AudioSourceMicroDexed &d) +{ + dynamicConnections[nDynamic++] = new AudioConnection(d, peak1); + dynamicConnections[nDynamic++] = new AudioConnection(d, 0, delay_fb_mixer, 0); + dynamicConnections[nDynamic++] = new AudioConnection(d, 0, modchorus, 0); + dynamicConnections[nDynamic++] = new AudioConnection(d, 0 , master_mixer_r, 0); + dynamicConnections[nDynamic++] = new AudioConnection(d, 0 , master_mixer_l, 0); +#if defined(USE_REVERB) + dynamicConnections[nDynamic++] = new AudioConnection(d, 0, freeverbs1, 0); + dynamicConnections[nDynamic++] = new AudioConnection(d, 0, freeverbs1, 1); +#endif +} bool sd_card_available = false; @@ -146,7 +155,7 @@ uint8_t active_voices = 0; #ifdef SHOW_CPU_LOAD_MSEC elapsedMillis cpu_mem_millis; #endif -uint32_t overload = 0; +//uint32_t overload = 0; uint32_t peak = 0; config_t configuration; @@ -192,10 +201,10 @@ void setup() { Serial.print(F("Creating MicroDexed engine ")); Serial.println(i, DEC); - MicroDexed[i] = new Dexed(SAMPLE_RATE); - + MicroDexed[i] = new AudioSourceMicroDexed(SAMPLE_RATE); + create_audio_connections(*MicroDexed[i]); } - microdexed1.setDexeds(NUM_DEXED, MicroDexed); + //microdexed1.setDexeds(NUM_DEXED, MicroDexed); delay(220); Serial.println(F("MicroDexed based on https://github.com/asb2m10/dexed")); @@ -1154,11 +1163,11 @@ void show_cpu_and_mem_usage(void) Serial.print(F(" MEM MAX: ")); Serial.print(AudioMemoryUsageMax(), DEC); Serial.print(F(" RENDER_TIME_MAX: ")); - Serial.print(microdexed1.render_time_max, DEC); + Serial.print(MicroDexed[0]->render_time_max, DEC); Serial.print(F(" XRUN: ")); - Serial.print(microdexed1.xrun, DEC); + Serial.print(MicroDexed[0]->xrun, DEC); Serial.print(F(" OVERLOAD: ")); - Serial.print(overload, DEC); + Serial.print(MicroDexed[0]->overload, DEC); Serial.print(F(" PEAK: ")); Serial.print(peak, DEC); Serial.print(F(" BLOCKSIZE: ")); @@ -1168,7 +1177,7 @@ void show_cpu_and_mem_usage(void) Serial.println(); AudioProcessorUsageMaxReset(); AudioMemoryUsageMaxReset(); - microdexed1.render_time_max = 0; + MicroDexed[0]->render_time_max = 0; } #endif diff --git a/UI.hpp b/UI.hpp index a56673c..db5be9d 100644 --- a/UI.hpp +++ b/UI.hpp @@ -74,7 +74,7 @@ extern AudioMixer4 master_mixer_l; extern AudioAmplifier volume_r; extern AudioAmplifier volume_l; extern AudioEffectStereoMono stereomono1; -extern Dexed* MicroDexed[NUM_DEXED]; +extern AudioSourceMicroDexed * MicroDexed[NUM_DEXED]; /*********************************************************************** GLOBAL diff --git a/dexed.h b/dexed.h index a3bdaf0..24f69fb 100644 --- a/dexed.h +++ b/dexed.h @@ -38,7 +38,7 @@ #include #include "config.h" -extern uint32_t overload; +//extern uint32_t overload; extern bool load_sysex(uint8_t bank, uint8_t voice_number); extern AudioControlSGTL5000 sgtl5000_1; extern float vol; @@ -187,6 +187,7 @@ class Dexed 16 // number of voices }; // FM-Piano + uint32_t overload = 0; protected: static const uint8_t MAX_ACTIVE_NOTES = MAX_NOTES; uint8_t max_notes = MAX_ACTIVE_NOTES; diff --git a/dexed_sysex.cpp b/dexed_sysex.cpp index 010e79f..109d718 100644 --- a/dexed_sysex.cpp +++ b/dexed_sysex.cpp @@ -31,7 +31,7 @@ #include "dexed.h" #include "dexed_sysex.h" -extern Dexed* MicroDexed[NUM_DEXED]; +extern AudioSourceMicroDexed * MicroDexed[NUM_DEXED]; void create_sysex_filename(uint8_t b, char* sysex_file_name) { @@ -349,7 +349,7 @@ bool get_sysex_voice(File sysex, uint8_t voice_number, uint8_t* data) return (false); } - microdexed1.render_time_max = 0; + MicroDexed[0]->render_time_max = 0; return (true); } diff --git a/dexed_sysex.h b/dexed_sysex.h index 88f0d1d..8900008 100644 --- a/dexed_sysex.h +++ b/dexed_sysex.h @@ -31,7 +31,7 @@ extern bool sd_card_available; extern Dexed* dexed; -extern AudioSourceMicroDexed microdexed1; +extern AudioSourceMicroDexed * MicroDexed[NUM_DEXED]; //extern uint16_t render_time_max; extern uint8_t bank; extern uint8_t voice; diff --git a/source_microdexed.h b/source_microdexed.h index 3bd5615..bcd6b81 100644 --- a/source_microdexed.h +++ b/source_microdexed.h @@ -4,29 +4,19 @@ #include -class AudioSourceMicroDexed : public AudioStream { +class AudioSourceMicroDexed : public AudioStream, public Dexed { public: const uint16_t audio_block_time_us = 1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES); uint32_t xrun = 0; uint16_t render_time_max = 0; - AudioAnalyzePeak * peak1 =NULL; - int num_dexeds = 0; - Dexed ** dexeds = NULL; - AudioSourceMicroDexed() : AudioStream(0, NULL) { + AudioSourceMicroDexed(int sample_rate) : AudioStream(0, NULL), Dexed(sample_rate) { }; - void setDexeds(int num, Dexed ** pdexed) { - dexeds = pdexed; - num_dexeds = num; - } void update(void) { elapsedMicros render_time; audio_block_t *lblock; lblock = allocate(); if (!lblock) return; - for (uint8_t i = 0; i < num_dexeds; i++) - { - dexeds[i]->getSamples(AUDIO_BLOCK_SAMPLES, lblock->data); - } + getSamples(AUDIO_BLOCK_SAMPLES, lblock->data); if (render_time > audio_block_time_us) // everything greater 2.9ms is a buffer underrun! xrun++; if (render_time > render_time_max)