-
Notifications
You must be signed in to change notification settings - Fork 12
Fond of Soundfont
Author: Menno Knevel
At first, I wasn’t very impressed with the idea of using Soundfonts. Why should i bother with Soundfonts? They are just a poor imitation for the real instruments – they sound clumsy, they are just not good enough. But I have changed my mind; now i see the Soundfont as raw material, as timbres that can be extended with effects like Amplitude Modulation, Distortion etc.. The Blue instruments Sfplayer and Sflooper for example allow the usage of microtuned scales. All kinds of musical scales can be set in Blue using the Scala library. Microtuning sparks new ideas like creating clouds of sounds. Or having 48 notes in an octave. And, when using the bigger Soundfonts, the ones bigger than 10 Mb, there is enough variation in the sound to always provide this acoustic feeling. It reminds me a bit of the sounds one gets with sounds created by Physical Modelling. And there are so many free and big Soundfonts to be found on the internet...
BlueShare now contains 4 Soundfont players, each with their own purpose- each one has its own strengths and limitations.
A brief explanation of the SF system is in order. Simply said, there are 3 parts that are stacked upon each other. From first phase to the last phase:
- collection of samples – the very basis
- tune those samples, stack them in Layers for velocity, and together they make an Instrument (instrument numbers, can be hundreds)
- pan the instrument, and 1 or more Instruments together can make a Preset. The Preset = the Bank number (max 128) + Program number (max 128)
Programs like Polyphone, Swami, SynthFont or Viena are freely available. They show what samples are stacked in what key and show their velocity ranges. Blue has a SoundFont Viewer built-in that is based on 2 Csound opcodes, but sometimes you need more detailed information when working with Soundfonts; keys from the keyboard layout can be "empty", there is just no sample assigned to it. The Blue SFviewer does not show this kind of detailed information.
The Soundfont Viewer in Blue shows the name, bank and preset number
In Csound, there are opcodes like sfinstr that use level 2), but the 4 SF players I present all use level 3) with the exception of 4), so the last and most complete stage. A brief introduction:
- Fluidly is a wrapper for Fluidsynth from Peter Hanappé, and the Csound approach was to cut it up into a dozen opcodes. Artistic intention of Fluidsynth/the Fluid opcodes is the Western chromatic scale (12TET). It's there for playing the piano and cello, and 'imitate' the real instruments. Fluidsynth loads instruments for playing using a sequencer (DAW).
- SFplayer has a more creative approach. Microtuning is its strenght, allowing the user to think in terms of 'timbre' instead of 'real instruments'.
- Sflooper is a cross between the opcodes sfplay and flooper2. The loop points can be changed at k rate. This instrument, together with SFinst, are the more abstract ones of the Blue Soundfont Club; it uses the presets of the Soundfont, but the rest is up to the user
- SFinst does not use the preset of the SF at all, but goes one level deeper into the SF system and uses the Instrument layer.
- supports sf2 and sf3 soundfonts. Note: it takes a while for the sf3 file to unpack after loading. This is because they are ogg files and need to expand first. Perhaps it is better to convert the sf3 to a sf2 beforehand- sf2 loads significant faster.
- SFluidly expects midi note numbers and velocity values (0 - 127)
- renders only one Preset per SFluidly
- plays SFs as the creator of this particular SF intended to; loop points, reverb and chorus and all modulators are as already set by the creator of the SF
- All modulators are global. Some of the modulators can be accessed by controllers. These controllers have the structure of the Midi Controllers system (https://github.com/FluidSynth/fluidsynth/wiki/UserManual) as found in hardware and software synthesizers. Moving a controller influences ALL notes playing at that point in time (= global)
- the Fluidsynth list of available controllers is somewhat limited; for example, controllers for the cutoff filter and its resonance (CC74 and CC71) are not implemented as a standard. In SFluidly, these options have been added ‘the Csound way’...
- artistic intention of the Fluid opcodes is a musical approach based on the Western chromatic scale (12TET).
- so using the PianoRoll Object with only scale 12TET seems logical and first choice. In the PianoRoll Object, choose in Properties → Pch Generation → MIDI.
- all the other Score Objects like Jmask or Generic Score can, of course, be used; a generated note with midi key number 60.386451 will automatically be rounded to the whole note- in this case 60. Same goes for the velocity values.
Listen to an example of the Equal Temperament scale of SFluidly.
- sf2 SF only
- no access to the reverb, chorus or any other of the modulator options embedded in the SF (like expression, portamento etc.)
- capable of microtuning, using scales that can be set in the PianoRoll Object. The Pitch Generation in Properties must be set to Frequency. Making clusters or clouds can be generated with JMask
- the whole note is the basis of the sample being played. Generated frequencies that are not part of the ‘normal’ 12 notes in an octave system (12TET) are derived from this whole note. Then the pitches are modified by multiplication. An example is the Scala scale for a 24 notes in an octave and another for 48 notes in an octave. But you can free to design your own Scala scales or use existing ones (http://www.huygens-fokker.org/scala/)
48 notes in an octave
For example, quarter-note.scl and eight-note.scl divide the octave in 24 and 48 slices
- SFplayer uses the looping points as programmed by the creator of the SF, but reverb or whatever effect must be added in the Mixer of Blue
- pitch bend envelope, amplitude envelope and filter envelope are on a per note basis (= not global).
A (low quality) piano does not sound like a piano anymore….
- sf2 SF only
- SFXloop is a cross between the opcodes sfplay and flooper2. Loop start and loop end can be adjusted and changed freely at k-rate, as can the crossfade time.
- SFXloop uses nothing of the modulation options as layed down in the SF Preset. Looping points must be set manually. Reverb, AM or whatever effect can be added in the Mixer of Blue
- microtuning option, using the scales that can be set in the PianoRoll Object. The Pitch Generation in Properties must be set to Frequency.
- the user can and must set the looping points and crossfade time. A good crossfade is one where it is impossible to hear a click when the end of the loop jumps back to the start of the loop. But, if you happen to think of the click as a nice artistic addition, go ahead…
- pitch bend envelope, amplitude envelope and filter envelope are on a per note basis (= not global)
Here is some crazy blues that shows SFXloop in action.
- sf2 SF only
- Normally only the Preset level (= top level) is exposed to the user, but with SFinst this is different: it goes one level deeper than the Preset level, it uses the Instrument level.
An example: listing the contents of the Preset and the Instrument shows the differences.
Instrument list of "AltoSax (3 Layers) .SF2"
- Alto Sax - ff
- Alto Sax - mf
- Alto Sax - pp
While the Preset shows the 3 Layers as one instrument:
Preset list of "AltoSax (3 Layers) .SF2"
- Alto sax - 3 Layers prog:0 bank:0
This means that the Preset produces the sound of one of these Layers depending on how fast you push the midi keyboard,ie. what the value of the velocity is. Velocity value range 0-60 = Alto Sax - pp, range 61-95 = Alto Sax - mf, and range 96-127 = Alto Sax - ff. SFinst lets you choose for example, 0) Alto Sax - ff, giving you the full velocity range of 0-127 instead of only 0-60.
- pitch bend envelope, amplitude envelope and filter envelope are on a per note basis (= not global)
Some lovely sounds made with SFinst...
Blue version 2.8.1, October 2021