]> git.rkrishnan.org Git - dttsp.git/blobdiff - jDttSP/main.c
Minor fix to keyb, added hash function to banal.h, added aux input ports with settabl...
[dttsp.git] / jDttSP / main.c
index b68ba9579eba3b202ac4e47251ea62cbc74c1879..b74e9df0bd52285ebc92813bd158223df582b7b2 100644 (file)
@@ -42,7 +42,7 @@ struct _loc loc;
 // most of what little we know here about the inner loop,
 // functionally speaking
 
-extern void process_samples(float *, float *, int);
+extern void process_samples(float *, float *, float *, float *, int);
 extern void setup_workspace(void);
 extern void destroy_workspace(void);
 
@@ -108,6 +108,10 @@ gethold(void) {
     jack_ringbuffer_reset(top.jack.ring.i.r);
     memset((char *) top.hold.buf.l, 0, top.hold.size.bytes);
     memset((char *) top.hold.buf.r, 0, top.hold.size.bytes);
+    jack_ringbuffer_reset(top.jack.auxr.i.l);
+    jack_ringbuffer_reset(top.jack.auxr.i.r);
+    memset((char *) top.hold.aux.l, 0, top.hold.size.bytes);
+    memset((char *) top.hold.aux.r, 0, top.hold.size.bytes);
     top.jack.blow.rb.i++;
   } else {
     jack_ringbuffer_read(top.jack.ring.i.l,
@@ -116,6 +120,12 @@ gethold(void) {
     jack_ringbuffer_read(top.jack.ring.i.r,
                         (char *) top.hold.buf.r,
                         top.hold.size.bytes);
+    jack_ringbuffer_read(top.jack.auxr.i.l,
+                        (char *) top.hold.aux.l,
+                        top.hold.size.bytes);
+    jack_ringbuffer_read(top.jack.auxr.i.r,
+                        (char *) top.hold.aux.r,
+                        top.hold.size.bytes);
   }
 }
 
@@ -130,6 +140,8 @@ PRIVATE void
 run_mute(void) {
   memset((char *) top.hold.buf.l, 0, top.hold.size.bytes);
   memset((char *) top.hold.buf.r, 0, top.hold.size.bytes);
+  memset((char *) top.hold.aux.l, 0, top.hold.size.bytes);
+  memset((char *) top.hold.aux.r, 0, top.hold.size.bytes);
   uni.tick++;
 }
 
@@ -138,7 +150,9 @@ run_pass(void) { uni.tick++; }
 
 PRIVATE void 
 run_play(void) {
-  process_samples(top.hold.buf.l, top.hold.buf.r, top.hold.size.frames);
+  process_samples(top.hold.buf.l, top.hold.buf.r,
+                 top.hold.aux.l, top.hold.aux.r,
+                 top.hold.size.frames);
 } 
 
 // NB do not set RUN_SWCH directly via setRunState;
@@ -187,7 +201,9 @@ run_swch(void) {
     jack_ringbuffer_reset(top.jack.ring.o.r);
   }
 
-  process_samples(top.hold.buf.l, top.hold.buf.r, top.hold.size.frames);
+  process_samples(top.hold.buf.l, top.hold.buf.r,
+                 top.hold.aux.l, top.hold.aux.r,
+                 top.hold.size.frames);
 } 
 
 //========================================================================
@@ -223,11 +239,19 @@ audio_callback(jack_nframes_t nframes, void *arg) {
       rp = (float *) jack_port_get_buffer(top.jack.port.i.r, nframes);
       jack_ringbuffer_write(top.jack.ring.i.l, (char *) lp, nbytes);
       jack_ringbuffer_write(top.jack.ring.i.r, (char *) rp, nbytes);
+      lp = (float *) jack_port_get_buffer(top.jack.auxp.i.l, nframes);
+      rp = (float *) jack_port_get_buffer(top.jack.auxp.i.r, nframes);
+      jack_ringbuffer_write(top.jack.auxr.i.l, (char *) lp, nbytes);
+      jack_ringbuffer_write(top.jack.auxr.i.r, (char *) rp, nbytes);
     } else { // rb pathology
       jack_ringbuffer_reset(top.jack.ring.i.l);
       jack_ringbuffer_reset(top.jack.ring.i.r);
       clear_jack_ringbuffer(top.jack.ring.i.l, nbytes);
       clear_jack_ringbuffer(top.jack.ring.i.r, nbytes);
+      jack_ringbuffer_reset(top.jack.auxr.i.l);
+      jack_ringbuffer_reset(top.jack.auxr.i.r);
+      clear_jack_ringbuffer(top.jack.auxr.i.l, nbytes);
+      clear_jack_ringbuffer(top.jack.auxr.i.r, nbytes);
       top.jack.blow.rb.i++;
     }
 
@@ -303,6 +327,8 @@ execute(void) {
 
 PRIVATE void 
 closeup(void) {
+  jack_ringbuffer_free(top.jack.auxr.i.r);
+  jack_ringbuffer_free(top.jack.auxr.i.l);
   jack_ringbuffer_free(top.jack.ring.o.r);
   jack_ringbuffer_free(top.jack.ring.o.l);
   jack_ringbuffer_free(top.jack.ring.i.r);
@@ -310,6 +336,8 @@ closeup(void) {
 
   safefree((char *) top.hold.buf.r);
   safefree((char *) top.hold.buf.l);
+  safefree((char *) top.hold.aux.r);
+  safefree((char *) top.hold.aux.l);
 
   destroy_workspace();
 
@@ -362,6 +390,10 @@ setup_local_audio(void) {
                                       "main hold buffer left");
   top.hold.buf.r = (float *) safealloc(top.hold.size.frames, sizeof(float),
                                       "main hold buffer right");
+  top.hold.aux.l = (float *) safealloc(top.hold.size.frames, sizeof(float),
+                                      "aux hold buffer left");
+  top.hold.aux.r = (float *) safealloc(top.hold.size.frames, sizeof(float),
+                                      "aux hold buffer right");
 } 
 
 PRIVATE void 
@@ -417,10 +449,22 @@ setup_system_audio(void) {
                                         JACK_DEFAULT_AUDIO_TYPE,
                                         JackPortIsOutput,
                                         0);
+  top.jack.auxp.i.l = jack_port_register(top.jack.client,
+                                        "al",
+                                        JACK_DEFAULT_AUDIO_TYPE,
+                                        JackPortIsInput,
+                                        0);
+  top.jack.auxp.i.r = jack_port_register(top.jack.client,
+                                        "ar",
+                                        JACK_DEFAULT_AUDIO_TYPE,
+                                        JackPortIsInput,
+                                        0);
   top.jack.ring.i.l = jack_ringbuffer_create(top.hold.size.bytes * loc.mult.ring);
   top.jack.ring.i.r = jack_ringbuffer_create(top.hold.size.bytes * loc.mult.ring);
   top.jack.ring.o.l = jack_ringbuffer_create(top.hold.size.bytes * loc.mult.ring);
   top.jack.ring.o.r = jack_ringbuffer_create(top.hold.size.bytes * loc.mult.ring);
+  top.jack.auxr.i.l = jack_ringbuffer_create(top.hold.size.bytes * loc.mult.ring);
+  top.jack.auxr.i.r = jack_ringbuffer_create(top.hold.size.bytes * loc.mult.ring);
   clear_jack_ringbuffer(top.jack.ring.o.l, top.jack.size * sizeof(float));
   clear_jack_ringbuffer(top.jack.ring.o.r, top.jack.size * sizeof(float));
 }