51 uint32_t i, ph, index, index2, scale;
68 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
72 scale = (ph >> 8) & 0xFFFF;
74 val1 *= 0x10000 - scale;
75 *bp++ = multiply_32x32_rshift32(val1 + val2,
magnitude);
80 case WAVEFORM_ARBITRARY:
87 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
90 if (index2 >= 2048) index2 = 0;
93 scale = (ph >> 8) & 0xFFFF;
95 val1 *= 0x10000 - scale;
96 *bp++ = multiply_32x32_rshift32(val1 + val2,
magnitude);
101 case WAVEFORM_SQUARE:
102 magnitude15 = signed_saturate_rshift(
magnitude, 16, 1);
103 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
104 if (ph & 0x80000000) {
105 *bp++ = -magnitude15;
113 case WAVEFORM_BANDLIMIT_SQUARE:
114 for (
int i = 0 ; i < AUDIO_BLOCK_SAMPLES ; i++)
116 uint32_t new_ph = ph + inc ;
123 case WAVEFORM_SAWTOOTH:
124 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
125 *bp++ = signed_multiply_32x16t(
magnitude, ph);
130 case WAVEFORM_SAWTOOTH_REVERSE:
131 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
132 *bp++ = signed_multiply_32x16t(0xFFFFFFFFu -
magnitude, ph);
137 case WAVEFORM_BANDLIMIT_SAWTOOTH:
138 case WAVEFORM_BANDLIMIT_SAWTOOTH_REVERSE:
139 for (i = 0 ; i < AUDIO_BLOCK_SAMPLES; i++)
141 uint32_t new_ph = ph + inc ;
143 if (
tone_type == WAVEFORM_BANDLIMIT_SAWTOOTH_REVERSE)
151 case WAVEFORM_TRIANGLE:
152 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
153 uint32_t phtop = ph >> 30;
154 if (phtop == 1 || phtop == 2) {
155 *bp++ = ((0xFFFF - (ph >> 15)) *
magnitude) >> 16;
157 *bp++ = (((int32_t)ph >> 15) *
magnitude) >> 16;
163 case WAVEFORM_TRIANGLE_VARIABLE:
166 uint32_t fall = 0xFFFFFFFF / (0xFFFF - (
pulse_width >> 16));
167 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
169 uint32_t n = (ph >> 16) * rise;
172 uint32_t n = 0x7FFFFFFF - (((ph -
pulse_width/2) >> 16) * fall);
173 *bp++ = (((int32_t)n >> 16) *
magnitude) >> 16;
175 uint32_t n = ((ph +
pulse_width/2) >> 16) * rise + 0x80000000;
176 *bp++ = (((int32_t)n >> 16) *
magnitude) >> 16;
184 magnitude15 = signed_saturate_rshift(
magnitude, 16, 1);
185 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
189 *bp++ = -magnitude15;
195 case WAVEFORM_BANDLIMIT_PULSE:
196 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++)
198 int32_t new_ph = ph + inc ;
200 *bp++ = (int16_t) ((val *
magnitude) >> 16) ;
205 case WAVEFORM_SAMPLE_HOLD:
206 for (i=0; i < AUDIO_BLOCK_SAMPLES; i++) {
208 uint32_t newph = ph + inc;
220 end = bp + AUDIO_BLOCK_SAMPLES;
223 *bp++ = signed_saturate_rshift(val1 +
tone_offset, 16, 0);
static void release(audio_block_t *block)
static audio_block_t * allocate(void)
void transmit(audio_block_t *block, unsigned char index=0)
int16_t data[AUDIO_BLOCK_SAMPLES]