| @@ -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; | |||
| }; | |||