]> git.0d.be Git - nanofun.git/blobdiff - nanofun.js
add individual checkboxes for effects
[nanofun.git] / nanofun.js
index 014ebb026423ed5fbc5790ab613d812a8d9c8f9c..bde7c13012ee3ce1e320097e7aec5bdda744b3dc 100644 (file)
@@ -295,13 +295,14 @@ var nanofun = function() {
   var self = this;
 
   self.initAudio = function() {
-    self.sample_buffers = Array(16);
-    self.samples = Array(16);
-    self.sample_start_times = Array(16);
+    self.sample_buffers = Array(NANOPAD_TOUCHS.length);
+    self.samples = Array(NANOPAD_TOUCHS.length);
+    self.sample_start_times = Array(NANOPAD_TOUCHS.length);
     self.audioCtx = new window.AudioContext();
-    self.touchGainNodes = Array(16);
+    self.touchGainNodes = Array(NANOPAD_TOUCHS.length);
     self.masterGainNode = self.audioCtx.createGain();
-    for (var i=0; i<16; i++) {
+    self.effectsGainNode = self.audioCtx.createGain();
+    for (var i=0; i<NANOPAD_TOUCHS.length; i++) {
       self.touchGainNodes[i] = self.audioCtx.createGain();
       self.touchGainNodes[i].connect(self.masterGainNode);
     }
@@ -316,11 +317,12 @@ var nanofun = function() {
     self.filter = self.audioCtx.createBiquadFilter();
     self.filter.frequency.value = 1000;
 
+    self.effectsGainNode.connect(self.delay);
     self.delay.connect(self.feedback);
     self.feedback.connect(self.filter);
     self.filter.connect(self.delay);
 
-    self.masterGainNode.connect(self.delay);
+    self.filter.connect(self.masterGainNode);
   }
 
   self.initMIDI = function() {
@@ -335,7 +337,7 @@ var nanofun = function() {
   self.initUI = function() {
     var $nanopad = $('#nanopad');
     var $nanotouch = $('.nanotouch');
-    for (var i=0; i<16; i++) {
+    for (var i=0; i<NANOPAD_TOUCHS.length; i++) {
       var $new_touch = $nanotouch.clone();
       $new_touch.attr('data-touch', i);
       $new_touch.appendTo($nanopad);
@@ -402,6 +404,16 @@ var nanofun = function() {
       }
     });
 
+    $('.effects input').on('change', function() {
+      var effects = $(this).prop('checked');
+      var i = parseInt($(this).parents('.nanotouch').data('touch'));
+      if (effects) {
+        self.touchGainNodes[i].connect(self.effectsGainNode);
+      } else {
+        self.touchGainNodes[i].disconnect(self.effectsGainNode);
+      }
+    });
+
     $('#master-gain').on('change', function() {
       var fraction = parseInt(this.value) / parseInt(127);
       self.masterGainNode.gain.value = fraction * fraction;
@@ -432,7 +444,7 @@ var nanofun = function() {
     });
 
     self.time_interval_id = setInterval(function() {
-      for (var i=0; i<16; i++) {
+      for (var i=0; i<NANOPAD_TOUCHS.length; i++) {
         var sample = self.samples[i];
         if (sample !== undefined) {
           var start_time = self.sample_start_times[i];