diff options
| author | Jules Laplace <jules@okfoc.us> | 2016-09-14 02:30:04 -0400 |
|---|---|---|
| committer | Jules Laplace <jules@okfoc.us> | 2016-09-14 02:30:04 -0400 |
| commit | 46990e203362793d71871b23e91af8a4ac6958e8 (patch) | |
| tree | 312209f30b0a720133e2803cc63ee8fe9ff58e2d | |
| parent | a8d86242bf654e4bff5937ca1353f00b0d7f3aa7 (diff) | |
fiiiiix scaling
| -rw-r--r-- | env.js | 42 | ||||
| -rw-r--r-- | index.html | 4 |
2 files changed, 33 insertions, 13 deletions
@@ -137,10 +137,29 @@ var environment = (function(){ use_scale = $("#use_scale").get(0).checked } environment.set_intervals = function(){ - scale = $("#intervals").val().split(" ").map(parseInterval).filter(function(v){ + root = parseFloat( $("#root").val() ) + var intervals = $("#intervals").val().split(/\s/).map(function(v){ + if (v.indexOf("/") !== -1) return parseInterval(v) // intervals + if (v.indexOf("f") !== -1) return parseFloat(v) // pure frequencies + return parseFloat(v) + }).filter(function(v){ return !! v - }).map(function(v){ - return v * root + }) + if (! intervals.length) return + var last_interval = intervals[ intervals.length-1 ] + if (last_interval > 20) { + interval = last_interval / intervals[0] + } + else { + interval = intervals.pop() + } + scale = intervals.map(function(v){ + if (v < 20) { + return v * root + } + else { + return v + } }) } environment.check_drawing = function(){ @@ -264,7 +283,7 @@ var environment = (function(){ var ratio, n tet = parseFloat( $("#tet").val() ) root = parseFloat( $("#root").val() ) - interval = parseInterval( $("#interval").val() ) + interval = intervals[ intervals.length - 1 ] ratio = Math.pow( interval, 1/tet ) n = root scale = [n] @@ -300,12 +319,15 @@ var environment = (function(){ return scale_f } environment.quantize_index = function(index){ - return mod(index, scale.length-1)|0 + return mod(index-1, scale.length)|0 } environment.index_to_frequency = function(index){ - var f = scale[ mod(index, scale.length-1)|0 ] - var pow = Math.floor(norm(index, 0, scale.length-1)) - 2 - f *= Math.pow(interval, pow) + var f = scale[ mod(index, scale.length)|0 ] +// if (f < 20) { + var pow = Math.floor(norm(index-1, 0, scale.length)) - 2 + f *= Math.pow(interval, pow) +// } + // console.log(index, f, pow) // console.log(index, scale.length, pow, f) return f } @@ -442,7 +464,8 @@ var environment = (function(){ } Wire.prototype.updateColor = function(should_set){ var index = this.index() - var color = Snap.hsl(mod(index / tet * 240 + 180, 360), 100, 50) + // console.log(index, scale.length, index / scale.length) + var color = Snap.hsl(mod(index / scale.length * 240 + 180, 360), 100, 50) if (should_set) { this.path.attr({ stroke: color, @@ -523,7 +546,6 @@ var environment = (function(){ if (isNaN(num)) return 2 if (isNaN(den) || den == 0) return num if (num == den) return 2 - if (num < den) return den/num return num / den } @@ -62,12 +62,10 @@ input[type=text] { width: 30px } <input id="tet" type="number" min="2" max="500" step="1" value="12"> <label for="root">root</label> <input id="root" type="number" min="20" max="20000" value="440"> - <label for="interval">interval</label> - <input id="interval" type="text" value="2/1"> <label for="duration">duration</label> <input id="duration" type="number" min="0" max="5000" step="50" value="1250"> <label for="intervals">intervals</label> - <input id="intervals" type="text" value="9/8 5/4 4/3 3/2 5/3 15/8 2/1"> + <input id="intervals" type="text" value="1/1 9/8 5/4 4/3 3/2 5/3 15/8 2/1"> <label for="use_scale">use scale</label> <input id="use_scale" type="checkbox" checked> <div id="mobile_controls"> |
