summaryrefslogtreecommitdiff
path: root/bundle.js
diff options
context:
space:
mode:
authorjulian laplace <julescarbon@gmail.com>2025-07-05 17:06:59 +0200
committerjulian laplace <julescarbon@gmail.com>2025-07-05 17:06:59 +0200
commit200c1a4f0ebd3188faebaea8e7278fc5105227cf (patch)
tree12f61dcd756ba57e0f718b87e4eb0e9c30d90f4d /bundle.js
parentd82f99fd89e23fdb62598b616e39537360a10f74 (diff)
laod sample
Diffstat (limited to 'bundle.js')
-rw-r--r--bundle.js222
1 files changed, 187 insertions, 35 deletions
diff --git a/bundle.js b/bundle.js
index 1d672b7..9b94c3b 100644
--- a/bundle.js
+++ b/bundle.js
@@ -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