MIDI: Keep track of current music number in music_midi.c

This commit is contained in:
kichikuou
2020-08-30 17:21:03 +09:00
parent b3cb185a35
commit fa845a6439
5 changed files with 24 additions and 53 deletions
-11
View File
@@ -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;
+5 -18
View File
@@ -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;
}
+1 -7
View File
@@ -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;
+1 -9
View File
@@ -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;
}
+17 -8
View File
@@ -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;
}