@@ -428,16 +428,15 @@ static mp_int_t audio_frame_get_buffer(mp_obj_t self_in, mp_buffer_info_t *bufin
428
428
return 0 ;
429
429
}
430
430
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 ) {
432
432
int mult = add ? 1 : -1 ;
433
- size_t size = MIN (self -> alloc_size , other -> alloc_size );
434
433
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 );
436
435
// Clamp to 0-255
437
436
if (val > 255 ) {
438
437
val = (1 - (val >>31 ))* 255 ;
439
438
}
440
- self -> data [i ] = val ;
439
+ lhs_data [i ] = val ;
441
440
}
442
441
}
443
442
@@ -488,14 +487,14 @@ int32_t float_to_fixed(float f, uint32_t scale) {
488
487
return result ;
489
488
}
490
489
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 ) {
492
491
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 ;
495
494
if (val > 255 ) {
496
495
val = (1 - (val >>31 ))* 255 ;
497
496
}
498
- self -> data [i ] = val ;
497
+ data [i ] = val ;
499
498
}
500
499
}
501
500
@@ -513,12 +512,14 @@ static mp_obj_t audio_frame_binary_op(mp_binary_op_t op, mp_obj_t lhs_in, mp_obj
513
512
if (mp_obj_get_type (rhs_in ) != & microbit_audio_frame_type ) {
514
513
return MP_OBJ_NULL ; // op not supported
515
514
}
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 );
517
518
return lhs ;
518
519
case MP_BINARY_OP_MULTIPLY :
519
520
lhs = copy (lhs );
520
521
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 ));
522
523
return lhs ;
523
524
default :
524
525
return MP_OBJ_NULL ; // op not supported
0 commit comments