2021-02-03 21:57:27 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
add tempo control to seeker
diff --git a/qms.c b/qms.c index abf73bc..90d974e 100644 --- a/qms.c +++ b/qms.c @@ -219,6 +219,7 @@ qms_load(Seeker *seeker, Event *evs, unsigned int nevs) seeker->nevs = nevs; seeker->ev_i = 0; seeker->smp_i = 0; + seeker->dur = 15; } void @@ -238,7 +239,7 @@ qms_play(Seeker *seeker, unsigned int nsamples) unsigned int nadv; while (seeker->smp_i + nsamples >= seeker->evs[seeker->ev_i].offset) { nadv = seeker->evs[seeker->ev_i].offset - seeker->smp_i; - qms_advance(nadv); + qms_advance(nadv * (seeker->dur+1) >> 4); qms_runevent(&seeker->evs[seeker->ev_i]); seeker->ev_i++; if (seeker->ev_i == seeker->nevs) @@ -246,7 +247,7 @@ qms_play(Seeker *seeker, unsigned int nsamples) nsamples -= nadv; seeker->smp_i += nadv; } - qms_advance(nsamples); + qms_advance(nsamples * (seeker->dur+1) >> 4); seeker->smp_i += nsamples; return 0; } diff --git a/qms.h b/qms.h index 1a359b7..2dbd143 100644 --- a/qms.h +++ b/qms.h @@ -27,6 +27,7 @@ typedef struct Seeker { unsigned int nevs; unsigned int ev_i; unsigned int smp_i; + unsigned int dur; /* nsmp = nsmp * (dur+1) / 16 (15 means 100%) */ } Seeker; #define qms_ev_pac(t, pac) (((t) << 28) | (PAC << 16) | (pac))