I think you are confusing 2 different concepts.
First off, let's talk about Voice. This is the what a MIDI manual will refer to as "Program Change". So, in GM a "Piano" sound will be Voice 1 (or 2 or 3). The only difference between GM and non-GM is that GM has standardized the "locations" of the names. IE, all GM compatible synths make 01 == Piano, etc.
Now, if we are talking about drums, things change a bit. Imagine a drum as a single instrument (a piano makes the comparison simple). So, on a Midi drum we have up to 128 keys, each key is a different "tone". Note 39 is a "handclap", etc.
You can select different drum sets (like different pianos), but setting the VOICE for a drum. You your synth might have a "jazz kit" as Voice 123, etc.
Next, we have the channel issue. Most synths capable of doing drums set the MIDI channel for drums to 10 (or 9 if you are counting from 0..15).
Now, I'm assuming that your inst. wants to either:
- play drums on a channel other than 10.
- needs an explicit voice setting to dial up the drum set.
It appears from you post that the problem is with the VOICE number.
Doing a voicetr might help. What voicetr is supposed to do is make it easy to change the NAME of a voice. So, if your piano things that the value for PIANO1 is 88 (not 1) then you can use Voicetr. So, the first thing I'd try is, assuming the the drumkit you want to use is VOICE 44:
VoiceTr 0=44
But, you say that doesn't work.
Next, you can do the voice changes as you mention. You can delete the messages by setting Debug warning off/on. But, you still need to know what tracks are effected. Not an ideal solution.
The only other solution I see right now is to add a "default voice" command for drums. Before I do anything like that, would you try changing some python source code for me? There is a table around line1559 of pat.py. It looks like this:
if self.vtype != 'SOLO' or not self.inited:
self.artic = [90]
self.chord = [[]]
self.sequence = [None]
self.seqRnd = 0
self.seqRndWeight = [1]
self.scaleType = ['AUTO']
self.rVolume = [[0,0]]
self.rSkip =
self.rTime = [[0,0]]
self.octave = [4 * 12]
self.voice =
self.chordRange = [1]
self.harmony = [None]
self.harmonyOnly = [None]
self.harmonyVolume = [.8]
self.strum = [None]
self.volume = [MMA.volume.vols['M'] ]
If you change the default voice setting like this:
self.octave = [4 * 12]
if self.vtype == DRUM:
self.voice = [xyz] # change xyz to the default for your inst.
else:
self.voice =
self.chordRange = [1]
and let me know if that works.
Drum tracks are a pain to work with