Module:ET

From Xenharmonic Wiki
Revision as of 18:23, 3 October 2022 by Plumtree (talk | contribs) (Module created)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Module documentation[view] [edit] [history] [purge]
This module primarily serves as a library for other modules and has no corresponding template.

This module provides helper functions for equal-step tunings.

Introspection summary for Module:ET 
Functions provided (2)
Line Function Params Description
17 new (size, equave, suffix) Returns an array consisting of the components of an equal-step tuning.
35 parse (unparsed) Converts an equal tuning as a string into a Lua table.
Lua modules required (1)
Variable Module Functions used
rat Module:Rational new
as_pair
as_ratio
parse

local rat = require('Module:Rational')
local p = {}

local common_suffix = {
	['3/2'] = 'f',
	['2'] = 'o',
	['2/1'] = 'o',
	['3'] = 't',
	['3/1'] = 't',
}
local common_ratio = {
	['f'] = rat.new(3, 2),
	['o'] = 2,
	['t'] = 3
}

function p.new(size, equave, suffix)
	size = size or 12
	equave = equave or 2
	if suffix == nil then
		local equave_n, equave_m = rat.as_pair(equave)
		local equave_ratio = rat.as_ratio(equave)
		suffix = size .. 'ed'
		if common_suffix[equave_ratio] then
			suffix = suffix .. common_suffix[equave_ratio]
		elseif equave_m == 1 then
			suffix = suffix .. equave_n
		else
			suffix = suffix .. equave_ratio
		end
	end
	return { size = size, equave = equave, suffix = suffix }
end

function p.parse(unparsed)
	local size, suffix, equave = unparsed:match('^(%d+)(ed(.+))$')
	if equave == nil then
		return nil
	end
	size = tonumber(size)
	equave = common_ratio[equave] or rat.parse(equave)
	if size == nil or equave == nil then
		return nil
	end
	return p.new(size, equave, suffix)
end

return p