summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/midi/midiplay.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index 6df1578bb3..344efd317e 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -323,6 +323,7 @@ long bpm IBSS_ATTR;
323int32_t gmbuf[BUF_SIZE*NBUF]; 323int32_t gmbuf[BUF_SIZE*NBUF];
324static unsigned int samples_in_buf; 324static unsigned int samples_in_buf;
325 325
326bool midi_end = false;
326bool quit = false; 327bool quit = false;
327bool swap = false; 328bool swap = false;
328bool lastswap = true; 329bool lastswap = true;
@@ -341,6 +342,10 @@ static inline void synthbuf(void)
341#else 342#else
342 outptr = gmbuf; 343 outptr = gmbuf;
343#endif 344#endif
345 if (midi_end) {
346 samples_in_buf = 0;
347 return;
348 }
344 349
345 /* synth samples for as many whole ticks as we can fit in the buffer */ 350 /* synth samples for as many whole ticks as we can fit in the buffer */
346 for (; i >= number_of_samples; i -= number_of_samples) 351 for (; i >= number_of_samples; i -= number_of_samples)
@@ -353,7 +358,7 @@ static inline void synthbuf(void)
353 rb->yield(); 358 rb->yield();
354#endif 359#endif
355 if (tick() == 0) 360 if (tick() == 0)
356 quit = true; 361 midi_end = true; /* no more midi data to play */
357 } 362 }
358 363
359 /* how many samples did we write to the buffer? */ 364 /* how many samples did we write to the buffer? */
@@ -379,6 +384,10 @@ static void get_more(const void** start, size_t* size)
379#else 384#else
380 *start = gmbuf; 385 *start = gmbuf;
381#endif 386#endif
387 if (samples_in_buf==0) {
388 *start = NULL;
389 quit = true; /* this was the last buffer to play */
390 }
382} 391}
383 392
384static int midimain(const void * filename) 393static int midimain(const void * filename)