Program Change, how, where?

This is good to know.

Program change actions

Program change actions use MIDI PC events to switch to different sounds. They are particularly useful when using sound libraries, such as General MIDI, that use separate programs for each playback technique or combinations of instrument sounds and effects presets.

What would also be good to know is how to do it.

If I may complain; in this context, the manual seems generally lacking.

So, how do I add program change to a staff?

HI @Tomas_E,
you can add program changes in the expression map, for example.

  1. Here a short video as example:

After you created/edited the Expression map, you have to assign it to the desired track (see video below), and you can then create a playing technique that triggers that specific playback technique (that is been previously defined in the expression map, and that has a program change programmed in it):

  1. Here the prosecution of the workflow, and the practical application of your new sound :slight_smile: :
2 Likes

Thanks, Christian!
It seems to be more work to make it work than I thought it would, but I’m sure your explanation will do the trick. :slightly_smiling_face:

You have to do it only once, and then save the Endpoint configuration, and put it on a new Playback Template or merge it with other Playback Templates, so that all other times you only need to load your Playback Template and you are set.

1 Like

If you’re new to Dorico, I would probably not recommend jumping into custom maps right away unless there is a library you really want to use that has no Dorico expression maps already. This is especially the case for libraries that have a wider array of available techniques/articulations. Early on especially, you might consider things like the built-in libraries, or NotePerformer, or things like VSL Synchron that have very good manufacturer-made maps.

If you’re coming from Finale, you might be used to entering things like keyswitches and CC values/program changes manually to the score to be triggered at the correct spot, but Dorico is designed assuming that the user doesn’t know anything about keyswitches / program changes / CC values and just wants to write. So the actual interface provided to the user is very simple and doesn’t require they know anything about MIDI, because the back end programming of the expression map is where those MIDI concepts are brought in, and those are usually created by someone who is already more or less an expert in expression maps and shared with other users for a particular library.

1 Like

My goal is not to switch articulations but to change programs played by a synthesizer part in my score to get a completely different sound.
So for each program I want my Omnisphere instance to play I need to 1) create a playback technique named for that sound, 2) create a playing technique identifying the sound that can be input into the score to trigger the sound and 3) create an expression map specific to that instance and this piece containing all the program changes I need for this piece tied to the playback techniques I’ve created for each sound. Then 4) I can finally enter the playing techniques I’ve created into the score to actually trigger the sound in playback.
This seems extremely burdensome compared to entering a program change directly, either in the score’s midi trigger region or in the key editor, neither of which seem to accept program changes.
Could someone please confirm that there is no simpler way to do this? Also, how do you make sure the synth part starts with the right sound since the init switch in expression maps “can only trigger simple key switch notes and controller values” (not program changes)?

1 Like

You’ve got a point there, Mark.

In that case, I’d consider making your synthesizer presets into two separate instruments – since this is typically what a program change on a synthesizer is trying to emulate. Then Dorico will also give you automatic instrument change labels and instrument change warnings.

1 Like

The steps you outline are the steps required to create any expression map.
You can use both CC# and Keyswitches to load Omnisphere patches. You are not restricted to Program Changes.

I’m in agreement with frigolito for what I think of as the “heavyweight” cases. Having the player hold multiple instruments avoids any issues with loading time. it accommodates having a different expression map for each patch, so it’s good for say swapping in violin patches, allows you to mix and match synths, and it’s also good for when you are writing for a live player. It is simple to do.

It’s the heaviest option on resources though, and I’m also in agreement that sometimes an instrument change isn’t what you want.

I think you can create ONE reusable expression map - you don’t have to create a new one for every instance or piece if you set up your synth instances in a consistent way. What I mean is, most of mine allow you to create a custom program bank, so you’d be switching consistently from program 1 to program 2, etc, never minding that program 1 and 2 might be very different patches from one piece to another because you’ve set up different banks. Same thing with consistently using the same cc as performance controls even though they might be mapped to different parameters in different patches.

For sound design elements I’ve been known to sample a synth and put it in a sample player, which can be a lot lighter than the original complex evolving many voice synth. If I do that I’ve probably got like six of them set up in one instrument, and I’ve made a percussion kit out of it. Essentially putting them on triggers, which is compact and accommodates overlapping elements. You can reuse the same kit for a different piece just by changing out the samples.

I’m interested in all other ideas too. These day I prefer to use a modular, which is a whole other thing.

1 Like

Thank you @Frigolito and @gdball for your suggestions and @Janus for confirming the expression map route. Using banks to make the expression map more universal is a good idea. A separate instrument/instance for each patch seems like overkill. So far load time is not an issue with Omnisphere.
I did make an expression map for “Omni Synth Bass” with program change actions for each of the three patches I want to use, assigning program changes 1, 2 and 3 to them. I added the playing technique text for each in the appropriate spots but when I attempt to do midi learn with Omnisphere to get the patch to respond to a specific program change it always records PC 1 for all three changes. I’ve tried starting playback in various locations to get Dorico to transmit the right PC # to Omnisphere but it’s always recording 1 and never 2 or 3 for the PC. Does anyone know at which point in the playback Dorico transmits the PC for the new patch?
Seems like a tricky process. I had my first Dorico crash when going back and forth between Omnisphere and Dorico to do the midi learn.

It is not a cc, it will likely get sent one time when the condition you’ve created in the expression map is met. You can seen where that happens in the playback technique lane of the key editor, which helps you diagnose if it’s a problem with your map. I’m not an omnispere person, but midi learn has been problematic for me sometimes and I prefer to use the option (if you have it) of typing/mapping things explicitly.

I managed to get it working. To set the program change in Omni first start Dorico playing prior to the change then go to Omni and turn on learn midi and it will receive and learn the change when it happens in Dorico. After playing around it seems that Dorico looks back for most recent change and sends it if you start anywhere in that section, so it will always play the right patch no matter where you start.

After all the setup I find this approach to be very flexible in experimenting with the instrumentation by simply adding or deleting playing techniques in the synth parts to change sounds.

2 Likes