ramp to values to avoid audio glitches
authorFrédéric Péters <fpeters@0d.be>
Thu, 23 Nov 2017 16:08:11 +0000 (17:08 +0100)
committerFrédéric Péters <fpeters@0d.be>
Thu, 23 Nov 2017 17:01:29 +0000 (18:01 +0100)
nanofun.js

index bde7c13..b8dcaf9 100644 (file)
@@ -416,7 +416,8 @@ var nanofun = function() {
 
     $('#master-gain').on('change', function() {
       var fraction = parseInt(this.value) / parseInt(127);
 
     $('#master-gain').on('change', function() {
       var fraction = parseInt(this.value) / parseInt(127);
-      self.masterGainNode.gain.value = fraction * fraction;
+      var now = self.audioCtx.currentTime;
+      self.masterGainNode.gain.exponentialRampToValueAtTime(fraction * fraction, now + 0.015);
     });
 
     $('#delay').on('change', function() {
     });
 
     $('#delay').on('change', function() {
@@ -424,13 +425,15 @@ var nanofun = function() {
       if (value == 0) {
         self.delay.disconnect();
       } else {
       if (value == 0) {
         self.delay.disconnect();
       } else {
-        self.delay.delayTime.value = value;
+        var now = self.audioCtx.currentTime;
+        self.delay.delayTime.exponentialRampToValueAtTime(value, now + 0.015);
         self.delay.connect(self.audioCtx.destination);
       }
     });
 
     $('#feedback').on('change', function() {
         self.delay.connect(self.audioCtx.destination);
       }
     });
 
     $('#feedback').on('change', function() {
-      self.feedback.gain.value = this.value;
+      var now = self.audioCtx.currentTime;
+      self.feedback.gain.exponentialRampToValueAtTime(this.value, now + 0.015);
     });
 
     $('#filter').on('change', function() {
     });
 
     $('#filter').on('change', function() {
@@ -440,7 +443,8 @@ var nanofun = function() {
     $('.touch-gain').on('change', function() {
       var fraction = parseInt(this.value) / parseInt(127);
       var touchIdx = parseInt($(this).parent().data('touch'));
     $('.touch-gain').on('change', function() {
       var fraction = parseInt(this.value) / parseInt(127);
       var touchIdx = parseInt($(this).parent().data('touch'));
-      self.touchGainNodes[touchIdx].gain.value = fraction * fraction;
+      var now = self.audioCtx.currentTime;
+      self.touchGainNodes[touchIdx].gain.exponentialRampToValueAtTime(fraction * fraction, now + 0.015);
     });
 
     self.time_interval_id = setInterval(function() {
     });
 
     self.time_interval_id = setInterval(function() {