[JW Lua] Percussion midi map

Jari Williamsson jari.williamsson at mailbox.swipnet.se
Mon Jan 20 18:16:10 CET 2014


Jan, Charles, and the rest of you,

The bug is in FCStaff:CreateInstrumentDef(). You're absolutely correct 
that it (incorrectly) maps to the staff ID rather than to the instrument 
def ID. I'll look into it as soon as possible to try to get a fixed 
version so you can continue your project.

Thanks for the report!


Best regards,

Jari Williamsson


On 2014-01-20 12:23, Jan Angermüller wrote:
> 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
>>
>
>
>
> _______________________________________________
> JWLua mailing list
> JWLua at jwmusic.nu
> http://jwmusic.nu/mailman/listinfo/jwlua_jwmusic.nu
>






More information about the JWLua mailing list