[JW Lua] Create lyrics
Jari Williamsson
jari.williamsson at mailbox.swipnet.se
Tue Apr 1 14:51:40 CEST 2014
Chris,
I would suggest a more simplistic approach. Provide all notes you need
as one string with spaces between. For example:
"DO RE MI FA SOL LA SI"
When you create the syllable objects, FCVerseSyllable.SyllableNumber
would be:
"DO" = 1
"RE" = 2
...
"SI" = 7
You would not need any more syllables than that.
Best regards,
Jari Williamsson
On 2014-04-01 12:53, Chris wrote:
> Thank you Jaribut my problem was to create new syllables (which do not
> exist).
>
> Here's an example I created to add the names of the notes in lyrics.
>
> -------------------------------------------------------------------------------------
>
>
> local dialog = finenv.UserValueInput()
> dialog.Title = "Ajouter nom des notes - Couche 1"
> dialog:SetTypes("NumberedList","String","Number","NumberedList")
> dialog:SetDescriptions("Langue :","Ajouter dans :","Numero :","Accords :")
> dialog:SetLists({"Francais - Majuscules","Francais -
> minuscules","Francais - 1ere lettre Majuscule","Anglais -
> Majuscules","Anglais - minuscules"},
> {"Couplet", "Refrain", "Partie"},nil,
> {"Aucun nom","Note grave","Note aigue"})
> dialog:SetInitValues(1,"Couplet", 1,1)
> local returnvalues = dialog:Execute()
> if returnvalues == nil then return end
>
>
> function init()
> if returnvalues[3] < 1 or returnvalues[3] > 500 then
> finenv.UI():AlertInfo("Erreur sur le numero","Ajouter nom des
> notes")
> return false
> else
> return true
> end
> end
>
> function nextVerseSyllable(RawTextNumber)
> local vs = finale.FCVerseSyllable()
> local SyllableNumber = 0
>
> vs.RawTextNumber=RawTextNumber
>
> repeat
> SyllableNumber = SyllableNumber + 1
> vs.SyllableNumber= SyllableNumber
> until not vs:IsValidSyllableNumber()
>
> return SyllableNumber
> end
>
> function noteTexte(noteEn)
> if returnvalues[1] == 4 then return noteEn end -- Anglais
> Majuscules
> if returnvalues[1] == 5 then return string.lower(noteEn) end --
> Anglais minuscules
>
> local notesFr ={{"DO","RE","MI","FA","SOL","LA","SI"},
> {"do","re","mi","fa","sol","la","si"},
> {"Do","Re","Mi","Fa","Sol","La","Si"}}
>
> return notesFr[returnvalues[1]][string.find("CDEFGAB",noteEn)]
> end
>
> function texteNoteEX(noteentry)
> local note = noteentry:CalcLowestNote(nil)
> local text = note:CalcWrittenPitchChar()
> if text == 0 then return "" end
> text= noteTexte(text)
>
> local alter = note:CalcPitchRaiseLower()
>
> return text .. textAlter(alter)
> end
>
> function textAlter(alterValue)
> if alterValue == 0 then return "" end
> local text
>
> if alterValue > 0 then -- diese
> text = string.rep("#", alterValue)
> else -- bemol
> text = string.rep("b", -alterValue)
> end
>
> if not returnvalues[4] then return text end
>
> local font = finale.FCFontInfo()
> font.Name ="Maestro"
> font.Size = 12
>
> return font:CreateEnigmaString(nil).LuaString .. text
> end
>
> function initLyrics()
> local lyric
> local vs
>
> if returnvalues[2] == "Couplet" then
> lyric = finale.FCVerseLyricsText()
> vs = finale.FCVerseSyllable()
> elseif returnvalues[2] == "Refrain" then
> lyric = finale.FCChorusLyricsText()
> vs = finale.FCChorusSyllable()
> else
> lyric = finale.FCSectionLyricsText()
> vs = finale.FCSectionSyllable()
> end
>
> lyric:Load(returnvalues[3])
> return lyric,vs
> end
>
> function texteNote(noteentry)
> if not noteentry:IsNote() then return nil end
> if noteentry.Count == 0 then return nil end
>
> local note
>
> if noteentry.Count == 1 then -- note seule
> note = noteentry:CalcLowestNote(nil)
> else -- accord
> if returnvalues[4] == 1 then -- Aucun nom
> return nil
> elseif returnvalues[4] == 2 then -- Note grave
> note = noteentry:CalcLowestNote(nil)
> else -- Note aigue
> note = noteentry:CalcHighestNote(nil)
> end
> end
>
> local text = note:CalcWrittenPitchChar()
> if text == 0 then return nil end
> text= noteTexte(text)
> local alter = note:CalcPitchRaiseLower()
>
> return text .. textAlter(alter)
> end
>
> function main()
> local lyric,vs= initLyrics()
> local nextvs = nextVerseSyllable(returnvalues[3])
>
> for noteentry in eachentrysaved(finenv.Region()) do
> local note = texteNote(noteentry)
>
> if note ~= nil then
> local syllabe=finale.FCString()
> syllabe.LuaString = " " .. note
>
> local text = lyric:CreateString()
> text:AppendString(syllabe)
> lyric:SetText(text)
> lyric:Save()
>
> vs:SetNoteEntry(noteentry)
> vs.RawTextNumber=returnvalues[3]
> vs.SyllableNumber=nextvs
> vs:SaveNew()
>
> nextvs = nextvs + 1
> end
> end
> end
>
> -- DEBUT DU PROGRAMME
> if init() then main() end
>
> -------------------------------------------------------------------------------------
>
>
>
> Chris
>
> _______________________________________________
> JWLua mailing list
> JWLua at jwmusic.nu
> http://jwmusic.nu/mailman/listinfo/jwlua_jwmusic.nu
>
>
More information about the JWLua
mailing list