Page 2 sur 2

Re: JW Lua: Copier/Coller Entre Portées

Posté : 4 décembre 2020 à 10:02
par chris
Si cela peut vous aider, j'ai retrouvé un script (je ne me rappelle plus de l'auteur) qui permet de copier un layer. Celui-ci copie le layer 1 sur le layer 2. Mais il y a moyen de copier sur une autre portée (attention aux index des portées, la 1ère portée n'a pas obligatoirement l'index 1, et le 1er layer a l'index 0).

Code : Tout sélectionner

local function copyLayer(layerSource,layerDest,idStaff,firstMeasure,lastMeasure)
	local entrylayer = finale.FCNoteEntryLayer(layerSource, idStaff, firstMeasure, lastMeasure)
	entrylayer:Load()
	local entrylayerDest = entrylayer:CreateCloneEntries(layerDest, idStaff, firstMeasure)
	entrylayerDest:Save()
	entrylayerDest:CloneTuplets(entrylayer)
	entrylayerDest:Save()
end

copyLayer(0,1,1,1,2)

Re: JW Lua: Copier/Coller Entre Portées

Posté : 15 décembre 2020 à 20:02
par Martin Marris
En fin de compte, c'est relativement facile.

Il faut utiliser FCMusicRegion() et non pas finenv.Region(). Ceci permet de sélectionnner une région à l'intérieur du script, sans "sélection" humaine.

Attention, il faut que les numéros index de mesures, et de portées, soient valides. Sinon le script se plante de manière spectaculaire.

Quand on copie la musique d'une portée à une autre, ça marche très bien sauf que la clé de la portée d'origine est copiée sur la portée de "destination". Donc il faut changer la clé (le cas échéant), après le copier/coller.

Un exemple:

Code : Tout sélectionner

local sel_region = finenv.Region()

local musicregion = finale.FCMusicRegion()

--copier la musique de la source (Flûte)
musicregion:SetStartStaff(1)
musicregion:SetEndStaff(1)
musicregion:SetStartMeasure(1)
musicregion:SetEndMeasure(20)
musicregion:CopyMusic()

--définir la destination (Basson)
musicregion:SetStartStaff(3)
musicregion:SetEndStaff(3)
musicregion:SetStartMeasure(1)
musicregion:SetEndMeasure(20)
--définir la clé de l'instrument "destination" (Basson)
local cell = finale.FCCell(1, 3)
local clefIndex = cell:CalcClefIndexAt(0)

--coller la musique sur la destination
musicregion:PasteMusic()

--changer la clé
local cells = finale.FCCells()
cells:ApplyRegion(musicregion)
for cell in each(cells) do
    local cellFrameHold = finale.FCCellFrameHold()
    cellFrameHold:ConnectCell(cell)
    if cellFrameHold:Load() then
        cellFrameHold.ClefIndex = clefIndex
        cellFrameHold:Save()
    end
end

--"release" la musique
musicregion:ReleaseMusic()

--éliminer la sélection bleutée
sel_region:SetInDocument()
Martin