Module:JI ratios in ED: Difference between revisions
mNo edit summary |
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, | 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 | 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, | 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 | -- Filter ratios by harmonic class, then whether the ratios' | ||
-- | -- 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, | 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 | local int_limit = tonumber(frame.args["Integer Limit"]) or 99 | ||
local result = p.find_ratios_in_ed(input_et, primes, tenney_height, | local result = p.find_ratios_in_ed(input_et, primes, tenney_height, int_limit) | ||
return result | return result | ||