summaryrefslogtreecommitdiff
path: root/client/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'client/index.js')
-rw-r--r--client/index.js41
1 files changed, 30 insertions, 11 deletions
diff --git a/client/index.js b/client/index.js
index 59d67f3..324d997 100644
--- a/client/index.js
+++ b/client/index.js
@@ -42,6 +42,7 @@ let lastNote = 0;
let notes = [];
let base_x = 0;
let base_y = 0;
+let scale = scales[0];
let scaleMode = 0;
let is_split = false;
let intervals;
@@ -63,7 +64,7 @@ function build() {
h = window.innerHeight;
ws = Math.ceil(w / s);
hs = Math.ceil(h / s);
- const scale = scales[scaleMode % scales.length];
+ scale = scales[scaleMode % scales.length];
if (scale.reset) {
scale.reset(Math.round(base_x), Math.round(base_y), ws, hs);
}
@@ -126,6 +127,7 @@ function trigger_index(index) {
}
function pause(note) {
organ.pause(note.interval);
+ trigger(note);
const rounded = roundInterval(note.interval);
notes.forEach((row) =>
row.forEach(
@@ -146,7 +148,6 @@ function add(i, j) {
const ii = i + Math.round(base_x);
const jj = j + Math.round(base_y);
- const scale = scales[scaleMode % scales.length];
const [a, b] = scale.get(
ii,
jj,
@@ -155,9 +156,11 @@ function add(i, j) {
Math.round(base_x),
Math.round(base_y),
);
+ const isEqualTemperament = scale.name === "equal";
const div = document.createElement("div");
- const interval = a / b;
+
+ const interval = isEqualTemperament ? Math.pow(2, a / b) : a / b;
// const interval = root * Math.pow(2, ((b / a) % 1) + 1);
let add = 0;
let frac;
@@ -177,7 +180,7 @@ function add(i, j) {
recolor: (numerator, denominator) => {
let aa = a / numerator;
let bb = b / denominator;
- if (aa < bb) {
+ if (aa < bb && aa !== 0) {
add = -Math.log(bb / aa) / 3.5;
} else {
add = Math.log(aa / bb) / 6;
@@ -188,21 +191,35 @@ function add(i, j) {
let a_disp = a_inv / ba_gcd;
let b_disp = b_inv / ba_gcd;
- frac = Math.log2(aa / bb) % 1;
+ frac = Math.log2(isEqualTemperament ? interval : aa / bb) % 1;
+
let frac_orig = Math.log2(a / b) % 1;
if (frac < 0) {
frac += 1;
}
+
if (frac_orig < 0) {
frac += 1;
}
- if (frac_orig === 0) {
- div.style.fontWeight = "900";
+
+ if (isEqualTemperament) {
+ if (interval % 1 === 0) {
+ div.style.fontWeight = "900";
+ } else {
+ div.style.fontWeight = "500";
+ }
} else {
- div.style.fontWeight = "500";
+ if (frac_orig === 0) {
+ div.style.fontWeight = "900";
+ } else {
+ div.style.fontWeight = "500";
+ }
}
- div.innerHTML = `<div>${a_disp}</div><div>/</div><div>${b_disp}</div>`;
+ div.innerHTML = isEqualTemperament
+ ? `<div>${a}</div><div></div><div>${b}√2</div>`
+ : `<div>${a_disp}</div><div>/</div><div>${b_disp}</div>`;
+
if (note.playing) {
div.style.backgroundColor = color(frac, add + add_on, mul_on);
} else {
@@ -376,8 +393,9 @@ function keydown(e) {
showMessage(`Root: ${root} hz`);
} else {
scaleMode = mod(scaleMode - 1, scales.length);
+ scale = scales[scaleMode];
rebuild();
- showMessage(scales[scaleMode].name);
+ showMessage(scale.name);
}
break;
case 187: // =
@@ -388,8 +406,9 @@ function keydown(e) {
showMessage(`Root: ${root} hz`);
} else {
scaleMode = mod(scaleMode + 1, scales.length);
+ scale = scales[scaleMode];
rebuild();
- showMessage(scales[scaleMode].name);
+ showMessage(scale.name);
}
break;
}