diff options
| author | julian laplace <julescarbon@gmail.com> | 2025-07-05 17:06:59 +0200 |
|---|---|---|
| committer | julian laplace <julescarbon@gmail.com> | 2025-07-05 17:06:59 +0200 |
| commit | 200c1a4f0ebd3188faebaea8e7278fc5105227cf (patch) | |
| tree | 12f61dcd756ba57e0f718b87e4eb0e9c30d90f4d /bundle.js | |
| parent | d82f99fd89e23fdb62598b616e39537360a10f74 (diff) | |
laod sample
Diffstat (limited to 'bundle.js')
| -rw-r--r-- | bundle.js | 222 |
1 files changed, 187 insertions, 35 deletions
@@ -22532,6 +22532,11 @@ var _startAudioContext2 = _interopRequireDefault(_startAudioContext); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Utilities + * @module lib/util.js; + */ + var isIphone = navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i); var isIpad = navigator.userAgent.match(/iPad/i); var isAndroid = navigator.userAgent.match(/Android/i); @@ -22634,6 +22639,11 @@ module.exports = Array.isArray || isArray; Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Iquizeles color generator + * @module lib/color.js; + */ + var palettes = [[[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 1.0], [0.0, 0.33, 0.67]], [[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 1.0], [0.0, 0.1, 0.2]], [[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 1.0], [0.3, 0.2, 0.2]], [[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 1.0, 0.5], [0.8, 0.9, 0.3]], [[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [1.0, 0.7, 0.4], [0.0, 0.15, 0.2]], [[0.5, 0.5, 0.5], [0.5, 0.5, 0.5], [2.0, 1.0, 0.0], [0.5, 0.2, 0.25]], [[0.8, 0.5, 0.4], [0.2, 0.4, 0.2], [2.0, 1.0, 1.0], [0.0, 0.25, 0.25]]]; var palette = palettes[0]; @@ -22679,6 +22689,11 @@ var _util = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Kalimba + * @module lib/kalimba.js; + */ + var player_count = 4; var samples = [{ root: 219.5, fn: "samples/380737__cabled-mess__sansula-01-a-raw.wav" }, { root: 260.9, fn: "samples/380736__cabled-mess__sansula-02-c-raw.wav" }, { root: 330.2, fn: "samples/380735__cabled-mess__sansula-03-e-raw.wav" }]; @@ -22713,13 +22728,11 @@ var last = 440; function play(freq) { last = freq; - var best = (0, _util.choice)(samples); - best.index = (best.index + 1) % player_count; - - var player = best.players[best.index]; - player.playbackRate = freq / best.root; - // console.log(player.name); + var sample = (0, _util.choice)(samples); + sample.index = (sample.index + 1) % sample.players.length; + var player = sample.players[sample.index]; + player.playbackRate = freq / sample.root; player.start(); } @@ -22764,6 +22777,11 @@ function keydown(e) { Object.defineProperty(exports, "__esModule", { value: true }); +/** + * Keyboard helper + * @module lib/keys.js; + */ + var keys = {}; var key_numbers = {}; var letters = "zxcvbnmasdfghjklqwertyuiop"; @@ -22822,6 +22840,11 @@ var _util = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } +/** + * Sine wave organ + * @module lib/organ.js; + */ + var oscillators = {}; var output = void 0; @@ -22881,7 +22904,10 @@ var _tone2 = _interopRequireDefault(_tone); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } -var output = null; +var output = null; /** + * Common output stage + * @module lib/output.js; + */ function getOutput() { if (!output) output = makeOutput(); @@ -22907,6 +22933,11 @@ function makeOutput() { Object.defineProperty(exports, "__esModule", { value: true }); +/** + * List of prime numbers + * @module lib/primes.js; + */ + var PRIMES = exports.PRIMES = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; /***/ }), @@ -23151,6 +23182,10 @@ var _kalimba = __webpack_require__(4); var _kalimba2 = _interopRequireDefault(_kalimba); +var _sampler = __webpack_require__(16); + +var _sampler2 = _interopRequireDefault(_sampler); + var _organ = __webpack_require__(6); var _organ2 = _interopRequireDefault(_organ); @@ -23165,7 +23200,10 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de // import life from "./lib/life"; -var instrument = _kalimba2.default; +var instrument = _kalimba2.default; /** + * Lambdoma Triangle + * @module index.js; + */ var root = 440; var s = 50; @@ -23191,6 +23229,9 @@ var is_split = false; var output = (0, _output.getOutput)(); _kalimba2.default.load(output); _organ2.default.load(output); + _sampler2.default.load(output, function ready() { + instrument = _sampler2.default; + }); build(); bind(); }); @@ -23234,7 +23275,7 @@ function play(freq) { } } function trigger(freq) { - _kalimba2.default.play(freq.frequency); + instrument.play(freq.frequency); } function pause(freq) { _organ2.default.pause(freq.frequency); @@ -23333,25 +23374,12 @@ function add(i, j) { } div.style.backgroundColor = (0, _color2.default)(frac, add + add_on, mul_on); dragging = true; - if (instrument === _organ2.default) { - toggle(freq); - erasing = !freq.playing; - } else { - trigger(freq); - } + trigger(freq); }); div.addEventListener("mouseenter", function () { div.style.backgroundColor = (0, _color2.default)(frac, add + add_on, mul_on); if (dragging) { - if (instrument === _organ2.default) { - if (erasing) { - pause(freq); - } else { - toggle(freq); - } - } else { - trigger(freq); - } + trigger(freq); } }); div.addEventListener("mouseleave", function () { @@ -23413,10 +23441,6 @@ function bind() { } } -function swap_instrument() { - instrument = instrument === _kalimba2.default ? _organ2.default : _kalimba2.default; -} - function keydown(e) { // console.log(e.keyCode) if (e.altKey || e.ctrlKey || e.metaKey) return; @@ -23450,24 +23474,18 @@ function keydown(e) { window.addEventListener("keydown", keydown, true); _keys2.default.listen(function (index) { - index += 7; var x = index % 7; var y = Math.floor(index / 7); var a = x; var b = y + 1; var freq = notes[a][b]; - console.log(a, b, freq.frequency); + console.log(a / b, freq.frequency); trigger(freq); // const freq = scales.current().index(index) // document.body.style.backgroundColor = color( index / scales.current().scale.length ) // instrument.toggle(freq) }); -var hash = window.location.hash || window.location.search; -if (hash.match("sin") || hash.match("organ")) { - instrument = _organ2.default; -} - /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { @@ -23893,6 +23911,140 @@ function isNumber( value ) { module.exports = isNumber; +/***/ }), +/* 16 */ +/***/ (function(module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.load = load; +exports.dragOver = dragOver; +exports.drop = drop; +exports.loadSampleFromFile = loadSampleFromFile; + +var _tone = __webpack_require__(0); + +var _tone2 = _interopRequireDefault(_tone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } /** + * Sampler + * @module lib/sampler.js; + */ + +var output = void 0; +var ready = void 0; +var current = ""; +var samples = {}; + +var player_count = 12; + +function load(out, readyCallback) { + output = out; + ready = readyCallback; + document.body.addEventListener("dragover", dragOver); + document.body.addEventListener("drop", drop); +} + +/** + * Drag and drop + */ +function dragOver(event) { + event.preventDefault(); +} +function drop(event) { + event.preventDefault(); + var files = event.dataTransfer.items ? [].concat(_toConsumableArray(event.dataTransfer.items)).filter(function (item) { + return item.kind === "file"; + }).map(function (item) { + return item.getAsFile(); + }) : [].concat(_toConsumableArray(event.dataTransfer.files)); + + var file = files[0]; + var reader = new FileReader(); + + reader.addEventListener("load", function () { + return loadSampleFromFile(file, reader.result); + }, false); + + if (file) { + reader.readAsDataURL(file); + } +} + +function loadSampleFromFile(file, url) { + var name = file.name; + + current = name; + + var sample = samples[name] = samples[name] || {}; + sample.root = 440; + sample.players = []; + sample.index = -1; + for (var i = 0; i < player_count; i++) { + var player = new _tone2.default.Player({ + url: url, + retrigger: true, + playbackRate: 1 + }); + player.name = name; + player.connect(output); + sample.players.push(player); + } + console.log("+ Sampler:", name, "(" + sample.players.length + " voices)"); + ready(); +} + +/** + * Player + */ +var last = 440; + +function play(freq) { + last = freq; + var sample = samples[current]; + sample.index = (sample.index + 1) % sample.players.length; + var player = sample.players[sample.index]; + player.playbackRate = freq / sample.root; + player.start(); +} + +function pause() { + // no-op +} + +exports.default = { load: load, play: play, pause: pause }; + +// for help tuning + +function keydown(e) { + // console.log(e.keyCode) + if (e.metaKey && last && current) { + var sample = samples[current]; + var step = e.shiftKey ? e.ctrlKey ? 0.1 : 1 : 10; + switch (e.keyCode) { + case 38: + // up + e.preventDefault(); + sample.root -= step; + play(last); + break; + case 40: + // down + e.preventDefault(); + sample.root += step; + play(last); + break; + } + } +} +window.addEventListener("keydown", keydown, true); + /***/ }) /******/ ]); //# sourceMappingURL=bundle.js.map
\ No newline at end of file |
