Module:ET: Difference between revisions

CompactStar (talk | contribs)
No edit summary
These all looked too dumb tbh
 
(29 intermediate revisions by 5 users not shown)
Line 1: Line 1:
local rat = require('Module:Rational')
local rat = require("Module:Rational")
local seq = require('Module:Sequence')
local seq = require("Module:Sequence")
local p = {}
local p = {}


local common_suffix = {
local common_suffix = {
['3/2'] = 'f',
["3/2"] = "f",
['2'] = 'o',
["2"] = "o",
['2/1'] = 'o',
["2/1"] = "o",
['3'] = 't',
["3"] = "t",
['3/1'] = 't',
["3/1"] = "t",
['1264/465'] = 'n',
['355/113'] = 'π'
}
}
local common_ratio = {
local common_ratio = {
['f'] = rat.new(3, 2),
["f"] = rat.new(3, 2),
['o'] = 2,
["o"] = 2,
['t'] = 3,
["t"] = 3,
['n'] = rat.new(1264, 465),
["ϕ"] = (1 + math.sqrt(5)) / 2,
['π'] = rat.new(355, 113)
["n"] = math.exp(1),
["π"] = math.pi
}
}


Line 28: Line 28:
local equave_ratio = rat.as_ratio(equave)
local equave_ratio = rat.as_ratio(equave)
equave_ratio = equave_ratio:lower()
equave_ratio = equave_ratio:lower()
suffix = 'ed'
suffix = "ed"
if common_suffix[equave_ratio] then
if common_suffix[equave_ratio] then
suffix = suffix .. common_suffix[equave_ratio]
suffix = suffix .. common_suffix[equave_ratio]
Line 42: Line 42:
-- parse a ET structure
-- parse a ET structure
function p.parse(unparsed)
function p.parse(unparsed)
local size, suffix, equave = unparsed:match('^(%d+)([Ee][Dd](.+))$')
local size, suffix, equave = unparsed:match("^(%d+%.*%d*)([Ee][Dd](.+))$")
-- local size, suffix, equave = unparsed:match("^(%d+%.*%d*)([Cc]?[Ee][Dd]?[Tt]?(.*))$")
if equave == nil then
if equave == nil then
return nil
return nil
Line 77: Line 78:
function p.backslash_modifier(et)
function p.backslash_modifier(et)
if not rat.eq(et.equave, 2) then
if not rat.eq(et.equave, 2) then
return '\\' .. et.size .. et.suffix
return "\\" .. et.size .. et.suffix
end
end
return '\\' .. et.size
return "\\" .. et.size
end
end


Line 89: Line 90:
steps = steps or 1
steps = steps or 1
return 1200 * steps / et.size * math.log(rat.as_float(et.equave)) / math.log(2)
return 1200 * steps / et.size * math.log(rat.as_float(et.equave)) / math.log(2)
end
-- convert steps to hekts
function p.hekts(et, steps)
if et.size == 0 then
return 0
end
steps = steps or 1
return 1300 * steps / et.size * math.log(rat.as_float(et.equave)) / math.log(3)
end
end


Line 113: Line 123:
local t = 0
local t = 0
for factor, power in pairs(ratio) do
for factor, power in pairs(ratio) do
if type(factor) == 'number' then
if type(factor) == "number" then
t = t + power * p.approximate(et, factor)
t = t + power * p.approximate(et, factor)
end
end
Line 129: Line 139:
function p.is_zeta(et)
function p.is_zeta(et)
return seq.contains(seq.zeta_peak, et.size)
return seq.contains(seq.zeta_peak, et.size)
or seq.contains(seq.zeta_peak_integer, et.size)
or seq.contains(seq.zeta_integral, et.size)
or seq.contains(seq.zeta_integral, et.size)
or seq.contains(seq.zeta_gap, et.size)
or seq.contains(seq.zeta_gap, et.size)
Line 136: Line 147:
function p.why_zeta(et)
function p.why_zeta(et)
local zeta_peak = seq.contains(seq.zeta_peak, et.size)
local zeta_peak = seq.contains(seq.zeta_peak, et.size)
local zeta_peak_integer = seq.contains(seq.zeta_peak_integer, et.size)
local zeta_integral = seq.contains(seq.zeta_integral, et.size)
local zeta_integral = seq.contains(seq.zeta_integral, et.size)
local zeta_gap = seq.contains(seq.zeta_gap, et.size)
local zeta_gap = seq.contains(seq.zeta_gap, et.size)
local z = "The Riemann zeta function and tuning#Zeta EDO lists"
 
local markers = {}
local markers = {}
if zeta_peak then
if zeta_peak then
table.insert(markers, '[[The Riemann zeta function and tuning#Peak EDOs|zeta peak]]')
table.insert(markers, string.format("[[%s|Zeta peak]]", z))
elseif zeta_peak == nil then
elseif zeta_peak == nil then
table.insert(markers, '[[The Riemann zeta function and tuning#Peak EDOs|zeta peak?]]')
table.insert(markers, string.format("[[%s|Zeta peak?]]", z))
end
 
if zeta_peak_integer then
table.insert(markers, string.format("[[%s|Zeta peak integer]]", z))
elseif zeta_peak_integer == nil then
table.insert(markers, string.format("[[%s|Zeta peak integer?]]", z))
end
end
if zeta_integral then
if zeta_integral then
table.insert(markers, '[[The Riemann zeta function and tuning#Integral of Zeta EDOs|zeta integral]]')
table.insert(markers, string.format("[[%s|Zeta integral]]", z))
elseif zeta_integral == nil then
elseif zeta_integral == nil then
table.insert(markers, '[[The Riemann zeta function and tuning#Integral of Zeta EDOs|zeta integral?]]')
table.insert(markers, string.format("[[%s|Zeta integral?]]", z))
end
end
if zeta_gap then
if zeta_gap then
table.insert(markers, '[[The Riemann zeta function and tuning#Zeta Gap EDOs|zeta gap]]')
table.insert(markers, string.format("[[%s|Zeta gap]]", z))
elseif zeta_gap == nil then
elseif zeta_gap == nil then
table.insert(markers, '[[The Riemann zeta function and tuning#Zeta Gap EDOs|zeta gap?]]')
table.insert(markers, string.format("[[%s|Zeta gap?]]", z))
end
end
return table.concat(markers, '<br>')
 
return table.concat(markers, "<br />")
end
end


return p
return p