Module:Interval table

From Xenharmonic Wiki
Revision as of 08:43, 3 July 2023 by CompactStar (talk | contribs) (This is my last attempt on solving the weird bug that spontaneously appeared, invoking the code for ups and downs template directly rather than through wikitext)
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:Interval table.

This module automatically generates a table of intervals for an equal-step tuning, showing which just intervals are approximated relatively accurately.

Introspection summary for Module:Interval table 
Functions provided (1)
Line Function Params
12 interval_table (invokable) (frame)
Lua modules required (5)
Variable Module Functions used
ET Module:ET parse
approximate
cents
iv Module:Interval _to_cents
rat Module:Rational eq
ud Module:Ups and downs note name get_note_names_table
u Module:Utils _round

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


local p = {}
local u = require('Module:Utils')
local iv = require('Module:Interval')
local rat = require('Module:Rational')
local ud = require('Module:Ups and downs note name')
local ET = require('Module:ET')

local function ud_note(et, fifth, step)
	return table.concat(ud.get_note_names_table(et, fifth)[step], ", "):sub(0, -1)	
end

function p.interval_table(frame)
	local tuning = frame.args['tuning']
	local et = ET.parse(tuning) or ET.parse('12edo')
	local wikitext = '{|class="wikitable"\n'
	local octave = ET.approximate(et, 2)
	local fifth = ET.approximate(et, 3/2)
	local fifth_error = ET.cents(et, fifth) - iv._to_cents(3/2)
	local dual_fifth = math.abs(fifth_error) > (400 / et.size)
	local dual_flat_fifth = ET.approximate(et, 3/2, -1)
	local dual_sharp_fifth = ET.approximate(et, 3/2, 1)

	wikitext = wikitext .. '!Steps\n'
	wikitext = wikitext .. '!Cents\n'
	if rat.eq(et.equave, 2) then
		if dual_fifth then
			wikitext = wikitext .. '![[Ups and downs notation]] (dual flat fifth ' .. dual_flat_fifth  .. '\\' .. et.size .. ')\n'
			wikitext = wikitext .. '![[Ups and downs notation]] (dual sharp fifth ' .. dual_sharp_fifth .. '\\' .. et.size .. ')\n'
		else
			wikitext = wikitext .. '![[Ups and downs notation]]\n'
		end
	end
	
	for i=0,et.size do
		wikitext = wikitext .. '|-\n'
		wikitext = wikitext .. '|' .. i .. '\n'
		wikitext = wikitext .. '|' .. u._round(ET.cents(et, i), 6) .. '\n'
		if rat.eq(et.equave, 2) then
			if dual_fifth then
				wikitext = wikitext .. '|' .. ud_note(et, dual_flat_fifth, i) .. '\n'
				wikitext = wikitext .. '|' .. ud_note(et, dual_sharp_fifth, i) .. '\n'
			else
				wikitext = wikitext .. '|' .. ud_note(et, fifth, i) .. '\n'
			end
		end
	end
	
	wikitext = wikitext .. '|}'

	return wikitext
end

return p