Skip to content

Commit 5c981f0

Browse files
committed
Use MICROPY_FLOAT_CONST and MICROPY_FLOAT_C_FUN within floating point calculations.
1 parent 89f2ae1 commit 5c981f0

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

shared-module/audiofilters/Distortion.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ void common_hal_audiofilters_distortion_stop(audiofilters_distortion_obj_t *self
193193
}
194194

195195
static mp_float_t db_to_linear(mp_float_t value) {
196-
return expf(value * MICROPY_FLOAT_CONST(0.11512925464970228420089957273422));
196+
return MICROPY_FLOAT_C_FUN(exp)(value * MICROPY_FLOAT_CONST(0.11512925464970228420089957273422));
197197
}
198198

199199
audioio_get_buffer_result_t audiofilters_distortion_get_buffer(audiofilters_distortion_obj_t *self, bool single_channel_output, uint8_t channel,
@@ -286,22 +286,23 @@ audioio_get_buffer_result_t audiofilters_distortion_get_buffer(audiofilters_dist
286286
int32_t word = sample_word * pre_gain;
287287
switch (self->mode) {
288288
case DISTORTION_MODE_CLIP: {
289-
mp_float_t word_sign = word < 0 ? -1.0f : 1.0f;
290-
word = powf(fabs(word / 32768.0), 1.0001 - drive) * word_sign * 32767.0;
289+
mp_float_t word_sign = word < 0 ? MICROPY_FLOAT_CONST(-1.0) : MICROPY_FLOAT_CONST(1.0);
290+
word = MICROPY_FLOAT_C_FUN(pow)(MICROPY_FLOAT_C_FUN(fabs)(word / MICROPY_FLOAT_CONST(32768.0)), MICROPY_FLOAT_CONST(1.0001) - drive) * word_sign * MICROPY_FLOAT_CONST(32767.0);
291291
word = MIN(MAX(word, -32767), 32768); // Hard clip
292292
} break;
293293
case DISTORTION_MODE_LOFI: {
294294
word = word & word_mask;
295295
} break;
296296
case DISTORTION_MODE_OVERDRIVE: {
297-
mp_float_t x = word / 32768.0 * 0.686306;
298-
mp_float_t z = 1 + expf(sqrtf(fabs(x)) * -0.75);
299-
word = (expf(x) - expf(-x * z)) / (expf(x) + expf(-x)) * 32767.0;
297+
mp_float_t x = word / MICROPY_FLOAT_CONST(32768.0) * MICROPY_FLOAT_CONST(0.686306);
298+
mp_float_t z = MICROPY_FLOAT_CONST(1.0) + MICROPY_FLOAT_C_FUN(exp)(MICROPY_FLOAT_C_FUN(sqrt)(MICROPY_FLOAT_C_FUN(fabs)(x)) * MICROPY_FLOAT_CONST(-0.75));
299+
mp_float_t exp_x = MICROPY_FLOAT_C_FUN(exp)(x);
300+
word = (exp_x - MICROPY_FLOAT_C_FUN(exp)(-x * z)) / (exp_x + MICROPY_FLOAT_C_FUN(exp)(-x)) * MICROPY_FLOAT_CONST(32767.0);
300301
} break;
301302
case DISTORTION_MODE_WAVESHAPE: {
302-
mp_float_t x = word / 32768.0;
303-
mp_float_t k = 2 * drive / (1.00001 - drive);
304-
word = (1.0 + k) * x / (1.0 + k * fabsf(x)) * 32767.0;
303+
mp_float_t x = word / MICROPY_FLOAT_CONST(32768.0);
304+
mp_float_t k = MICROPY_FLOAT_CONST(2.0) * drive / (MICROPY_FLOAT_CONST(1.00001) - drive);
305+
word = (MICROPY_FLOAT_CONST(1.0) + k) * x / (MICROPY_FLOAT_CONST(1.0) + k * MICROPY_FLOAT_C_FUN(fabs)(x)) * MICROPY_FLOAT_CONST(32767.0);
305306
} break;
306307
}
307308
word = word * post_gain;

0 commit comments

Comments
 (0)