Module:Powharmonic series

From Xenharmonic Wiki
Revision as of 12:51, 3 June 2024 by ArrowHead294 (talk | contribs)
Jump to navigation Jump to search
Module documentation[view] [edit] [history] [purge]
This module should not be invoked directly; use its corresponding template instead: Template:Powharmonic series.

This module generates a table showing the intervals of a powharmonic series for a given exponent, which is used to model timbres involving stretched or compressed harmonics.

Introspection summary for Module:Powharmonic series 
Functions provided (1)
Line Function Params
3 powharmonic (invokable) (frame)
Lua modules required (0)
Variable Module Functions used

No function descriptions were provided. The Lua code may have further information.


local p = {}

function p.powharmonic(frame)
    local p = tonumber(frame.args["p"])
    local out_str = "{| class=\"wikitable\"\n" ..
    "|+ Intervals of the " .. p .. "-Powharmonic series\n" ..
    "! rowspan=\"2\" | Pitch #\n" ..
    "! colspan=\"2\" | Frequency multiplier\n" ..
    "! colspan=\"3\" | Pitch\n" ..
    "|-\n" ..
    "! Definition\n" ..
    "! Decimal\n" ..
    "! Cents\n" ..
    "! Change (cents)\n" ..
    "! Octave-reduced\n"
    local fmt_mul = string.format(" %%+.%df", tonumber(frame.args["prec"]))
    local fmt_cent = " %+.2f"
    local p_prev = 0
    local p_current = 0

    for i = 1, p do
        p_current = 1200 * math.log(i, 2) * p
        out_str = out_str ..
            "|-\n" ..
            "| " .. i .. "\n" ..
            "| " .. i .. "<sup>" .. p .. "</sup>\n" ..
            "| " .. string.format(fmt_mul, i^p) .. "\n" ..
            "| " .. string.format(fmt_cent, p_curr) .. "\n" ..
            "| " .. string.format(fmt_cent, p_prev) .. "\n" ..
            "| " .. string.format(fmt_cent, math.fmod(p_curr, 1200)) .. "\n"
        p_prev = p_current
    end

    out_str = out_str .. "|}"
    return out_str
end

return p