summaryrefslogtreecommitdiff
path: root/client
diff options
context:
space:
mode:
Diffstat (limited to 'client')
-rw-r--r--client/index.js28
-rw-r--r--client/lib/scales.js7
2 files changed, 29 insertions, 6 deletions
diff --git a/client/index.js b/client/index.js
index 24026fc..a7bdd9e 100644
--- a/client/index.js
+++ b/client/index.js
@@ -156,6 +156,7 @@ function add(i, j) {
Math.round(base_x),
Math.round(base_y),
);
+
const isEqualTemperament = scale.name === "equal";
const div = document.createElement("div");
@@ -187,9 +188,20 @@ function add(i, j) {
}
let a_inv = a * denominator;
let b_inv = b * numerator;
- let ba_gcd = gcd(a_inv, b_inv);
- let a_disp = a_inv / ba_gcd;
- let b_disp = b_inv / ba_gcd;
+ let a_disp, b_disp;
+ if (scale.name === "hyperbolic") {
+ a_inv *= Math.round(base_y) + 1;
+ b_inv *= Math.round(base_y) + 1;
+ let ba_gcd = gcd(Math.round(a_inv), Math.round(b_inv));
+ a_disp = Math.round(a_inv / ba_gcd);
+ b_disp = Math.round(b_inv / ba_gcd);
+ // a_disp = Math.round(a_inv);
+ // b_disp = Math.round(b_inv);
+ } else {
+ let ba_gcd = gcd(a_inv, b_inv);
+ a_disp = a_inv / ba_gcd;
+ b_disp = b_inv / ba_gcd;
+ }
frac = Math.log2(isEqualTemperament ? interval : aa / bb) % 1;
@@ -322,9 +334,13 @@ function bind() {
.addEventListener("click", () =>
document.querySelector("#help").classList.toggle("visible"),
);
- document.querySelector("#pythagorean").addEventListener("click", () => {
- scaleMode = scales.findIndex((scale) => scale.name === "pythagorean");
- rebuild();
+ Array.from(document.querySelectorAll(".mode")).forEach((el) => {
+ console.log(el.getAttribute("name"));
+ el.addEventListener("click", (event) => {
+ const name = el.getAttribute("name");
+ scaleMode = scales.findIndex((scale) => scale.name === name);
+ rebuild();
+ });
});
// Wheel to scroll
diff --git a/client/lib/scales.js b/client/lib/scales.js
index f122ba0..5e28ea7 100644
--- a/client/lib/scales.js
+++ b/client/lib/scales.js
@@ -43,6 +43,13 @@ export const scales = [
},
get: (ii, jj, i, j) => [a[i], b[j]],
},
+ {
+ name: "hyperbolic",
+ get: (ii, jj, i, j, x, y) => [
+ 1 + (i * (x + 1)) / (y + 1),
+ 1 + (j * (x + 1)) / (y + 1),
+ ],
+ },
// {
// name: "triangle",
// reset: (x, y, w, h) => {