Module:JI ratios in ED: Difference between revisions

Ganaram inukshuk (talk | contribs)
mNo edit summary
Ganaram inukshuk (talk | contribs)
Denominator limit -> integer limit; tolerance will max out at +/- 40 cents
Line 61: Line 61:


-- Primary function
-- Primary function
function p.find_ratios_in_ed(input_et, primes, tenney_height, denominator_limit)
function p.find_ratios_in_ed(input_et, primes, tenney_height, int_limit)
local input_et = input_et or et.parse("12ed5/2")
local input_et = input_et or et.parse("12ed5/2")
local primes = primes or { 2, 3, 5, 7 }
local primes = primes or { 2, 3, 5, 7 }
local tenney_height = tenney_height or 10
local tenney_height = tenney_height or 10
local denominator_limit = denominator_limit or 99
local int_limit = int_limit or 99
-- 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)
Line 76: Line 76:
-- Calculate equave and tolerance
-- Calculate equave and tolerance
-- Tolerance is +/- 40 cents or 40% of a step, whichever is smaller.
local equave_in_cents = rat.cents(equave)
local equave_in_cents = rat.cents(equave)
local tolerance = equave_in_cents / steps * 0.4
local tolerance = math.min(equave_in_cents / steps * 0.4, 40)
-- Calculate temperament interpretation
-- Calculate temperament interpretation
Line 84: Line 85:
-- Find candidate ratios; filter later
-- Find candidate ratios; filter later
local max_prime = primes[#primes]
local max_prime = primes[#primes]
local candidate_ratios = jiraf.find_candidate_ratios_within_subgroup(equave_in_cents, denominator_limit, primes)
local candidate_ratios = jiraf.find_candidate_ratios_within_subgroup(equave_in_cents, int_limit, primes)
-- Build table headers
-- Build table headers
Line 127: Line 128:
prime_filtered_ratios = jiraf.filter_ratios_by_harmonic_class({ equave }, current_prime)
prime_filtered_ratios = jiraf.filter_ratios_by_harmonic_class({ equave }, current_prime)
else
else
-- Filter ratios by harmonic class, then by complement-agnostic
-- Filter ratios by harmonic class, then whether the ratios'
-- Tenney height
-- equave complement exceeds the int limit, then by
-- no-equave-factors tenney height (nefth).
prime_filtered_ratios = jiraf.filter_ratios_by_harmonic_class(filtered_ratios, current_prime)
prime_filtered_ratios = jiraf.filter_ratios_by_harmonic_class(filtered_ratios, current_prime)
prime_filtered_ratios = jiraf.filter_ratios_by_equave_complement_int_limit(prime_filtered_ratios, denominator_limit, equave)
prime_filtered_ratios = jiraf.filter_ratios_by_equave_complement_int_limit(prime_filtered_ratios, int_limit, equave)
prime_filtered_ratios = jiraf.filter_ratios_by_no_equave_factors_tenney_height(prime_filtered_ratios, tenney_height, equave)
prime_filtered_ratios = jiraf.filter_ratios_by_no_equave_factors_tenney_height(prime_filtered_ratios, tenney_height, equave)
end
end
-- Add ratios to cells
-- Add ratios to cells
-- TODO: make first column go by prime limit (this way, the unison
-- is not excluded), with successive columns by harmonic class.
local ratios_as_text = jiraf.ratios_to_text_with_error(prime_filtered_ratios, step_in_cents, "<br>", true)
local ratios_as_text = jiraf.ratios_to_text_with_error(prime_filtered_ratios, step_in_cents, "<br>", true)
result = result .. string.format('| %s\n', ratios_as_text)
result = result .. string.format('| %s\n', ratios_as_text)
Line 165: Line 169:
local tenney_height = tonumber(frame.args["Tenney Height"]) or 10
local tenney_height = tonumber(frame.args["Tenney Height"]) or 10
local denominator_limit = tonumber(frame.args["Denominator Limit"]) or 99
local int_limit = tonumber(frame.args["Integer Limit"]) or 99
local result = p.find_ratios_in_ed(input_et, primes, tenney_height, denominator_limit)
local result = p.find_ratios_in_ed(input_et, primes, tenney_height, int_limit)
return result
return result