Moduuli:Kitarakirja/Komppauskuvio
Tällä työkalulla voi tehdä yksinkertaisia komppikuvioita helposti.
Funktio Komppaus
muokkaaParametrit:
- tahtilaji: (valinnainen, oletus 4/4) tahtilajimerkintä
- tempo: (valinnainen, oletus 120 bpm) miditiedoston tempo
- numeroparamerit: jokainen numero parametri on jokin seuraavista
- d: painoton alasisku
- D: painollinen alasisku
- u: painoton ylössisku
- U: painollinen ylösisku
- r: tauko
- ~: nuotti sidotaan edelliseen
Edellisiin voi lisätä perään x:n, jolloin isku merkitään perkussioääneksi ja numeron joka ilmaisee sen pituuden:
- 4 = 1/4-nuotti,
- 8 = 1/8-nuotti,
- jne.
Pituuden oletus on 4 tai edellinen annettu pituus.
Esimerkki:
{{#invoke:Kitarakirja/Komppauskuvio|Komppaus|d8|u|Dx|u|~|u|r|u}}
Tulos:
local p = {}
local tekstipohja = require "Moduuli:Tekstipohja"
local scoreText_template = [=[
\version "2.18.2"
\header {
tagline = ##f
}
\paper {
raggedright = ##t
raggedbottom = ##t
indent = 0\mm
}
%% Nuottikuvan generoiva koodi.
\score {
<<
\relative c'' {
\omit Staff.Clef
\stemDown
\improvisationOn
\time {{{TAHTILAJI}}}
%% Akenttimerkki suuntamerkkien yläpuolelle.
\override Script.script-priority = #-100
{{{NUOTIT_NUOTTIKUVA
}}}
}
>>
\layout {}
}
%% Miditiedoston generoiva koodi.
\score {
<<
\relative c' {
\set Staff.midiInstrument = "acoustic guitar (steel)"
\chordmode {
{{{NUOTIT_SOINNUTUS
}}}
}
}
\drums {
\drummode {
{{{NUOTIT_RUMMUT
}}}
}
}
>>
\midi {
\context { \Score tempoWholesPerMinute = #(ly:make-moment {{{TEMPO}}} 4) }
}
}
]=]
function p._Komppaus(frame)
local notes = frame.args
local time_signature = frame.args.tahtilaji or "4/4"
local tempo = frame.args.tempo or "120"
local nuotit_nuottikuva = {}
local nuotit_soinnutus = {}
local nuotit_rummut = {}
if not mw.ustring.match(time_signature, "^%d/%d$") then
error("Virheellinen tahtilaji: " .. time_signature)
end
if not mw.ustring.match(tempo, "^%d+$") then
error("Virheellinen tempo: " .. tempo)
end
-- Edellisen nuotin pituus, jota käytetään seuraavassa, jos muuta ei anneta.
local prev_duration = 4
for i, note in ipairs(notes) do
local udxr, duration = mw.ustring.match(note, "([udrUD~][xpt]?)(%d*%.*)")
if not duration then
duration = prev_duration
end
if not udxr then
error("Virheellinen merkki: " .. udxr)
end
local dur2 = 16
if udxr == "d" then
nuotit_nuottikuva[i] = "c" .. duration .. "\\downbow"
nuotit_soinnutus[i] = "c" .. duration .. "/+c\\f"
nuotit_rummut[i] = "r" .. duration
elseif udxr == "D" then
nuotit_nuottikuva[i] = "c" .. duration .. "\\downbow\\accent"
nuotit_soinnutus[i] = "c" .. duration .. "/+c\\fff"
nuotit_rummut[i] = "r" .. duration
elseif udxr == "u" then
nuotit_nuottikuva[i] = "c" .. duration .. "^\\ltoe"
nuotit_soinnutus[i] = "c" .. duration .. "\\f"
nuotit_rummut[i] = "r" .. duration
elseif udxr == "U" then
nuotit_nuottikuva[i] = "c" .. duration .. "^\\ltoe\\accent"
nuotit_soinnutus[i] = "c" .. duration .. "\\fff"
nuotit_rummut[i] = "r" .. duration
elseif udxr == "dx" then
nuotit_nuottikuva[i] = "\\tweak style #'cross c" .. duration .. "\\downbow"
nuotit_soinnutus[i] = "r" .. duration .. ""
nuotit_rummut[i] = "sn" .. duration
elseif udxr == "Dx" then
nuotit_nuottikuva[i] = "\\tweak style #'cross c" .. duration .. "\\downbow\\accent"
nuotit_soinnutus[i] = "r" .. duration .. ""
nuotit_rummut[i] = "sn" .. duration .. "\\accent"
elseif udxr == "ux" then
nuotit_nuottikuva[i] = "\\tweak style #'cross c" .. duration .. "^\\ltoe"
nuotit_soinnutus[i] = "r" .. duration .. ""
nuotit_rummut[i] = "sn" .. duration
elseif udxr == "Ux" then
nuotit_nuottikuva[i] = "\\tweak style #'cross c" .. duration .. "^\\ltoe\\accent"
nuotit_soinnutus[i] = "r" .. duration .. ""
nuotit_rummut[i] = "sn" .. duration .. "\\accent"
elseif udxr == "r" then
nuotit_nuottikuva[i] = "r" .. duration .. ""
nuotit_soinnutus[i] = "r" .. duration .. ""
nuotit_rummut[i] = "r" .. duration .. ""
elseif udxr == "~" then
nuotit_nuottikuva[i] = "~ c" .. duration .. ""
nuotit_soinnutus[i] = "~ c" .. duration .. ""
nuotit_rummut[i] = "r" .. duration .. ""
-- pizzicato/staccato
elseif udxr == "dp" then
nuotit_nuottikuva[i] = "c" .. duration .. "\\downbow_\\staccato"
nuotit_soinnutus[i] = "c" .. dur2 .. "/+c\\f" .. " r" .. dur2
nuotit_rummut[i] = "r" .. duration
elseif udxr == "Dp" then
nuotit_nuottikuva[i] = "c" .. duration .. "\\downbow\\accent_\\staccato"
nuotit_soinnutus[i] = "c" .. dur2 .. "/+c\\fff" .. " r" .. dur2
nuotit_rummut[i] = "r" .. duration .. ""
elseif udxr == "up" then
nuotit_nuottikuva[i] = "c" .. duration .. "^\\ltoe_\\staccato"
nuotit_soinnutus[i] = "c" .. dur2 .. "\\f" .. " r" .. dur2
nuotit_rummut[i] = "r" .. duration
elseif udxr == "Up" then
nuotit_nuottikuva[i] = "c" .. duration .. "^\\ltoe\\accent_\\staccato"
nuotit_soinnutus[i] = "c" .. dur2 .. "\\fff" .. " r" .. dur2
nuotit_rummut[i] = "r" .. duration .. ""
--
elseif udxr == "dt" then
nuotit_nuottikuva[i] = "c" .. duration .. "\\downbow_\\tenuto"
nuotit_soinnutus[i] = "c" .. duration .. "/+c\\f"
nuotit_rummut[i] = "r" .. duration
elseif udxr == "Dt" then
nuotit_nuottikuva[i] = "c" .. duration .. "\\downbow\\accent_\\tenuto"
nuotit_soinnutus[i] = "c" .. duration .. "/+c\\fff"
nuotit_rummut[i] = "r" .. duration .. ""
elseif udxr == "ut" then
nuotit_nuottikuva[i] = "c" .. duration .. "^\\ltoe_\\tenuto"
nuotit_soinnutus[i] = "c" .. duration .. "\\f"
nuotit_rummut[i] = "r" .. duration
elseif udxr == "Ut" then
nuotit_nuottikuva[i] = "c" .. duration .. "^\\ltoe\\accent_\\tenuto"
nuotit_soinnutus[i] = "c" .. duration .. "\\fff"
nuotit_rummut[i] = "r" .. duration .. ""
else
error("Virheellinen koodi: " .. udxr)
end
end
local score = tekstipohja.korvaaMuuttujat(scoreText_template, {
["TAHTILAJI"] = time_signature,
["TEMPO"] = tempo,
["NUOTIT_NUOTTIKUVA"] = table.concat(nuotit_nuottikuva, " "),
["NUOTIT_SOINNUTUS"] = table.concat(nuotit_soinnutus, " "),
["NUOTIT_RUMMUT"] = table.concat(nuotit_rummut, " ") })
return score
end
function p.Komppaus(frame)
local score = p._Komppaus(frame)
local args = { raw = "1" }
if not frame.args.sound == "-" then
args['sound'] = "1"
end
return frame:extensionTag{ name = "score", content = score, args = args }
end
return p