Module:Infobox chord: Difference between revisions

Bcmills (talk | contribs)
No edit summary
Bcmills (talk | contribs)
No edit summary
Line 47: Line 47:


local prime_limit = 1
local prime_limit = 1
local odd_limit = 1
local root_interval_links  = ""
 
local ratio_string = ""
for i, h in ipairs(harmonics) do
for i, h in ipairs(harmonics) do
for prime, n in pairs(utils.prime_factorization_raw(h)) do
for prime, n in pairs(utils.prime_factorization_raw(h)) do
Line 60: Line 58:
local numer = h / gcd
local numer = h / gcd
local denom = root / gcd
local denom = root / gcd
if i == 1 then
table.insert(root_interval_links, "[[" .. numer .. "/" .. denom .. "|" .. numer .. "⁄" .. denom .. "]]")
ratio_string = ratio_string .. numer .. "" .. denom
end
else
ratio_string = ratio_string .. " – " .. numer .. "⁄" .. denom  
local odd_limit = 1
end
for j, b in ipairs(harmonics) do
local odd = numer
for i, a in ipairs(harmonics) do
while odd % 2 == 0 do
local gcd = utils._gcd(a, b)
odd = odd / 2
local numer = b / gcd
end
local denom = a / gcd
if odd > odd_limit then
 
odd_limit = odd
while numer % 2 == 0 do
numer = numer / 2
end
if numer > odd_limit then
odd_limit = numer
end
 
while denom % 2 == 0 do
denom = denom / 2
end
if denom > odd_limit then
odd_limit = denom
end
end
end
end
end
 
table.insert(infobox_data, {"Harmonics", frame.args["Harmonics"]})
table.insert(infobox_data, {"Harmonics", frame.args["Harmonics"]})
table.insert(infobox_data, {"Intervals from root", ratio_string})
table.insert(infobox_data, {"Intervals from root", table.concat(root_interval_links,  " – ")})
table.insert(infobox_data, {"[[Prime limit]]", prime_limit})
table.insert(infobox_data, {"[[Prime limit]]", prime_limit})
table.insert(infobox_data, {"[[Odd limit]]", odd_limit})
table.insert(infobox_data, {"[[Odd limit]]", odd_limit})