[JW Lua] GetStaffPosition for a note entry ?

Jan Angermüller jan at angermueller.com
Mon Jul 7 12:34:28 CEST 2014


Jari,

thanks for the hint !
But: FCNote:CalcActualDisplacement() seems to return wrong results for 
percussion staves.
When using NoteEntry:CalcHighestPercussionNote ():CalcActualDisplacement()
it seems to ignore percussion layout. Notes on the same staff pos, but 
with different
MIDI values return different positions.

And the standard note results do not have the same range as percussion 
note results
(which have staff position 6 on the middle line, CalcActualDisplacement
returns -4 on middle line).

Attached below are my own functions that deliver the same staff position
for both standard and percussion staves. They seem to work fine,
although I probably should switch to FCNote:CalcActualDisplacement()
and add range adjust, as it probably has had more testing yet.

function GetPercPitch(staff,note)
      local layerinstrdef=staff:CreateLayerInstrumentDef(1)
      local percmapnotes=layerinstrdef:CreatePercussionMapNotes()
      local percID=staff:CalcPercussionLayoutID(0)
      local perclayoutnotes=finale.FCPercussionLayoutNotes()
      perclayoutnotes:LoadAllForItem(percID)
      return 
perclayoutnotes:FindMidiNote(note,percmapnotes):GetStaffPosition()
end

function GetStaffPos(entry,staff)
     --calc note position in staff, rests return 0
     local staffpos=0

     -- Get clef, key signature, major/minor and measure
     local clef=finale.FCClefDef()
     clef:Load(entry:GetClefIndex())
     local measure=finale.FCMeasure()
     measure:Load(entry.Measure)
     local key=measure:GetKeySignature()
     local minor=0
     if key:IsMinor() then
        minor=-2
     end

     local percussionhighestnote=entry:CalcHighestPercussionNote ()
     if percussionhighestnote~= nil then
staffpos=GetPercPitch(staff,percussionhighestnote:CalcMIDIKey())
     elseif entry:IsRest() or (entry.Duration==0) then -- return 0 on rests
          staffpos=0
     else
         staffpos=entry:CalcHighestNote(NULL):GetDisplacement() --  
replace with FCNote:CalcActualDisplacement()
                        +clef:GetVerticalAdjust()
                        +staff:GetTransposeInterval()
                        +key:CalcRootRelationIndex()
                        +minor
                        +10           -- make range compatible with 
percussion staves
     end
     return staffpos
end


Jan

> Jari Williamsson <jari.williamsson at mailbox.swipnet.se> schrieb:
>
>     On 2014-07-02 17:03, Jan Angermüller wrote:
>     > Does anyone know if there is GetStaffPosition for a "normal"
>     note entry ?
>
>     Sounds like FCNote:CalcActualDisplacement() is what you're looking
>     for.
>
>
>     Best regards,
>
>     Jari Williamsson
>
>
>     _______________________________________________
>     JWLua mailing list
>     JWLua at jwmusic.nu
>     http://jwmusic.nu/mailman/listinfo/jwlua_jwmusic.nu
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://jwmusic.nu/pipermail/jwlua_jwmusic.nu/attachments/20140707/21e60baa/attachment.htm>


More information about the JWLua mailing list