Module:JI ratios in ED: Difference between revisions
m Bugfix?! (this module doesn't use the harmonic entropy module) |
ArrowHead294 (talk | contribs) mNo edit summary |
||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
local | local p = {} | ||
local et = require("Module:ET") | |||
--local interval = require('Module:Harmonic entropy') | --local interval = require('Module:Harmonic entropy') | ||
local | local jiraf = require("Module:JI ratio finder") | ||
local | local rat = require("Module:Rational") | ||
local tip = require( | local tip = require("Module:Template input parse") | ||
local | local utils = require("Module:Utils") | ||
local | local yesno = require("Module:Yesno") | ||
-- Helper function | -- Helper function | ||
| Line 58: | Line 60: | ||
-- Table headers | -- Table headers | ||
local step_in_cents = (step / steps) * rat.cents(equave) | local step_in_cents = (step / steps) * rat.cents(equave) | ||
result = result .. string.format( | result = result .. string.format("| %d\n", step) | ||
result = result .. string.format( | result = result .. string.format("| %.3f\n", step_in_cents) | ||
-- If this is the first or last step, only use the unison or equave | -- If this is the first or last step, only use the unison or equave | ||
| Line 87: | Line 89: | ||
local ratios_as_text = jiraf.ratios_to_text(prime_filtered_ratios, "<br>", true) | local ratios_as_text = jiraf.ratios_to_text(prime_filtered_ratios, "<br>", true) | ||
result = result .. string.format( | result = result .. string.format("| %s\n", ratios_as_text) | ||
end | end | ||
result = result .. string.format( | result = result .. string.format("|-\n") | ||
end | end | ||
return result | return result | ||
| Line 104: | Line 106: | ||
-- Get the number of divisions, equave, and et as text (eg edo, edt, etc) | -- Get the number of divisions, equave, and et as text (eg edo, edt, etc) | ||
local steps = input_et[ | local steps = input_et["size"] | ||
local equave = input_et[ | local equave = input_et["equave"] | ||
if tonumber(equave) ~= nil then | if tonumber(equave) ~= nil then | ||
equave = rat.new(equave) | equave = rat.new(equave) | ||
| Line 127: | Line 129: | ||
-- Build table headers | -- Build table headers | ||
local result = | local result = "{| class=\"wikitable center-all\"\n" | ||
.. "|+ style=\"font-size: 105%;\" | " | |||
.. string.format("Intervals of %s (as a %d-limit temperament)\n", et_as_string, prime_limit) | |||
.. "|-\n" | |||
.. "! rowspan=\"2\" | [[Degree]]\n" | |||
.. "! rowspan=\"2\" | [[Cent]]s\n" | |||
.. string.format("! colspan=\"%d\" | Approximated [[JI]] intervals\n", #primes) | |||
.. "|-\n" | |||
-- Build header cells for each prime limit | -- Build header cells for each prime limit | ||
for i = 1, #primes do | for i = 1, #primes do | ||
result = result .. string.format( | result = result .. string.format("! [[%d-limit]]\n", primes[i]) | ||
end | end | ||
result = result .. string.format( | result = result .. string.format("|-\n") | ||
-- Add rest of table | -- Add rest of table | ||
result = result .. p.ji_ratio_in_ed_content_cells(steps, equave, candidate_ratios, primes, tolerance) | result = result .. p.ji_ratio_in_ed_content_cells(steps, equave, candidate_ratios, primes, tolerance) | ||
result = result .. string.format( | result = result .. string.format("|}\n") | ||
return result | return result | ||
end | end | ||
| Line 157: | Line 160: | ||
-- Get the number of divisions, equave, and et as text (eg edo, edt, etc) | -- Get the number of divisions, equave, and et as text (eg edo, edt, etc) | ||
local steps = input_et[ | local steps = input_et["size"] | ||
local equave = input_et[ | local equave = input_et["equave"] | ||
if tonumber(equave) ~= nil then | if tonumber(equave) ~= nil then | ||
equave = rat.new(equave) | equave = rat.new(equave) | ||
| Line 180: | Line 183: | ||
-- Build table headers | -- Build table headers | ||
local result = | local result = "{| class=\"wikitable center-all\"\n" | ||
.. "|+ style=\"font-size: 105%;\" | " | |||
.. string.format("Intervals of %s (as a %s subgroup temperament)\n", et_as_string, subgroup_as_text) | |||
.. "|-\n" | |||
.. "! rowspan=\"2\" | [[Degree]]\n" | |||
.. "! rowspan=\"2\" | [[Cent]]s\n" | |||
.. string.format("! colspan=\"%d\" | Approximated [[JI]] intervals\n", #primes) | |||
.. "|-\n" | |||
-- Build header cells for each prime limit | -- Build header cells for each prime limit | ||
for i = 1, #primes do | for i = 1, #primes do | ||
result = result .. string.format( | result = result .. string.format("! [[%d-limit]]\n", primes[i]) | ||
end | end | ||
result = result .. | result = result .. "|-\n" | ||
-- Add rest of table | -- Add rest of table | ||
result = result .. p.ji_ratio_in_ed_content_cells(steps, equave, candidate_ratios, primes, tolerance) | result = result .. p.ji_ratio_in_ed_content_cells(steps, equave, candidate_ratios, primes, tolerance) | ||
result = result .. string.format( | result = result .. string.format("|}\n") | ||
return result | return result | ||
end | end | ||
| Line 203: | Line 207: | ||
-- Wrapper function for primary function; to be called by template | -- Wrapper function for primary function; to be called by template | ||
function p.ji_ratios_in_ed_frame(frame) | function p.ji_ratios_in_ed_frame(frame) | ||
-- Parse the ed; if it's just a number, interpret it as an edo | -- Parse the ed; if it's just a number, interpret it as an edo | ||
local input_et_unparsed = frame.args["ED"] or 12 | local input_et_unparsed = frame.args["ED"] or 12 | ||
| Line 218: | Line 221: | ||
local temperament_type = "Prime Limit" | local temperament_type = "Prime Limit" | ||
if string.len(frame.args["Subgroup"]) > 0 then | if string.len(frame.args["Subgroup"]) > 0 then | ||
primes = tip.parse_numeric_entries(frame.args["Subgroup"], | primes = tip.parse_numeric_entries(frame.args["Subgroup"], ".") or tip.parse_numeric_entries(frame.args["Subgroup"], ",") | ||
temperament_type = "Subgroup" | temperament_type = "Subgroup" | ||
end | end | ||
| Line 229: | Line 232: | ||
end | end | ||
return result | local debugg = yesno(frame.args["debug"]) | ||
if debugg == true then | |||
result = "<syntaxhighlight lang=\"wikitext\">" .. result .. "</syntaxhighlight>" | |||
end | |||
return frame:preprocess(result) | |||
end | end | ||
return p | return p | ||