diff --git a/src/midi.android.c b/src/midi.android.c index 95fa436..8061331 100644 --- a/src/midi.android.c +++ b/src/midi.android.c @@ -54,8 +54,6 @@ mididevice_t midi = { midi_fading }; -static int midino; - static int midi_initilize(char *pname, int subdev) { return OK; } @@ -66,9 +64,6 @@ static int midi_exit() { } static int midi_start(int no, int loop, char *data, int datalen) { - if (midino == no) - return OK; - JNIEnv *env = SDL_AndroidGetJNIEnv(); if ((*env)->PushLocalFrame(env, 16) < 0) { WARNING("Failed to allocate JVM local references"); @@ -99,7 +94,6 @@ static int midi_start(int no, int loop, char *data, int datalen) { (*env)->CallVoidMethod(env, context, mid, path_str, loop == 0); (*env)->PopLocalFrame(env, NULL); - midino = no; return OK; } @@ -115,7 +109,6 @@ static int midi_stop() { (*env)->CallVoidMethod(env, context, mid); (*env)->PopLocalFrame(env, NULL); - midino = 0; return OK; } @@ -129,10 +122,7 @@ static int midi_unpause(void) { static int midi_get_playing_info(midiplaystate *st) { st->in_play = FALSE; - st->play_no = 0; st->loc_ms = 0; - if (midino == 0) - return OK; JNIEnv *env = SDL_AndroidGetJNIEnv(); if ((*env)->PushLocalFrame(env, 16) < 0) { @@ -147,7 +137,6 @@ static int midi_get_playing_info(midiplaystate *st) { if (pos >= 0) { st->in_play = TRUE; - st->play_no = midino; st->loc_ms = pos; } return OK; diff --git a/src/midi.emscripten.c b/src/midi.emscripten.c index 94665e1..1431324 100644 --- a/src/midi.emscripten.c +++ b/src/midi.emscripten.c @@ -55,8 +55,6 @@ mididevice_t midi = { midi_fading }; -static int midino; - static int midi_initilize(char *pname, int subdev) { return OK; } @@ -67,19 +65,12 @@ static int midi_exit() { } static int midi_start(int no, int loop, char *data, int datalen) { - if (midino == no) - return OK; - EM_ASM_ARGS({ xsystem35.midiPlayer.play($0, $1, $2); }, loop, data, datalen); - - midino = no; return OK; } static int midi_stop() { EM_ASM( xsystem35.midiPlayer.stop(); ); - - midino = 0; return OK; } @@ -94,17 +85,13 @@ EM_JS(int, midi_unpause, (void), { }); static int midi_get_playing_info(midiplaystate *st) { - if (midino != 0) { - int pos = EM_ASM_INT_V( return xsystem35.midiPlayer.getPosition(); ); - if (pos >= 0) { - st->in_play = TRUE; - st->play_no = midino; - st->loc_ms = pos; - return OK; - } + int pos = EM_ASM_INT_V( return xsystem35.midiPlayer.getPosition(); ); + if (pos >= 0) { + st->in_play = TRUE; + st->loc_ms = pos; + return OK; } st->in_play = FALSE; - st->play_no = 0; st->loc_ms = 0; return OK; } diff --git a/src/midi.rawmidi.c b/src/midi.rawmidi.c index 01f47bd..cd0c6bd 100644 --- a/src/midi.rawmidi.c +++ b/src/midi.rawmidi.c @@ -119,7 +119,6 @@ static boolean enabled = FALSE; static struct midiinfo *midi; static int midifd; static char *mididevname; -static int midino; static pid_t midipid; static int counter; @@ -536,7 +535,6 @@ static int midi_start(int no, int loop, char *data, int datalen) { _exit(0); } - midino = no; midipid = pid; counter = get_high_counter(SYSTEMCOUNTER_MIDI); @@ -554,7 +552,6 @@ static int midi_stop() { while(0 >= waitpid(midipid, &status, WNOHANG)); midipid = 0; - midino = 0; return OK; } @@ -576,16 +573,14 @@ static int midi_unpause(void) { static int midi_get_playing_info(midiplaystate *st) { int status, cnt, err; - if (!enabled || midino == 0) { + if (!enabled || midipid == 0) { st->in_play = FALSE; - st->play_no = 0; st->loc_ms = 0; return OK; } if (midipid == (err = waitpid(midipid, &status, WNOHANG))) { st->in_play = FALSE; - st->play_no = 0; st->loc_ms = 0; midipid = 0; return OK; @@ -594,7 +589,6 @@ static int midi_get_playing_info(midiplaystate *st) { cnt = get_high_counter(SYSTEMCOUNTER_MIDI) - counter; st->in_play = TRUE; - st->play_no = midino; st->loc_ms = cnt * 10; return OK; diff --git a/src/midi.sdlmixer.c b/src/midi.sdlmixer.c index e8d75d3..940de22 100644 --- a/src/midi.sdlmixer.c +++ b/src/midi.sdlmixer.c @@ -63,7 +63,6 @@ mididevice_t midi = { }; static Mix_Music *mix_music; -static int midino; static int counter; static uint32_t fade_tick; @@ -80,9 +79,6 @@ static int midi_exit() { } static int midi_start(int no, int loop, char *data, int datalen) { - if (midino == no) - return OK; - midi_stop(); SDL_RWops *rwops = SDL_RWFromConstMem(data, datalen); @@ -96,7 +92,6 @@ static int midi_start(int no, int loop, char *data, int datalen) { return NG; } - midino = no; counter = get_high_counter(SYSTEMCOUNTER_MIDI); return OK; } @@ -106,7 +101,6 @@ static int midi_stop() { return OK; Mix_FreeMusic(mix_music); mix_music = NULL; - midino = 0; return OK; } @@ -123,9 +117,8 @@ static int midi_unpause(void) { } static int midi_get_playing_info(midiplaystate *st) { - if (midino == 0) { + if (!mix_music) { st->in_play = FALSE; - st->play_no = 0; st->loc_ms = 0; return OK; } @@ -133,7 +126,6 @@ static int midi_get_playing_info(midiplaystate *st) { int cnt = get_high_counter(SYSTEMCOUNTER_MIDI) - counter; st->in_play = TRUE; - st->play_no = midino; st->loc_ms = cnt * 10; return OK; } diff --git a/src/music_midi.c b/src/music_midi.c index f910055..e30f669 100644 --- a/src/music_midi.c +++ b/src/music_midi.c @@ -29,6 +29,8 @@ #include "midi.h" #include "ald_manager.h" +static int midino; + int musmidi_init() { int st = midi_init(&prv.mididev); @@ -51,17 +53,19 @@ int musmidi_exit() { int musmidi_start(int no, int loop) { if (!prv.midi_valid) return NG; + if (midino == no) + return OK; - dridata *dfile; - - dfile = ald_getdata(DRIFILE_MIDI, no -1); - if (dfile == NULL) { - prv.midi.dfile = NULL; + dridata *dfile = ald_getdata(DRIFILE_MIDI, no -1); + if (dfile == NULL) return NG; - } + prv.midi.dev->start(no, loop, dfile->data, dfile->size); + + if (prv.midi.dfile) + ald_freedata(prv.midi.dfile); prv.midi.dfile = dfile; - prv.midi.dev->start(no, loop, prv.midi.dfile->data, prv.midi.dfile->size); + midino = no; return OK; } @@ -75,6 +79,7 @@ int musmidi_stop() { ald_freedata(prv.midi.dfile); prv.midi.dfile = NULL; } + midino = 0; return OK; } @@ -94,9 +99,13 @@ int musmidi_unpause() { midiplaystate musmidi_getpos() { midiplaystate st = {FALSE, 0, 0}; - if (!prv.midi_valid) return st; + if (!prv.midi_valid || !midino) return st; prv.midi.dev->getpos(&st); + if (st.in_play) + st.play_no = midino; + else + midino = 0; return st; }