Module:Infobox chord: Difference between revisions

Odd limit -> intervallic odd limit
Rework and simplify the subharmonic notation
Line 86: Line 86:
local utonal_odd_limit = 1
local utonal_odd_limit = 1
local utonal_intervals = {}
local subharmonics = {}
for i, h in ipairs(harmonics) do
for i, h in ipairs(harmonics) do
-- find the subharmoncis from the harmonics
local gcd = utils._gcd(lcm, h)
local gcd = utils._gcd(lcm, h)
local numer = h / gcd
local s = lcm / gcd
local denom = lcm / gcd
table.insert(subharmonics, s)
table.insert(utonal_intervals, numer .. "/" .. denom)
 
-- find the utonal odd limit
local denom_odd = denom
local s_odd = s
while denom_odd > 0 and denom_odd % 2 == 0 do
while s_odd > 0 and s_odd % 2 == 0 do
denom_odd = denom_odd / 2
s_odd = s_odd / 2
end
end
if denom_odd > utonal_odd_limit then
if s_odd > utonal_odd_limit then
utonal_odd_limit = denom_odd
utonal_odd_limit = s_odd
end
end
end
end


-- intervallic odd limit
local odd_limit = 1
local odd_limit = 1
for j, b in ipairs(harmonics) do
for j, b in ipairs(harmonics) do
Line 127: Line 129:
table.insert(infobox_data, {"Harmonics", frame.args["Harmonics"]})
table.insert(infobox_data, {"Harmonics", frame.args["Harmonics"]})
if (not utils.value_provided(frame.args["Root"])) and (utonal_odd_limit <= otonal_odd_limit or utonal_odd_limit < 1000) then
if (not utils.value_provided(frame.args["Root"])) and (utonal_odd_limit <= otonal_odd_limit or utonal_odd_limit < 1000) then
table.insert(infobox_data, {"Subharmonics", table.concat(utonal_intervals, ":")})
table.insert(infobox_data, {"Subharmonics", "1/(" .. table.concat(subharmonics, ":") .. ")"})
end
end
table.insert(infobox_data, {"Intervals from root", table.concat(root_interval_links, " ‒ ")})
table.insert(infobox_data, {"Intervals from root", table.concat(root_interval_links, " ‒ ")})