@@ -66,7 +66,7 @@ void microbit_audio_stop(void) {
6666 audio_output_buffer_offset = 0 ;
6767 audio_source_frame = NULL ;
6868 audio_source_track = NULL ;
69- audio_source_iter = NULL ;
69+ audio_source_iter = MP_OBJ_NULL ;
7070 audio_source_frame_offset = 0 ;
7171 audio_current_sound_level = 0 ;
7272 microbit_hal_audio_stop_expression ();
@@ -92,7 +92,6 @@ static void audio_data_pull_from_source(void) {
9292
9393 if (audio_source_iter == MP_OBJ_NULL ) {
9494 // Audio iterator is already exhausted.
95- microbit_audio_stop ();
9695 return ;
9796 }
9897
@@ -111,7 +110,7 @@ static void audio_data_pull_from_source(void) {
111110 }
112111 if (frame_obj == MP_OBJ_STOP_ITERATION ) {
113112 // End of audio iterator.
114- microbit_audio_stop () ;
113+ audio_source_iter = MP_OBJ_NULL ;
115114 return ;
116115 }
117116
@@ -128,7 +127,7 @@ static void audio_data_pull_from_source(void) {
128127 microbit_hal_audio_raw_set_rate (audio_source_track -> rate );
129128 } else {
130129 // Audio iterator did not return an AudioFrame/AudioTrack/AudioRecording.
131- microbit_audio_stop () ;
130+ audio_source_iter = MP_OBJ_NULL ;
132131 mp_sched_exception (mp_obj_new_exception_msg (& mp_type_TypeError , MP_ERROR_TEXT ("not an AudioFrame" )));
133132 return ;
134133 }
@@ -144,6 +143,7 @@ static void audio_data_fetcher(mp_sched_node_t *node) {
144143
145144 if (audio_output_buffer_offset == 0 ) {
146145 // No output data left, finish output streaming.
146+ microbit_audio_stop ();
147147 return ;
148148 }
149149
0 commit comments