pull/44/head
Holger Wirtz 4 years ago
parent 33e33e9a9a
commit 07f232fd30
  1. 28
      MicroDexed.ino
  2. 1
      UI.hpp
  3. 2
      config.h
  4. 1
      dexed_sd.h
  5. 84
      synth_dexed.h

@ -24,12 +24,12 @@
#include <limits.h> #include <limits.h>
#include "config.h" #include "config.h"
#include <Audio.h> #include <Audio.h>
#include <OpenAudio_ArduinoLibrary.h>
#include <Wire.h> #include <Wire.h>
#include <MIDI.h> #include <MIDI.h>
#include <EEPROM.h> #include <EEPROM.h>
#include <SD.h> #include <SD.h>
#include <SPI.h> #include <SPI.h>
#include "OpenAudio_ArduinoLibrary.h"
#include "midi_devices.hpp" #include "midi_devices.hpp"
#include "synth_dexed.h" #include "synth_dexed.h"
#include "dexed_sd.h" #include "dexed_sd.h"
@ -44,6 +44,7 @@
#include "UI.hpp" #include "UI.hpp"
// Audio engines // Audio engines
//AudioSynthDexed* MicroDexed[NUM_DEXED];
AudioSynthDexed_F32* MicroDexed[NUM_DEXED]; AudioSynthDexed_F32* MicroDexed[NUM_DEXED];
AudioConvert_F32toI16* convertf32toi16[NUM_DEXED]; AudioConvert_F32toI16* convertf32toi16[NUM_DEXED];
#if defined(USE_FX) #if defined(USE_FX)
@ -178,6 +179,7 @@ AudioConnection * dynamicConnections[NUM_DEXED * 5];
#endif #endif
void create_audio_engine_chain(uint8_t instance_id) void create_audio_engine_chain(uint8_t instance_id)
{ {
//MicroDexed[instance_id] = new AudioSynthDexed(SAMPLE_RATE);
MicroDexed[instance_id] = new AudioSynthDexed_F32(SAMPLE_RATE); MicroDexed[instance_id] = new AudioSynthDexed_F32(SAMPLE_RATE);
convertf32toi16[instance_id] = new AudioConvert_F32toI16(); convertf32toi16[instance_id] = new AudioConvert_F32toI16();
mono2stereo[instance_id] = new AudioEffectMonoStereo(); mono2stereo[instance_id] = new AudioEffectMonoStereo();
@ -193,15 +195,15 @@ void create_audio_engine_chain(uint8_t instance_id)
delay_mixer[instance_id] = new AudioMixer4(); delay_mixer[instance_id] = new AudioMixer4();
#endif #endif
//dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, microdexed_peak_mixer, instance_id); dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, microdexed_peak_mixer, instance_id);
dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, *convertf32toi16[instance_id], 0); //dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, *convertf32toi16[instance_id], 0);
dynamicConnections[nDynamic++] = new AudioConnection(*convertf32toi16[instance_id], 0, microdexed_peak_mixer, instance_id); //dynamicConnections[nDynamic++] = new AudioConnection(*convertf32toi16[instance_id], 0, microdexed_peak_mixer, instance_id);
#if defined(USE_FX) #if defined(USE_FX)
//dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, *chorus_mixer[instance_id], 0); dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, *chorus_mixer[instance_id], 0);
//dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, *modchorus[instance_id], 0); dynamicConnections[nDynamic++] = new AudioConnection(*MicroDexed[instance_id], 0, *modchorus[instance_id], 0);
dynamicConnections[nDynamic++] = new AudioConnection(*convertf32toi16[instance_id], 0, *chorus_mixer[instance_id], 0); //dynamicConnections[nDynamic++] = new AudioConnection(*convertf32toi16[instance_id], 0, *chorus_mixer[instance_id], 0);
dynamicConnections[nDynamic++] = new AudioConnection(*convertf32toi16[instance_id], 0, *modchorus[instance_id], 0); //dynamicConnections[nDynamic++] = new AudioConnection(*convertf32toi16[instance_id], 0, *modchorus[instance_id], 0);
#if MOD_FILTER_OUTPUT != MOD_NO_FILTER_OUTPUT #if MOD_FILTER_OUTPUT != MOD_NO_FILTER_OUTPUT
dynamicConnections[nDynamic++] = new AudioConnection(*chorus_modulator[instance_id], 0, *modchorus_filter[instance_id], 0); dynamicConnections[nDynamic++] = new AudioConnection(*chorus_modulator[instance_id], 0, *modchorus_filter[instance_id], 0);
dynamicConnections[nDynamic++] = new AudioConnection(*modchorus_filter[instance_id], 0, *modchorus[instance_id], 1); dynamicConnections[nDynamic++] = new AudioConnection(*modchorus_filter[instance_id], 0, *modchorus[instance_id], 1);
@ -283,11 +285,6 @@ extern void getNoteName(char* noteName, uint8_t noteNumber);
***********************************************************************/ ***********************************************************************/
void setup() void setup()
{ {
// Start audio system
//AudioNoInterrupts();
AudioMemory(AUDIO_MEM);
AudioMemory_F32(AUDIO_MEM_F32);
#ifdef DISPLAY_LCD_SPI #ifdef DISPLAY_LCD_SPI
pinMode(SDCARD_CS_PIN, OUTPUT); pinMode(SDCARD_CS_PIN, OUTPUT);
pinMode(U8X8_CS_PIN, OUTPUT); pinMode(U8X8_CS_PIN, OUTPUT);
@ -308,7 +305,6 @@ void setup()
#endif #endif
#endif #endif
#ifdef DEBUG #ifdef DEBUG
generate_version_string(version_string, sizeof(version_string)); generate_version_string(version_string, sizeof(version_string));
@ -330,6 +326,10 @@ void setup()
setup_midi_devices(); setup_midi_devices();
// Start audio system
AudioMemory_F32(AUDIO_MEM_F32, {44117.0, 128});
AudioMemory(AUDIO_MEM);
#if defined(TEENSY_AUDIO_BOARD) #if defined(TEENSY_AUDIO_BOARD)
sgtl5000_1.enable(); sgtl5000_1.enable();
sgtl5000_1.lineOutLevel(SGTL5000_LINEOUT_LEVEL); sgtl5000_1.lineOutLevel(SGTL5000_LINEOUT_LEVEL);

@ -70,6 +70,7 @@ extern void change_disp_sd(bool d);
#endif #endif
extern AudioControlSGTL5000 sgtl5000_1; extern AudioControlSGTL5000 sgtl5000_1;
//extern AudioSynthDexed* MicroDexed[NUM_DEXED];
extern AudioSynthDexed_F32* MicroDexed[NUM_DEXED]; extern AudioSynthDexed_F32* MicroDexed[NUM_DEXED];
#if defined(USE_FX) #if defined(USE_FX)
extern AudioSynthWaveform* chorus_modulator[NUM_DEXED]; extern AudioSynthWaveform* chorus_modulator[NUM_DEXED];

@ -131,7 +131,7 @@
//#if AUDIO_BLOCK_SAMPLES == 64 //#if AUDIO_BLOCK_SAMPLES == 64
//#define AUDIO_MEM 256 //#define AUDIO_MEM 256
//#else //#else
#define AUDIO_MEM 300 #define AUDIO_MEM 128
#define AUDIO_MEM_F32 10 #define AUDIO_MEM_F32 10
//#endif //#endif

@ -30,6 +30,7 @@
#define DEXED_SYSEX_H_INCLUDED #define DEXED_SYSEX_H_INCLUDED
extern uint8_t sd_card; extern uint8_t sd_card;
//extern AudioSynthDexed* MicroDexed[NUM_DEXED];
extern AudioSynthDexed_F32* MicroDexed[NUM_DEXED]; extern AudioSynthDexed_F32* MicroDexed[NUM_DEXED];
extern void show_patch(uint8_t instance_id); extern void show_patch(uint8_t instance_id);

@ -4,7 +4,7 @@
#include "config.h" #include "config.h"
/***************************************************** /*****************************************************
CODE; orig_code/synth.h CODE: orig_code/synth.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2012 Google Inc. Copyright 2012 Google Inc.
@ -78,7 +78,7 @@ inline static T max(const T& a, const T& b) {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/aligned_buf.h CODE: orig_code/aligned_buf.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2013 Google Inc. Copyright 2013 Google Inc.
@ -113,7 +113,7 @@ class AlignedBuf {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/sin.h CODE: orig_code/sin.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2012 Google Inc. Copyright 2012 Google Inc.
@ -180,7 +180,7 @@ int32_t Sin::lookup(int32_t phase) {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/exp2.h CODE: orig_code/exp2.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2012 Google Inc. Copyright 2012 Google Inc.
@ -265,7 +265,7 @@ int32_t Tanh::lookup(int32_t x) {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/fast_log.h CODE: orig_code/fast_log.h
*****************************************************/ *****************************************************/
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
https://community.arm.com/tools/f/discussions/4292/cmsis-dsp-new-functionality-proposal/22621#22621 https://community.arm.com/tools/f/discussions/4292/cmsis-dsp-new-functionality-proposal/22621#22621
@ -320,7 +320,7 @@ inline float dbToUnit(float db) {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/freqlut.h CODE: orig_code/freqlut.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2012 Google Inc. Copyright 2012 Google Inc.
@ -346,7 +346,7 @@ class Freqlut {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/lfo.h CODE: orig_code/lfo.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2013 Google Inc. Copyright 2013 Google Inc.
@ -394,7 +394,7 @@ class Lfo {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/env.h CODE: orig_code/env.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2017 Pascal Gauthier. Copyright 2017 Pascal Gauthier.
@ -474,7 +474,7 @@ class Env {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/pitchenv.h CODE: orig_code/pitchenv.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2013 Google Inc. Copyright 2013 Google Inc.
@ -527,7 +527,7 @@ extern const int8_t pitchenv_tab[];
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/controllers.h CODE: orig_code/controllers.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2013 Google Inc. Copyright 2013 Google Inc.
@ -666,7 +666,7 @@ class Controllers {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/PluginFx.h CODE: orig_code/PluginFx.h
*****************************************************/ *****************************************************/
/** /**
@ -740,7 +740,7 @@ class PluginFx {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/fm_op_kernel.h CODE: orig_code/fm_op_kernel.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2012 Google Inc. Copyright 2012 Google Inc.
@ -788,7 +788,7 @@ class FmOpKernel {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/fm_core.h CODE: orig_code/fm_core.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2012 Google Inc. Copyright 2012 Google Inc.
@ -841,7 +841,7 @@ class FmCore {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/dx7note.h CODE: orig_code/dx7note.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2016-2017 Pascal Gauthier. Copyright 2016-2017 Pascal Gauthier.
@ -920,7 +920,7 @@ class Dx7Note {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/dexed.h CODE: orig_code/dexed.h
*****************************************************/ *****************************************************/
/* /*
MicroDexed MicroDexed
@ -1139,7 +1139,7 @@ class Dexed
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/porta.h CODE: orig_code/porta.h
*****************************************************/ *****************************************************/
/* /*
Copyright 2019 Jean Pierre Cimalando. Copyright 2019 Jean Pierre Cimalando.
@ -1166,8 +1166,54 @@ struct Porta {
//===================================================== //=====================================================
/***************************************************** /*****************************************************
CODE; orig_code/source_microdexed.h CODE: orig_code/synth_microdexed.h
*****************************************************/ *****************************************************/
class AudioSynthDexed : 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;
AudioSynthDexed(uint16_t sample_rate) : AudioStream(0, NULL), Dexed(sample_rate) { };
void update(void)
{
if (in_update == true)
{
xrun++;
return;
}
else
in_update = true;
elapsedMicros render_time;
audio_block_t *lblock;
lblock = allocate();
if (!lblock)
{
in_update = false;
return;
}
getSamples(AUDIO_BLOCK_SAMPLES, lblock->data);
if (render_time > audio_block_time_us) // everything greater audio_block_time_us (2.9ms for buffer size of 128) is a buffer underrun!
xrun++;
if (render_time > render_time_max)
render_time_max = render_time;
transmit(lblock, 0);
release(lblock);
in_update = false;
};
private:
volatile bool in_update = false;
};
class AudioSynthDexed_F32 : public AudioStream_F32, public Dexed { class AudioSynthDexed_F32 : public AudioStream_F32, public Dexed {
public: public:
@ -1206,8 +1252,8 @@ class AudioSynthDexed_F32 : public AudioStream_F32, public Dexed {
if (render_time > render_time_max) if (render_time > render_time_max)
render_time_max = render_time; render_time_max = render_time;
AudioStream_F32::transmit(lblock, 0); transmit(lblock, 0);
AudioStream_F32::release(lblock); release(lblock);
in_update = false; in_update = false;
}; };

Loading…
Cancel
Save