mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-09-22 22:48:08 +03:00
MIDI: Keep track of current music number in music_midi.c
This commit is contained in:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user