Module:MOS tunings: Difference between revisions

Ganaram inukshuk (talk | contribs)
m Undo revision 152867 by Ganaram inukshuk (talk)
Tag: Undo
Ganaram inukshuk (talk | contribs)
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 ji_ratios = ji_ratios or p.ji_ratio_search(30)
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(50)
local ji_ratios = p.ji_ratio_search(30, 2400)
local input_mos = mos.parse("9L 4s<7/2>")
return p.preprocess_ji_ratios(mos.new(5,2), mos.modal_union(mos.new(5,2)), {{3,2}}, 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