Added Dexed audio source

pull/6/head
Dirk Niggemann 5 years ago
parent 78185214ed
commit ee70a84fcb
  1. 57
      MicroDexed.ino
  2. 2
      dexed_sysex.cpp
  3. 4
      dexed_sysex.h
  4. 39
      source_microdexed.h

@ -39,9 +39,13 @@
#include "PluginFx.h"
#include "SoftenValue.hpp"
#include "UI.hpp"
#include "source_microdexed.h"
AudioPlayQueue queue1;
AudioAnalyzePeak peak1;
AudioSourceMicroDexed microdexed1;
//AudioPlayQueue queue1;
AudioEffectDelay delay1;
AudioEffectModulatedDelay modchorus;
AudioSynthWaveform modulator;
@ -54,11 +58,11 @@ AudioAmplifier volume_l;
AudioOutputUSB usb1;
#endif
AudioEffectStereoMono stereomono1;
AudioConnection patchCord0(queue1, peak1);
AudioConnection patchCord1(queue1, 0, delay_fb_mixer, 0);
AudioConnection patchCord2(queue1, 0, modchorus, 0);
AudioConnection patchCord3(queue1, 0 , master_mixer_r, 0);
AudioConnection patchCord4(queue1, 0 , master_mixer_l, 0);
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;
@ -71,8 +75,8 @@ AudioConnection patchCord10(modchorus, 0, master_mixer_l, 3);
#endif
#if defined(USE_REVERB)
AudioEffectFreeverbStereo freeverbs1;
AudioConnection patchCord11(queue1, 0, freeverbs1, 0);
AudioConnection patchCord12(queue1, 0, freeverbs1, 1);
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
@ -122,10 +126,7 @@ AudioConnection patchCord37(stereomono1, 1, dacOut, 1);
Dexed* MicroDexed[NUM_DEXED];
bool sd_card_available = false;
uint32_t xrun = 0;
uint32_t overload = 0;
uint32_t peak = 0;
uint16_t render_time_max = 0;
uint8_t max_loaded_banks = 0;
char bank_name[BANK_NAME_LEN];
char voice_name[VOICE_NAME_LEN];
@ -139,12 +140,15 @@ elapsedMillis long_button_pressed;
SoftenValue <uint8_t> soften_volume;
SoftenValue <uint8_t> soften_filter_res[NUM_DEXED];
SoftenValue <uint8_t> soften_filter_cut[NUM_DEXED];
elapsedMicros fill_audio_buffer;
//elapsedMicros fill_audio_buffer;
elapsedMillis control_rate;
uint8_t active_voices = 0;
#ifdef SHOW_CPU_LOAD_MSEC
elapsedMillis cpu_mem_millis;
#endif
uint32_t overload = 0;
uint32_t peak = 0;
config_t configuration;
bool eeprom_update_flag = false;
@ -152,6 +156,7 @@ bool eeprom_update_flag = false;
// Allocate the delay lines for left and right channels
short delayline[MOD_DELAY_SAMPLE_BUFFER];
#ifdef ENABLE_LCD_UI
/***********************************************************************
LCDMenuLib2
@ -188,8 +193,9 @@ void setup()
Serial.print(F("Creating MicroDexed engine "));
Serial.println(i, DEC);
MicroDexed[i] = new Dexed(SAMPLE_RATE);
}
}
microdexed1.setDexeds(NUM_DEXED, MicroDexed);
delay(220);
Serial.println(F("MicroDexed based on https://github.com/asb2m10/dexed"));
@ -394,11 +400,14 @@ void setup()
void loop()
{
#ifdef OLD
int16_t* audio_buffer; // pointer to AUDIO_BLOCK_SAMPLES * int16_t
const uint16_t audio_block_time_us = 1000000 / (SAMPLE_RATE / AUDIO_BLOCK_SAMPLES);
#endif
while (42 == 42)
{
//while (42 == 42)
//{
#ifdef OLD
// Main sound calculation
if (queue1.available() && fill_audio_buffer > audio_block_time_us - 10)
{
@ -422,6 +431,7 @@ void loop()
}
queue1.playBuffer();
}
#endif
// EEPROM update handling
if (autostore >= AUTOSTORE_MS && active_voices == 0 && eeprom_update_flag == true)
@ -504,11 +514,16 @@ void loop()
#if defined (DEBUG) && defined (SHOW_CPU_LOAD_MSEC)
if (cpu_mem_millis >= SHOW_CPU_LOAD_MSEC)
{
if (peak1.available())
{
if (peak1.read() > 0.99)
peak++;
}
cpu_mem_millis -= SHOW_CPU_LOAD_MSEC;
show_cpu_and_mem_usage();
}
#endif
}
//}
}
/******************************************************************************
@ -526,7 +541,7 @@ void handleNoteOff(byte inChannel, byte inNumber, byte inVelocity)
{
if (checkMidiChannel(inChannel))
{
MicroDexed[0]->keyup(inNumber);
MicroDexed[0]->keyup(inNumber);
}
}
@ -1139,9 +1154,9 @@ void show_cpu_and_mem_usage(void)
Serial.print(F(" MEM MAX: "));
Serial.print(AudioMemoryUsageMax(), DEC);
Serial.print(F(" RENDER_TIME_MAX: "));
Serial.print(render_time_max, DEC);
Serial.print(microdexed1.render_time_max, DEC);
Serial.print(F(" XRUN: "));
Serial.print(xrun, DEC);
Serial.print(microdexed1.xrun, DEC);
Serial.print(F(" OVERLOAD: "));
Serial.print(overload, DEC);
Serial.print(F(" PEAK: "));
@ -1153,7 +1168,7 @@ void show_cpu_and_mem_usage(void)
Serial.println();
AudioProcessorUsageMaxReset();
AudioMemoryUsageMaxReset();
render_time_max = 0;
microdexed1.render_time_max = 0;
}
#endif

@ -349,7 +349,7 @@ bool get_sysex_voice(File sysex, uint8_t voice_number, uint8_t* data)
return (false);
}
render_time_max = 0;
microdexed1.render_time_max = 0;
return (true);
}

@ -24,13 +24,15 @@
*/
#include "config.h"
#include "source_microdexed.h"
#ifndef DEXED_SYSEX_H_INCLUDED
#define DEXED_SYSEX_H_INCLUDED
extern bool sd_card_available;
extern Dexed* dexed;
extern uint16_t render_time_max;
extern AudioSourceMicroDexed microdexed1;
//extern uint16_t render_time_max;
extern uint8_t bank;
extern uint8_t voice;
extern char bank_name[BANK_NAME_LEN];

@ -0,0 +1,39 @@
#pragma once
#include "config.h"
#include "dexed.h"
#include <AudioStream.h>
class AudioSourceMicroDexed : public AudioStream {
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) {
};
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);
}
if (render_time > audio_block_time_us) // everything greater 2.9ms is a buffer underrun!
xrun++;
if (render_time > render_time_max)
render_time_max = render_time;
transmit(lblock, 0);
release(lblock);
};
private:
};
Loading…
Cancel
Save