Thanks for letting us know that things are okay with MMA. I was starting to have nightmares
3. How are you playing the midi file (I'm wondering if the player is set to GM midi)?
Here is the point. Some sequencers only take the last Program Change in a track.
This is the case for LMMS when you import a MIDI file.
But Timidity MIDI player or MuseScore do a good job here.
End of story.
I would say that LMMS is broken. Switching voices is a pretty normal event in midi files. And MMA does do quite a bit for work to make sure that program changes are applied at the correct position in the file.
Anyway, I think MMA tracks should avoid to switch between instruments. It is confusing.
One track = one instrument (we can only have 15 channels, so two tracks could have the same channel)
Not sure that having a new track with the same channel would help. Would LMMS handle this correctly? Or would it combine the tracks? Easy for you to test:
Create a chord track, set channel to 5 (or whatever)
send chord data
create a chord-1 track with a different voice and channel set to the same value
send chord data
I suppose that we could do something which would rename all the existing MMA tracks with non-user names (if it exists CHORD track would become CHORD-xxxyyy) and then reading the new lib file would create a new CHORD. Also, we'd need to free all the existing track assigns. Certainly possible, but seems to be a lot of overkill.
This only becomes a problem when you deliberately reuse a MMA track by forcing a channel assignment OR when you change the voice of an existing track. If you use multiple lib files you are actually doing that. Remember, in MMA everything you do is cumulative. So, when you import a 2nd lib file you are ADDING to the previous settings. So, if we have stuff for the CHORD track set in "folk" and you then read "Folk-ballad" (which also has a CHORD track) you still only have one CHORD track ... the "folk-ballad" just modifies the existing CHORD track.
I think the problem is that the lib files really aren't designed to be run in multiple import cases. But, mostly they work fine.
Thanks for clearing up the problem!
Bob.