summaryrefslogtreecommitdiff
path: root/client/lib/scales.js
diff options
context:
space:
mode:
authorJules Laplace <jules@okfoc.us>2017-04-29 13:49:36 -0400
committerJules Laplace <jules@okfoc.us>2017-04-29 13:49:36 -0400
commitc27f800fa586b40d2b9baa648cb0c894fdc1e4ef (patch)
tree0465838d21beedcac9154d3ecd99fe606e418123 /client/lib/scales.js
parent91ff874dfe5f7377dc7412dec9a78d03aad45c4d (diff)
client init
Diffstat (limited to 'client/lib/scales.js')
-rw-r--r--client/lib/scales.js161
1 files changed, 161 insertions, 0 deletions
diff --git a/client/lib/scales.js b/client/lib/scales.js
new file mode 100644
index 0000000..8480f9e
--- /dev/null
+++ b/client/lib/scales.js
@@ -0,0 +1,161 @@
+import Intonation from './intonation'
+
+const meantone = `! meanquar.scl
+!
+1/4-comma meantone scale. Pietro Aaron's temperament (1523)
+ 12
+!
+ 76.04900
+ 193.15686
+ 310.26471
+ 5/4
+ 503.42157
+ 579.47057
+ 696.57843
+ 25/16
+ 889.73529
+ 1006.84314
+ 1082.89214
+ 2/1
+`
+
+const mavila = `! mavila12.scl
+!
+A 12-note mavila scale (for warping meantone-based music), 5-limit TOP
+ 12
+!
+-30.99719
+ 163.50770
+ 358.01258
+ 327.01540
+ 521.52028
+ 490.52310
+ 685.02798
+ 654.03080
+ 848.53568
+ 1043.04057
+ 1012.04338
+ 1206.54826
+`
+
+const carlos_alpha = `! carlos_alpha.scl
+!
+Wendy Carlos' Alpha scale with perfect fifth divided in nine
+ 18
+!
+ 78.00000
+ 156.00000
+ 234.00000
+ 312.00000
+ 390.00000
+ 468.00000
+ 546.00000
+ 624.00000
+ 702.00000
+ 780.00000
+ 858.00000
+ 936.00000
+ 1014.00000
+ 1092.00000
+ 1170.00000
+ 1248.00000
+ 1326.00000
+ 1404.00000
+`
+
+const lamonte = `! young-lm_piano.scl
+!
+LaMonte Young's Well-Tempered Piano
+12
+!
+567/512
+9/8
+147/128
+21/16
+1323/1024
+189/128
+3/2
+49/32
+7/4
+441/256
+63/32
+2/1
+`
+
+const scales = [
+ {
+ intervals: '1/1 9/8 5/4 4/3 3/2 5/3 15/8 2/1',
+ name: "harmonic scale",
+ },
+ {
+ root: 450,
+ intervals: '1/1 9/8 5/4 4/3 3/2 5/3 15/8 2/1',
+ name: "harmonic scale @ 450",
+ },
+ {
+ tet: 5,
+ },
+ {
+ tet: 12,
+ },
+ {
+ tet: 17,
+ },
+ {
+ intervals: '1/1 81/80 33/32 21/20 16/15 12/11 11/10 10/9 9/8 8/7 7/6 32/27 6/5 11/9 5/4 14/11 9/7 21/16 4/3 27/20 11/8 7/5 10/7 16/11 40/27 3/2 32/21 14/9 11/7 8/5 18/11 5/3 27/16 12/7 7/4 16/9 9/5 20/11 11/6 15/8 40/21 64/33 160/81 2/1',
+ name: "harry partch scale",
+ },
+ {
+ scl: lamonte,
+ },
+ {
+ scl: meantone,
+ },
+ {
+ scl: mavila,
+ },
+ {
+ scl: carlos_alpha,
+ },
+].map( (opt) => new Intonation(opt) )
+
+let scale = scales[0]
+let handleChange = function(){}
+
+function build () {
+ scales.forEach( (scale, i) => {
+ scale.heading = document.createElement('div')
+ scale.heading.innerHTML = scale.name
+ scale.heading.classList.add('heading')
+ scale.heading.addEventListener('click', function(){
+ pick(i)
+ })
+ scale_list.appendChild(scale.heading)
+ })
+
+ pick(0)
+}
+
+function pick (i) {
+ if (scale) {
+ scale.heading && scale.heading.classList.remove('selected')
+ }
+ scale = scales[i]
+ scale.heading && scale.heading.classList.add('selected')
+ handleChange(scale)
+}
+
+function current () {
+ return scale
+}
+
+function onChange (fn) {
+ handleChange = fn
+}
+
+function names () {
+ return scales.map( scale => scale.name )
+}
+
+
+export default { scales, current, build, pick, names, onChange }