summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--env.js42
-rw-r--r--index.html4
2 files changed, 33 insertions, 13 deletions
diff --git a/env.js b/env.js
index 0382770..a0dd02a 100644
--- a/env.js
+++ b/env.js
@@ -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
}
diff --git a/index.html b/index.html
index c35674a..3131393 100644
--- a/index.html
+++ b/index.html
@@ -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">