@ -10,34 +10,47 @@
# include <SPI.h>
# include <SPI.h>
# include <SD.h>
# include <SD.h>
# include <SerialFlash.h>
# include <SerialFlash.h>
# include <QueueArray.h>
# include <MIDI.h>
# include <MIDI.h>
# include "dexed.h"
# include "dexed.h"
# define AUDIO_MEM 2
# define AUDIO_MEM 2
# define AUDIO_BUFFER_SIZE 128
# define SAMPLE_RATE 44100
# define SAMPLEAUDIO_BUFFER_SIZE 44100
//#define INIT_AUDIO_QUEUE 1
# define INIT_AUDIO_QUEUE 1
//#define SHOW_DEXED_TIMING 1
//#define SHOW_DEXED_TIMING 1
# define SHOW_XRUN 1
# define SHOW_XRUN 1
# define SHOW_CPU_LOAD_MSEC 5000
# define SHOW_CPU_LOAD_MSEC 5000
# define MAX_NOTES 11
# define MAX_NOTES 10
# define TEST_MIDI 1
# define TEST_MIDI 1
# define TEST_NOTE 40
# define TEST_NOTE 40
# define TEST_VEL 60
# define TEST_VEL 60
//#define ADD_EFFECT_CHORUS 1
// GUItool: begin automatically generated code
// GUItool: begin automatically generated code
AudioPlayQueue queue1 ; //xy=266,484
AudioPlayQueue queue1 ; //xy=84,294
AudioOutputI2S i2s1 ; //xy=739,486
AudioOutputI2S i2s1 ; //xy=961,276
# ifdef ADD_EFFECT_CHORUS
AudioEffectChorus chorus1 ; //xy=328,295
AudioConnection patchCord1 ( queue1 , chorus1 ) ;
AudioConnection patchCord2 ( chorus1 , 0 , i2s1 , 0 ) ;
AudioConnection patchCord3 ( chorus1 , 0 , i2s1 , 1 ) ;
# else
AudioConnection patchCord2 ( queue1 , 0 , i2s1 , 0 ) ;
AudioConnection patchCord2 ( queue1 , 0 , i2s1 , 0 ) ;
AudioConnection patchCord3 ( queue1 , 0 , i2s1 , 1 ) ;
AudioConnection patchCord3 ( queue1 , 0 , i2s1 , 1 ) ;
AudioControlSGTL5000 sgtl5000_1 ; //xy=384,610
# endif
AudioControlSGTL5000 sgtl5000_1 ; //xy=507,403
// GUItool: end automatically generated code
// GUItool: end automatically generated code
MIDI_CREATE_INSTANCE ( HardwareSerial , Serial1 , MIDI ) ;
MIDI_CREATE_INSTANCE ( HardwareSerial , Serial1 , MIDI ) ;
Dexed * dexed = new Dexed ( SAMPLEAUDIO_BUFFER_SIZ E ) ;
Dexed * dexed = new Dexed ( SAMPLE_RAT E ) ;
IntervalTimer sched ;
IntervalTimer sched ;
# ifdef ADD_EFFECT_CHORUS
// Number of samples in each delay line
# define CHORUS_DELAY_LENGTH (16*AUDIO_BLOCK_SAMPLES)
// Allocate the delay lines for left and right channels
short delayline [ CHORUS_DELAY_LENGTH ] ;
# endif
void setup ( )
void setup ( )
{
{
//while (!Serial) ; // wait for Arduino Serial Monitor
//while (!Serial) ; // wait for Arduino Serial Monitor
@ -68,7 +81,7 @@ void setup()
int16_t * audio_buffer = queue1 . getBuffer ( ) ;
int16_t * audio_buffer = queue1 . getBuffer ( ) ;
if ( audio_buffer ! = NULL )
if ( audio_buffer ! = NULL )
{
{
memset ( audio_buffer , 0 , sizeof ( int16_t ) * AUDIO_BUFFER_SIZE ) ;
memset ( audio_buffer , 0 , sizeof ( int16_t ) * AUDIO_BLOCK_SAMPLES ) ;
queue1 . playBuffer ( ) ;
queue1 . playBuffer ( ) ;
}
}
}
}
@ -77,8 +90,11 @@ void setup()
dexed - > activate ( ) ;
dexed - > activate ( ) ;
dexed - > setMaxNotes ( MAX_NOTES ) ;
dexed - > setMaxNotes ( MAX_NOTES ) ;
# ifdef TEST_MIDI
# ifdef ADD_EFFECT_CHORUS
chorus1 . begin ( delayline , CHORUS_DELAY_LENGTH , 8 ) ;
# endif
# ifdef TEST_MIDI
queue_midi_event ( 0x90 , TEST_NOTE , TEST_VEL ) ; // 1
queue_midi_event ( 0x90 , TEST_NOTE , TEST_VEL ) ; // 1
queue_midi_event ( 0x90 , TEST_NOTE + 5 , TEST_VEL ) ; // 2
queue_midi_event ( 0x90 , TEST_NOTE + 5 , TEST_VEL ) ; // 2
queue_midi_event ( 0x90 , TEST_NOTE + 8 , TEST_VEL ) ; // 3
queue_midi_event ( 0x90 , TEST_NOTE + 8 , TEST_VEL ) ; // 3
@ -100,6 +116,8 @@ void setup()
# ifdef SHOW_CPU_LOAD_MSEC
# ifdef SHOW_CPU_LOAD_MSEC
sched . begin ( cpu_and_mem_usage , SHOW_CPU_LOAD_MSEC * 1000 ) ;
sched . begin ( cpu_and_mem_usage , SHOW_CPU_LOAD_MSEC * 1000 ) ;
# endif
# endif
Serial . print ( F ( " AUDIO_BLOCK_SAMPLES= " ) ) ;
Serial . println ( AUDIO_BLOCK_SAMPLES ) ;
Serial . println ( F ( " setup end " ) ) ;
Serial . println ( F ( " setup end " ) ) ;
cpu_and_mem_usage ( ) ;
cpu_and_mem_usage ( ) ;
}
}
@ -127,7 +145,7 @@ void loop()
# if defined(SHOW_DEXED_TIMING) || defined(SHOW_XRUN)
# if defined(SHOW_DEXED_TIMING) || defined(SHOW_XRUN)
elapsedMicros t1 ;
elapsedMicros t1 ;
# endif
# endif
dexed - > GetSamples ( AUDIO_BUFFER_SIZE , audio_buffer ) ;
dexed - > GetSamples ( AUDIO_BLOCK_SAMPLES , audio_buffer ) ;
# ifdef SHOW_XRUN
# ifdef SHOW_XRUN
uint32_t t2 = t1 ;
uint32_t t2 = t1 ;
if ( t2 > 2900 )
if ( t2 > 2900 )
@ -161,4 +179,3 @@ void cpu_and_mem_usage(void)
AudioMemoryUsageMaxReset ( ) ;
AudioMemoryUsageMaxReset ( ) ;
}
}
# endif
# endif