made with requirebin
Last active
June 28, 2016 00:50
-
-
Save emkay/2f30bb7b4d2b7586678f4053416463e0 to your computer and use it in GitHub Desktop.
requirebin sketch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Welcome! require() some modules from npm (like you were using browserify) | |
// and then hit Run Code to run your code on the right side. | |
// Modules get downloaded from browserify-cdn and bundled in your browser. | |
const drummer = require('drummer')() | |
const kick = drummer.kick | |
const snare = drummer.snare | |
const hihat = drummer.hihat | |
function bar (time) { | |
if (time >= 20) return | |
kick.hit(0 + time) | |
hihat.hit(0 + time) | |
hihat.hit(0.25 + time) | |
kick.hit(0.5 + time) | |
snare.hit(0.5 + time) | |
hihat.hit(0.5 + time) | |
hihat.hit(0.75 + time) | |
kick.hit(1 + time) | |
hihat.hit(1 + time) | |
hihat.hit(1.25 + time) | |
kick.hit(1.5 + time) | |
snare.hit(1.5 + time) | |
hihat.hit(1.5 + time) | |
hihat.hit(1.75 + time) | |
kick.hit(2 + time) | |
hihat.hit(2 + time) | |
hihat.hit(2.25 + time) | |
kick.hit(2.5 + time) | |
snare.hit(2.5 + time) | |
hihat.hit(2.5 + time) | |
snare.hit(2.75 + time) | |
return bar(time + 3) | |
} | |
bar(0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
setTimeout(function(){ | |
;require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ | |
module.exports = Hihat | |
function Hihat (context, opts) { | |
this.context = context | |
} | |
Hihat.prototype.hit = function hit (time) { | |
const context = this.context | |
const fundamental = 40 | |
const ratios = [2, 3, 4.16, 5.43, 6.79, 8.21] | |
const now = context.currentTime + time | |
const gain = context.createGain() | |
const bandpass = context.createBiquadFilter() | |
bandpass.type = 'bandpass' | |
bandpass.frequency.value = 10000 | |
const highpass = context.createBiquadFilter() | |
highpass.type = 'highpass' | |
highpass.frequency.value = 7000 | |
bandpass.connect(highpass) | |
highpass.connect(gain) | |
gain.connect(context.destination) | |
ratios.forEach((ratio) => { | |
const oscillator = context.createOscillator() | |
oscillator.type = 'square' | |
oscillator.frequency.value = fundamental * ratio | |
oscillator.connect(bandpass) | |
oscillator.start(now) | |
oscillator.stop(now + 0.3) | |
}) | |
gain.gain.setValueAtTime(0.00001, now) | |
gain.gain.exponentialRampToValueAtTime(1, now + 0.02) | |
gain.gain.exponentialRampToValueAtTime(0.3, now + 0.03) | |
gain.gain.exponentialRampToValueAtTime(0.00001, now + 0.3) | |
} | |
},{}],2:[function(require,module,exports){ | |
module.exports = Kick | |
function Kick (context, opts) { | |
opts = opts || {} | |
this.context = context | |
this.type = opts.type || 'sine' | |
} | |
Kick.prototype.hit = function hit (time, opts) { | |
opts = opts || {} | |
const oscillator = this.context.createOscillator() | |
const gain = this.context.createGain() | |
const totalTime = time + this.context.currentTime | |
oscillator.type = this.type | |
oscillator.connect(gain) | |
gain.connect(this.context.destination) | |
oscillator.frequency.setValueAtTime(150, totalTime) | |
gain.gain.setValueAtTime(1, time) | |
oscillator.frequency.exponentialRampToValueAtTime(0.01, totalTime + 0.5) | |
gain.gain.exponentialRampToValueAtTime(0.01, totalTime + 0.5) | |
oscillator.start(totalTime) | |
oscillator.stop(totalTime + 0.5) | |
} | |
},{}],3:[function(require,module,exports){ | |
var window = require('global/window'); | |
var Context = window.AudioContext || window.webkitAudioContext; | |
if (Context) module.exports = new Context; | |
},{"global/window":4}],4:[function(require,module,exports){ | |
(function (global){ | |
if (typeof window !== "undefined") { | |
module.exports = window; | |
} else if (typeof global !== "undefined") { | |
module.exports = global; | |
} else { | |
module.exports = {}; | |
} | |
}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) | |
//# sourceMappingURL=data:application/json;charset:utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9hdWRpby1jb250ZXh0L25vZGVfbW9kdWxlcy9nbG9iYWwvd2luZG93LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG59IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0ge307XG59XG4iXX0= | |
},{}],5:[function(require,module,exports){ | |
module.exports = Snare | |
function Snare (context, opts) { | |
opts = opts || {} | |
this.context = context | |
} | |
Snare.prototype.createBuffer = function createBuffer () { | |
const bufferSize = this.context.sampleRate | |
const buffer = this.context.createBuffer(1, bufferSize, this.context.sampleRate) | |
let output = buffer.getChannelData(0) | |
for (let i = 0; i < bufferSize; i++) { | |
output[i] = Math.random() * 2 - 1 | |
} | |
return buffer | |
} | |
Snare.prototype.hit = function hit (time) { | |
const noise = this.context.createBufferSource() | |
noise.buffer = this.createBuffer() | |
const noiseFilter = this.context.createBiquadFilter() | |
noiseFilter.type = 'highpass' | |
noiseFilter.frequency.value = 1000 | |
noise.connect(noiseFilter) | |
const noiseEnvelope = this.context.createGain() | |
noiseFilter.connect(noiseEnvelope) | |
noiseEnvelope.connect(this.context.destination) | |
const oscillator = this.context.createOscillator() | |
oscillator.type = 'triangle' | |
const oscEnvelope = this.context.createGain() | |
oscillator.connect(oscEnvelope) | |
oscEnvelope.connect(this.context.destination) | |
noiseEnvelope.gain.setValueAtTime(1, time) | |
noiseEnvelope.gain.exponentialRampToValueAtTime(0.01, time + 0.2) | |
noise.start(time) | |
oscillator.frequency.setValueAtTime(100, time) | |
oscEnvelope.gain.setValueAtTime(0.7, time) | |
oscEnvelope.gain.exponentialRampToValueAtTime(0.01, time + 0.1) | |
oscillator.start(time) | |
oscillator.stop(time + 0.2) | |
noise.stop(time + 0.2) | |
} | |
},{}],"drummer":[function(require,module,exports){ | |
const context = require('audio-context') | |
const Kick = require('./kick') | |
const Snare = require('./snare') | |
const Hihat = require('./hihat') | |
function Drummer (options) { | |
options = options || {} | |
if (!(this instanceof Drummer)) return new Drummer(options) | |
const kick = new Kick(context, options.kick) | |
const snare = new Snare(context, options.snare) | |
const hihat = new Hihat(context, options.hihat) | |
return { | |
kick, | |
snare, | |
hihat, | |
context | |
} | |
} | |
module.exports = Drummer | |
},{"./hihat":1,"./kick":2,"./snare":5,"audio-context":3}]},{},[]) | |
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2hvbWUvYWRtaW4vYnJvd3NlcmlmeS1jZG4vbm9kZV9tb2R1bGVzL2Jyb3dzZXJpZnkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsImhpaGF0LmpzIiwia2ljay5qcyIsIm5vZGVfbW9kdWxlcy9hdWRpby1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2F1ZGlvLWNvbnRleHQvbm9kZV9tb2R1bGVzL2dsb2JhbC93aW5kb3cuanMiLCJzbmFyZS5qcyIsImluZGV4LmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IGYuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixmfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkiLCJtb2R1bGUuZXhwb3J0cyA9IEhpaGF0XG5cbmZ1bmN0aW9uIEhpaGF0IChjb250ZXh0LCBvcHRzKSB7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbn1cblxuSGloYXQucHJvdG90eXBlLmhpdCA9IGZ1bmN0aW9uIGhpdCAodGltZSkge1xuICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0XG4gIGNvbnN0IGZ1bmRhbWVudGFsID0gNDBcbiAgY29uc3QgcmF0aW9zID0gWzIsIDMsIDQuMTYsIDUuNDMsIDYuNzksIDguMjFdXG4gIGNvbnN0IG5vdyA9IGNvbnRleHQuY3VycmVudFRpbWUgKyB0aW1lXG4gIGNvbnN0IGdhaW4gPSBjb250ZXh0LmNyZWF0ZUdhaW4oKVxuXG4gIGNvbnN0IGJhbmRwYXNzID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKVxuICBiYW5kcGFzcy50eXBlID0gJ2JhbmRwYXNzJ1xuICBiYW5kcGFzcy5mcmVxdWVuY3kudmFsdWUgPSAxMDAwMFxuXG4gIGNvbnN0IGhpZ2hwYXNzID0gY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKVxuICBoaWdocGFzcy50eXBlID0gJ2hpZ2hwYXNzJ1xuICBoaWdocGFzcy5mcmVxdWVuY3kudmFsdWUgPSA3MDAwXG5cbiAgYmFuZHBhc3MuY29ubmVjdChoaWdocGFzcylcbiAgaGlnaHBhc3MuY29ubmVjdChnYWluKVxuICBnYWluLmNvbm5lY3QoY29udGV4dC5kZXN0aW5hdGlvbilcblxuICByYXRpb3MuZm9yRWFjaCgocmF0aW8pID0+IHtcbiAgICBjb25zdCBvc2NpbGxhdG9yID0gY29udGV4dC5jcmVhdGVPc2NpbGxhdG9yKClcbiAgICBvc2NpbGxhdG9yLnR5cGUgPSAnc3F1YXJlJ1xuICAgIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnZhbHVlID0gZnVuZGFtZW50YWwgKiByYXRpb1xuICAgIG9zY2lsbGF0b3IuY29ubmVjdChiYW5kcGFzcylcbiAgICBvc2NpbGxhdG9yLnN0YXJ0KG5vdylcbiAgICBvc2NpbGxhdG9yLnN0b3Aobm93ICsgMC4zKVxuICB9KVxuXG4gIGdhaW4uZ2Fpbi5zZXRWYWx1ZUF0VGltZSgwLjAwMDAxLCBub3cpXG4gIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDEsIG5vdyArIDAuMDIpXG4gIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMywgbm93ICsgMC4wMylcbiAgZ2Fpbi5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMDAwMSwgbm93ICsgMC4zKVxufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBLaWNrXG5cbmZ1bmN0aW9uIEtpY2sgKGNvbnRleHQsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB0aGlzLnR5cGUgPSBvcHRzLnR5cGUgfHwgJ3NpbmUnXG59XG5cbktpY2sucHJvdG90eXBlLmhpdCA9IGZ1bmN0aW9uIGhpdCAodGltZSwgb3B0cykge1xuICBvcHRzID0gb3B0cyB8fCB7fVxuICBjb25zdCBvc2NpbGxhdG9yID0gdGhpcy5jb250ZXh0LmNyZWF0ZU9zY2lsbGF0b3IoKVxuICBjb25zdCBnYWluID0gdGhpcy5jb250ZXh0LmNyZWF0ZUdhaW4oKVxuICBjb25zdCB0b3RhbFRpbWUgPSB0aW1lICsgdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lXG5cbiAgb3NjaWxsYXRvci50eXBlID0gdGhpcy50eXBlXG4gIG9zY2lsbGF0b3IuY29ubmVjdChnYWluKVxuICBnYWluLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKVxuXG4gIG9zY2lsbGF0b3IuZnJlcXVlbmN5LnNldFZhbHVlQXRUaW1lKDE1MCwgdG90YWxUaW1lKVxuICBnYWluLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSlcbiAgb3NjaWxsYXRvci5mcmVxdWVuY3kuZXhwb25lbnRpYWxSYW1wVG9WYWx1ZUF0VGltZSgwLjAxLCB0b3RhbFRpbWUgKyAwLjUpXG4gIGdhaW4uZ2Fpbi5leHBvbmVudGlhbFJhbXBUb1ZhbHVlQXRUaW1lKDAuMDEsIHRvdGFsVGltZSArIDAuNSlcblxuICBvc2NpbGxhdG9yLnN0YXJ0KHRvdGFsVGltZSlcbiAgb3NjaWxsYXRvci5zdG9wKHRvdGFsVGltZSArIDAuNSlcbn1cbiIsInZhciB3aW5kb3cgPSByZXF1aXJlKCdnbG9iYWwvd2luZG93Jyk7XG5cbnZhciBDb250ZXh0ID0gd2luZG93LkF1ZGlvQ29udGV4dCB8fCB3aW5kb3cud2Via2l0QXVkaW9Db250ZXh0O1xuaWYgKENvbnRleHQpIG1vZHVsZS5leHBvcnRzID0gbmV3IENvbnRleHQ7XG4iLCIoZnVuY3Rpb24gKGdsb2JhbCl7XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gd2luZG93O1xufSBlbHNlIGlmICh0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG59IGVsc2Uge1xuICAgIG1vZHVsZS5leHBvcnRzID0ge307XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ6dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSW01dlpHVmZiVzlrZFd4bGN5OWhkV1JwYnkxamIyNTBaWGgwTDI1dlpHVmZiVzlrZFd4bGN5OW5iRzlpWVd3dmQybHVaRzkzTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN1FVRkJRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJJaXdpWm1sc1pTSTZJbWRsYm1WeVlYUmxaQzVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcFppQW9kSGx3Wlc5bUlIZHBibVJ2ZHlBaFBUMGdYQ0oxYm1SbFptbHVaV1JjSWlrZ2UxeHVJQ0FnSUcxdlpIVnNaUzVsZUhCdmNuUnpJRDBnZDJsdVpHOTNPMXh1ZlNCbGJITmxJR2xtSUNoMGVYQmxiMllnWjJ4dlltRnNJQ0U5UFNCY0luVnVaR1ZtYVc1bFpGd2lLU0I3WEc0Z0lDQWdiVzlrZFd4bExtVjRjRzl5ZEhNZ1BTQm5iRzlpWVd3N1hHNTlJR1ZzYzJVZ2UxeHVJQ0FnSUcxdlpIVnNaUzVsZUhCdmNuUnpJRDBnZTMwN1hHNTlYRzRpWFgwPSIsIm1vZHVsZS5leHBvcnRzID0gU25hcmVcblxuZnVuY3Rpb24gU25hcmUgKGNvbnRleHQsIG9wdHMpIHtcbiAgb3B0cyA9IG9wdHMgfHwge31cbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxufVxuXG5TbmFyZS5wcm90b3R5cGUuY3JlYXRlQnVmZmVyID0gZnVuY3Rpb24gY3JlYXRlQnVmZmVyICgpIHtcbiAgY29uc3QgYnVmZmVyU2l6ZSA9IHRoaXMuY29udGV4dC5zYW1wbGVSYXRlXG4gIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCdWZmZXIoMSwgYnVmZmVyU2l6ZSwgdGhpcy5jb250ZXh0LnNhbXBsZVJhdGUpXG4gIGxldCBvdXRwdXQgPSBidWZmZXIuZ2V0Q2hhbm5lbERhdGEoMClcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGJ1ZmZlclNpemU7IGkrKykge1xuICAgIG91dHB1dFtpXSA9IE1hdGgucmFuZG9tKCkgKiAyIC0gMVxuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5TbmFyZS5wcm90b3R5cGUuaGl0ID0gZnVuY3Rpb24gaGl0ICh0aW1lKSB7XG4gIGNvbnN0IG5vaXNlID0gdGhpcy5jb250ZXh0LmNyZWF0ZUJ1ZmZlclNvdXJjZSgpXG4gIG5vaXNlLmJ1ZmZlciA9IHRoaXMuY3JlYXRlQnVmZmVyKClcblxuICBjb25zdCBub2lzZUZpbHRlciA9IHRoaXMuY29udGV4dC5jcmVhdGVCaXF1YWRGaWx0ZXIoKVxuICBub2lzZUZpbHRlci50eXBlID0gJ2hpZ2hwYXNzJ1xuICBub2lzZUZpbHRlci5mcmVxdWVuY3kudmFsdWUgPSAxMDAwXG4gIG5vaXNlLmNvbm5lY3Qobm9pc2VGaWx0ZXIpXG5cbiAgY29uc3Qgbm9pc2VFbnZlbG9wZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKClcbiAgbm9pc2VGaWx0ZXIuY29ubmVjdChub2lzZUVudmVsb3BlKVxuICBub2lzZUVudmVsb3BlLmNvbm5lY3QodGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uKVxuXG4gIGNvbnN0IG9zY2lsbGF0b3IgPSB0aGlzLmNvbnRleHQuY3JlYXRlT3NjaWxsYXRvcigpXG4gIG9zY2lsbGF0b3IudHlwZSA9ICd0cmlhbmdsZSdcblxuICBjb25zdCBvc2NFbnZlbG9wZSA9IHRoaXMuY29udGV4dC5jcmVhdGVHYWluKClcbiAgb3NjaWxsYXRvci5jb25uZWN0KG9zY0VudmVsb3BlKVxuICBvc2NFbnZlbG9wZS5jb25uZWN0KHRoaXMuY29udGV4dC5kZXN0aW5hdGlvbilcblxuICBub2lzZUVudmVsb3BlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMSwgdGltZSlcbiAgbm9pc2VFbnZlbG9wZS5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMSwgdGltZSArIDAuMilcbiAgbm9pc2Uuc3RhcnQodGltZSlcblxuICBvc2NpbGxhdG9yLmZyZXF1ZW5jeS5zZXRWYWx1ZUF0VGltZSgxMDAsIHRpbWUpXG4gIG9zY0VudmVsb3BlLmdhaW4uc2V0VmFsdWVBdFRpbWUoMC43LCB0aW1lKVxuICBvc2NFbnZlbG9wZS5nYWluLmV4cG9uZW50aWFsUmFtcFRvVmFsdWVBdFRpbWUoMC4wMSwgdGltZSArIDAuMSlcbiAgb3NjaWxsYXRvci5zdGFydCh0aW1lKVxuXG4gIG9zY2lsbGF0b3Iuc3RvcCh0aW1lICsgMC4yKVxuICBub2lzZS5zdG9wKHRpbWUgKyAwLjIpXG59XG4iLCJjb25zdCBjb250ZXh0ID0gcmVxdWlyZSgnYXVkaW8tY29udGV4dCcpXG5jb25zdCBLaWNrID0gcmVxdWlyZSgnLi9raWNrJylcbmNvbnN0IFNuYXJlID0gcmVxdWlyZSgnLi9zbmFyZScpXG5jb25zdCBIaWhhdCA9IHJlcXVpcmUoJy4vaGloYXQnKVxuXG5mdW5jdGlvbiBEcnVtbWVyIChvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEcnVtbWVyKSkgcmV0dXJuIG5ldyBEcnVtbWVyKG9wdGlvbnMpXG4gIGNvbnN0IGtpY2sgPSBuZXcgS2ljayhjb250ZXh0LCBvcHRpb25zLmtpY2spXG4gIGNvbnN0IHNuYXJlID0gbmV3IFNuYXJlKGNvbnRleHQsIG9wdGlvbnMuc25hcmUpXG4gIGNvbnN0IGhpaGF0ID0gbmV3IEhpaGF0KGNvbnRleHQsIG9wdGlvbnMuaGloYXQpXG5cbiAgcmV0dXJuIHtcbiAgICBraWNrLFxuICAgIHNuYXJlLFxuICAgIGhpaGF0LFxuICAgIGNvbnRleHRcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERydW1tZXJcbiJdfQ== | |
// Welcome! require() some modules from npm (like you were using browserify) | |
// and then hit Run Code to run your code on the right side. | |
// Modules get downloaded from browserify-cdn and bundled in your browser. | |
const drummer = require('drummer')() | |
const kick = drummer.kick | |
const snare = drummer.snare | |
const hihat = drummer.hihat | |
function bar (time) { | |
if (time >= 20) return | |
kick.hit(0 + time) | |
hihat.hit(0 + time) | |
hihat.hit(0.25 + time) | |
kick.hit(0.5 + time) | |
snare.hit(0.5 + time) | |
hihat.hit(0.5 + time) | |
hihat.hit(0.75 + time) | |
kick.hit(1 + time) | |
hihat.hit(1 + time) | |
hihat.hit(1.25 + time) | |
kick.hit(1.5 + time) | |
snare.hit(1.5 + time) | |
hihat.hit(1.5 + time) | |
hihat.hit(1.75 + time) | |
kick.hit(2 + time) | |
hihat.hit(2 + time) | |
hihat.hit(2.25 + time) | |
kick.hit(2.5 + time) | |
snare.hit(2.5 + time) | |
hihat.hit(2.5 + time) | |
snare.hit(2.75 + time) | |
return bar(time + 3) | |
} | |
bar(0) | |
;}, 0) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "requirebin-sketch", | |
"version": "1.0.0", | |
"dependencies": { | |
"drummer": "1.0.0" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- contents of this file will be placed inside the <body> --> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!-- contents of this file will be placed inside the <head> --> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment