@@ -109,6 +109,10 @@ void loop() { | |||
Serial.println("Triangle"); | |||
break; | |||
case WAVEFORM_TRIANGLE: | |||
current_waveform = WAVEFORM_TRIANGLE_VARIABLE; | |||
Serial.println("Variable Triangle"); | |||
break; | |||
case WAVEFORM_TRIANGLE_VARIABLE: | |||
current_waveform = WAVEFORM_ARBITRARY; | |||
Serial.println("Arbitary Waveform"); | |||
break; |
@@ -2015,6 +2015,7 @@ The actual packets are taken | |||
<li><span class=literal>WAVEFORM_SAWTOOTH_REVERSE</span></li> | |||
<li><span class=literal>WAVEFORM_SQUARE</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_PULSE</span></li> | |||
<li><span class=literal>WAVEFORM_SAMPLE_HOLD</span></li> |
@@ -223,6 +223,7 @@ WAVEFORM_ARBITRARY LITERAL1 | |||
WAVEFORM_PULSE LITERAL1 | |||
WAVEFORM_SAWTOOTH_REVERSE LITERAL1 | |||
WAVEFORM_SAMPLE_HOLD LITERAL1 | |||
WAVEFORM_TRIANGLE_VARIABLE LITERAL1 | |||
AUDIO_MEMORY_23LC1024 LITERAL1 | |||
AUDIO_MEMORY_MEMORYBOARD LITERAL1 |
@@ -124,6 +124,26 @@ void AudioSynthWaveform::update(void) | |||
} | |||
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: | |||
magnitude15 = signed_saturate_rshift(magnitude, 16, 1); | |||
for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) { |
@@ -37,15 +37,15 @@ extern const int16_t AudioWaveformSine[257]; | |||
} | |||
#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 | |||
{ |