Module:Harmonic entropy: Difference between revisions

Updated to_cents: doesn't round by default now
New parse_ET function, backslash_ratio now calls that, steps now defaults to 1
Line 22: Line 22:
end
end


-- return ratio corresponding to an interval written in backslash notation
-- edf = ed3/2, edo = ed2, edt = ed3
-- edf = ed3/2, edo = ed2, edt = ed3
local equaves =
local equaves =
Line 30: Line 29:
   ['t'] = 3
   ['t'] = 3
}
}
-- returns size and equave of an ET given its name
function p.parse_ET(frame)
local args = getArgs(frame)
return p._parse_ET(args[1])
end
function p._parse_ET(input)
input = string.lower(input)
local size, equave
-- size defaults to 12
size = input:match("([0-9]+)[%-]?ed") or 12
if input:match("^[0-9]*[%-]?ed[fot]$") then
equave = equaves[tostring(input:match("[fot]"))]
else
-- equave defaults to 2
equave = u.eval_num_arg(input:match("^.-ed(.+)%s*$")) or 2
end
return size, equave
end
-- return ratio corresponding to an interval written in backslash notation
-- ("steps" of "size" equal divisions of the "equave")


function p.backslash_ratio(frame)
function p.backslash_ratio(frame)
Line 39: Line 61:
-- result defaults to 0
-- result defaults to 0
local result = 0
local result = 0
-- "steps" of "size" equal divisions of "equave" (c/d), defaults to 0\12(edo)
-- steps defaults to 1
local steps, size, equave = 0, 12, 2
local steps = input:match("%s*([0-9]*)\\.-") or 1
-- edf = ed3/2, edo = ed2, edt = ed3
local size, equave = parse_ET(input:match("\\(.*)"))
input = string.lower(input)
steps, size = input:match("^%s*([0-9]*)\\([0-9]*).-$")  
if input:match("^[0-9]*\\[0-9]*[%-]?ed[fot]$") then
equave = equaves[tostring(input:match("[fot]"))]
else
equave = u.eval_num_arg(input:match("^.-ed(.-)%s*$") or 2)
end
result = tonumber(equave)^(tonumber(steps)/tonumber(size))
result = tonumber(equave)^(tonumber(steps)/tonumber(size))
return result
return result