Module:MOS tunings: Difference between revisions
m Undo revision 152867 by Ganaram inukshuk (talk) Tag: Undo |
Ratio search looks for ratios between 1/1 and 2/1; if ratios above 2/1 are needed, then the previous ratios are raised up by 2/1 and added |
||
| Line 5: | Line 5: | ||
local yesno = require("Module:Yesno") | local yesno = require("Module:Yesno") | ||
local tip = require("Module:Template input parse") | local tip = require("Module:Template input parse") | ||
local utils = require("Module:Utils") | |||
local p = {} | local p = {} | ||
| Line 50: | Line 51: | ||
-- Find JI ratios up to an integer limit via mediants | -- Find JI ratios up to an integer limit via mediants | ||
function p.ji_ratio_search(integer_limit) | function p.ji_ratio_search(integer_limit, max_cents) | ||
local SEARCH_MAX = 120 | local SEARCH_MAX = 120 | ||
local max_cents = max_cents or 1200 | |||
local integer_limit = integer_limit or SEARCH_MAX | local integer_limit = integer_limit or SEARCH_MAX | ||
| Line 76: | Line 78: | ||
table.insert(new_ratios, ratios[#ratios]) | table.insert(new_ratios, ratios[#ratios]) | ||
ratios = new_ratios | ratios = new_ratios | ||
end | |||
if max_cents > 1200 then | |||
local new_ratios = {} | |||
local num_octaves_up = -1 + math.floor(max_cents / 1200) | |||
for i = 1, #ratios do | |||
local num = ratios[i][1] * 2 | |||
local den = ratios[i][2] | |||
local gcd = utils._gcd(num, den) | |||
num = num / gcd | |||
den = den / gcd | |||
table.insert(new_ratios, {num, den}) | |||
end | |||
for i = 1, #new_ratios do | |||
table.insert(ratios, new_ratios[i]) | |||
end | |||
end | end | ||
| Line 177: | Line 199: | ||
local mos_abbrev = mos_abbrev or "m" | local mos_abbrev = mos_abbrev or "m" | ||
local step_ratios = step_ratios or { {2,1}, {3,1}, {3,2} } | local step_ratios = step_ratios or { {2,1}, {3,1}, {3,2} } | ||
local modal_union = mos.modal_union(input_mos) | local modal_union = mos.modal_union(input_mos) | ||
| Line 187: | Line 208: | ||
-- Preprocess JI ratios | -- Preprocess JI ratios | ||
local equave_in_cents = mos.equave_to_cents(input_mos) | |||
local ji_ratios = ji_ratios or p.ji_ratio_search(30, equave_in_cents) | |||
local sorted_ji_ratios = p.preprocess_ji_ratios(input_mos, modal_union, step_ratios, ji_ratios) | local sorted_ji_ratios = p.preprocess_ji_ratios(input_mos, modal_union, step_ratios, ji_ratios) | ||
| Line 290: | Line 313: | ||
function p.tester() | function p.tester() | ||
local range, ratios = p.preprocess_step_ratios({ {7,1}, {3,1}, {2,1} }) | local range, ratios = p.preprocess_step_ratios({ {7,1}, {3,1}, {2,1} }) | ||
local ji_ratios = p.ji_ratio_search( | local ji_ratios = p.ji_ratio_search(30, 2400) | ||
local input_mos = mos.parse("9L 4s<7/2>") | |||
return p.preprocess_ji_ratios( | --return p.preprocess_ji_ratios(input_mos, mos.modal_union(input_mos), {{2,1}}, ji_ratios) | ||
--return ji_ratios | |||
return p._mos_tunings(input_mos) | |||
end | end | ||
return p | return p | ||