In the final instalment of our series of XG programming tips, we take a look at how the advanced modulation parameters can bring your layered sounds to life.
In Part 2 I looked at how you can unlock the sound-design potential of your XG sound source by layering voices. One problem with layering voices, though, is that the normal MIDI controllers for pitch-bend, filter cutoff, and volume control adjust all parts on the same MIDI channel in the same way. Therefore, in this final instalment of Yamaha XG programming tips, I'm going to look at how you get around this using the more advanced modulation facilities tucked away in the XG MIDI specification.
The modulation possibilities available within the XG format are remarkably flexible: six MIDI message types can feed the matrix, and each of these can be routed to any or all of six destinations in the voice architecture, with individual modulation amount control — that makes 36 parameters in total. However, because only a few (if any) of these parameters are actually accessible from the front panels of most of the hardware XG modules, MIDI SysEx messages are pretty much the only way to take full advantage of the power available.
The six MIDI control sources which can feed the matrix are Mod Wheel, Pitch-bend, Channel Aftertouch, Polyphonic Aftertouch, Assignable Controller 1, and Assignable Controller 2. Some of the simplest XG modules may not recognise anything more than MIDI Mod Wheel and Pitch-bend messages (and I'll mostly be using those controllers for my examples in this article), but most of the studio units I've encountered will recognise all of them. The two Assignable Controller sources are MIDI Continuous Controllers, the numbers of which can be set using the hexadecimal MIDI SysEx strings F0 43 10 4C 08 mm 59 xx F7 and F0 43 10 4C 08 mm 60 xx F7 respectively, where 'mm' is the multitimbral part and 'xx' the desired MIDI Continuous Controller number.
Any of these modulation sources can control pitch, over a range of up to 24 semitones (two octaves); filter cutoff, starting from the main cutoff setting; and amplifier level, starting at the main volume setting. All of these three modulation destinations can be modulated with positive or negative polarity, so the filter can close or open as the mod wheel is raised, for instance. The MIDI control sources can also modulate the degree to which the single LFO affects any or all of pitch, filter cutoff, and amplifier level, although here you can only make a positive-polarity setting. All six modulation destinations can be seen in Figure 1, which shows how MIDI Mod Wheel messages are routed to them using the six relevant XG parameters.
A complete list of all the modulation-matrix parameters, along with their proper XG-format names and hexadecimal SysEx messages, is given in the 'Modulation Matrix Parameters' box for reference purposes, although all these messages can also be found in Yamaha's XG MIDI specification document mentioned in the first article of this series. Obviously, most of the modulation-matrix parameters are set to zero by default, but there are two exceptions: MIDI Pitch-bend messages normally adjust pitch over a range of ±2 semitones, and MIDI Mod Wheel messages control the LFO pitch modulation amount to a small degree.
Bear in mind that MIDI Pitch-bend messages are different to Continuous Controller messages — Pitch-bend messages can have both positive and negative values, where Continuous Controller messages have only positive values. So if you have, for example, set Pitch-bend messages to modulate filter cutoff with positive polarity, pushing the pitch-bend wheel up will raise the cutoff point beyond its nominal setting, while pulling the pitch-bend wheel down will cause the filter cutoff to fall below its nominal setting. However, if you try to create a negative-polarity LFO effect by controlling the LFO modulation amount using Pitch-bend messages, I'm afraid it won't work — negative Pitch-bend values are simply treated as positive ones for the purposes of LFO control.
Another thing worth mentioning is that, although the XG specifications say that the Filter Control parameters span -9600 cents to +9450 cents and that the Amplitude Control parameters span ±100 percent, the actual data byte which conveys the information still only covers 128 discrete steps, so you might as well think of both parameters as encompassing the usual range of -64 to +63, in my opinion. The calibrations certainly seem very little use in practice, as I find it's best to set up modulation ranges by ear.
You'd be forgiven for nodding off during the above theoretical discussion of the modulation matrix, as it's not immediately obvious how all these parameters can be used to make your XG sounds more involving. So, I'm going to spend the rest of this article giving lots of examples of ways you can use all these parameters in practice to spice up layered XG sounds.
If you have been having trouble finding XG Track Mixer Scripts for Cubase VST or the first version of Cubase SX, then you'll be pleased to know that SOS reader Julian Slade has emailed in to say that he's now found an MU100 set on a Japanese site, including effects and EQ parameters.
To start with, let's have a look at some of the possibilities made available by pitch modulation. Always one for a challenge, I've layered three voices of the exceptionally cheesy HyprAlto alto sax patch to try to make a useful pad synth line. (I showed how to layer voices together in last month's article, so I won't go over it again here.) You can hear my preliminary efforts in Example 1a, where I've pulled down the filter resonance, adjusted the attack and release times, and applied some judicious Pitch-bend to try to disguise the worst vices of the original waveform. (As with last month's article, you we have put all the sound files relating to this workshop into a ZIP file, available from the righthand side Media sidebar.)
Hardly the most inspiring line, I'm sure you'll agree. However, I'm deliberately going to avoid going any further with filter and effects controllers at the moment in my attempts to de-cheese it, and instead I'll use MIDI Mod Wheel messages to apply some dynamic detuning. First of all, I've switched off the mod wheel's routing to the pitch LFO modulation amount by using a zero-value MW LFO PMod Depth message for each of the voices in the layered sound. Now MIDI Mod Wheel messages have no effect on the sound at all. Then I've used MW Pitch Control messages so that one of the layers sweeps up a semitone as the mod wheel is raised and another shifts down a semitone, while the remaining layer remains stationary. The result of waggling the mod wheel around can be heard in Example 1b, and this instantly gives the composite sound more life and movement, especially given that the voices are already panned to different positions. The great thing about doing this pitch modulation from the mod wheel is that any pitch-bend work you've already done is unchanged — the detune thickening effect can be applied completely independently of the pitch sweeps.
Now have a listen to Example 1c, where I've added an extra lead line onto the end of the previous rhythm part. Again, not awfully inspiring, so this time I've going to use CAT Pitch Control messages to create a much wider pitch modulation effect using MIDI Channel Aftertouch messages. First I've instructed two of the voices to shift 14 and 24 semitones respectively over the aftertouch control range. This means that all the voices are in unison at an aftertouch value of zero. However, I want to be able to pitch-shift in both directions around an aftertouch value of 64, so I've adjusted the Note Shift parameters of the two voices to -7 and -12 respectively. The final result is that the two shifted voices are in unison with the unshifted one at an aftertouch value of 64, but they also create a variety of different chords above and below the unshifted voice at all the other aftertouch values. But enough of the theory; Example 1d shows one way of using this approach, and you can hear that I've managed to make the part much more complex than it started out, because even single notes can become chords. Note again that the chordal shifts work independently of, and in addition to, the existing pitch-bend sweeps triggered from MIDI Pitch-bend messages.
Now let's see what the LFO can bring to the party. For the added lead line, I'm going to hijack the mod wheel from its detuning task, and instead route it to controlling how the LFO affects the pitch of each voice using the MW LFO PMod Depth parameter. As we discussed last month, each layer of your composite sound can have its own synth settings, and this of course applies to the LFO. However, the MW LFO PMod Depth parameter also lets you set how much the LFO controls pitch in each case. In Example 1e, I've set the voice which is unaffected by the aftertouch messages to be modulated heavily with a fast LFO as the mod wheel is raised, while the shifted voices are treated to a more modest amount of slower LFO modulation.
Hopefully I've demonstrated how you can use pitch modulation to create a variety of different timbres from even the most uninspiring raw materials. If you want even more variety then you can still, of course, play with all the filter and effects parameters as well — in Example 1g I've tweaked filter cutoff and resonance in real-time, and there's also some dynamically applied flanger, phaser, and reverb.
|MIDI MODULATION SOURCE||PITCH MODULATION||FILTER CUTOFF MODULATION||AMPLIFIER LEVEL MODULATION||LFO PITCH MODULATION||LFO FILTER CUTOFF MODULATION||LFO AMPLIFIER LEVEL MODULATION|
|Mod Wheel||MW Pitch Control||MW Filter Control||MW Amplitude Control||MW LFO PMod Depth||MW LFO FMod Depth||MW LFO AMod Depth|
|F0 43 10 4C 08 mm 1D xx F7||F0 43 10 4C 08 mm 1E xx F7||F0 43 10 4C 08 mm 1F xx F7||F0 43 10 4C 08 mm 20 xx F7||F0 43 10 4C 08 mm 21 xx F7||F0 43 10 4C 08 mm 22 xx F7|
|Pitch-bend||Bend Pitch Control||Bend Filter Control||Bend Amplitude Control||Bend LFO PMod Depth||Bend LFO FMod Depth||Bend LFO AMod Depth|
|F0 43 10 4C 08 mm 23 xx F7||F0 43 10 4C 08 mm 24 xx F7||F0 43 10 4C 08 mm 25 xx F7||F0 43 10 4C 08 mm 26 xx F7||F0 43 10 4C 08 mm 27 xx F7||F0 43 10 4C 08 mm 28 xx F7|
|Channel Aftertouch||CAT Pitch Control||CAT Filter Control||CAT Amplitude Control||CAT LFO PMod Depth||CAT LFO FMod Depth||CAT LFO AMod Depth|
|F0 43 10 4C 08 mm 4D xx F7||F0 43 10 4C 08 mm 4E xx F7||F0 43 10 4C 08 mm 4F xx F7||F0 43 10 4C 08 mm 50 xx F7||F0 43 10 4C 08 mm 51 xx F7||F0 43 10 4C 08 mm 52 xx F7|
|Polyphonic Aftertouch||PAT Pitch Control||PAT Filter Control||PAT Amplitude Control||PAT LFO PMod Depth||PAT LFO FMod Depth||PAT LFO AMod Depth|
|F0 43 10 4C 08 mm 53 xx F7||F0 43 10 4C 08 mm 54 xx F7||F0 43 10 4C 08 mm 55 xx F7||F0 43 10 4C 08 mm 56 xx F7||F0 43 10 4C 08 mm 57 xx F7||F0 43 10 4C 08 mm 58 xx F7|
|Assignable Controller 1||AC1 Pitch Control||AC1 Filter Control||AC1 Amplitude Control||AC1 LFO PMod Depth||AC1 LFO FMod Depth||AC1 LFO AMod Depth|
|F0 43 10 4C 08 mm 5A xx F7||F0 43 10 4C 08 mm 5B xx F7||F0 43 10 4C 08 mm 5C xx F7||F0 43 10 4C 08 mm 5D xx F7||F0 43 10 4C 08 mm 5E xx F7||F0 43 10 4C 08 mm 5F xx F7|
|Assignable Controller 2||AC2 Pitch Control||AC2 Filter Control||AC2 Amplitude Control||AC2 LFO PMod Depth||AC2 LFO FMod Depth||AC2 LFO AMod Depth|
|F0 43 10 4C 08 mm 61 xx F7||F0 43 10 4C 08 mm 62 xx F7||F0 43 10 4C 08 mm 63 xx F7||F0 43 10 4C 08 mm 64 xx F7||F0 43 10 4C 08 mm 65 xx F7||F0 43 10 4C 08 mm 66 xx F7|
Using MIDI Continuous Controller number 74 to sweep the filter cutoff of all voices in a layered sound together can give you a lot of useful sounds, as I demonstrated in the second part of this series. However, uniform filter control across all layers only gets you so far, and there's a lot more mileage in filter modulation once you get stuck into the serious modulation matrix parameters. Take a listen to Example 2a, which is a simple two-layer composite sound comprising two identical RndGlock (a variation on the Crystal patch) voices panned hard left and right. To get an interesting stereo effect, reminiscent of a rotary speaker, I've set each voice to have a different LFO rate, and then I've adjusted the amount of LFO filter modulation in real time to create Example 2b. This is made possible using the MW LFO FMod Depth parameter, set to its maximum value of 127. You could equally well use this parameter to create simple auto-wah effects for single-layer voices or those with identical LFO settings.
You can also use the MW Filter Control parameter to set up different filter responses for each part, which means that one voice can have its filter closing as another voice has its filter opening, for example. Have a listen to Example 3a, which is a simple lead synth phrase using a two-layer sound comprised of two variations on the ChoirPad patch: Heaven 2 and CC Pad. There's only a bit of pitch-bend and expression control at the moment and, although the patches have a little movement in them, there's more that can be achieved with independent Filter Control settings.
Example 3b uses opposite-polarity MW Filter Control messages for the two layers, and the mod wheel has been swept in real time. Not only do you get the motion of the two different filter peaks, but you also get the change in timbre between the two different voices as they dominate at different ends of the mod wheel's travel, which makes this one of the most pleasing and complex modulation effects, as far as I'm concerned. Finally, in Example 3c I've used MW LFO PMod Depth to add a little independent vibrato to the parts as the mod wheel is raised.
Once you've overcome your natural fear of hexadecimal messages, there's nothing to stop you spicing up your effects processing as well as your synth programming. For a start, there are sometimes more effect parameters available within your XG module's MIDI implementation than are adjustable from the front panel. But the main reason to get into the SysEx is so that you adjust the effects in real time.
All the useful effects SysEx messages begin with F0 43 10 4C 02 01, followed by a single address byte to denote the specific effect parameter. The one or two data bytes of the parameter value (depending on the range of the parameter you're adjusting) then precede the F7 byte which closes the SysEx message. The algorithms for Reverb, Chorus, and Variation effects are set using address bytes of 00, 20, and 40 respectively, and this message uses two data bytes. After that, most of the messages only need one data byte, which is handy if you have a MIDI controller which prefers sending out only 128-step data ranges.
In each case, the 10 subsequent address bytes access the first 10 parameters of each effect, followed by the effects return level and pan setting. Address byte 2E lets you send the output of the Chorus block to the Reverb, while address bytes 58 and 59 let you send from the Variation effect's output to the Reverb and Chorus blocks. If you've got a fancy-pants XG module with lots of extra effects parameters, you can access six more of these using address bytes 10, 30 , and 70 for the Reverb, Chorus, and Variation blocks respectively.
So much for the maths. What kinds of things can you do? Well, unfortunately there's not much mileage in rapidly changing effects algorithms, as the output of the effect is muted briefly during this process — whatever effects patches you select will always give you a variation on tremolo! Even changing algorithms between larger musical sections is hampered a little with the reverb effect, where the change in algorithm won't, of course, let the previous reverb tail ring on. However, that doesn't stop you being able to flip between different Chorus and Variation effects for different phrases to make the most of the available effects provision in your particular model of synth.
The most interest is probably to be found in real-time control of parameters rather than algorithms, though. It's particularly worth targeting the Chorus and Variation blocks' LFO parameters. Chorus, Celeste, Flanger, Phaser, Symphonic, Tremolo, Rotary Speaker, Auto Pan, and Auto Wah are just some of the algorithms which use an LFO, so there's lots of fun to be had here, especially as the LFOs can be set for the Chorus and Variation blocks separately. Another favourite of mine is to use the 3-band EQ algorithm's mid-band as a sweepable peaking filter, setting the resonance and gain to taste or tweaking those on the fly too. The drive and output level settings of the Distortion, Overdrive, and Amp Sim algorithms are also obvious contenders, but don't let that stop you flicking madly between a selection of different amp models! The feedback controls of any of the delay-based algorithms can be used both subtly for massaging repeat tails on lead lines at mixdown, or ham-fistedly for turning Flanger or Phaser into a howling mess.
One problem that you may encounter, though, is that parameters for reverb decay and delay times will create more-or-less noticeable clicks at the effects output, because of the way such effects processes work. In the case of reverb processing, there's not much you can do to get around this, but with delay effects you can try using the multi-voice MIDI delay effects I discussed back in the first part of this series, as these are much more creative in lots of other respects anyway.
The final section of the synthesis architecture which can be controlled through the XG modulation matrix is the amplifier, and the LFO can provide some nice tremolo effects here. Have a listen to Example 4a, a chord using two different layered XG guitar patches — Jazz Gtr and MelloGtr. I've slowed down the envelope for the Jazz Gtr voice and increased its filter resonance, as well as adding a little not-so-subtle flanging, so there is already some movement in the sound straightaway, but adding heavy tremolo using the MW LFO AMod Depth parameter livens things up in Example 4b, especially as the flanger's LFO is slightly out of sync with the tremolo LFO.
What I've done, though, is apply the tremolo only to the brighter, more high-resonance Jazz Gtr part. This means that the duller MelloGtr part remains in the tremolo troughs, making the modulation effect more akin to filter modulation. The potential of this technique should not be underestimated, as you can make the tonal changes as subtle or extreme as you like simply by selecting different patches. And, of course, you can also throw some additional controllers at the sound, to sculpt it even further — a few MIDI Expression messages give the sound a new slow-attack envelope in Example 4c, and a filter sweep picks out individual harmonics in Example 4d.
The Amplitude Control parameters can also be very useful, especially if one voice fades up as the other fades down. Take Example 5a, for instance, where I've layered the MutePkBa bass patch with a sub-bass SineLead patch, in order to get both attack and low-end welly. This is alright as it stands, but we can make things more adventurous by using the MW Amplitude Control parameter to crossfade the MutePkBa patch to FastResB on some of the notes.
The first step is to set the MW Amplitude Control on the MutePkBa voice to +63, and that of the FastResB voice to -64. Then the main volume setting of the FastResB voice needs to be set to a value of one — you have to set it above zero, otherwise the amplitude modulation will have no effect. Now that this has been done, you can crossfade between the two voices in real time using the mod wheel. I've used extreme mod-wheel positions in Example 5b to just switch between the two voices, rather than crossfading, but I could have crossfaded more subtly if I'd wanted. Notice that, because I've left the SineLead voice unaffected, the low end weight doesn't change as you crossfade between the two other voices.
Example 5c combines all of the audio examples from this article, and you can download an XG-format MIDI file of them all from the SOS web site if you want to have a closer look at the exact data I've used in each case. For my money, the ability to crossfade between voices using the Amplitude Control parameters is the most powerful facility offered by the XG format. It means that you can create a pair of complex layered sounds (each complete with its own in-depth synthesis, effects, and modulation settings) and then crossfade between them in real time using, say, Assignable Controller 1. And you could crossfade to a third voice using Assignable Controller 2. And to a fourth on a note-by-note basis using Polyphonic Aftertouch, assuming you can find something to generate the appropriate MIDI messages! The only limitations are the number of MIDI control sources recognised by your module and the number of notes of polyphony available — most studio XG modules can handle all six modulation sources and at least 32 voices of polyphony, so you have the potential for an enormous range of evolving and expressive sounds.
In this short series I hope I've been able to convince you that there's more to XG than its dodgy General MIDI legacy. As long as you modulate any parameter that isn't nailed down, and resolve to waste polyphony gratuitously at every opportunity, then any XG module should provide more than enough inspiration to earn its keep in your studio.