MIDI Program Changes for percussion maps?

Dear Dorico Wizards,

Please consider adding the ability for Percussion Maps to have an option to send program changes before the fixed pitch note-on events… or an option to have instrument changes trigger a program change. All of my percussion are all toggled via CC32/Program Changes. See here:

As of today, I’m up and running with program changes in Notion and composing. I can easily map everything this way in Cubase as well. But my aim is to get everything up and running in both as soon as Dorico can trigger all my samples. Dorico looks beautiful. But it’s all this MIDI routing/end-point business you guys keep talking about that I want more of. I’ll make a deal with you guys. You guys add this feature and I’ll promise to try to be a more patient user on here. lol

Your most hopeful user,

I need a bit more information to understand what you’re asking for here, Sean. I don’t know what “all of my percussion are all toggled via CC32/Program Changes” means, which I’m sure is my own ignorance more than anything else. Thanks in advance for taking pity on me and explaining a little more about what you’re trying to do.


No worries. I appreciate you being patient with me, though I’m the one who needs more patience here. I just want Dorico 9.0 today. :wink:

It’s easier to illustrate with a Violin first:

In Kontakt you can create an instrument bank to house all your Kontakt instruments (nki’s). Just drag whatever instrument patches you have into a slot and voila!

Here are my Spitfire Violin 2’s as they are mapped:

VI-Pro’s matrix feature works the same way as Kontakt banks:

Bank slots are switched via program changes, like a keyswitch, but without taking over your keys. I’ve mapped my articulations to allow Spitfire, VSL, and Orchestral Tools (Berlin) to all be compatible with the same Expression Map. That alone is very attractive.

For percussion:

I’ve tweaked every Kontakt patch for Spitfire’s “Percussion Redux” so that everything (hits, rolls, flams, etc) is on the same midi note numbers across the entire library (for unpitched perc anyway). I did the same thing with their Zimmer Percussion library with as similar a mapping scheme as possible. But I’ve also put my entire redux library into that instrument bank. So when I copy that bank on a few MIDI channels, each of those channels can trigger any percussion sample I have. While it makes it easier to map it all if it’s consistent… I’m not just doing this for easy template building. Fixed universally-mapped pitches + banks/matrices on a single MIDI channel = easier to play via a MIDI keyboard (cause you know which note does what) and makes for proper flexibility with percussion staves. I can actually switch from Bass Drum to Cowbell to Woodblocks on one staff. It’s very straightforward to use.

Note: the “Bass Drum” marking actually triggers switching to the Bass Drum in Kontakt’s banks… by sending [CC: 32, Value: 2) and it’s turned into Program Number [Value 3] in Kontakt. (CC starts on 0.Program Numbers start on 1)

Some important VST history to consider with this request:

Because some programs only use keyswitches or CC, it’s very common to send CC32 values and have them converted to a program number. It’s actually what CC32 was intended for, ‘bank selection’. Kontakt has a default script to convert the values. With VST3, Steinberg switched from program changes to program lists, which no other developers use. VSL actually has a way to get program changes into Vienna Ensemble Pro because of this. So VST3 doesn’t actually support program changes. But 1) it does support CC32 obviously and 2) people are still using program changes anyway. lol

Hopefully that’s at least a little helpful.

Notion vs Dorico: (This is less for Daniel and more for anyone else reading this thread…)

I should note that while I am up and running in Notion and Cubase right now (and it may seem odd I focus on Dorico’s development), Notion has playback bugs out the wazzoo with Rewire to Cubase. Dropped midi notes, dropped Note-off events (yeah, not annoying at all). I’ve manged to make a workaround to makes it usable. But I prefer a stable workstation (odd I know) and where Dorico looks absolutely stunning, this is why I want to see some features in Dorico.

Thank you,

It’s also worth mentioning a bit of a pet peeve I’ve had with Notion. Notion sends keyswitches, CC, etc… TECHNICALLY before the note on event… but I swear it must be a single MIDI tick before. Vienna Ensemble, if it gets them at the same time, reorders them so the note happens first. This of course requires a work-around. MIDI program changes, cc, Cubase and Vep | VI-CONTROL I ended up writing my own script as Kontakt 4 & 5 (multiple versions within those as well) have been inconsistent in how they seem to handle timing. In mine, I had to delay the notes after the articulation/percussion change even more than in that thread. I’ve done far more reading on this than I ever wanted to do.

In short, testing these sorts of features with BOTH Kontakt and VI-Pro is advisable, not just VI-Pro. :wink:


Thanks for this additional information, Sean. I understand the concept of a bank OK: you have effectively 128 patches loaded, and you can access each patch via a program change, as if the bank were an external MIDI sound module. But there is an additional level here, right? Because your initial screenshot shows e.g. ‘005 - Castanets’ and ‘006 – Claves’, each of which presumably then has its own specific per-patch mapping, e.g. C4 in the castanets patch produces a hit, and C#4 produces a slap, or whatever.

Would your intention be to produce a single percussion map in our editor for all of the sounds in your entire bank, so a maximum of 128 x 128 MIDI pitches, plus whatever variations are also possible by way of keyswitches in each of those 128 patches? And you want to specify for each MIDI pitch in the percussion map what program change should also be output before/at the same time as the MIDI pitch to be played to produce (say) the castanet hit? Or something else?


[Edit: I reworded this to hopefully be more clear]

It helps to know: If you double click a bank, it will pull up the typical Kontakt instrument GUI you’re used to, in it’s full blown edit mode. But you’ve got it exactly right. But I actually separate everything into it’s own bank… including mallet types. The bank change is the upper ‘layer’. Fixed pitches for rolls, hits, etc. is the lower layer… and is pitches are universally mapped to the same fixed pitches from one bank to another. MIDI note 25 (C#0 in Kontakt) is always a roll for all percussion.

Yes, program change before note on… HOWEVER, it’s best to follow this exact order: Program Change >> Keyswitch >> Resend current CC value >> musical Note-on events. with enough time between each one for it to update (Kontakt is slower than VI-Pro at this, so just test there and it will work accross the board). Expression maps should really work this way too honestly.

Resending CC’s, or “CC Chasing” is to update the new articulation to the current dynamic level per se. If Dorico has CC lanes that doesn’t matter really. If rewire is used and Cubase is used to draw/record CC’s, then you have problems unless you CC chase… because rewire is never perfectly in sync, and not really all that reliable. You get hanging notes, missed CC changes, missed articulation changes. Not to mention tiny issues in VI-Pro, Kontakt, and VEPro that lend to it. But rewire is the real culprit.

If Dorico sends things out in that order, then 1) by the time you guys do get to rewire, it will already work well even against Rewire’s imperfect sync issues and 2) it will work with any typical articulation switching method as it’s all before note-on anyway… as well as Kontakt and VI-Pro’s more robust ways of working… regardless of configuration, rewire, etc… and thereby allowing simple universal maps for sample libraries for Dorico. IMHO it’s just simpler all around.

Back to your questions:

“Would your intention be to produce a single percussion map in our editor for all of the sounds in your entire bank?”

Yes… ish. I quickly discovered that pitched percussion, having various techniques, had to have a separate mapping scheme. So my Timpani, Marimba (idiophones, etc) are entirely separate Kontakt bank instances… on their own MIDI channels. So I use program changes for the playing techniques layer in this case: rolls in one Kontakt bank and hits in another. There’s other ways that could be done, but you really need two different mapping schemes: pitched and unpitched. There’s no decent way around that. That’s especially true with how deeply sampled high-end libraries are getting every year. Just look at how many drums and mallet types Berlin has. They have multiple sizes of bass drum, piccolo snares, and the lot. So flexibility here is definitely going to be essential sooner than later (sorry, not your favorite news I bet lol)

If it helps to know, here’s all the mapping schemes I using right now in my current setup. I don’t expect the last one to suit to Dorico. Percussion is obviously the most challenging concern right now.

Timpani & Pitched
Orchestral Percussion
HZ Percussion
The Orchestra (a mapping scheme designed for Spitfire, VSL and Berlin to all fit in one universal bank/matrix layout)
LABS (50 or so odd instruments I keep on one track for quick access for film work… toy piano, music box, etc)

Hopefully you stayed sane after reading all this. :wink:


Program Change >> Keyswitch >> Resend current CC value >> musical Note-on events.

Very good point. The Resend current CC value bit is extremely important!


hahahaha → “Staying on Windows 7 as long as possible. Always the latest versions of everything”

I’m resisting the urge to tell you all the reasons why I love that signature. Must… resist…

Oh, I now see I forgot the last word … else :slight_smile:))


I should also speak to a point I rose:

It is TECHNICALLY possible with percussion (and with my LABS setup if we loop expression maps into this too), that you may see these as odd ways to structure instruments within Dorico. It’s not like we live in a perfectly clean world here. I’m confident I made my case about actually working withe each sampler in their multiple configurations. That gets any user type on board with Dorico… at least it makes it POSSIBLE to get on board with Dorico.

But in my “switch to notation” planning, I didn’t just go universal and clean cause it’s possible or even because it was a little easier.

Every other month or so an Erhu, a new choir, or something brilliant comes out I want to use. Their Kontakt script MAY not be as flexible as Spitfire’s. Even VSL’s isn’t for percussion. Berlin’s Capsule script… for percussion? Yeah right. Point is… the inconsistencies across the board really require universal mapping features on your end… If you want those users to use Dorico. lol It’s either a lot easier, is/isn’t possible for some instruments at all, switching from Notion to Dorico is made easier if Dorico can map properly, etc.

The English translation is that the more samples people buy or when they are trying to switch from one setup to another, it can all be made VERY easy or VERY stupid insane I want to shoot myself difficult. So I’m absolutely not trying to be stubborn to you in saying “Dorico MUST be this way”. I’m just letting you know about a typical user experience trying to get new tools to work with each other. Eventually, SMART sample library developers tweak scripts a little for all their users. Eventually, Notion does to. But if you have the mapping options as outlined, you’ll be as right as possible from the start and NO ONE won’t be able to use Dorico and those that do will actually be able to in a way that’s easy for their needs. Plus it gives us “universal mappers” an easy option… which in turn will allow you guys to get more maps defined for all these libraries as people share.

I know I can be a bit of a broken record. But I wanted to make it clear that while I may highlight my exact configuration in this thread, it’s not even remotely limited to it. Quite the opposite.



I am going to second this request.

When it comes to Virtual Drumline, many people create a ‘bank’ of percussion sounds that belong to 1 player (say Tambourine, Brake Drum, Triangle). To keep things easy to maintain and follow in Kontakt player, this ‘bank’ is assigned to 1 staff, and the player will see cues (much like instrument changes) to the new instrument. It would be great if Dorico, utilizing the ‘players holding instruments’ idea could keep all of Percussion 1 on the same MIDI channel, and just switch programs to invoke the different sounds.


Scoredfilms - thanks for the detail you are putting into these posts.

I don’t film score. I produce music in Cubase and build up projects around a combination of recorded tracks, vsti and orchestral libs (VSL, EWQL, etc.) It has never occurred to me that a scoring app of any kind could achieve the level of detailed mapping with articulations, tempo, dynamics, etc. to produce a non-demo, musical sounding recording, as is doable in a daw. Depending on the project I will export midi parts composed in Cubase and create a score for live musicians to play, or conversely, import midi into the daw to get rough midi tracks previously composed in Dorico/Sibelius. From there I painstakingly make the midi tracks musical sounding in the Cubase midi editor, then bounce the tracks for audio processing etc.

I’m going to save this thread to study and try to get a better grip on your workflow. I am intrigued, to say the least.


It’s definitely possible. Although I should say that this thread barely scratches the surface of what I’ve been doing in notation already with my samples. There’s an Everest amount more underneath this info. lol


In my DAW, I use program and bank changes for most articulation switching (as these chase well), and so being able to send named articulations mapped to specific cc32/ bank values would make me a customer overnight.

Great discussion here, thanks.