<div id="msg"></div>
<div id="midiinputs"></div>
<div id="midioutputs"></div>
- <form><input id="gain" type="range" min="0" max="127" value="127"></form>
+ <form>
+ <input class="touch-gain" data-touch="0" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="1" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="2" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="3" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="4" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="5" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="6" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="7" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="8" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="9" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="10" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="11" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="12" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="13" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="14" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="15" type="range" min="0" max="127" value="127">
+ <input class="touch-gain" data-touch="16" type="range" min="0" max="127" value="127">
+ <br><input id="master-gain" type="range" min="0" max="127" value="127">
+ </form>
<div id="gitclone">Source code at <a href="https://git.0d.be/?p=nanofun.git">https://git.0d.be/?p=nanofun.git</a></div>
</body>
</html>
self.sample_buffers = Array(16);
self.samples = Array(16);
self.audioCtx = new window.AudioContext();
- self.gainNode = self.audioCtx.createGain();
- self.gainNode.connect(self.audioCtx.destination);
+ self.touchGainNodes = Array(16);
+ self.masterGainNode = self.audioCtx.createGain();
+ for (var i=0; i<16; i++) {
+ self.touchGainNodes[i] = self.audioCtx.createGain();
+ self.touchGainNodes[i].connect(self.masterGainNode);
+ }
+ self.masterGainNode.connect(self.audioCtx.destination);
}
self.initMIDI = function() {
}
midi.onControlChange = function(port, data, control, value) {
- if (control == 7) {
- $('#gain').val(value).trigger('change');
- }
+ if (control > 7 && control < 16) return; /* range between sliders and pots */
+ if (control > 23) return; /* after pots */
+ if (control >= 16) { control -= 8; }
+ $('.touch-gain[data-touch=' + control + ']').val(value).trigger('change');
}
$(document).keypress(function(ev) {
}
});
- $('#gain').on('change', function() {
+ $('#master-gain').on('change', function() {
+ var fraction = parseInt(this.value) / parseInt(127);
+ self.masterGainNode.gain.value = fraction * fraction;
+ });
+
+ $('.touch-gain').on('change', function() {
var fraction = parseInt(this.value) / parseInt(127);
- self.gainNode.gain.value = fraction * fraction;
+ var touchIdx = parseInt($(this).data('touch'));
+ self.touchGainNodes[touchIdx].gain.value = fraction * fraction;
});
}
self.samples[sample_idx] = undefined;
} else {
var sample = self.audioCtx.createBufferSource();
+ var gainNode = self.touchGainNodes[sample_idx];
self.samples[sample_idx] = sample;
sample.loop = false;
sample.connect(gainNode);