|
Regarding the use of program changes and their variations, I've found what helped me understand GS in relation to these was to think of the basic GS map as a two-dimensional 128x128 line graph or grid, and movement to different instruments as being represented by an imaginary plotter going to different coordinate points on this graph. Maybe the following can help others. Let's say the bottom horizontal line of the graph is divided into 128 points representing each of the General MIDI instruments. Let's also suppose that the left vertical line is divided into 128 points representing 128 possible variations for each GM instrument. When a program change of .. say .. #27 Jazz Guitar, is sent to your Canvas, the plotter can be thought of as moving left to right, along the bottom horizontal line, to point 27. That sounds simple enough, right? But consider the following: what if you want to change to the first variation of Jazz Guitar - Hawaiian Gt.? On my Canvas (SC-155) this instrument variation is eight places or graph points up from the original GM patch. So two MIDI messages need to be sent to get this patch: 1. controller 0 (bank select) with a
value of 8 ..which would look something like this in an event list: cc 0 8 When the 0 (zero) is sent, imagine that the plotter is moving to the lower left-hand corner of our graph, where both the vertical and horizontal lines join and have a value of zero each. Then, when the '8' value is sent, picture the plotter moving up the left vertical line to the 8th vertical point on the graph. Next, we have the program change number (pc#), which is the horizontal move - 27 places to the right. And we're there. As another example, if we wanted to select the Thunder variation of Seashore - pc# 123 (see your instrument table), we find that Thunder is located two vertical points up from the original GM instrument, or 2 up from pc# 123, if you like. We would send this: cc 0 2 The zero means: go to the lower left corner. The 2 means: move up two vertical points. And pc# 123 means: move horizontally 123 points to the right. Let the thunder roll! :) By the way, if with the above example in mind, we wanted to go back to the original GM instrument, the Capital tone as Roland calls it, then we send this: cc 0 0 .. where cc 0 means: go to the lower left-hand corner where the horizontal and vertical lines meet and are both 0, and the second 0 means: no movement upward. Pc 123 means: move 123 points to the right. And we're back at Seashore. Remember that variations signify vertical movement and program changes represent horizontal motion -- and that vertical movement is always expressed first. Still on the above example, if we had sent just the pc# 123 and not the cc 0 0 event, then we would still be at Thunder, because in that case, we only specified degrees of horizontal motion (123 of them); no coordinates for vertical movement were given. We stay where we are. One more example: say we want to access Cello 2 in the MT-32 set. On an SC55-type Canvas, the MT-32 sound set is 127 vertical points (variation# 127) above the horizontal base line where the GM instruments reside. Cello 2 is pc# 56 in the MT-32 list. So we send these messages: cc 0 127 ... meaning: go to the 0/0 axis, move up by 127, and right by 56. Note 1: For the above examples, I purposely left out any reference to cc32, for a few reasons: a. In my opinion, it wasn't
relevant to a discussion of the original GS tone map. I'll add that controller 32, if sent, is normally placed between controller 0 and the program change number .. like so: 1. cc 0 (value?) cc32 can be used as a kind of fine tuner for those newer synths with all the extra banks and maps of instruments. In MIDIese, cc32 is often referred to as the LSB - Least Significant Byte, as opposed to cc0, which is the MSB - Most Significant Byte. In any case, I've found that I can get by without using cc32 in my SC55-based music, at least as it applies to my own Canvas. One could argue that, even with older SCs, it's best to stick with convention by including cc32, especially if a MIDI tune is targeted at later Canvases. But in such cases, system exclusive messages (sysex) might be used instead of controllers and pc numbers (my choice). It comes down to a user's preferences, and what his/her MIDI software and hardware are setup to deal with. Anyway, sysex-vs-other-message-types isn't the focus of this article. Note 2: The graph analogy can also be applied to other grids (such as Yamaha's XG set) and tone maps where bank select messages must be combined with program changes, or simply toward understanding bank and program changes in general. It won't cover everything but it's a start. "If you extend your graph to three dimensions, each plane in the z axis can be the various maps. By changing the cc 32 value from 0 -> 1 -> 2 -> 3, you go to a different plane which corresponds to SC88 Pro map, SC88 map, SC55 map etc. At each level, your two dimensional analogy still holds." --Gord Braun June-October 1997 / September-October 1998 Return to The Canvas Carry-All main page |