Module:MOS intervals: Difference between revisions

Ganaram inukshuk (talk | contribs)
Fixed bug with mosstep range calculation for nL ns mosses
Ganaram inukshuk (talk | contribs)
m Removed old code, fixed bug with ranges being highest to lowest
Line 80: Line 80:
local min_cents = L_count * L_size_min + s_count * s_size_max
local min_cents = L_count * L_size_min + s_count * s_size_max
local max_cents = L_count * L_size_max + s_count * s_size_min
local max_cents = L_count * L_size_max + s_count * s_size_min
result = string.format("%.1f¢ to %.1f¢", min_cents, max_cents)
result = string.format("%.1f¢ to %.1f¢", math.min(min_cents, max_cents), math.max(min_cents, max_cents))
else
else
local period_in_cents = equave_in_cents / utils._gcd(input_mos.nL, input_mos.ns)
local period_in_cents = equave_in_cents / utils._gcd(input_mos.nL, input_mos.ns)
Line 88: Line 88:
return result
return result
end
end
-- Helper function
-- Produces the cent range for a mosstep
--[[
function p.mos_interval_to_cent_range(step_pattern, mossteps, input_mos)
local nL = input_mos.nL
local ns = input_mos.ns
local equave_in_cents = rat.cents(input_mos.equave)
local L_count = 0
local s_count = 0
for i = 1, mossteps do
local step =  string.sub(step_pattern, i, i)
if step == "L" then
L_count = L_count + 1
elseif step == "s" then
s_count = s_count + 1
end
end
local result = ""
if utils._gcd(nL, ns) > 1 then
result = string.format("%.1f¢", (L_count + s_count) * equave_in_cents / (nL + ns))
else
local lim1 = (L_count + s_count) * equave_in_cents / (nL + ns)
local lim2 = (L_count) * equave_in_cents / (nL)
result = string.format("%.1f¢ to %.1f¢", math.min(lim1, lim2), math.max(lim1, lim2))
end
return result
end
]]--


-- Helper function
-- Helper function