summaryrefslogtreecommitdiffstats
path: root/exp
diff options
context:
space:
mode:
Diffstat (limited to 'exp')
-rw-r--r--exp/practool.html18
-rw-r--r--exp/practool.js20
2 files changed, 38 insertions, 0 deletions
diff --git a/exp/practool.html b/exp/practool.html
new file mode 100644
index 0000000..3317e5e
--- /dev/null
+++ b/exp/practool.html
@@ -0,0 +1,18 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="viewport" content="width=device-width, initial-scale=1"/>
+ <meta charset="utf-8"/>
+ <link rel="stylesheet" href="../style.css">
+ <title>practice session tools</title>
+ </head>
+ <body>
+ <h1>practice session tools</h1>
+ <noscript><h2><i>(this website requires javascript)</i></h2></noscript>
+ <h2>random scale</h2>
+ <p id="scale"></p>
+ <button id="scale_btn">gen</button>
+ <script src="practool.js"></script>
+ <p><i>(<a href="..">../</a>)</i></p>
+ </body>
+</html>
diff --git a/exp/practool.js b/exp/practool.js
new file mode 100644
index 0000000..782b992
--- /dev/null
+++ b/exp/practool.js
@@ -0,0 +1,20 @@
+let body = document.body;
+let doc = {};
+body.querySelectorAll('[id]').forEach(e => doc[e.id] = e);
+
+let rand = x => Math.floor(Math.random() * x);
+let arand = a => a[rand(a.length)]
+
+let roots = [
+ "A", "B", "C", "D", "E", "F", "G",
+ "A#", "C#", "D#", "F#", "G#",
+ "Ab", "Bb", "Db", "Eb", "Gb",
+];
+let modes = [
+ "major",
+ "natural minor", "harmonic minor", "melodic minor",
+];
+let random_scale = () => `${arand(roots)} ${arand(modes)}`;
+
+doc.scale_btn.onclick = () => doc.scale.innerHTML = random_scale();
+doc.scale_btn.onclick();