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