@@ -66,7 +66,7 @@ void microbit_audio_stop(void) {
66
66
audio_output_buffer_offset = 0 ;
67
67
audio_source_frame = NULL ;
68
68
audio_source_track = NULL ;
69
- audio_source_iter = NULL ;
69
+ audio_source_iter = MP_OBJ_NULL ;
70
70
audio_source_frame_offset = 0 ;
71
71
audio_current_sound_level = 0 ;
72
72
microbit_hal_audio_stop_expression ();
@@ -92,7 +92,6 @@ static void audio_data_pull_from_source(void) {
92
92
93
93
if (audio_source_iter == MP_OBJ_NULL ) {
94
94
// Audio iterator is already exhausted.
95
- microbit_audio_stop ();
96
95
return ;
97
96
}
98
97
@@ -111,7 +110,7 @@ static void audio_data_pull_from_source(void) {
111
110
}
112
111
if (frame_obj == MP_OBJ_STOP_ITERATION ) {
113
112
// End of audio iterator.
114
- microbit_audio_stop () ;
113
+ audio_source_iter = MP_OBJ_NULL ;
115
114
return ;
116
115
}
117
116
@@ -128,7 +127,7 @@ static void audio_data_pull_from_source(void) {
128
127
microbit_hal_audio_raw_set_rate (audio_source_track -> rate );
129
128
} else {
130
129
// Audio iterator did not return an AudioFrame/AudioTrack/AudioRecording.
131
- microbit_audio_stop () ;
130
+ audio_source_iter = MP_OBJ_NULL ;
132
131
mp_sched_exception (mp_obj_new_exception_msg (& mp_type_TypeError , MP_ERROR_TEXT ("not an AudioFrame" )));
133
132
return ;
134
133
}
@@ -144,6 +143,7 @@ static void audio_data_fetcher(mp_sched_node_t *node) {
144
143
145
144
if (audio_output_buffer_offset == 0 ) {
146
145
// No output data left, finish output streaming.
146
+ microbit_audio_stop ();
147
147
return ;
148
148
}
149
149
0 commit comments