Module:Ups and downs notation: Difference between revisions
CompactStar (talk | contribs) No edit summary |
CompactStar (talk | contribs) No edit summary |
||
| Line 35: | Line 35: | ||
function p.get_note_names_table(et) | function p.get_note_names_table(et) | ||
local note_names = {} | local note_names = {} | ||
local i = 0 | |||
while i < et.size do | |||
note_names[i] = "" | |||
i = i + 1 | |||
end | |||
local fifth = u.round(math.log(3/2)/math.log(2) * et.size) | |||
local fourth = u.round(math.log(4/3)/math.log(2) * et.size) | |||
local chroma = (fifth * 7) % et.size | |||
local major_note_idx = { | |||
0, | |||
(fifth * 2) % et.size, | |||
(fifth * 4) % et.size, | |||
fourth, | |||
fifth, | |||
(fifth * 3) % et.size, | |||
(fifth * 5) % et.size, | |||
tuning.size | |||
} | |||
-- Add major scale notes | |||
note_names[major_note_idx[1]] = "C" | |||
note_names[major_note_idx[2]] = "D" | |||
note_names[major_note_idx[3]] = "E" | |||
note_names[major_note_idx[4]] = "F" | |||
note_names[major_note_idx[5]] = "G" | |||
note_names[major_note_idx[6]] = "A" | |||
note_names[major_note_idx[7]] = "B" | |||
note_names[major_note_idx[8]] = "C" | |||
-- Add sharp/up notes | |||
i = 0 | |||
local last_major_note = 0 | |||
while i < et.size do | |||
if table_contains(major_note_idx, i) then | |||
last_major_note = i | |||
else | |||
local num_sharps = math.floor((i - last_major_note) / chroma) | |||
local num_ups = (i - last_major_note) % chroma | |||
local name = interval_names[last_major_note] | |||
local j = 0 | |||
while j < num_sharps do | |||
name = name + "#" | |||
end | |||
j = 0 | |||
while j < num_ups do | |||
name = "^" + name | |||
end | |||
note_names[i] = name | |||
end | |||
i = i + 1 | |||
end | |||
-- Add flat/down notes | |||
i = et.size - 1 | |||
local last_major_note = tuning.size - 1 | |||
while i >= 0 do | |||
if table_contains(major_note_idx, i) then | |||
last_major_note = i | |||
else | |||
local num_flats = math.floor((last_major_note - i) / chroma) | |||
local num_downs = (last_major_note - i) % chroma | |||
local name = interval_names[last_major_note] | |||
local j = 0 | |||
while j < num_flats do | |||
name = name + "b" | |||
end | |||
j = 0 | |||
while j < num_downs do | |||
name = "v" + name | |||
end | |||
note_names[i] = note_names[i] + ", " + name | |||
end | |||
i = i - 1 | |||
end | |||
return note_names | |||
end | end | ||