Module:Lumatone mapping intro: Difference between revisions
Jump to navigation
Jump to search
ArrowHead294 (talk | contribs) mNo edit summary |
ArrowHead294 (talk | contribs) mNo edit summary |
||
| Line 7: | Line 7: | ||
function p.lum_intro(frame) | function p.lum_intro(frame) | ||
local tuning = frame.args["edo"] | local tuning = frame.args["edo"] | ||
local et = ET.parse(tuning) | local et = ET.parse(tuning) or ET.parse("12edo") | ||
local debug_mode = yesno(frame.args["debug"]) | local debug_mode = yesno(frame.args["debug"]) | ||
Revision as of 18:03, 14 March 2025
- This module should not be invoked directly; use its corresponding template instead: Template:Lumatone mapping intro.
This module automatically fills in the introduction for Lumatone keyboard mappings for EDOs.
Since the Standard Lumatone mapping for Pythagorean is based on the chain of fifths, the intro text will depend on how accurately an EDO approximates 3/2 and how many mutually-exclusive circles of fifths it has.| Introspection summary for Module:Lumatone mapping intro | ||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| |||||||||||||||||||||
No function descriptions were provided. The Lua code may have further information.
local p = {}
local ET = require("Module:ET")
local gcd = require("Module:Utils")._gcd
local rat = require("Module:Rational")
local yesno = require("Module:Yesno")
function p.lum_intro(frame)
local tuning = frame.args["edo"]
local et = ET.parse(tuning) or ET.parse("12edo")
local debug_mode = yesno(frame.args["debug"])
local octave = ET.approximate(et, 2)
local twelfth = ET.approximate(et, 3)
local step_size = ET.cents(et, 1)
local fifth = -octave + twelfth -- 3/2 = [-1 1>
local fifth_error = ET.cents(et, fifth) - rat.cents(rat.new(3, 2))
local is_far_fifth = (math.abs(fifth_error) / step_size >= 0.4)
local result = string.format("There are many conceivable ways to map [[%s]] onto the onto the [[Lumatone]] keyboard.", ET.as_string(et))
local rings = gcd(octave, twelfth)
if rings > 1 then
result = result .. string.format(" However, since it has %d mutually-exclusive rings of fifths,", rings)
.. "the [[Standard Lumatone mapping for Pythagorean]] is not one of them."
if ET.is_highly_composite(et) then
result = result .. " Since it is [[highly composite]], many other mappings will also fail to cover the whole gamut."
end
elseif is_far_fifth == true then
result = result .. " However, as both of its fifths are about as far away from just as possible, "
.. "neither the sharp or the flat versions of the [[Standard Lumatone mapping for Pythagorean]] work particularly well."
else
result = result .. " Only one, however, agrees with the [[Standard Lumatone mapping for Pythagorean]]."
end
return frame:preprocess(debug_mode == true and "<pre>" .. result .. "</pre>" or result)
end
return p