Module:MOS intervals: Difference between revisions

ArrowHead294 (talk | contribs)
m Non-wrap steps subtended section
Ganaram inukshuk (talk | contribs)
add experimental interval region lookup; may move to a different module later
Line 6: Line 6:
local tamnams = require("Module:TAMNAMS")
local tamnams = require("Module:TAMNAMS")
local yesno = require("Module:Yesno")
local yesno = require("Module:Yesno")
-- EXPERIMENTAL FEATURE: lookup table for intervals
-- Mostly based off Margo Schulter's categories (without large/medium/small),
-- but other interpretations are possible. Plus, this only goes up to 1200c.
interval_ranges = {
    { name = "Pure Unison (1:1)", range = {0, 0} },
    { name = "Commas", range = {0, 30} },
    { name = "Dieses", range = {30, 60} },
    { name = "Minor Seconds", range = {60, 125} },
    { name = "Neutral Seconds", range = {125, 175} },
    --{ name = "Equable heptatonic", range = {170, 180} },
    { name = "Major Seconds", range = {175, 240} },
    { name = "Interseptimal (Maj2-min3)", range = {240, 260} },
    { name = "Minor Thirds", range = {260, 330} },
    { name = "Neutral Thirds", range = {330, 372} },
    { name = "Major Thirds", range = {372, 440} },
    { name = "Interseptimal (Maj3-4)", range = {440, 468} },
    { name = "Perfect Fourths", range = {468, 528} },
    { name = "Superfourths", range = {528, 560} },
    { name = "Tritonic Region", range = {560, 640} },
    { name = "Subfifths", range = {640, 672} },
    { name = "Perfect Fifths", range = {672, 732} },
    { name = "Interseptimal (5-min6)", range = {732, 760} },
    { name = "Minor Sixths", range = {760, 828} },
    { name = "Neutral Sixths", range = {828, 870} },
    { name = "Major Sixths", range = {870, 940} },
    { name = "Interseptimal (Maj6-min7)", range = {940, 960} },
    { name = "Minor Sevenths", range = {960, 1030} },
    --{ name = "Equable heptatonic", range = {1025, 1030} },
    { name = "Neutral Sevenths", range = {1030, 1075} },
    { name = "Major Sevenths", range = {1075, 1140} },
    { name = "Octave less diesis", range = {1140, 1170} },
    { name = "Octave less comma", range = {1170, 1200} },
    { name = "Pure Octave (2:1)", range = {1200, 1200} }
}
-- EXPERIMENTAL FEATURE: interval lookup function
function lookup_interval_range(cents)
    for _, interval in ipairs(interval_ranges) do
        if cents >= interval.range[1] and cents <= interval.range[2] then
            return interval.name
        end
    end
    return "Out of range"
end


-- Main function; to be called by wrapper
-- Main function; to be called by wrapper