diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2018-08-12 15:16:16 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2018-08-12 15:16:16 +0200 |
| commit | 86213c887b101044ae2f3ea393fee927842dbde2 (patch) | |
| tree | 72e903084c6f19eb8f15640c1d354b9226dea591 /client/lib/scales.js | |
inequality sonification project
Diffstat (limited to 'client/lib/scales.js')
| -rw-r--r-- | client/lib/scales.js | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/client/lib/scales.js b/client/lib/scales.js new file mode 100644 index 0000000..cb36b28 --- /dev/null +++ b/client/lib/scales.js @@ -0,0 +1,181 @@ +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 colundi = `! colundi.scl +! +Colundi scale +10 +! +9/8 +171/140 +137/112 +43/35 +3/2 +421/280 +213/140 +263/150 +66/35 +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, + }, + { + scl: colundi, + }, +].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 } |
