Module:MOS intervals: Difference between revisions
mNo edit summary |
add option to show interval ranges (experimental) |
||
| Line 10: | Line 10: | ||
-- Mostly based off Margo Schulter's categories (without large/medium/small), | -- Mostly based off Margo Schulter's categories (without large/medium/small), | ||
-- but other interpretations are possible. Plus, this only goes up to 1200c. | -- but other interpretations are possible. Plus, this only goes up to 1200c. | ||
interval_ranges = { | p.interval_ranges = { | ||
{ name = "Pure | { name = "Pure unison (1:1)" , range = { 0, 0} }, | ||
{ name = "Comma/diesis" , range = { 0, 60} }, | { name = "Comma/diesis" , range = { 0, 60} }, | ||
{ name = "Minor | { name = "Minor second" , range = { 60, 125} }, | ||
{ name = "Neutral | { name = "Neutral second" , range = { 125, 170} }, | ||
{ name = "Major | { name = "Major second" , range = { 180, 240} }, | ||
{ name = "Interseptimal (Maj2-min3)", range = { 240, 260} }, | { name = "Interseptimal (Maj2-min3)", range = { 240, 260} }, | ||
{ name = "Minor | { name = "Minor third" , range = { 260, 330} }, | ||
{ name = "Neutral | { name = "Neutral third" , range = { 330, 372} }, | ||
{ name = "Major | { name = "Major third" , range = { 372, 440} }, | ||
{ name = "Interseptimal (Maj3-4)" , range = { 440, 468} }, | { name = "Interseptimal (Maj3-4)" , range = { 440, 468} }, | ||
{ name = "Perfect | { name = "Perfect fourth" , range = { 468, 528} }, | ||
{ name = "Superfourth" , range = { 528, 560} }, | { name = "Superfourth" , range = { 528, 560} }, | ||
{ name = "Tritonic | { name = "Tritonic region" , range = { 560, 640} }, | ||
{ name = "Subfifth" , range = { 640, 672} }, | { name = "Subfifth" , range = { 640, 672} }, | ||
{ name = "Perfect | { name = "Perfect fifth" , range = { 672, 732} }, | ||
{ name = "Interseptimal (5-min6)" , range = { 732, 760} }, | { name = "Interseptimal (5-min6)" , range = { 732, 760} }, | ||
{ name = "Minor | { name = "Minor sixth" , range = { 760, 828} }, | ||
{ name = "Neutral | { name = "Neutral sixth" , range = { 828, 870} }, | ||
{ name = "Major | { name = "Major sixth" , range = { 870, 940} }, | ||
{ name = "Interseptimal (Maj6-min7)", range = { 940, 960} }, | { name = "Interseptimal (Maj6-min7)", range = { 940, 960} }, | ||
{ name = "Minor | { name = "Minor seventh" , range = { 960, 1020} }, | ||
{ name = "Neutral | { name = "Neutral seventh" , range = {1030, 1075} }, | ||
{ name = "Major | { name = "Major seventh" , range = {1075, 1140} }, | ||
{ name = "Octave less comma/diesis" , range = {1140, 1200} }, | { name = "Octave less comma/diesis" , range = {1140, 1200} }, | ||
{ name = "Pure | { name = "Pure octave (2:1)" , range = {1200, 1200} } | ||
} | } | ||
-- EXPERIMENTAL FEATURE: interval lookup function | -- EXPERIMENTAL FEATURE: interval lookup function | ||
function lookup_interval_range(cents) | function p.lookup_interval_range(cents) | ||
for _, interval in ipairs(interval_ranges) do | for _, interval in ipairs(interval_ranges) do | ||
if cents >= interval.range[1] and cents <= interval.range[2] then | if cents >= interval.range[1] and cents <= interval.range[2] then | ||
| Line 55: | Line 55: | ||
local mos_abbrev = args["MOS Abbrev" ] or "m" | local mos_abbrev = args["MOS Abbrev" ] or "m" | ||
local is_collapsed = args["Is Collapsed"] == true | local is_collapsed = args["Is Collapsed"] == true | ||
local show_inregs = args["Show Interval Regions"] == true | |||
-- Get the scale sig | -- Get the scale sig | ||
| Line 88: | Line 89: | ||
.. '! Specific\n' | .. '! Specific\n' | ||
.. '! Abbrev.\n' | .. '! Abbrev.\n' | ||
.. (show_inregs and '! Interval Regions\n' or '') | |||
-- Write each row | -- Write each row | ||
| Line 109: | Line 111: | ||
.. "| <span style=\"white-space: nowrap;\">" .. mos.interval_as_string(current_bright_interval) .. "</span>\n" | .. "| <span style=\"white-space: nowrap;\">" .. mos.interval_as_string(current_bright_interval) .. "</span>\n" | ||
.. "| " .. cents .. "\n" | .. "| " .. cents .. "\n" | ||
.. (show_inregs and string.format("| %s\n", p.lookup_interval_range(cents)) or "") | |||
else | else | ||
-- Calculate the cent values min and max for the current intervals | -- Calculate the cent values min and max for the current intervals | ||
| Line 122: | Line 125: | ||
result = result | result = result | ||
.. "|-\n" | |||
.. '| rowspan="2" | ' .. i-1 .. '-' .. mos_prefix .. 'step\n' | |||
.. "| " .. tamnams.interval_quality(current_dark_interval, input_mos, "sentence-case", mos_prefix) .. "\n" | |||
.. "| " .. tamnams.interval_quality(current_dark_interval, input_mos, "abbrev" , mos_abbrev) .. "\n" | |||
.. "| <span style=\"white-space: nowrap;\">" .. mos.interval_as_string(current_dark_interval) .. "</span>\n" | |||
.. "| " .. dark_interval_range .. "\n" | |||
.. "|-\n" | |||
.. "| " .. tamnams.interval_quality(current_bright_interval, input_mos, "sentence-case", mos_prefix) .. "\n" | |||
.. "| " .. tamnams.interval_quality(current_bright_interval, input_mos, "abbrev" , mos_abbrev) .. "\n" | |||
.. "| <span style=\"white-space: nowrap;\">" .. mos.interval_as_string(current_bright_interval) .. "</span>\n" | |||
.. "| " .. bright_interval_range .. "\n" | |||
.. (show_inregs and string.format("| %s to %s\n", p.lookup_interval_range(dark_interval_range), p.lookup_interval_range(bright_interval_range)) or "") | |||
end | end | ||
end | end | ||
result = result .. "|}" | result = result .. "|}" | ||
| Line 151: | Line 156: | ||
-- Preprocess collapse option | -- Preprocess collapse option | ||
args["Collapsed"] = yesno(args["Collapsed"], false) | args["Collapsed"] = yesno(args["Collapsed"], false) | ||
-- EXPERIMENTAL: option to show interval regions | |||
args["Show Interval Regions"] = yesno(args["Show Interval Regions"], false) | |||
-- Preprocess (verify) prefix/abbrev | -- Preprocess (verify) prefix/abbrev | ||