Jump to content

Inserting Midi Control Sequences into a Midi Track..

Sridhar Raghavan

Recommended Posts

In the Music I have been creating with/for the Korg PA600 Keyboard, I make generous use of Performances/Styles, changing them a few/many times during the song. 
Each style is a set of instrument assignments with desired  parameter settings, to each of the 16 tracks. (Rhythms as well - but we can keep that out for now).

Below is an example of a Style Select MIDI Sequence -- essentially it is a Bank/Program Select sequence. 


(This selects the Style Item: User favorites, Page 1, Entry 2)

How do I insert this sequence in the Midi Track at a desired point in the Midi Track?
So Styles are changed on the keyboard  during playback?
I have many MIDI songs created outside Cakewalk, with such style changes and they all play fine on the Keyboard.

I thought this would be a simple thing to do. But I am not finding a way to do this. Possibly I have not navigated to the right place yet.

My recall from the manual is, that I could insert a sequence of MIDI messages through automation or via events list at any point in a track.

I do see two actionable: 

Menu bar->Insert->Bank/Patch Change.. and 
Menu bar->Insert->Multiple Controllers..

But neither of them work for this need.

What I can insert seems to be limited to a canned list.  Strangely that includes RPN, NRPN etc. but does not seem to include Bank/Program Select.

I wanted to test this basic thing before I move to explore the power of Articulation Maps.

Look forward to your thoughts

Link to comment
Share on other sites


It looks like you are mixing hex and dec here. 


You can remotely select Styles on the Pa600, by sending it Bank Select MSB (CC#0), Bank Select LSB (CC#32) and Program Change messages on the Control channel

CC#0 and CC#32 for bank switching control are decimal values.


Link to comment
Share on other sites

SCOOK  -  I tried that. 

I added a Marker on the track - so I have a time reference.
I added an event;
set channel to 15,
kind to Patch Change,
Double Clicked the Data Area;
    Selected Normal, Bank to 15.
    But cannot enter the Patch Number to 1 (or any number).
   Can only pick from the drop down list. 
   Looks like I have to load a Custom List there to pick from - or populate using INS definitions.
   I just picked, just to test, the second item in the drop down list.
   I set a different Style on my PA600 Keyboard and MIDI to receive.  
   I played the track on Cakewalk - music played,  but the Style did not change on my PA600 Keyboard,   

Stalled on two things:
   Need to populate the drop down list properly - was skipping it for the test. 
  Second even selecting a patch - is not having any effect. 
  Not sure whether Cakewalk is generating the intended MIDI sequence.  
   Will recheck if I had made some error.

Is there a MID IN/OUT monitor utility in Cakewalk?  Otherwise  I will have to route MIDI Out through Midi Ox or similar, to monitor what MIDI is coming out of Cakewalk, 

Just more  pre/tangential work for what I intended as a quick test. 

User 905133: Yes CC#0 and CC#32 are in decimals. I meant only 0xBF is in HEX. 


Link to comment
Share on other sites

An update...
More on using the Events List (thanks to SCOOK for the reiterating  persuasion) to add Style Select/Switch MIDI sequence.

I did monitor what is coming out of Cakewalk by routing it to Midi Ox. I can confirm that the specific MIDI sequence is coming out Cakewalk, and is not being filtered out some how (including by some validation checks). This is good news.  Now I can focus on what I am doing wrong.


P.S. Some Look Ahead Questions....

Is there was anyway to add a sequence of [valid] commands which is not one of the canned list. 
For example, a sequence which has silencing all notes, changing drum kit tuning for a series of drum kit keys, and reenabling all sounds. 
Or issuing a complex series of portamento sequences, changing start and end  points and portamento time etc.  

Colin/CAL experts: can these insertions be done through CAL scripts? It would be so much more reliable and easier.

Link to comment
Share on other sites


Thanks for your suggestion. Here are my observations:

a) I have been using these MIDI Sequences for several years now.  They are well tested and are used in my Python Midi Generators/Players. 

b) Not all the actions one can invoke, pressing various buttons or making selections, on a Hardware Keyboard, like Korg or Technics, are actually emitted on the MIDI-out.  This is usually the case for many proprietary command sequences.  However, many of them usually have MIDI IN sequences for control. Not sure of the technical rationale for this situation.  Sometimes, such actions are sent out as opaque/undocumented Sysex messages - and so does not enable user to create/insert them into MIDI files. 

This issue should be behind me soon, as I pin down some nuances in Cakewalk.  For example, numbering of tracks and channels (0+ based, though UI is 1+).  

I am more focused  on creating a CAL script if it all possible, as it will far more flexible and reliable - than manual entry.  The script can perform the calculations, checks and actions.  I have not yet figured the CAL command for inserting a MIDI Command into track at a selected  time. 



  • Like 1
Link to comment
Share on other sites


Good News: I did find two CAL commands, sendMIDI and INSERT which might do the job. 

Not so good news..   sendMIDI is ignoring parameters

Just putting this out here, in case anyone knows why this is happening..
is it a known issue???.

; ---------------------------------------------
; Sri Style Select CAL. Created this and executed it. Via Process->...

   (pause "Starting ")
   ;(sendMIDI 1 15 PATCH 100) ;  takes only one argument. Though DOC says 2
   (sendMIDI 1 15 CONTROL 00 00) ;  ignores the second 00. See (1) below 
   (sendMIDI 1 15 CONTROL 32 27) ;  ignores 27 See (2) below
   (sendMIDI 1 15 PATCH 8 )  ;   ignores 8 See (3) below
   (pause "Done ")

; --------------------------------------

; executed without visible errors. 


Incoming MIDI Events in Midi Ox
MIDI commands are coming out..
But they are missing the parameter values...
Obviously cannot do the right thing on PA600 Keyboard..


1) 000EE6B5   3  --     BF    00    00   16  ---  CC: Bank MSB          Missing the second argument
2) 000EE6B5   3  --     BF    20    00   16  ---  CC: Bank LSB           Missing the second argument
3) 000EE6B5   3  --     CF    00    --   16  ---  PC: Acc. Grand Piano   Missing the first argument



Edited by Sridhar Raghavan
Link to comment
Share on other sites

Have you explored the sysx (system exclusive) view? It provides assistance in capturing and storing sysex messages, long or short. Captured messages can be copied, edited, played back, and inserted into a track.

Other thoughts: Preferences -> MIDI -> Playback and Recording has a setting to capture vs. discard incoming system exclusive; some hardware synths have settings for "do or don't" emit sysex messages for some of those button pushes.

(sorry this is so late in chiming in ...)

Link to comment
Share on other sites

Did you try sending CCs as listed in the Reference Guide?  If they work, you could try creating an *.ins file.  I did that with a couple of Roland "Intelligent Arranger" sound modules [CA-30 & RA-30].  It worked.  Your Korg has much more to switch, but it looks like the process of using a bank switch +  a program change should do it.

It might also have sysex options, but I didn't find a sysex manual.  

Did you try any tests by inserting bank switches + program changes using the event list as suggested above?  I seem to remember that's what I did before creating an *.ins file.  That was a long time ago, but I probably started with the midi commands on the control track pointed to my gear at the rate of one style change per measure and watched the front panel to see if the changes happened.


. . .
I added an event;  
set channel to 15,

[I would put the two bank switching CCs in before the program change.]

[add a third event, change kind to Patch Change,   [only needs one value (0-127)]  


Link to comment
Share on other sites

You should be able to do all of this from the event list.

A few important things:

1. Set the correct Bank Select method in the track, which should be "Normal" if you want to send both #cc 0 & cc #32:


2. If you're adding the CC/Patch events manually in the event list, make sure you leave the bank/patch blank within the track inspector:


3. Finally, incorrectly defined .ins files can interfere with the bank select methods.  I found this with the bundled XG instrument definition, which refused to allow a bank select change back to  cc#0 = 0, cc#32 = 0 if you'd already changed bank .  IIRC,  it was the  Patch[*]=XG Bank 0  entry that caused this - removing it forced the correct bank select CC's to be sent.

  • Like 1
Link to comment
Share on other sites

  • 2 weeks later...

User 901533, Mcleod

Thanks for your additions to this conversation. 

I was just away on other fronts for a few days - and so the delayed response.

If you read my last carefully, you will see that I have exercised all avenues very rigorously and methodically,  including the ones you are suggesting,  showing you carefully the results. (I did not pursue SYSEX as this does not belong to that "domain" and warrant invoking those mechanisms).

So I concluded that there is something else going on,  and is not of my causing. 
I will resume soon and try to figure out . 


Link to comment
Share on other sites

8 hours ago, Sridhar Raghavan said:

If you read my last carefully, you will see that I have exercised all avenues very rigorously and methodically,  including the ones you are suggesting,  showing you carefully the results.

Apologies for suggesting something you already tried.  I read your posts from Feb 22 about CAL but didn't realize that was the same thing I was suggesting.  Now I know.

Link to comment
Share on other sites

User 905133  no worries and please no need for apologies as all of us miss things and also can be blind to the ambiguities we inject into our communications. 

I imported Korg/Korg Drum INS definitions now, just to rule out possible issues with default INS definitions. 
Have not checked it out yet.
But I have a question.  
In Cakewalk how does one Mark a Channel as "Drums".  Is Channel 10 is fixed/defined to be "Drums" (per MIDI convention) and cannot be changed? 


Link to comment
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in

Sign In Now
  • Create New...