Wherein we revel in having hundreds of instruments hidden within a single instrument node
Right-click to copy examples to your workspace
Fiddle's Fluid instrument is built atop the ChucK Chugin that bridges to the open-source FluidSynth Synthesizer.
The "batteries" that make FluidSynth work are SoundFonts.
Here, batteries are included in the form of MIT-licensed FluidR3_GM.sf2,
courtesy Frank Wen. This is the default value for the Fluid node's SoundFont
parameter and, coupled with a valid Fiddle installation you should be able to
operate FluidSynth out-of-box. Of course, if you have a favorite
soundfont, you can use that instead. And if you want to go whole-hog
you can even cobble together a custom sound font using a specialized
soundfont authoring environment like Polyphone.
One advantage of soundfonts over individual sample files is their convenience. Within a single soundfont file reside many hundreds or thousands of sample files. Rather than refer to individual notes by file-name you can use soundfont technolog to refer to all the notes of multiple instruments through 3 integers: bank, preset/program and note. Other MIDI controls (like velocity) can even modify the timbre of an individual note.
In the case of FluidR3_GM more than 128 instruments are included. The
_GM in the name refers to the General MIDI standard
which assigns a standard voice, like Harpsichord, to a standard
preset: 7.
As stated previously there are three integers that identify an individual
note within a soundfont. The most important, Instrument, refers to the
preset number (often following the General MIDI spec). Most soundfiles
comprise at least two Banks, one for melodic instruments and another
for percussive. When an instrument from a percussion bank is selected,
the MIDI notes refer to specific or related percussion sounds (or instruments)
as described here. A convenient part
of the GM spec prescribes that the default bank for MIDI channel 10
be a bank that holds percussion instruments.
Below we see the graph for this example, fluidSynth.chg. Here we're using
AbcSequencer as our source of notes.
We have two Fluid node instances, one FluidDrums that is accessing
instruments from the percussion channel, 10 and the other Fluid
accessing standard instruments (on channel 1). We have CCGenerator
generating a new instrument index every two seconds and so you can use this
example to audition every voice in a soundfont. Because CCGenerator.Debug
is checked you can see the current number in the Log panel.
Other important notes on the FluidSynth engine:
polyphonic so there is usually no need for multiple instances.Gain in order to hear its output.Mac and Windows we include the FluidSynth runtime libraries.
On Linux these libraries must be installed via apt-get install libfluidsynth-dev
or its equivalent.

The Fluid node targets general purpose melodic instrument usage. It can
also be used for percussive soundbanks by setting MidiChannel to 10.
It's sibling, FluidDrumkit Node, presents an
interface targeting the percussion use-case.
SoundFont selects the soundfont for this instance. At right you see the
default value which includes the relative pathname with the Fiddle distribution.
Instrument selects the voice/instrument within the context indicated by
MidiChannel and Bank. Usually this is the main parameter for selecting
an instrument.
MidiChannel selects from a bank of instruments in the soundfont. Usually
this value is set to either 1 for GM or 10 for GM-percussion.
Bank another aspect of instrument specification. Its interpretation/function
depends on the soundfont and it often may have no effect.
Gain a multiplier for the output signal loudness. Since FluidSynth has
a lot of headphone to support polyphony you may find that you need values
as high as 8 here.
Instances is usually set to 1 for FluidSynth because it supports polyphony
internally.
In this second example we produce a rhythm track with the GridEditor and the NoteGrid Node.


The NoteGrid node performs .fgrd files produced by the GridEditor.
In this file beatbox.fgrd you'll find around 15 two-bar sections identified
by letters [A-Z].
File specifies the .fgrd file to perform.
Layer requests a subset of the layers within the file to be performed.
The value -1 means perform all layers, but this example file contains
a single note layer.
Arrangement controls how the contents of File are performed. When empty,
the entire file is performed. In this example, Arrangement
is an expression that refers to sections within the file. In this case each
section is a different drumkit pattern and you can use this as described in
the BeatBox example.
SoundFont described above.
Instrument refers to the preset/program within the specified bank. For
bank 128, there are several standard drumkits available.
1 Standard Kit - the only kit specified by General MIDI Level 1
9 Room Kit Drums recorded with room ambience
17 Power Kit More powerful kick and snare sounds
25 Electronic Kit Sounds of various electronic drums
26 TR-808 Kit Analog drum kit similar to Roland TR-808
33 Jazz Kit Softer kick and snare sounds than the Standard Kit
41 Brush Kit Many brush sounds added
49 Orchestra Kit A collection of concert drums and timpani
57 Sound FX Kit
Bank the voice bank. For FluidR3_GM (and many soundfonts), bank 128 is
a bank of percussion instruments so you may not need to change this.
MIDINote specifies the base note of a continuous range of MIDI notes to
respond to. This is the same approach used by the SoundBufBank node.
When MIDI notes above C3 are received, they are converted to a number
representing the semitones above the MIDINote. This value is then used by
VoiceMap and GainPan to control the behavior of that note.
VoiceMap maps the MIDINote offset to a sound within the instrument.
General MIDI prescribes a set of standard percussion
sounds. Here:
C3 → 36 Electric Bass Drum (Kick)
C#3 → 40 Electric Snare
D3 → 42 Closed Hi-hat (Cymbal)
D#3 → 51 Ride (Cymbal)
E3 → 53 Ride (Bell)
GainPan provides a gain and pan value for each voice. Here you can
see that the kick is on the right (1), the snare is on the left (-1) and
the hi-hat is in the center. When not provided, notes will appear in the
center.
Gain specifies the master gain for the FluidSynth node.