Moduuli:Kitarakirja/Kitaramalli
Ulkoasu
Tämän moduulin ohjeistuksen voi tehdä sivulle Moduuli:Kitarakirja/Kitaramalli/ohje
--- Kitaran nuottien laskemiseen liittyviä funktioita.
local model = {}
-- Nuottinimien indeksit.
model.indeces = {
["c"] = 0,
["c♯"] = 1,
["c𝄪"] = 2,
["d𝄫"] = 0,
["d♭"] = 1,
["d"] = 2,
["d♯"] = 3,
["d𝄪"] = 4,
["e𝄫"] = 2,
["e♭"] = 3,
["e"] = 4,
["e♯"] = 5,
["e𝄪"] = 6,
["f𝄫"] = 3,
["f♭"] = 4,
["f"] = 5,
["f♯"] = 6,
["f𝄪"] = 7,
["g𝄫"] = 5,
["g♭"] = 6,
["g"] = 7,
["g♯"] = 8,
["g𝄪"] = 9,
["a𝄫"] = 7,
["a♭"] = 8,
["a"] = 9,
["a♯"] = 10,
["a𝄪"] = 11,
["b𝄫"] = 9,
["b♭"] = 10,
["b"] = 11,
["b♯"] = 0,
["b𝄪"] = 1,
["c𝄫"] = 10,
["c♭"] = 11,
["b𝄫 (b♭)"] = 9,
["b♭ (b)"] = 10,
["b (h)"] = 11,
["b♯ (h♯)"] = 0,
["b𝄪 (h𝄪)"] = 1,
}
function model:new(args)
local o = {
tuning = args
}
setmetatable(o, self)
self.__index = self
return o
end
function model:get_notename_function(notenames)
local notes = { [0] = nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil }
for i, name in ipairs(notenames) do
local index = model.indeces[name]
assert ( index ~= nil and index >= 0 and index < 12, "Nuottia ei löydy: " .. name )
notes[index] = name
end
return function (args)
local noteindex = self:get_note_index(args)
local notename = notes[noteindex % 12]
--assert ( notename, "Nuotin nimeä ei ole annettu: " .. (noteindex % 12) )
if not notename then
notename = "?"
end
return notename
end
end
--- Palauttaa halutun nuotin indeksin.
--
-- Käyttö:
-- get_note{ string = kielen numero, fret = nauhanumero }
-- fret = 0 tarkoittaa avointa kieltä
-- @return: nuotin indeksi, jossa 0 tarkoittaa c:tä (b#:tä ja dbb:tä)
function model:get_note_index(args)
assert ( args.string, "Parametri string puuttuu" )
assert ( args.fret, "Parametri fret puuttuu" )
assert ( args.string >= 1 and args.string <= #self.tuning, "Virheellinen kielen numero: " .. args.string )
assert ( args.fret >= 0, "Virheellinen nauhanumero: " .. args.fret )
local noteindex = self.tuning[args.string] + args.fret
return noteindex
end
return model