[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [fluid-dev] Continuous controllers

From: Element Green
Subject: Re: [fluid-dev] Continuous controllers
Date: Thu, 23 Jun 2016 19:28:23 -0600

Hello Ben,

On Thu, Jun 23, 2016 at 6:47 PM, Ben Gonzales <address@hidden> wrote:
Hi Chris and Jean-Jaques.

Thank you for your excellent responses.  I have been using CC11, and have programmed it into my EWI-USB. Here is my project site:


The original poster on this thread, fenderbenders, has one of my RPi configurations, but he would like to use CC2, and I presume that was the reason for his enquiry. I haven't done much with soundfonts, so I decided to try to modify my soundfont to accommodate the CC2, but ran into difficulties, hence my questions.

If you are just using straight FluidSynth you could probably use the MIDI router, if it is just a matter of remapping CC2 to CC11.  Sorry if I'm oversimplifying the task, I haven't been paying much attention to this email thread.

These commands would translate CC2 controller messages to CC11.

router_begin cc
router_par1 2 2 0 11

The router_par1 command takes the first parameter of the CC command (the CC number itself) and checks to see if it is between min and max (2 2), so it will only match CC2.  It then multiplies it by 0, which makes it 0 and then adds 11 to make it CC11 and passes it along to the synth with whatever value it had.  You could also alter the value if need be using the router_par2 command I believe.

Your answers have helped a lot, but there is still one issue that I don't understand. See the yellow arrow in the screen-shot in the following link:


I don't know what the second controller in the "Amount source" does. That was my Q3 earlier, but I don't think I explained myself well enough. Hopefully the picture will clarify what I'm after.

The Amount Source is just an additional control source.  Modulators allow for up to 2 control sources.  Each of these sources get mapped to a value between -1 and 1 according to the mapping function applied to the source (linear/concave/convex/switch, bipolar/unipolar, increasing/decreasing, etc).  Both sources then get multipled together and also get multiplied by the amount value before being added to the destination generator (synthesis parameter).  Each modulator has an additive effect on the resulting value.  There are a bunch of default modulators which cause SoundFont instruments to respond to some of the defined MIDI controllers as expected (volume control, pitch bender, etc).  When attempting to modify one of these, you have to first define a modulator which reverses the effect of the default modulator (adds a value with the opposite sign).  Then you can define a new modulator which has the desired effect, otherwise both modulators will be active (the default one and the user defined one).

Swami really needs to show these default modulators and allow for easily negating them.  This is on my TODO list.  Otherwise its rather complicated figuring out what the default modulators are and adding one which negates it's effect (see section 8.4 on page 41 of the SoundFont 2.4 spec http://freepats.zenvoid.org/sf2/sfspec24.pdf). 

More details on the modulator mathematical model can be found in section "9.5.1 Controller Model Theory of Operation" on page 51.  There are of course many other details in the specification as well.

On a side note, is there a good reference for using SWAMI? It's a fantastic program, but I don't understand a lot of what it does.

No, there is no user manual currently unfortunately, yet another TODO item.  A README file is in the source code, but it is pretty outdated at this point, but may provide some helpful info:

Feel free to ask questions on the swami-devel mailing list.  Me or someone else will be happy to help.

Best regards,

Element Green


On 23/06/16 19:40, jean-jacques.ceresa wrote:
Hi, Ben
>Q1: Is the modulator best applied at the Instrument or Preset level?
Instrument Level (as indicated in the document posted with the patch).

>Q2: I can't find "Initial attenuation" as a destination, only "attenuation" I assume they are different?
No, in SF2.01 there are only one generator to control dynamic it is named "Inital Attenuation".
This is the "Attenuation" considered by the synthesizer  at noteOn time (assuming a value velocity 127). Once the note is started,
this Attenuation value can be modulated by another source (i.e breath controler) if this modulator is present in the soundfont.

>Q3: What does the "amount controller" do?
Amount is a modulator parameter,in short it will works like that.
- Ouput modulator = Input source (i.e Breath CC value) x amount.
- Input Destination generator (i.e attenuation) = Output modulator.
For example, with a amount of 960 (cB), an  input source range from [0 to 127] will be mapped to attenution range [960 to 0].
To get this result put theses others useful modulator parameters: Shape: concave,  Polarity: unipolar, Direction: negative.


Le 23/06/2016 08:38, Ben Gonzales a écrit :

Note: I get 2 duplicate messages from you. Is it me or you?

Q1: Is the modulator best applied at the Instrument or Preset level?

Q2: I can't find "Initial attenuation" as a destination, only "attenuation" I assume they are different?

Q3: What does the "amount controller" do?


On 23/06/16 16:12, S. Christian Collins wrote:
Yes, "initial attenuation" with the amount "960" (the measurement is in centiBels).


On 06/23/2016 12:37 AM, Ben Gonzales wrote:
Hi Chris.

Aha! You sound like someone who might know what to do... I was in the process of working my way through how to do that particular modulator addition. Using SWAMI I'd figured out the concave unipolar negative curve with CC2 as the source, and figured that it should drive the volume attenuation, but couldn't work out what the amount source controller does. SWAMI appears to give the facility to multiply the source controller by the amount source controller by the amount. But I don't see why you need an amount source controller, or what controller you'd use.

I see also that JJ Ceresa has just put in a patch for legato which mentions the "initial attenuation". That sounds like it would be a good target too.

Can you offer any advice?


On 23/06/16 15:16, S. Christian Collins wrote:
I already responded to your question to the group on this matter. Did you not see it? There is no default modulator in the SoundFont spec for CC #2 (breath controller), so support must be added to the SoundFont preset itself using a modulator (CC#2 to attenuation, 96 dB using concave negative unipolar curve). Either that or use a MIDI routing program to filter all CC #2 messages to CC #11 instead, since the SoundFont spec does feature a default modulator that makes CC #11 control the instrument's volume.


On 06/22/2016 10:52 PM, FenderBenders wrote:
Would it be possible to implement continuous controller #2 (breath control) in fluidsynth.
Sent from Samsung mobile

reply via email to

[Prev in Thread] Current Thread [Next in Thread]