Probing the Depths of MIDI on the Roland
SoundCanvas Everybody knows
how to use their Roland SoundCanvas: Plug it in, call up the sounds, push play on your
sequencer, and dig the music. But did you know that the SoundCanvas is also a very
programmable synthesizer? Tapping into its power will boost you to new levels of MIDI
musicianship.
On most SoundCanvas models, you can access a variety
of advanced functions via front-panel button sequences. Controlling the SoundCanvas
through MIDI, however, offers substantial advantages -- not only for models with limited
front-panel access, but for sequencing and live applications on all models. For example,
since edits can't be saved in the SoundCanvas itself, to save the edits you make from the
front panel in micro edit of part edit, you must do a part or bulk system-exclusive
(sys-ex) dump into your sequencer. That's fine if that particular dump will take care of
the whole song, but if you want to make substantial changes in instrumentation, effects,
or tunings in the middle of a song, sending the dump back to the SoundCanvas may cause
unacceptable interruptions in playback. Using smaller controller and sys-ex messages will
enable you to create more expressive performances and take greater advantage of Roland's
GS parameters. Small sys-ex messages are also a heck of a lot easier to edit once they're
in your sequence.
The tips that follow will introduce you to many
highly musical avenues to explore when programming your SoundCanvas. Everything presented
here will work on the following Roland products: SoundCanvas models SC-33, SC-55,
SC-55mkII, and SC-155; the Boss DS-330 Dr. Synth sound module; the JV-30 and JW-50
synthesizers; the SCC-1 GS soundcard; and the VE-GS1-01 GS expansion board for the JV-1000
music workstation.
(The following models, released after the
original publishing date of this article will also respond to GS programming: SC-50,
SC-88, JV-35, JV-50, W-50, SCD-15, RA-30 and RA-95.)
I. MIDI CONTINUOUS CONTROLLERS
Using continuous controllers is an easy way to begin exploring some of the hidden features
of your SoundCanvas. Once you know which controllers access which features, you can
experiment with them by entering the controller numbers and values into your sequencer's
event list and then playing the data into the SoundCanvas.
You're probably already familiar with controllers
such as modulation (CC1), volume (CC7), and pan (CC10), and the SoundCanvas of course
responds to them. For some added finesse, however, let's take a look at some special
controller tricks and what you can do with Registered and Non-Registered Parameter Numbers
(RPN and NRPN).
A. Mono and Portamento. If you want
your SoundCanvas to go retro and sound a bit more analog, select a synth sound, such as
#82 Saw Wave, and use continuous controllers to set part 1 to mono mode and add portamento
. . . instant vintage synth! You may also want to add some chorus to fatten it up a bit.
Send the following data values on the MIDI channel of the part that you want to edit:
CC126 |
Value 1 |
Mono On |
CC65 |
Value 127 |
Portamento On |
CC5 |
Value 40 |
Portamento Time |
B. Volume and Expression. Another
important aspect of successful sequencing with the SoundCanvas is the relationship between
volume (CC7) and expression (CC11). Roland recommends using volume to set the maximum
level for each part. Use this to set the initial balance of your sounds. Expression can
then be used as a controller for adjusting volume between 0 and the level set by CC7. This
allows you to retain a lower level, yet still have a full range of expressive control over
your mix. It's also very handy when you want a part's maximum level to be an irregular
value, such as 71. Using only CC7, it can be difficult to return a slider or pedal exactly
to 71. However, if you assign the slider to CC11, you simply run the slider to the top,
and the Level will return to 71.
C. Pitch-Bend Sensitivity.
Registered Parameter Numbers CC100 and CC101 define the RPN functions, which include
pitch-bend sensitivity, fine tuning, and coarse tuning. Use data entry CC6 (MSB -- most
significant byte) and CC38 (LSB -- least significant byte) to set the values for the
registered parameter you choose. (MSB and LSB commands allow two 7-bit data words to be
used to send a single 14-bit word. "Most" and "least" simply refer to
which byte is sent first.) Again, be sure to enter these MIDI messages into your sequence
on the proper MIDI channel for the part you intend to edit. The SoundCanvas has a default
pitch-bend range of a whole-step, which is fine for most musical uses. But to get a real
bluesy string bend on a guitar part, a ribbon-bender effect on a synth lead part, or
realistic fall-offs on brass stabs, you'll need to increase the Pitch-Bend Range. You can
set the bend range for an individual part to up to two octaves by inserting these messages
into your event list:
CC101 |
Value 0 |
CC100 |
Value 0 |
CC6 |
Value X |
X is the number of half-steps, from 0 to 24, to which
you want the SoundCanvas to respond. CC101 and CC100 tell the SoundCanvas that pitch-bend
is the parameter you want to adjust.
D. Coarse Tuning. The coarse tuning
parameter lets you change the pitch of the SoundCanvas in half-steps over a four-octave
range. Since all registered parameter functions affect only the channel on which they are
sent, you can transpose just the parts you want to, and leave others unaffected. This lets
you transpose a piece to suit a singer's range, while leaving the drum and sound effects
parts at their original pitch. On the other hand, you may want to tune the drums up or
down to fatten or tighten them up, and leave the other parts untouched. If you try to do
this by transposing your entire sequence, the note numbers in your drum tracks will be
transposed as well, yielding some unexpected and possibly undesirable results. Add the
following message to the event list of each track you wish to transpose:
CC101 |
Value 0 |
CC100 |
Value 2 |
CC6 |
Value X |
X can be any value from 40 to 88, with 64 being
standard tuning, and each number higher or lower than 64 representing a half-step up or
down.
E. Fine Tuning. The pitch of
standard tuning has not been consistent over the years, and indeed, many ensembles and
orchestras today choose pitch references other than A=440Hz. With the Fine Tuning
registered parameter function, the SoundCanvas can be tuned to match any modern or
historical pitch level. Here's the basic message:
CC101 |
Value 0 |
CC100 |
Value 1 |
CC6 |
Value X |
For standard A=440Hz tuning, X=64. For each increment
of X, the pitch of the SoundCanvas changes approximately 1.5 cents (a cent is 1/100
semitone), giving you a range from 415.3Hz to 466.2Hz. Here are the messages for three
common historical pitch references (note that A=415Hz requires a coarse tune message to
get beyond the 415.3Hz bottom limit). Insert them in each track you wish to tune.
A=430Hz |
|
A=460Hz |
|
A=415Hz |
CC101 |
Value 0 |
CC101 |
Value 0 |
CC101 |
Value 0 |
CC100 |
Value 1 |
CC100 |
Value 1 |
CC100 |
Value 2 |
CC6 |
Value 36 |
CC6 |
Value 115 |
CC6 |
Value 63 |
|
CC101 |
Value 0 |
|
CC100 |
Value 1 |
|
CC6 |
Value 62 |
F. Synthesis Editing. The
SoundCanvas synthesis engine comes alive with the NRPN controllers CC98 and CC99. Eight
NRPNs let you control basic synthesis functions, and five are for editing the level,
pitch, pan, reverb, and chorus amount for individual instruments within a drum kit.
Listed below are the synth editing NRPNs, their
controller numbers, and their value ranges. A value of 64 is the default setting. You can
raise or lower any of the values ±50; values above 64 will increase the effect, and
values below 64 will decrease it. Some sounds may not respond as you'd expect because the
ROM value is already maximized. For instance, if a sound's factory default for filter
cutoff is already wide open, adding +50 to it will have no effect. In this case, lowering
the cutoff by -50 should produce a noticeable effect. Note: On some SoundCanvas
instruments, you must first enable the device to receive NRPNs by sending a GS reset
message (see the final tip in this article). The CC6 values of 64 are default settings,
and 14 and 114 are the allowable minimum and maximum, respectively. (See Figure 1,
page 3)
Fig. 1.
|
CC99 |
CC98 |
CC6 |
Vibrato Rate |
01 |
08 |
14 - 64 - 114 |
Vibrato Depth |
01 |
09 |
14 - 64 - 114 |
Vibrato Delay |
01 |
10 |
14 - 64 - 114 |
Filter Cutoff |
01 |
32 |
14 - 64 - 114 |
Resonance |
01 |
33 |
14 - 64 - 114 |
TVF & TVA Attack Time |
01 |
99 |
14 - 64 - 114 |
TVF & TVA Decay Time |
01 |
100 |
14 - 64 - 114 |
TVF & TVA Release Time |
01 |
102 |
14 - 64 - 114 |
To slow the attack time of a particular part, insert
the message below into your sequencer on the MIDI channel the part is set to respond to.
For a slower attack, X should be a value between 65 and 127.
CC99 |
Value 01 |
CC98 |
Value 99 (TVF & TVA Attack Time) |
CC6 |
Value X |
To get a musical wind instrument vibrato, try this
message on a flute sound.
CC99 |
Value 01 |
CC98 |
Value 8 (Vibrato Rate) |
CC6 |
Value 72 |
CC99 |
Value 01 |
CC98 |
Value 9 (Vibrato Depth) |
CC6 |
Value 78 |
CC99 |
Value 01 |
CC98 |
Value 10 (Vibrato Delay) |
CC6 |
Value 100 |
G. Drum Instrument Editing. NRPNs
let you tweak any individual sound in a SoundCanvas drum kit. In this case CC99 defines
the function, CC98 specifies the note number, and CC6 sets the value. The following table
shows these controllers and values. (See Figure 2)
Fig. 2.
|
CC99 |
CC98 |
CC6 |
Drum Pitch Coarse |
24 |
Note number |
0 - 64 - 127 |
Drum Level |
26 |
Note number |
0 - 127 |
Drum Pan |
28 |
Note number |
00 = random
01 - 64 - 127 |
Drum Reverb send |
29 |
Note number |
00 - 127 |
Drum Chorus send |
30 |
Note number |
00 - 127 |
Try changing the pitch of the snare drum assigned to
E2 with these messages:
CC99 |
Value 24 |
CC98 |
Value 40 |
CC6 |
Value 70 |
Once these NRPNs reside in your sequence, you can
easily make subtle or drastic changes to any of these parameters by altering the
corresponding CC6 value.
II. SYSTEM-EXCLUSIVE
Sys-ex commands allow you to alter the entire sonic makeup of your SoundCanvas by typing a
data string into your sequencer's sys-ex list. If you haven't used sys-ex before, check
out the "What the Hex?" sidebar on page 6 for a tutorial on how it works with
the SoundCanvas. (The first five bytes in the messages below, F0 41 10 42 12, are a header
for all SoundCanvas sys-ex messages. The F0 is a sys-ex status byte, and the rest of the
message consists of data bytes.) In all of the following examples, we have computed the
checksum for you, so all you have to do is enter the data. Roland MC-series sequencers
with Super MRC automatically compute the checksum when you enter 00 just preceding the F7
(end of exclusive) message. Refer to Section III for more info on checksums. A. Two Rhythm
Parts. Enabling a second part for rhythm lets you mix the Jazz and Jazz Brush Kits, for
example, combine the Electronic kit with the Standard kit, or use the SFX Kit along with
any of the other drum kits. The first message below will change part 11 to drum part 2,
after which you can send a program change on channel 11 to call your second drum kit. The
second message changes part 11 back to a normal part.
F0 41 10 42 12 40 1A 15 02 0F F7
F0 41 10 42 12 40 1A 15 00 11 F7
B. Controller Routing. A common
misconception is that the SoundCanvas doesn't respond to aftertouch. It will actually
receive both channel and polyphonic aftertouch, but first you need to assign aftertouch to
a destination. All told, the SoundCanvas can accept six control sources: modulation,
pitch-bend, channel and poly aftertouch, and two assignable MIDI controllers. What's more,
each of these can have up to 11 simultaneous destinations: pitch, filter cutoff, and
amplitude, and rate, TVF depth, TVA depth, and pitch depth for each LFO. For a complete
list, check addresses 40 2n 00 through 40 2n 5A on the MIDI Implementation Chart in your
instrument's owner's manual. Note that the "n" in these addresses is the part
number. The following message enables aftertouch to create volume swell and add a bit of
vibrato on part 1:
F0 41 10 42 12 40 21 22 78 50 06 2F F7
Try this on #49 Strings to add a little intensity, or
on a lead sound, such as #88 Bass & Lead. For other parts, change the second digit of
the address byte (the sixth data byte, 21, in the above example) as needed. Note for
hex-heads: When specifying parts, Roland uses 1 for part 1, 2 for part 2, and so on up
through part 10, which is specified using 0. Parts 11 through 16 are specified with the
hex digits A through F.
C. Alternate Scale Tunings. Through
sys-ex, you can tune individual pitches to create scales that stray from the
equal-tempered path. All kinds of historical and ethnic tunings are possible, and since a
message affects only the part to which you send the string, you can even have interesting
fusion effects like an ethnically tuned solo accompanied by an equal-tempered band.
Increasing the value of any single data byte (the 12 bytes following the six address
bytes) raises or lowers the pitch one cent, and standard equal temperament is represented
by 40 (hex). These parameters are located with the Micro Edit functions on the MIDI
implementation pages of the SoundCanvas manual. As with all Micro Edit functions marked in
the manual with an asterisk, you must send the data for all addresses within the
parameter; in this case, you must send data for all 12 notes of the chromatic scale, even
if there are notes that you aren't changing. The following example, set for part 1 (as
denoted by the second digit in the sixth data byte), is one of many Arabic tunings, and it
is effective with #16 Santur.
F0 41 10 42 12 40 11 40 40 72 40 40 0E 40 40 40 0E 40
40 0E 53 F7
D. Changing Effects. There's a lot
more to the effects capabilities of the SoundCanvas than most people realize: There are
eight different reverbs, each with eight variations, plus two delays and a flanger. You
can edit effect parameters, such as reverb master level and time, plus chorus rate, level,
and feedback. You can use CC91 and CC93 to control the amount of reverb and chorus per
part, but the master levels default to 50%. With sys-ex you can increase the level as well
as edit all the effect parameters. For a complete list of editable parameters, consult
addresses 40 01 30 through 40 01 3F on the MIDI Implementation Chart. Here's how to select
Room 2 reverb, and max its master level:
F0 41 10 42 12 40 01 30 02 04 00 7F 0A F7
Here's how to max out the master levels and increase
reverb time:
F0 41 10 42 12 40 01 33 7F 60 2D F7
This message switches chorus to flanger:
F0 41 10 42 12 40 01 38 04 03 F7
The chorus level for each part defaults to 0, so
you'll have to boost its level in order to hear the flanger.
E. Turning Channels Off. When using
more than one sound module with a sequencer, you may want to thin out the orchestration by
turning off a part or two on your SoundCanvas. Let's say you want to have a piano module
respond to MIDI channel 1 and the SC-55 to channels 2 through 16. Since the SoundCanvas
listens on all 16 channels, you must use a short sys-ex message to turn part 1 off:
F0 41 10 42 12 40 11 02 10 0D F7
Any of the 16 parts can be turned off using the part
numbering given in Figure 3 (page 5).
Fig. 3. The SoundCanvas listens on all 16 MIDI channels. Use the sys-ex
messages in this chart to turn off individual parts.
Part 1: F0 41 10 42 12 40 11 02 10 1D F7 |
Part 2: F0 41 10 42 12 40 12 02 10 1C F7 |
Part 3: F0 41 10 42 12 40 13 02 10 1B F7 |
Part 4: F0 41 10 42 12 40 14 02 10 1A F7 |
Part 5: F0 41 10 42 12 40 15 02 10 19 F7 |
Part 6: F0 41 10 42 12 40 16 02 10 18 F7 |
Part 7: F0 41 10 42 12 40 17 02 10 17 F7 |
Part 8: F0 41 10 42 12 40 18 02 10 16 F7 |
Part 9: F0 41 10 42 12 40 19 02 10 15 F7 |
Part 10: F0 41 10 42 12 40 10 02 10 1E F7 |
Part 11: F0 41 10 42 12 40 1A 02 10 14 F7 |
Part 12: F0 41 10 42 12 40 1B 02 10 13 F7 |
Part 13: F0 41 10 42 12 40 1C 02 10 12 F7 |
Part 14: F0 41 10 42 12 40 1D 02 10 11 F7 |
Part 15: F0 41 10 42 12 40 1E 02 10 10 F7 |
Part 16: F0 41 10 42 12 40 1F 02 10 0F F7 |
F. Splits and Layers. For live
performance, use your sequencer and sys-ex to instantly create complex splits and layers
-- even on keyboards that don't have zoning capabilities or can't transmit on multiple
channels. First we assign part 2 to MIDI channel 1. To do this, create a sys-ex string in
which part 2's address, 40 1n 02 with n=2, is followed by the data byte 00, which denotes
MIDI channel 1. (Part 1 is already assigned to MIDI channel 1, so we don't have to tinker
with it.) We now assign the parts to specific keyboard ranges using the Key Range Low and
High addresses (40 1n 1D and 40 1n 1E). Now select tones for each part with the Tone
Number address (40 1n 00 and 01; two bytes required). This is great if you want to play a
bass and piano break in the middle of a song. Leave out the Key Range messages and you
have an instant layer.
First, assign part 2 to MIDI channel 1:
F0 41 10 42 12 40 12 02 00 2C F7
Now let's use modulation to control the level of the
sound on Part 2. We'll assign modulation to amplitude and turn the pitch modulation off,
like this:
F0 41 10 42 12 40 22 02 7F 40 00 5D F7
You can use this example to fade in a string sound
over a piano sound.
G. Voice Reserve. This parameter
lets you assign a minimum number of voices and a hierarchy for each part, so that if the
number of notes in a sequence exceeds the unit's polyphony, it will borrow voices from the
lower priority parts and keep the higher ones playing. If two parts are assigned the same
number of voices, the lower-numbered part will take priority. The SoundCanvas has a
default part priority where part 10 (the drum part) is highest, followed by parts 1
through 16 in ascending order.
The following message reassigns the voice reserves
for parts 9 through 16, reserving a minimum of three voices each on parts 9, 11, and 12,
and two each on parts 13 through 16:
F0 41 10 42 12 40 01 10 03 00 00 00 00 00 00 00 00 03
03 03 02 02 02 02 6C F7
H. GS Reset. This message will reset
the SoundCanvas to its factory default condition. In the case of the newer SoundCanvas
instruments, such as the SC-55mkII, you must send this message before using the NRPNs to
program your sounds. Insert this message at the beginning of every song, in order to wipe
the palette clean:
F0 41 10 42 12 40 00 7F 00 41 F7
The best thing about this message is that you don't
need to worry about messing up your SoundCanvas by entering any of the other messages in
this article incorrectly. It will always return you to a clean condition. So have fun with
your MIDI hacking!
III. WHAT THE HEX!
MIDI messages can be notated numerically in one of three ways: binary, decimal, or
hexadecimal. The method the microprocessors in your MIDI equipment prefers is binary, in
which each of the eight bits in a data byte is represented by either a 0 or a 1. You,
though you may not realize it yet, prefer to use the decimal system, in which each of your
ten fingers is represented by an Arabic numeral, the familiar 0 though 9. Hexadecimal
notation (or "hex," as it is affectionately known), makes working with MIDI
messages easier than either of the other two systems. Hex is base 16, with the rightmost
column being the "ones" column, and the column to the left being the
"16s." Our decimal system only has 10 symbols for representing numbers, but hex
must have 16. To accommodate these six unrepresented values, we use the letters A through
F to represent the values from 10 through 15 decimal. A value of 16 appears in hex as 10.
(Some publications use an "H" after a hex number, to make it easy to tell the
difference between 10 in decimal and 10H, which would be 16 in decimal.)
Contrary to popular belief, the engineers who
invented the hex system did not have eight fingers on each hand. They did, however, have
plenty of eight-bit bytes in binary to worry about. Since four digits of binary can
represent a total of 16 different values, we can quickly translate an eight-digit binary
number into a two-digit hex number. It's easier to recognize status bytes and MIDI
channels when they are in hex notation; consequently, it's easier to keep track of MIDI
messages when inserting them in a sequencer track or programming your SoundCanvas in Micro
Edit mode, which displays all parameters in hex.
MIDI system-exclusive messages contain hexadecimal
respresentations of a given instrument's internal parameter settings. The SoundCanvas's
sys-ex messages are divided into three sections: header, body, and end. The header is
virtually identical for most of the sys-ex messages you'll use with the SoundCanvas. It
simply identifies this message as sys-ex data for a Roland GS instrument.
F0 |
Begin sys-ex |
41 |
Roland ID |
10 |
Device ID |
42 |
GS Model ID |
12 |
Data Set Command |
The body consists of a three-byte address, any number
(up to 256) of data bytes, and the infamous Roland checksum. Each editable parameter in
the SoundCanvas has its own sys-ex address. This allows you to send a sys-ex message to a
specific address without bothering the neighboring parameters. Look for the Parameter Base
Address near the back of your SoundCanvas manual, then find the table labeled Patch
Parameters for the addresses used in these examples.
For our first example, we'll change the reverb from
the Hall 2 default setting to delay. Under Patch Parameters, Reverb Macro is listed next
to the address 40 01 30. We enter those numbers as our three-byte address.
40 \
01 Address
30 /
The address is a starting point for the data bytes to
enter memory. The first data byte is entered at that address, and the remaining data bytes
automatically flow to the following address locations. For Reverb Macro, the manual
indicates there are eight choices, of which delay is number 06, so 06 becomes our first
and only data byte.
06 Data
Next, we need to compute a checksum for this message.
The checksum is used to protect your SoundCanvas from receiving corrupted data by ensuring
that the address and data bytes follow a precise mathematical formula. Corruption is
usually not a problem when creating small messages, as in these examples, but can be when
one missing byte in a bulk dump can ruin a dozen of your favorite patches! Here's a simple
translation of the checksum formula:
80 - (sum of address bytes + sum of data bytes) =
Checksum
If the sum of the address and data bytes is greater
than 80 (hex), the result will be a negative checksum. In that case, subtract 80 from the
address and data sum as often as necessary until the sum is less than 80, so that the
subtraction that computes the checksum yields a positive result. For our example, we have:
80 - (40 + 01 + 30 + 06) = Checksum
80 - 77 = Checksum
09 = Checksum
But hypothetically, if the sum of the address and
data bytes had been greater than 80 (hex):
80 - (80 + 40 + 01 + 40 + 06) = Checksum
80 - 107 = Checksum (negative, so subtract 80)
80 - (107 - 80) = Checksum (still negative, so subtract 80 again)
80 - (87 - 80) = Checksum (positive) 79 = Checksum
So our body now becomes:
40 \
01 Address
30 /
06 Data
09 Checksum
If you're new to hex, you may be confused to see an
equation like 80 - 77 = 09. You may find it easier to convert all the values to decimal,
perform the subtraction, and then convert back. In this case, 128 (equal to 80 hex) minus
119 (equal to 77 hex) equals 9.
The checksum is followed by the end-of-exclusive byte
F7. Our entire message would be:
F0 41 10 42 12 40 01 30 06 09 F7
For the SoundCanvas, there is a slight variation on
this message format when we want to address parameters for a single part. Look in the
Patch Parameter addresses in the manual to find:
40 |
1n |
02 |
Rx Channel |
40 |
1n |
03 |
Rx Pitch-Bend |
Notice all the addresses past this point have an
"n" in the second address byte. In hex, the 16 SoundCanvas parts are numbered
starting with 1. For part 1, n=1, for part 2, n=2, and so on. For part 10, n=0, after
which part 11 is numbered A and so on. For this example, let's say we want to change part
1 from MIDI channel 1 to channel 16, and not have it respond to pitch-bend messages.
First, we use the same five-byte header, followed by the appropriate starting address as
shown in the Patch Paramater list -- with n=part 1 -- and two data bytes, since we're
changing two consecutive parameters:
Header |
F0 |
41 |
10 |
42 |
12 |
Address |
40 |
11 |
02 |
Data |
0F |
00 |
Our checksum for this message would be:
80 - (40 + 11 + 02 + 0F + 00) = Checksum
80 - 62 = Checksum
1E = Checksum
Yielding:
F0 41 10 42 12 40 11 02 0F 00 1E F7
Give these examples a try. With a little practice you
too can become an official "hexhead." |