Module:Infobox ET: Difference between revisions

Plumtree (talk | contribs)
m Reorganisation
Plumtree (talk | contribs)
m Reorganisation
Line 4: Line 4:
local rat = require('Module:Rational')
local rat = require('Module:Rational')
local l = require('Module:Limits')
local l = require('Module:Limits')
-- towards is one of: -1 (floor), 0 (nearest), 1 (ceil)
local function approximate(size, equave, interval, towards)
towards = towards or 0
local exact = math.log(interval) / math.log(rat.as_float(equave)) * size
local approx = nil
if towards < 0 then
approx = math.floor(exact)
elseif towards > 0 then
approx = math.ceil(exact)
else
approx = math.floor(exact + 0.5)
end
return approx
end
-- towards is one of: -1 (floor), 0 (nearest), 1 (ceil)
local function approximation(tuning, size, equave, interval, towards)
local approx = approximate(size, equave, interval, towards or 0)
local ratio = rat.new(approx, size)
if rat.as_table(ratio)[1] ~= approx then
ratio = ' (→' .. rat.as_ratio(ratio, '\\') .. ')'
else
ratio = ''
end
return string.format("%d", approx) .. '\\' .. tuning
.. ' (' .. i._to_cents(i._backslash_ratio(approx .. '\\' .. tuning), 6) .. '¢)'
.. ratio
end


function p.infobox_ET(frame)
function p.infobox_ET(frame)
Line 16: Line 45:
end
end
local step_size = i._backslash_ratio('1\\' .. tuning)
local step_size = i._backslash_ratio('1\\' .. tuning)
local fifth = math.floor(math.log(1.5)/math.log(rat.as_float(equave))*size+0.5)
local fifth_ratio = rat.new(fifth, size)
if rat.as_table(fifth_ratio)[1] ~= fifth then
fifth_ratio = ' (→' .. rat.as_ratio(fifth_ratio, '\\') .. ')'
else
fifth_ratio = ''
end


local infobox_data = {}
local infobox_data = {}
Line 35: Line 57:
table.insert(infobox_data, {
table.insert(infobox_data, {
'Fifth',
'Fifth',
string.format("%d", fifth) .. '\\' .. tuning .. ' (' .. i._to_cents(i._backslash_ratio(fifth .. '\\' .. tuning), 6) .. '¢)' .. fifth_ratio
approximation(tuning, size, equave, 3/2)
})
})
table.insert(infobox_data, {
table.insert(infobox_data, {