@@ -147,13 +147,50 @@ STATIC mp_obj_t microbit_microphone_get_events(mp_obj_t self_in) {
147147}
148148STATIC MP_DEFINE_CONST_FUN_OBJ_1 (microbit_microphone_get_events_obj , microbit_microphone_get_events );
149149
150+ STATIC mp_obj_t microbit_microphone_record_into (mp_uint_t n_args , const mp_obj_t * pos_args , mp_map_t * kw_args ) {
151+ enum { ARG_buffer , ARG_rate , ARG_wait , };
152+ static const mp_arg_t allowed_args [] = {
153+ { MP_QSTR_buffer , MP_ARG_REQUIRED | MP_ARG_OBJ , {.u_obj = MP_OBJ_NULL } },
154+ { MP_QSTR_rate , MP_ARG_INT , {.u_obj = MP_ROM_INT (7812 )} },
155+ { MP_QSTR_wait , MP_ARG_KW_ONLY | MP_ARG_BOOL , {.u_bool = true} },
156+ };
157+
158+ // Parse the args.
159+ mp_arg_val_t args [MP_ARRAY_SIZE (allowed_args )];
160+ mp_arg_parse_all (n_args - 1 , pos_args + 1 , kw_args , MP_ARRAY_SIZE (allowed_args ), allowed_args , args );
161+
162+ mp_buffer_info_t bufinfo ;
163+ mp_get_buffer_raise (args [ARG_buffer ].u_obj , & bufinfo , MP_BUFFER_READ );
164+
165+ microbit_hal_microphone_start_recording (bufinfo .buf , bufinfo .len , args [ARG_rate ].u_int );
166+
167+ return mp_const_none ;
168+ }
169+ STATIC MP_DEFINE_CONST_FUN_OBJ_KW (microbit_microphone_record_into_obj , 1 , microbit_microphone_record_into );
170+
171+ STATIC mp_obj_t microbit_microphone_is_recording (mp_obj_t self_in ) {
172+ (void )self_in ;
173+ return mp_obj_new_bool (microbit_hal_microphone_is_recording ());
174+ }
175+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (microbit_microphone_is_recording_obj , microbit_microphone_is_recording );
176+
177+ STATIC mp_obj_t microbit_microphone_stop_recording (mp_obj_t self_in ) {
178+ (void )self_in ;
179+ microbit_hal_microphone_stop_recording ();
180+ return mp_const_none ;
181+ }
182+ STATIC MP_DEFINE_CONST_FUN_OBJ_1 (microbit_microphone_stop_recording_obj , microbit_microphone_stop_recording );
183+
150184STATIC const mp_rom_map_elem_t microbit_microphone_locals_dict_table [] = {
151185 { MP_ROM_QSTR (MP_QSTR_set_threshold ), MP_ROM_PTR (& microbit_microphone_set_threshold_obj ) },
152186 { MP_ROM_QSTR (MP_QSTR_sound_level ), MP_ROM_PTR (& microbit_microphone_sound_level_obj ) },
153187 { MP_ROM_QSTR (MP_QSTR_current_event ), MP_ROM_PTR (& microbit_microphone_current_event_obj ) },
154188 { MP_ROM_QSTR (MP_QSTR_is_event ), MP_ROM_PTR (& microbit_microphone_is_event_obj ) },
155189 { MP_ROM_QSTR (MP_QSTR_was_event ), MP_ROM_PTR (& microbit_microphone_was_event_obj ) },
156190 { MP_ROM_QSTR (MP_QSTR_get_events ), MP_ROM_PTR (& microbit_microphone_get_events_obj ) },
191+ { MP_ROM_QSTR (MP_QSTR_record_into ), MP_ROM_PTR (& microbit_microphone_record_into_obj ) },
192+ { MP_ROM_QSTR (MP_QSTR_is_recording ), MP_ROM_PTR (& microbit_microphone_is_recording_obj ) },
193+ { MP_ROM_QSTR (MP_QSTR_stop_recording ), MP_ROM_PTR (& microbit_microphone_stop_recording_obj ) },
157194};
158195STATIC MP_DEFINE_CONST_DICT (microbit_microphone_locals_dict , microbit_microphone_locals_dict_table );
159196
0 commit comments