login

<     >

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