Skip to content

Commit 99fcfc9

Browse files
committed
codal_port/modaudio: Make AudioFrame add and mult helpers public.
Signed-off-by: Damien George <[email protected]>
1 parent a78d9ad commit 99fcfc9

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/codal_port/modaudio.c

+11-10
Original file line numberDiff line numberDiff line change
@@ -428,16 +428,15 @@ static mp_int_t audio_frame_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufin
428428
return 0;
429429
}
430430

431-
static void add_into(microbit_audio_frame_obj_t *self, microbit_audio_frame_obj_t *other, bool add) {
431+
void microbit_audio_data_add_inplace(uint8_t *lhs_data, const uint8_t *rhs_data, size_t size, bool add) {
432432
int mult = add ? 1 : -1;
433-
size_t size = MIN(self->alloc_size, other->alloc_size);
434433
for (int i = 0; i < size; i++) {
435-
unsigned val = (int)self->data[i] + mult*(other->data[i]-128);
434+
unsigned val = (int)lhs_data[i] + mult*(rhs_data[i]-128);
436435
// Clamp to 0-255
437436
if (val > 255) {
438437
val = (1-(val>>31))*255;
439438
}
440-
self->data[i] = val;
439+
lhs_data[i] = val;
441440
}
442441
}
443442

@@ -488,14 +487,14 @@ int32_t float_to_fixed(float f, uint32_t scale) {
488487
return result;
489488
}
490489

491-
static void mult(microbit_audio_frame_obj_t *self, float f) {
490+
void microbit_audio_data_mult_inplace(uint8_t *data, size_t size, float f) {
492491
int scaled = float_to_fixed(f, 15);
493-
for (int i = 0; i < self->alloc_size; i++) {
494-
unsigned val = ((((int)self->data[i]-128) * scaled) >> 15)+128;
492+
for (int i = 0; i < size; i++) {
493+
unsigned val = ((((int)data[i]-128) * scaled) >> 15)+128;
495494
if (val > 255) {
496495
val = (1-(val>>31))*255;
497496
}
498-
self->data[i] = val;
497+
data[i] = val;
499498
}
500499
}
501500

@@ -513,12 +512,14 @@ static mp_obj_t audio_frame_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj
513512
if (mp_obj_get_type(rhs_in) != &microbit_audio_frame_type) {
514513
return MP_OBJ_NULL; // op not supported
515514
}
516-
add_into(lhs, (microbit_audio_frame_obj_t *)rhs_in, op==MP_BINARY_OP_ADD||op==MP_BINARY_OP_INPLACE_ADD);
515+
microbit_audio_frame_obj_t *rhs = MP_OBJ_TO_PTR(rhs_in);
516+
size_t size = MIN(lhs->alloc_size, rhs->alloc_size);
517+
microbit_audio_data_add_inplace(lhs->data, rhs->data, size, op == MP_BINARY_OP_ADD || op == MP_BINARY_OP_INPLACE_ADD);
517518
return lhs;
518519
case MP_BINARY_OP_MULTIPLY:
519520
lhs = copy(lhs);
520521
case MP_BINARY_OP_INPLACE_MULTIPLY:
521-
mult(lhs, mp_obj_get_float(rhs_in));
522+
microbit_audio_data_mult_inplace(lhs->data, lhs->alloc_size, mp_obj_get_float(rhs_in));
522523
return lhs;
523524
default:
524525
return MP_OBJ_NULL; // op not supported

src/codal_port/modaudio.h

+3
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ extern const mp_obj_type_t microbit_audio_recording_type;
5252
extern const mp_obj_type_t microbit_audio_track_type;
5353
extern const mp_obj_module_t audio_module;
5454

55+
void microbit_audio_data_add_inplace(uint8_t *lhs_data, const uint8_t *rhs_data, size_t size, bool add);
56+
void microbit_audio_data_mult_inplace(uint8_t *data, size_t size, float f);
57+
5558
void microbit_audio_play_source(mp_obj_t src, mp_obj_t pin_select, bool wait, uint32_t sample_rate);
5659
void microbit_audio_stop(void);
5760
bool microbit_audio_is_playing(void);

0 commit comments

Comments
 (0)