@@ -23,6 +23,8 @@ AudioPlaySdRaw KEYWORD2 | |||
AudioPlaySdWav KEYWORD2 | |||
AudioSynthToneSweep KEYWORD2 | |||
AudioSynthWaveform KEYWORD2 | |||
AudioSynthWaveformSine KEYWORD2 | |||
AudioSynthWaveformSineModulated KEYWORD2 | |||
isPlaying KEYWORD2 | |||
positionMillis KEYWORD2 | |||
lengthMillis KEYWORD2 |
@@ -57,7 +57,8 @@ void AudioSynthWaveformSine::update(void) | |||
scale = (ph >> 8) & 0xFFFF; | |||
val2 *= scale; | |||
val1 *= 0xFFFF - scale; | |||
block->data[i] = (val1 + val2) >> 16; | |||
//block->data[i] = (((val1 + val2) >> 16) * magnitude) >> 16; | |||
block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude); | |||
ph += inc; | |||
} | |||
phase = ph; | |||
@@ -114,7 +115,8 @@ void AudioSynthWaveformSineModulated::update(void) | |||
scale = (ph >> 8) & 0xFFFF; | |||
val2 *= scale; | |||
val1 *= 0xFFFF - scale; | |||
block->data[i] = (val1 + val2) >> 16; | |||
//block->data[i] = (((val1 + val2) >> 16) * magnitude) >> 16; | |||
block->data[i] = multiply_32x32_rshift32(val1 + val2, magnitude); | |||
// -32768 = no phase increment | |||
// 32767 = double phase increment | |||
mod = modinput->data[i]; |
@@ -30,26 +30,36 @@ | |||
class AudioSynthWaveformSine : public AudioStream | |||
{ | |||
public: | |||
AudioSynthWaveformSine() : AudioStream(0, NULL) {} | |||
AudioSynthWaveformSine() : AudioStream(0, NULL), magnitude(16384) {} | |||
void frequency(float freq); | |||
//void amplitude(q15 n); | |||
void amplitude(float n) { | |||
if (n < 0) n = 0; | |||
else if (n > 1.0) n = 1.0; | |||
magnitude = n * 65536.0; | |||
} | |||
virtual void update(void); | |||
private: | |||
uint32_t phase; | |||
uint32_t phase_increment; | |||
int32_t magnitude; | |||
}; | |||
class AudioSynthWaveformSineModulated : public AudioStream | |||
{ | |||
public: | |||
AudioSynthWaveformSineModulated() : AudioStream(1, inputQueueArray) {} | |||
AudioSynthWaveformSineModulated() : AudioStream(1, inputQueueArray), magnitude(16384) {} | |||
void frequency(float freq); | |||
//void amplitude(q15 n); | |||
void amplitude(float n) { | |||
if (n < 0) n = 0; | |||
else if (n > 1.0) n = 1.0; | |||
magnitude = n * 65536.0; | |||
} | |||
virtual void update(void); | |||
private: | |||
uint32_t phase; | |||
uint32_t phase_increment; | |||
audio_block_t *inputQueueArray[1]; | |||
int32_t magnitude; | |||
}; | |||