Serial.println("Triangle"); | Serial.println("Triangle"); | ||||
break; | break; | ||||
case WAVEFORM_TRIANGLE: | case WAVEFORM_TRIANGLE: | ||||
current_waveform = WAVEFORM_TRIANGLE_VARIABLE; | |||||
Serial.println("Variable Triangle"); | |||||
break; | |||||
case WAVEFORM_TRIANGLE_VARIABLE: | |||||
current_waveform = WAVEFORM_ARBITRARY; | current_waveform = WAVEFORM_ARBITRARY; | ||||
Serial.println("Arbitary Waveform"); | Serial.println("Arbitary Waveform"); | ||||
break; | break; |
<li><span class=literal>WAVEFORM_SAWTOOTH_REVERSE</span></li> | <li><span class=literal>WAVEFORM_SAWTOOTH_REVERSE</span></li> | ||||
<li><span class=literal>WAVEFORM_SQUARE</span></li> | <li><span class=literal>WAVEFORM_SQUARE</span></li> | ||||
<li><span class=literal>WAVEFORM_TRIANGLE</span></li> | <li><span class=literal>WAVEFORM_TRIANGLE</span></li> | ||||
<li><span class=literal>WAVEFORM_TRIANGLE_VARIABLE</span></li> | |||||
<li><span class=literal>WAVEFORM_ARBITRARY</span></li> | <li><span class=literal>WAVEFORM_ARBITRARY</span></li> | ||||
<li><span class=literal>WAVEFORM_PULSE</span></li> | <li><span class=literal>WAVEFORM_PULSE</span></li> | ||||
<li><span class=literal>WAVEFORM_SAMPLE_HOLD</span></li> | <li><span class=literal>WAVEFORM_SAMPLE_HOLD</span></li> |
WAVEFORM_PULSE LITERAL1 | WAVEFORM_PULSE LITERAL1 | ||||
WAVEFORM_SAWTOOTH_REVERSE LITERAL1 | WAVEFORM_SAWTOOTH_REVERSE LITERAL1 | ||||
WAVEFORM_SAMPLE_HOLD LITERAL1 | WAVEFORM_SAMPLE_HOLD LITERAL1 | ||||
WAVEFORM_TRIANGLE_VARIABLE LITERAL1 | |||||
AUDIO_MEMORY_23LC1024 LITERAL1 | AUDIO_MEMORY_23LC1024 LITERAL1 | ||||
AUDIO_MEMORY_MEMORYBOARD LITERAL1 | AUDIO_MEMORY_MEMORYBOARD LITERAL1 |
} | } | ||||
break; | break; | ||||
case WAVEFORM_TRIANGLE_VARIABLE: | |||||
do { | |||||
uint32_t rise = 0xFFFFFFFF / (pulse_width >> 16); | |||||
uint32_t fall = 0xFFFFFFFF / (0xFFFF - (pulse_width >> 16)); | |||||
for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) { | |||||
if (ph < pulse_width/2) { | |||||
uint32_t n = (ph >> 16) * rise; | |||||
*bp++ = ((n >> 16) * magnitude) >> 16; | |||||
} else if (ph < 0xFFFFFFFF - pulse_width/2) { | |||||
uint32_t n = 0x7FFFFFFF - (((ph - pulse_width/2) >> 16) * fall); | |||||
*bp++ = ((n >> 16) * magnitude) >> 16; | |||||
} else { | |||||
uint32_t n = ((ph + pulse_width/2) >> 16) * rise + 0x80000000; | |||||
*bp++ = ((n >> 16) * magnitude) >> 16; | |||||
} | |||||
ph += inc; | |||||
} | |||||
} while (0); | |||||
break; | |||||
case WAVEFORM_PULSE: | case WAVEFORM_PULSE: | ||||
magnitude15 = signed_saturate_rshift(magnitude, 16, 1); | magnitude15 = signed_saturate_rshift(magnitude, 16, 1); | ||||
for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) { | for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) { |
} | } | ||||
#define WAVEFORM_SINE 0 | |||||
#define WAVEFORM_SAWTOOTH 1 | |||||
#define WAVEFORM_SQUARE 2 | |||||
#define WAVEFORM_TRIANGLE 3 | |||||
#define WAVEFORM_ARBITRARY 4 | |||||
#define WAVEFORM_PULSE 5 | |||||
#define WAVEFORM_SAWTOOTH_REVERSE 6 | |||||
#define WAVEFORM_SAMPLE_HOLD 7 | |||||
#define WAVEFORM_SINE 0 | |||||
#define WAVEFORM_SAWTOOTH 1 | |||||
#define WAVEFORM_SQUARE 2 | |||||
#define WAVEFORM_TRIANGLE 3 | |||||
#define WAVEFORM_ARBITRARY 4 | |||||
#define WAVEFORM_PULSE 5 | |||||
#define WAVEFORM_SAWTOOTH_REVERSE 6 | |||||
#define WAVEFORM_SAMPLE_HOLD 7 | |||||
#define WAVEFORM_TRIANGLE_VARIABLE 8 | |||||
class AudioSynthWaveform : public AudioStream | class AudioSynthWaveform : public AudioStream | ||||
{ | { |