Welcome to the second half of our trip inside FL Studio, the Windows music program formerly known as FruityLoops. Although FL Studio is strongest as a production tool for dance and electronica tracks, it has plenty to offer musicians who work in a variety of styles. In part one of this series, we covered mixer tricks, basic audio recording, and programming the Sytrus FM synth. In this article, we'll explore precomputed effects, integrating external MIDI hardware, and the outer limits of MIDI controller data. If you don't yet have the program, drop by the FL Studio site and download a demo. Later in the article, I'll include a file you can download and play around with.

Shake a Legacy: Precomputed Effects

As computers get faster, they can do increasingly sophisticated digital signal processing (DSP) in real time. But back in the slow old days, when FL Studio was still called FruityLoops, the programmers made it possible to add slick, punchy effects to sampled sounds without using any realtime DSP. They accomplished this trick by "pre-computing" the effect ahead of time, thus changing the sample data in the computer's RAM (though not the version of the sample stored on the hard drive).

In newer versions of FL Studio, this method of generating effects is hidden from the casual user, because doing realtime DSP is no longer a problem. But precomputed effects are still useful. To activate them, go to the Options menu, choose "General settings," and then click the switch labelled "Show legacy precomputed effects."

The next time you click on a sample playback generator in the Step Sequencer (which opens its Channel Settings box) and then click on the SMP (sample) button in the box, you'll be able to move further down with the scrollbar. The legacy effects are at the bottom of the central area of the window (see Figure 1).

Fig. 1: Legacy Effects Figure 1. The legacy precomputed effects (lower area) are intended mainly for use with slower computers, but don't let that stop you. Grab a knob and twist! Note that these knobs can't be automated, because computing a new waveform interrupts the sound.

To experiment with the precomputed effects, I suggest using the default Kick waveform--the one that's loaded with a new song. Enter a few notes in the Step Sequencer or choose a pattern you've already created and solo the Kick generator by right-clicking on its mute "light." Start playback and then wiggle the knobs. If you have FL Studio, you can load up this file (8K, .zip format) and try it out. (Be sure to decompress the downloaded .zip file first.)

Looking at the waveform display will give you a pretty good idea of what most of the precomputed effects do. Here's an example of what they sound like:

The preceding MP3 example has the default factory kick drum in several versions:

  1. Unprocessed
  2. Clipped using FX1
  3. Processed with a combination of the SINE FX, FX1, and some precomputed resonant lowpass filtering
  4. Mangled with lots of precomputed lowpass filtering, but also some FX1 to boost the level
  5. A little of everything, including onions: PITCH and MUL offsets in the Time Stretching section, plus (in the Legacy Effects section), reverb B, S.DEL, FX1, and lowpass cutoff

Referring back to Figure 1, the AMP knob boosts the amplitude of the sample, which will generally overdrive it, leading to some very fat clipping distortion. The FX1 knob does much the same thing, but to my ears it seems to add slightly more low frequencies, whereas the AMP knob adds more crispy highs. Also, the FX1 knob is bidirectional. That's not too useful, as most of the time you'd like the sample to be nice and loud. But if you add lots of filter resonance with the RES knob, the sample may clip, in which case moving the FX1 knob to the left could be useful for preventing overdrive.

The first SINE FX knob adds sine-wave frequency modulation (FM) to the sample. The second knob controls the sine wave's frequency. With these two knobs, you can add a ringing overtone to most sounds. With a hi-hat sample, which is mostly noise to start with, SINE FX mainly changes the perceived pitch and color of the hi-hat without creating much of an identifiable ringing tone.

The REVERB knob gives you a choice of two types of reverb. Neither is very high-quality, but sometimes an ugly, grungy reverb is what you want. More interesting is the S.DEL (stereo delay) knob, which delays either the right or left audio channel. A slight amount of stereo delay will give a sample a bigger, more spacious quality. It can also cause something called the Haas effect, in which the sound seems to be coming from one side of the stereo field even though there are still equal amounts of sound energy coming from both speakers. The Haas effect is a psychoacoustic phenomenon caused by the way our ears attempt to pinpoint the locations of sounds in the real world: sounds that are closer to one ear will arrive there first. Here's what it sounds like:

This MP3 uses, again, the factory default snare and kick. Over four bars, I use the S.DEL parameter to shift the snare first to the right and then to the left, demonstrating the Haas effect. That is, the snare appears to originate off-center in the stereo field, even though in both cases the amount of acoustic energy coming from the snare is the same in each channel.

The Channel Settings window contains even more useful widgets for getting creative with samples. The Time Stretching section will do some tastefully nasty things to a kick or snare. In the first four bars of the following MP3, Time Stretching is relatively sedate, but in bars 5-8 I went all out, adding FX1, SINE FX, precomputed reverb, and some S.DEL on the kick as well:

Fig. 2: MIDI Out Figure 2. The MIDI Out device has eight pages of programmable knobs and sliders. The menu tab beside the PATCH parameter provides a list of General MIDI patch names.

Thinking Outside the Box: External MIDI

Though people usually think of FL Studio as a "virtual studio" (a standalone application that does everything), it can function pretty well as a conventional MIDI sequencer driving external hardware synths. The first time I tried this, though, I was baffled. I added a MIDI Out generator from the Channels menu, entered a few notes in the Piano Roll for that generator--and heard nothing.

Some additional steps are needed:

  1. In the Options menu, make sure "Enable MIDI output" is checked. (Why this item wouldn't be checked automatically when you create a MIDI Out generator is beyond me.)
  2. In the Options MIDI Settings box, choose the MIDI output(s) you want to use in the "Output port mapping" list, and give each output port a unique port number.
  3. In the "Remote control input" field of this same box, choose the MIDI input to which your master keyboard is attached.

Now, when you return to the Channel Settings box for the MIDI Out generator (see Figure 2) and select the corresponding port number, MIDI messages transmitted by your keyboard will pass through FL Studio and be sent out to the destination you've selected. At least, they will if you've clicked on the MIDI Out generator in the Step Sequencer so that its button is depressed. In this respect, FL is like any other MIDI sequencer: It routes incoming MIDI to the currently selected track or device.

To record real-time MIDI performances direct to the Piano Roll, all you have to do is select the MIDI Out generator and then click the Record and Start buttons in the transport bar. Switching on the metronome (the icon in the toolbar looks more like a magic wand to me) and selecting "none" as the SNAP value will also be useful in most cases.

You may prefer to set SNAP to Step when recording, as this will snap the start of each note to a 16th-note grid. However, it will also snap the end of each note to the grid, which I personally don't care for. I prefer to record without snap. I then go into the Piano Roll, and from its menu I select Tools -> Quantize (or hit Alt-Q) and make sure Leave Durations is selected in the Quantize dialog box (see Figure 3).

Figure 3: The Quantize Box Figure 3. In the Quantize box (foreground), you can load a groove template and make smoothing adjustments in several parameters with the knobs. Only the VOL knob affects data being sent to external synths: it adjusts the velocity values of the notes. (Click to enlarge.)

The other knobs in the Quantize box are useful, by the way. Rotating the Start Time knob somewhat to the left (to 3 o'clock instead of 5 o'clock) causes notes to move only part of the way to the snap grid. The Sensitivity knob will cause notes that are already close to the grid to be skipped during quantization, producing more of a live feel while still tightening up the rhythm.

The Outer Limits of Controllers

Fig. 4: Control Settings Figure 4. Configure outputs for the MIDI Out generator's knobs in this box.

Recording and editing MIDI Control Change (CC) data when sequencing external hardware synths is a little more complicated in FL Studio than in a conventional sequencer, but it offers some extremely cool options. To illustrate, let's set ourselves up to record and play back mod-wheel data.

To begin the process, open the Channel Settings box for the MIDI Out generator and choose one of the available knobs. Right-click on the knob and select Configure. In the configuration pop-up box (see Figure 4), give the knob a name ("mod wheel") and a short name ("mod").

Change the Controller # parameter to 1 and make sure CC is selected in the menu box. Then click Accept. This causes the output of the knob to be CC1. But we still need to link the input of the knob to CC1. Right-click the knob again, and this time choose "Link to controller." If the auto-detect button (see Figure 5) is lit, all you need to do is wiggle your keyboard's mod wheel, and you're done. The box will close automatically.

Fig. 5: Remote Control Figure 5. In this box, you choose the remote (MIDI) input source for any knob in FL Studio. Long settings for the Smoothing knob will cause the sound to glide smoothly to a new value, even after your hand has left the hardware controller.

Open the Remote Control Settings box again, however, and take a look at the Mapping Formula field. This field is one of FL Studio's coolest features: It enables you to set up an algebraic formula with which to map the MIDI input to the output. It's found not only in the MIDI Out knob configurations, but in all of FL Studio's realtime knob configurations.

To take a very simple example, let's suppose you want to be able to push the mod wheel all the way up and have less effect on the sound. You could reprogram the synth itself, of course, but that would take longer, and might have side effects (such as changing the sound of the mod wheel in other songs). In FL Studio, the solution is simple. Enter this mapping formula:


The input value is now divided in half before being output. Another way to enter the same formula, by the way, is Input * 0.5. In case you've never done math on a computer, perhaps I should mention that the asterisk (*) is used for multiplication, whereas the slash mark (/) is used for division.

This is a trivial example, because you can accomplish the same thing by moving the mod wheel half as far. So let's make it more interesting. Select another knob in the MIDI Out panel and configure it to transmit CC2. Then, in the "Link to controller" box, do the following: first, make sure "Remove conflicts" is unchecked. Next, create this mapping formula:


Finally, wiggle the mod wheel as before, to auto-detect it. If you've followed these steps carefully, you'll have two knobs controlled from the same mod wheel, one of which transmits CC1 while the other transmits CC2, and they'll move in opposite directions, each of them spinning through half of its travel. You can move your mod wheel and watch the knobs respond on the screen.

The possibilities are endless: a single hardware knob, slider, or joystick can be used to sweep a dozen sound different parameters at the same time, each in a different way. Here's an example:

On this MP3, I played the same Sytrus chord twice. The first time there's no modulation. The second time, I modulated six parameters, all from the same input modulation source but with different mapping formulas. Four of the parameters are in the Sytrus Filter 1 page. In addition, I'm modulating output panning and the reverb wet/dry knob. There's also a bit of delay line on the second chord, to increase the complexity of the sound.

Finding the Formula

FL Studio offers an effective set of computer-type abbreviations for the formulas, including abs (absolute value), int (nearest integer), sqrt (square root) and the trigonometric functions sin, cos, and tan. For details, open the built-in help and, in the Contents tab, choose Automation & Recording -> Mapping Formula.

The key to understanding mapping formulas is that all controller data is "normalized" to a range between 0 and 1. If you're used to dealing with MIDI values between 0 and 127, this may be counterintuitive at first, but it makes data handling much easier, especially where trig functions are involved.

Fig. 6: Fruity Formula Controller Figure 6. The Formula Controller can process either externally or internally generated data. I created the amusing curve in the meter window by using the LFO utility in the event-edit windows (Edit events -> Tools -> LFO) for all three knobs.

But wait, there's more! Once in a blue moon you might want to set up a really complicated type of controller response, such as adding the values coming from two hardware sliders and then subtracting (or dividing by) the value of a third slider. Such esoteric processes are a piece of cake in a MIDI programming environment such as Max or Pd, but FL Studio is, as far as I'm aware, the only general-purpose workstation software that will do it. The tool of choice is the Fruity Formula Controller (see Figure 6).

The Formula Controller is one of FL's fake "effects," meaning it's instantiated in a mixer channel but doesn't process the audio signal in any way. After entering a formula, you have to compile it (by clicking on the word COMPILE). If you haven't entered the syntax correctly, you'll see an error message. And here's a bonus tip: you can automate the three knobs from separate patterns that are different lengths, thus creating a composite curve that repeats over a longer cycle than any of the individual patterns. Here's an example:

In this MP3, I'm processing a hi-hat sound with a heavily resonant lowpass filter. I'm modulating the filter's cutoff frequency with a Fruity Formula Controller, whose three knobs are being driven by separate patterns that are four, six, and eight beats long. The resulting modulation contour repeats once in each six measures. I've also used two Fruity Sends to split the signal from the hi-hat into three delay lines, just to make the pattern more complex. The formula (not that it matters) is (a-b+0.3)/((c+0.2)*3). The filter cutoff knob, meanwhile, is processing this signal with the formula (Input+0.2)*0.7. I arrived at these formulas empirically, which means that I kept trying numbers until I got something I liked.

Fig. 7: X-Y Controller Figure 7. The Fruity X-Y Controller provides a two-dimensional "mousable" control surface. You can also link it to a hardware game joystick. With a moderate setting of the SPD (speed) knob, the actual output (the bullseye) lags behind the mouse input (the pointing finger).

Grab Your Mouse, Not Your Calculator

Admittedly, math is for tweakheads. If you'd rather grab a control with the mouse and drag it around on the screen, your tool of choice may be the Fruity X-Y Controller (see Figure 7). Again, this is a fake effect, and is inserted in a mixer channel. It provides a mousable X-Y surface with which you can control the parameters of your choice.

After inserting an X-Y Controller (and renaming it, if you like), right-click on the knob of your choice, choose "Link to controller," and select the X or Y output in the "Internal controller" field. This field is added to the box when you create an X-Y Controller.

When you record your mouse moves in the X-Y Controller, the data is recorded (into the selected pattern, as usual) within the X-Y Controller itself, not within any of the knobs to which it is assigned. This makes sense, because it lets you later edit your moves by fiddling with only two controller data contours (one for X and one for Y) rather than six or eight, which you might have to do if you're using the X-Y Controller to drive six or eight separate parameters.

And don't forget, when recording automation for any parameter, you have to decide whether to record it into a normal pattern (in which case it will loop each time the pattern plays in the Playlist) or into the pattern called "Main automation," which is intended to run for the entire length of the song.

Studio Fruition

There's much more to FL Studio than we've covered in this two-part tutorial. If you'd like to know more about handling audio tracks, managing the Playlist, time-stretching loops, operating FL Studio with ReWire, or using the Wave Traveller, Beepmap, Speech Synthesizer, and Drumsynth Generators, please leave a comment below. If there's enough interest, we'll do another installment.

Return to digitalmedia.oreilly.com