[JW Lua] Percussion midi map

Charles O. Lawrence charlesolawrence at bellsouth.net
Mon Jan 20 16:16:18 CET 2014


Jan,

Thought I'd throw this out.  In the FCMusicRegion class, Slots are
guaranteed to be consecutive from 1, but staves are not.  I ran into this on
a project I was working on earlier.  Use Slot and not Staff and I think you
will be OK.  I'm going from memory here and have not tried it yet in your
code sample.

Charles Lawrence




-----Original Message-----
From: JWLua [mailto:jwlua-bounces at jwmusic.nu] On Behalf Of Jan Angermüller
Sent: Monday, January 20, 2014 6:24 AM
To: The JW Lua script plug-in.
Subject: Re: [JW Lua] Percussion midi map

Hi Jari,

thanks for the many answers !

Only the percussion MIDI map thing behaves strange.

If you load the attached file in Finale2014, where the percussion is on
staff 7, i.e. staff:Load(7) should be the solution to load the percussion
map.
But actually it works only if you write:
staff:Load(5).

Below is the full code. You need to load the attached musx file and select
the percussion staff on the bottom, then run the script.

The code first checks if only one staff was selected and the staff is a
percussion staff. Then it loads the staff (which is staff 7) and tries
"CreatePercussionMapNotes()" which returns nil.
Then it loads staff 5 and suddenly CreatePercussionMapNotes() works.

Any idea ?
My idea is: although there are 7 staves in the file, in Score Manager are
only 5 different playback definitions. Two staves share the same playback
channel.
So maybe there is some wrong mapping somewhere.

I don't know if you need the following hint:
the musx file was created by importing a MIDI file to Finale2014a.
If you require the MIDI file, I can send it to you.

Best regards,
Jan


--Display FCUI alert message
region = finale.FCMusicRegion()
region:SetCurrentSelection()
if not (region.StartStaff==region.EndStaff) then
    local ui = finenv.UI()
    ui:AlertError("Please select one staff only.","Error: Multiple staves
selected")
    return
end

local staff=finale.FCStaff()
staff:Load(region.StartStaff)
print("Staff number in region:", region.StartStaff) if not
staff:IsPercussion() then
    local ui = finenv.UI()
    ui:AlertError("Please select a percussion staff only.\r\nPlease make
sure that in ScoreManager\r\nnotation style is set to
percussion.","Error: No percussion staff selected")
    return
end

local instrumentdef = staff:CreateInstrumentDef() local mapnotes =
instrumentdef:CreatePercussionMapNotes()
if not (mapnotes == nil) then
     for mapnote in each(mapnotes) do
         print (mapnote.NoteType, "= MIDI", mapnote.MidiNote)
     end
else
     print("CreatePercussionMapNotes() returns nil") end


--Now load staff 5 instead and try the same code again print("Loading staff
5")
staff:Load(5)
local instrumentdef = staff:CreateInstrumentDef() local mapnotes =
instrumentdef:CreatePercussionMapNotes()
if not (mapnotes == nil) then
     for mapnote in each(mapnotes) do
         print (mapnote.NoteType, "= MIDI", mapnote.MidiNote)
     end
end




Am 20.01.2014 09:16, schrieb Jari Williamsson:
> Although percussion and instrument mapping in JW Lua is at a 
> development phase right now, the functionality you're seeking is 
> actually implemented in the beta you're using.
>
> Here's some skeleton code to get the percussion midi map for a 
> percussion staff.
>
> Since FCInstrumentDef:CreatePercussionMapNotes() will parse the XML 
> file information for the percussion MIDI map, make sure to put it 
> outside any loops for performance.
>
> ---
> local staff = finale.FCStaff()
> staff:Load(1) -- Or whatever staff ID with percussion
>
> local instrumentdef = staff:CreateInstrumentDef()
>
> local mapnotes = instrumentdef:CreatePercussionMapNotes()
> for mapnote in each(mapnotes) do
>     print (mapnote.NoteType, "= MIDI", mapnote.MidiNote) end
> ---
>
> Best regards,
>
> Jari Williamsson
>
>
> On 2014-01-19 20:09, Jan Angermüller wrote:
>> Hi Jari,
>>
>> I am now working on a remapping plugin for drum staves that were 
>> imported from MIDI files and that need remapping.
>> E.g. if MIDI bass drum 35 needs to become MIDI bass drum 36 for 
>> correct playback on a certain drum sampl map.
>>
>> What works fine so far:
>> reading the percussion staves, reassiging the new note pitch, reading 
>> the percussion layouts and matching the note types from 
>> FCPercussionNoteMod and FCPercussionLayoutNote.
>>
>> Only one final thing does not work yet:
>> How do I get the note type for a certain MIDI note ?
>> So that I can assign the correct note type for the new pitch.
>> Probably it has to do with FCPercussionMapNote which has the 
>> properties MidiNote and NoteType. But it isn't implemented yet, is it ?
>>
>> Would be great to have that class !
>> And very happy if the plugin is finally working.
>> That saves hours and hours when importing MIDI.
>>
>> I must say again - JW Lua is really fun to program with. Great job !
>>
>> Thanks a lot,
>> Jan
>>
>>
>> _______________________________________________
>> JWLua mailing list
>> JWLua at jwmusic.nu
>> http://jwmusic.nu/mailman/listinfo/jwlua_jwmusic.nu
>>
>>
>
>
>
> _______________________________________________
> JWLua mailing list
> JWLua at jwmusic.nu
> http://jwmusic.nu/mailman/listinfo/jwlua_jwmusic.nu
>






More information about the JWLua mailing list