Now Dexed is a parent class of AudioSourceMicroDexed

pull/6/head
Dirk Niggemann 5 years ago
parent ee70a84fcb
commit a3f9b646de
  1. 43
      MicroDexed.ino
  2. 2
      UI.hpp
  3. 3
      dexed.h
  4. 4
      dexed_sysex.cpp
  5. 2
      dexed_sysex.h
  6. 16
      source_microdexed.h

@ -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

@ -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

@ -38,7 +38,7 @@
#include <Audio.h>
#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;

@ -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);
}

@ -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;

@ -4,29 +4,19 @@
#include <AudioStream.h>
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)

Loading…
Cancel
Save