2021-02-01 23:52:48 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
refactor: added separate function to run a single event
diff --git a/qms.c b/qms.c index 9c103ff..4ccc348 100644 --- a/qms.c +++ b/qms.c @@ -165,40 +165,49 @@ qms_advance(unsigned int nsamples) } } +int +qms_runevent(Event *ev) +{ + EvType ev_type; + unsigned int track, voice, arg; + int end = 0; + track = ev->event >> 28; + voice = ev->event >> 24 & 7; + ev_type = ev->event >> 16 & 0xFF; + arg = ev->event & 0xFFFF; + switch (ev_type) { + case END: + end = 1; + break; + case PAC: + qms_setpac(track, arg); + break; + case VOL: + qms_setvol(track, arg); + break; + case PAN: + qms_setpan(track, arg); + break; + case VEL: + qms_setvelocity(track, voice, arg); + break; + case PITCH: + qms_setnote(track, voice, arg); + break; + case WHEEL: + qms_setwheel(track, voice, arg); + } + return end; +} + void qms_runevents(Event *evs, unsigned int nevs) { uint32_t total_samples = 0; - EvType ev_type; - unsigned int track, voice, arg; for (; nevs--; evs++) { qms_advance(evs->offset - total_samples); total_samples = evs->offset; - track = evs->event >> 28; - voice = evs->event >> 24 & 7; - ev_type = evs->event >> 16 & 0xFF; - arg = evs->event & 0xFFFF; - switch (ev_type) { - case END: - nevs = 0; - break; - case PAC: - qms_setpac(track, arg); - break; - case VOL: - qms_setvol(track, arg); - break; - case PAN: - qms_setpan(track, arg); + if (qms_runevent(evs)) break; - case VEL: - qms_setvelocity(track, voice, arg); - break; - case PITCH: - qms_setnote(track, voice, arg); - break; - case WHEEL: - qms_setwheel(track, voice, arg); - } } } diff --git a/qms.h b/qms.h index 5d7b20e..6a63eb0 100644 --- a/qms.h +++ b/qms.h @@ -37,6 +37,7 @@ void qms_setvelocity(int track, int voice, int velocity); void qms_setnote(int track, int voice, int midipitch); void qms_setwheel(int track, int voice, int wheel); void qms_advance(unsigned int nsamples); +int qms_runevent(Event *ev); void qms_runevents(Event *evs, unsigned int nevs); void qms_putsample(int16_t left, int16_t right);