Skip to content

Commit 394b22e

Browse files
committed
Allow integers for tap values.
1 parent 63b0a24 commit 394b22e

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

shared-module/audiodelays/MultiTapDelay.c

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,24 @@ mp_obj_t common_hal_audiodelays_multi_tap_delay_get_taps(audiodelays_multi_tap_d
163163
}
164164
}
165165

166+
void validate_tap_value(mp_obj_t item, qstr arg_name) {
167+
if (mp_obj_is_small_int(item)) {
168+
mp_arg_validate_int_range(mp_obj_get_int(item), 0, 1, arg_name);
169+
} else {
170+
mp_arg_validate_obj_float_range(item, 0, 1, arg_name);
171+
}
172+
}
173+
174+
mp_float_t get_tap_value(mp_obj_t item) {
175+
mp_float_t value;
176+
if (mp_obj_is_small_int(item)) {
177+
value = (mp_float_t)mp_obj_get_int(item);
178+
} else {
179+
value = mp_obj_float_get(item);
180+
}
181+
return value;
182+
}
183+
166184
void common_hal_audiodelays_multi_tap_delay_set_taps(audiodelays_multi_tap_delay_obj_t *self, mp_obj_t taps_in) {
167185
if (taps_in != mp_const_none && !MP_OBJ_TYPE_HAS_SLOT(mp_obj_get_type(taps_in), iter)) {
168186
mp_raise_TypeError_varg(
@@ -193,10 +211,10 @@ void common_hal_audiodelays_multi_tap_delay_set_taps(audiodelays_multi_tap_delay
193211
mp_arg_validate_length(len1, 2, MP_QSTR_items);
194212

195213
for (size_t j = 0; j < len1; j++) {
196-
mp_arg_validate_obj_float_range(items1[j], 0, 1, j ? MP_QSTR_level : MP_QSTR_position);
214+
validate_tap_value(items1[j], j ? MP_QSTR_level : MP_QSTR_position);
197215
}
198-
} else if (mp_obj_is_float(item)) {
199-
mp_arg_validate_obj_float_range(item, 0, 1, MP_QSTR_position);
216+
} else if (mp_obj_is_float(item) || mp_obj_is_small_int(item)) {
217+
validate_tap_value(item, MP_QSTR_position);
200218
} else {
201219
mp_raise_TypeError_varg(
202220
MP_ERROR_TEXT("%q in %q must be of type %q or %q, not %q"),
@@ -226,15 +244,16 @@ void common_hal_audiodelays_multi_tap_delay_set_taps(audiodelays_multi_tap_delay
226244

227245
for (i = 0; i < len; i++) {
228246
mp_obj_t item = items[i];
229-
if (mp_obj_is_float(item)) {
230-
self->tap_positions[i] = mp_obj_float_get(item);
231-
self->tap_levels[i] = MICROPY_FLOAT_CONST(1.0);
232-
} else if (mp_obj_is_tuple_compatible(item)) {
247+
if (mp_obj_is_tuple_compatible(item)) {
233248
size_t len1;
234249
mp_obj_t *items1;
235250
mp_obj_tuple_get(item, &len1, &items1);
236-
self->tap_positions[i] = mp_obj_float_get(items1[0]);
237-
self->tap_levels[i] = mp_obj_float_get(items1[1]);
251+
252+
self->tap_positions[i] = get_tap_value(items1[0]);
253+
self->tap_levels[i] = get_tap_value(items1[1]);
254+
} else {
255+
self->tap_positions[i] = get_tap_value(item);
256+
self->tap_levels[i] = MICROPY_FLOAT_CONST(1.0);
238257
}
239258
}
240259

shared-module/audiodelays/MultiTapDelay.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ typedef struct {
4545
mp_obj_t sample;
4646
} audiodelays_multi_tap_delay_obj_t;
4747

48+
void validate_tap_value(mp_obj_t item, qstr arg_name);
49+
mp_float_t get_tap_value(mp_obj_t item);
4850
void recalculate_tap_offsets(audiodelays_multi_tap_delay_obj_t *self);
4951

5052
void audiodelays_multi_tap_delay_reset_buffer(audiodelays_multi_tap_delay_obj_t *self,

0 commit comments

Comments
 (0)