mirror of
https://github.com/kichikuou/xsystem35-sdl2.git
synced 2026-10-11 16:48:17 +03:00
Partial support for MIDI fade
This commit is contained in:
+14
-1
@@ -35,6 +35,8 @@ static int midi_getflag(int mode, int index);
|
||||
static int midi_setflag(int mode, int index, int val);
|
||||
static int midi_setvol(int vol);
|
||||
static int midi_getvol();
|
||||
static int midi_fadestart(int time, int volume, int stop);
|
||||
static boolean midi_fading();
|
||||
|
||||
#define midi midi_emscripten
|
||||
mididevice_t midi = {
|
||||
@@ -48,7 +50,9 @@ mididevice_t midi = {
|
||||
midi_getflag,
|
||||
midi_setflag,
|
||||
midi_setvol,
|
||||
midi_getvol
|
||||
midi_getvol,
|
||||
midi_fadestart,
|
||||
midi_fading
|
||||
};
|
||||
|
||||
static int midino;
|
||||
@@ -118,3 +122,12 @@ static int midi_setvol(int vol) {
|
||||
static int midi_getvol() {
|
||||
return EM_ASM_INT_V( return xsystem35.midiPlayer.getVolume(); );
|
||||
}
|
||||
|
||||
static int midi_fadestart(int time, int volume, int stop) {
|
||||
return EM_ASM_ARGS({ xsystem35.midiPlayer.fadeStart($0, $1, $2); },
|
||||
time, volume, stop);
|
||||
}
|
||||
|
||||
static boolean midi_fading() {
|
||||
return EM_ASM_INT_V( return xsystem35.midiPlayer.isFading(); );
|
||||
}
|
||||
|
||||
@@ -45,6 +45,8 @@ struct mididevice {
|
||||
int (* setflag)(int mode, int index, int val);
|
||||
int (* setvol)(int);
|
||||
int (* getvol)(int);
|
||||
int (* fadestart)(int time, int volume, int stop);
|
||||
boolean (* fading)();
|
||||
};
|
||||
|
||||
extern int midi_init(mididevice_t *);
|
||||
|
||||
@@ -102,6 +102,8 @@ mididevice_t midi_rawmidi = {
|
||||
midi_getflag,
|
||||
midi_setflag,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
||||
+28
-1
@@ -19,6 +19,7 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#include <SDL.h>
|
||||
#include <SDL_mixer.h>
|
||||
|
||||
#include "portab.h"
|
||||
@@ -36,6 +37,8 @@ static int midi_getflag(int mode, int index);
|
||||
static int midi_setflag(int mode, int index, int val);
|
||||
static int midi_setvol(int vol);
|
||||
static int midi_getvol();
|
||||
static int midi_fadestart(int time, int volume, int stop);
|
||||
static boolean midi_fading();
|
||||
|
||||
#define midi midi_sdlmixer
|
||||
mididevice_t midi = {
|
||||
@@ -49,12 +52,15 @@ mididevice_t midi = {
|
||||
midi_getflag,
|
||||
midi_setflag,
|
||||
midi_setvol,
|
||||
midi_getvol
|
||||
midi_getvol,
|
||||
midi_fadestart,
|
||||
midi_fading
|
||||
};
|
||||
|
||||
static Mix_Music *mix_music;
|
||||
static int midino;
|
||||
static int counter;
|
||||
static uint32_t fade_tick;
|
||||
|
||||
static int midi_initilize(char *pname, int subdev) {
|
||||
if (Mix_Init(MIX_INIT_MID) != MIX_INIT_MID)
|
||||
@@ -140,3 +146,24 @@ static int midi_setvol(int vol) {
|
||||
static int midi_getvol() {
|
||||
return Mix_VolumeMusic(-1) * 100 / MIX_MAX_VOLUME;
|
||||
}
|
||||
|
||||
static int midi_fadestart(int time, int volume, int stop) {
|
||||
if (time == 0) {
|
||||
midi_setvol(volume);
|
||||
if (stop)
|
||||
midi_stop();
|
||||
return OK;
|
||||
}
|
||||
|
||||
if (volume == 0) {
|
||||
Mix_FadeOutMusic(time); // FIXME: this always stops the music
|
||||
fade_tick = SDL_GetTicks() + time;
|
||||
return OK;
|
||||
}
|
||||
printf("midi_fadestart(%d, %d, %d) unsupported\n", time, volume, stop);
|
||||
return NG;
|
||||
}
|
||||
|
||||
static boolean midi_fading() {
|
||||
return SDL_GetTicks() < fade_tick;
|
||||
}
|
||||
|
||||
+11
@@ -26,6 +26,13 @@
|
||||
#include "music.h"
|
||||
#include "music_private.h"
|
||||
|
||||
enum MixDevice {
|
||||
MIX_MASTER,
|
||||
MIX_CD,
|
||||
MIX_MIDI,
|
||||
MIX_PCM
|
||||
};
|
||||
|
||||
struct _musprvdat musprv;
|
||||
|
||||
int mus_init() {
|
||||
@@ -261,6 +268,8 @@ boolean mus_pcm_get_state() {
|
||||
* 1: する
|
||||
*/
|
||||
int mus_mixer_fadeout_start(int device, int time, int volume, int stop) {
|
||||
if (device == MIX_MIDI)
|
||||
return musmidi_fadestart(time, volume, stop);
|
||||
printf("%s(%d, %d, %d, %d) not implemented\n", __func__, device, time, volume, stop);
|
||||
return NG;
|
||||
}
|
||||
@@ -273,6 +282,8 @@ int mus_mixer_fadeout_start(int device, int time, int volume, int stop) {
|
||||
* FALSE -> フェード中でない
|
||||
*/
|
||||
boolean mus_mixer_fadeout_get_state(int device) {
|
||||
if (device == MIX_MIDI)
|
||||
return musmidi_fading();
|
||||
printf("%s(%d) not implemented\n", __func__, device);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -98,3 +98,15 @@ int musmidi_setflag(int mode, int index, int val) {
|
||||
int musmidi_getflag(int mode, int index) {
|
||||
return prv.midi.dev->getflag(mode, index);
|
||||
}
|
||||
|
||||
int musmidi_fadestart(int time, int volume, int stop) {
|
||||
if (!prv.midi.dev->fadestart)
|
||||
return NG;
|
||||
return prv.midi.dev->fadestart(time, volume, stop);
|
||||
}
|
||||
|
||||
boolean musmidi_fading() {
|
||||
if (!prv.midi.dev->fading)
|
||||
return FALSE;
|
||||
return prv.midi.dev->fading();
|
||||
}
|
||||
|
||||
+2
-1
@@ -20,6 +20,7 @@ extern int musmidi_unpause();
|
||||
extern midiplaystate musmidi_getpos();
|
||||
extern int musmidi_setflag(int mode, int index, int val);
|
||||
extern int musmidi_getflag(int mode, int index);
|
||||
extern int musmidi_cb();
|
||||
extern int musmidi_fadestart(int time, int volume, int stop);
|
||||
extern boolean musmidi_fading();
|
||||
|
||||
#endif /* __MUSIC_MIDI_H__ */
|
||||
|
||||
Reference in New Issue
Block a user