summaryrefslogtreecommitdiff
path: root/client/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/index.js')
-rw-r--r--client/index.js51
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;
}