login

<     >

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);