musescore/MuseScore — pull request #1083 by Igevorse (2014-07-31 14:33:20+00:00)
Title: Assigning channels

Assigning channels to staves gives better control over connecting to external synthesizers and saving midi/musicxml files.
The key object here is score->midiMapping that contains our mapping (channel (is Channel*) - > midi port, midi channel).
Instruments can have the same midi port/channel, but anyway they have different channels (Channel* ). That's why mapping has almost no effect on the internal synth (fluid.cpp does not use score->midiMapping).
Also since we can choose ports, there is no need in "Ports: " spinbox in Preferences->I/O. Now we update number of JACK/ALSA MIDI ports automatically when MuseScore does really need it.
Volume, pan, etc. controls (in mixer window) of the Instruments with the same ports and channel are synced, because we can't have different global parameters for a one midi channel. (Ok, we can by sending messages about global volume,pan, etc before every note, but external sequencer can die :(. )