Module:Harmonic entropy: Difference between revisions

Round to 3 decimal places by default ("no rounding" can be achieved by using prec ≥ 12)
Added backslash_ratio
Line 15: Line 15:
prec = u.eval_num_arg(prec, 3)
prec = u.eval_num_arg(prec, 3)
return u._round(1200*u._log(ratio), prec)
return u._round(1200*u._log(ratio), prec)
end
-- return ratio corresponding to an interval written in backslash notation
-- edf = ed3/2, edo = ed2, edt = ed3
local equaves =
{
  ['f'] = 3/2,
  ['o'] = 2,
  ['t'] = 3
}
function p.backslash_ratio(frame)
local args = getArgs(frame)
return p._backslash_ratio(args[1])
end
function p._backslash_ratio(input)
-- result defaults to 0
local result = 0
-- "steps" of "size" equal divisions of "equave" (c/d), defaults to 0\12(edo)
local steps, size, equave = 0, 12, 2
-- edf = ed3/2, edo = ed2, edt = ed3
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*$"))
end
result = tonumber(equave)^(tonumber(steps)/tonumber(size))
return result
end
end


return p
return p