2021-03-06 12:00:37 (UTC-03:00)
Marcel Rodrigues <marcelgmr@gmail.com>
add sample index argument to qms_advance() This will be needed to use as an index to the amp window.
diff --git a/qms.c b/qms.c index 37f59da..f60ab37 100644 --- a/qms.c +++ b/qms.c @@ -136,7 +136,7 @@ qms_setwheel(int track, int voice, int wheel) } void -qms_advance(unsigned int nsamples) +qms_advance(unsigned int sample_i, unsigned int nsamples) { int32_t left, right; int32_t amp; @@ -213,7 +213,7 @@ qms_runevents(Event *evs, unsigned int nevs) { uint32_t total_samples = 0; for (; nevs--; evs++) { - qms_advance(evs->offset - total_samples); + qms_advance(total_samples, evs->offset - total_samples); total_samples = evs->offset; if (qms_runevent(evs)) break; @@ -241,13 +241,15 @@ qms_seek(Seeker *seeker, unsigned int nsamples) seeker->smp_i = nsamples; } +#define stretch(nsmp) ((nsmp) * (seeker->dur+1) >> 4) + int 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 * (seeker->dur+1) >> 4); + qms_advance(stretch(seeker->smp_i), stretch(nadv)); qms_runevent(&seeker->evs[seeker->ev_i]); seeker->ev_i++; if (seeker->ev_i == seeker->nevs) @@ -255,7 +257,7 @@ qms_play(Seeker *seeker, unsigned int nsamples) nsamples -= nadv; seeker->smp_i += nadv; } - qms_advance(nsamples * (seeker->dur+1) >> 4); + qms_advance(stretch(seeker->smp_i), stretch(nsamples)); seeker->smp_i += nsamples; return 0; } diff --git a/qms.h b/qms.h index 2dbd143..5514eba 100644 --- a/qms.h +++ b/qms.h @@ -44,7 +44,7 @@ void qms_setpan(int track, int midipan); 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); +void qms_advance(unsigned int sample_i, unsigned int nsamples); int qms_runevent(Event *ev); void qms_runevents(Event *evs, unsigned int nevs); void qms_load(Seeker *seeker, Event *evs, unsigned int nevs);