diff options
Diffstat (limited to 'client/index.js')
| -rw-r--r-- | client/index.js | 51 |
1 files changed, 14 insertions, 37 deletions
diff --git a/client/index.js b/client/index.js index 3c56825..2c986dd 100644 --- a/client/index.js +++ b/client/index.js @@ -20,7 +20,7 @@ import { frequencyInRange, mod, } from "./lib/util"; -import { PRIMES } from "./lib/primes"; +import { scales } from "./lib/scales"; let instrument = kalimba; @@ -40,7 +40,6 @@ let notes = []; let base_x = 0; let base_y = 0; let scaleMode = 0; -let scaleModeCount = 5; let is_split = false; let frequencies; @@ -60,6 +59,10 @@ function build() { h = window.innerHeight; ws = Math.ceil(w / s); hs = Math.ceil(h / s); + const scale = scales[scaleMode % scales.length]; + if (scale.reset) { + scale.reset(base_x, base_y, ws, hs); + } for (var i = 0; i < ws; i++) { notes[i] = []; for (var j = 0; j < hs; j++) { @@ -74,7 +77,7 @@ function rebuild() { } function log() { const seen = {}; - console.log(notes); + // console.log(notes); for (let i = 0; i < 8; i++) { for (let j = 0; j < 8; j++) { const frequency = notes[i][j].frequency; @@ -85,7 +88,7 @@ function log() { } } frequencies = Object.values(seen).sort((a, b) => a - b); - console.log(frequencies); + // console.log(frequencies); console.log(frequencies.length, "unique frequencies in 8x8"); } function play(freq) { @@ -138,36 +141,10 @@ function toggle(freq) { function add(i, j) { const ii = i + base_x; const jj = j + base_y; - let a, b; - switch (scaleMode % scaleModeCount) { - case 1: - a = ii + 1; - b = ii + jj + 2; - break; - case 2: - a = ii + jj + 2; - b = jj + 1; - break; - case 3: - a = PRIMES[ii % PRIMES.length]; - b = PRIMES[jj % PRIMES.length]; - break; - case 4: - if (ii < jj) { - a = 3 ** (ii + 1); - b = 2 ** (jj + Math.ceil(Math.max(0, (ii * 1.0) / 2))); - } else { - a = 2 ** (ii + Math.ceil(Math.max(0, (jj * 1.2) / 2))); - b = 3 ** jj; - } - // b = 2 ** jj; - break; - case 0: - default: - a = ii + 1; - b = jj + 1; - break; - } + + const scale = scales[scaleMode % scales.length]; + const [a, b] = scale.get(ii, jj, i, j, base_x, base_y); + const div = document.createElement("div"); const frequency = (root * a) / b; // const frequency = root * Math.pow(2, ((b / a) % 1) + 1); @@ -314,7 +291,7 @@ function keydown(e) { if (e.shiftKey) { step += 4; } - console.log(e.keyCode); + // console.log(e.keyCode); switch (e.keyCode) { case 37: // left base_x = Math.max(0, base_x - step); @@ -336,11 +313,11 @@ function keydown(e) { midi.enable(trigger_index); break; case 189: // - - scaleMode = mod(scaleMode - 1, scaleModeCount); + scaleMode = mod(scaleMode - 1, scales.length); rebuild(); break; case 187: // = - scaleMode = mod(scaleMode + 1, scaleModeCount); + scaleMode = mod(scaleMode + 1, scales.length); rebuild(); break; } |
