[Top][All Lists]

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

Re: [fluid-dev] Adding Poly/mono functionality to FluidSynth

From: jean-jacques.ceresa
Subject: Re: [fluid-dev] Adding Poly/mono functionality to FluidSynth
Date: Thu, 30 Jun 2016 14:25:24 +0200
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.1.0

Hi Ben,

>the legato commands. For a EWI, I think legato should be on all the time if you are playing wind instruments. If you want to imitate a guitar, then probably you would want it off. Correct?

Well, it is necessary to be not confused by the terms.

>For a EWI, I think legato should be on all the time....?
a) Are you talking about the ewi capability to be enabled(or not) for sending MIDI CC legato On/Off ? .
b) Are you talking about the ewi internal capability to disable a legato manner playing from the musician ?
For both questions (a,b)  the response should be in the manual of your EWI.

Please  what is the model/builder of your EWI ?

Anyway, i insist that at the synthesizer receiver side (e.g fluidsynth + polymono patch), the MIDI channel ignore CC legato On/Off if this channel is set monophonic (by CC Poly/mono, Omni On/Off, or fluidsynth shell commands, or fluidsynth API call). Please read. There is a misspelling in the terms used by MIDI specifications about CC legato On/Off.
This CC doesn't mean that the synthesiser must react legato/staccato.
The MIDI specs. (MIDI_MMA specifications.pdf  version 4.2  1995) says that :
-on CC legato On the synthesiser MIDI channel must switch to monophonic (regardless of the actual mode poly/mono of this channel). -on CC legato Off the synthesiser MIDI channel must return to the state it was (poly/mono) prior receiving CC legato On. So, simply switching CC legato On/Off allows a musician to switch a polyphonic Channel temporarily in monophonic in real time performance. So, if the channel was already monophonic on CC legato On/Off the synthesizer becomes neutral (i.e it does nothing).

During the time the musician plays this 'monophonic channel' the fact that the synthesizer reacts to the 'staccato/legato' musician playing is entirely upon the synthesizer responsibility and is outside the scope of MIDI specifications. If the musician plays staccato , fluidsynth (+ polymono patch) will react staccato. If the musician plays legato , fluidsynth (+ polymono patch) will react legato (in one of four mode called 'legato mode').

Now a complement about legato mode which is not clearly documented in the patch pdf: Mode 3: is straigtforward (i.e the synthesizer reacts to legato without additionnal processing). Mode 3 to 0: This mode from 2 to 0 are perceived less legato from one to one. Mode 0 is perceived less legato then mode 0 (for the same musician playing manner). To get this differents results, the synthetiser makes use of different ways of triggering/retriggering of adsr generator.

If i was a EWI player i will choose legato mode 3 (default is 0), because as explained this mode is neutral. In other word in legato mode 3 the result depends of the musician playing manner and hightly of soundfont ADSR preset
(apart of breathToInitialAttenuation modulator presence).

What can do an EWI player or a Keyboardist to try this patch ?:
1) Apply this path to the current source file (v 1.1.6) and build the library executable (only the library is concerned). 2) Run the console application: fluidsynth with usual options and the right soundfont file.
In this state the synthesizer is polyphonic on each of 16 channel.
Assuming your EWI is sending CC legato On/Off you don't need to skip to steps (3,4).
2.1) Send a CC program change
2.2) And play on the ewi. If you play legato fluidsynth reacts legato (in mode 0 ).
2.3) To display current legato mode type the following command:
This display the current legato mode of each MIDI channel.
2.4) to change channel 5 (zero based !) (assuming EWI playing on channel 5) to legato mode 3 , type the following command:
>setlegatomode 5 3
Then verify your choice by the command:
You can iterate steps 2.1 to 2.4 any time by changing the preset or legato mode or the playing manner (legato/staccato)

The following steps are only necessary if your MIDI controler (Ewi, Keyboard) don't send CC legato On/Off (I don't think that an Ewi is unable to do that).
3) To put channel 5 in monophonic mode 1 (mono, omniOn),  type the command:
>setbasicchannels 5 1 0
3.1) Then verify using the followings command
3.2) or verify using command
These commands shows that channel 0 to 4 (5 channels) are still polyphonic, and channel 5 to 16 (11 channels) are set monophonic Your channel 5 will react monophonic, it is ready , you can go to steps 2.1 to 2.4

Note: While you play on channel 5, if you feel a little alone, don't hesitate to put an other EWI player on channel 6 or a Keyboardist on channel 0 to get a live accompaniment and don't be affraid if your heard that the keyboardist is able to play polyphonic because is this setting you and your EWI friend are the only one able to play real legato. But anyway things can be reversed if you put channel 0 (Keyboard) in monophonic mode and give a separe breath controler to the keyboardist.

Thanks for responding to my questions above.

Le 29/06/2016 23:23, Ben Gonzales a écrit :
Hi Jean-Jacques.

Thanks for that info. I will try it.

Re:the legato commands. For a EWI, I think legato should be on all the time if you are playing wind instruments. If you want to imitate a guitar, then probably you would want it off. Correct?


On 29/06/16 22:53, jean-jacques.ceresa wrote:
Hi, Ben
1)After a quick search on the Web, the command to apply a patch is simply 'patch'. You need to apply this command on each original source file concerned (the list is given in the pdf).

2)For the 2 news file (fluid_synth_mono.c, fluid_synth_polymono.c) , i assume that it sufficient to put them in the source directory fluid_synth-1.1.6/src/synth to get them compiled but i am not sure as it depends on the
make command.

3) may be after doing step 1 and 2, it will be necessary to do a cmake. I don't know the real dependency.

4) if step is done without errors, the last steps is a make to build the library only (Only the library is concerned). When steps 4 is finished, verify that the library has been build without errors, if it is the case your are ready
to do somes try with the console application.

>help polymono

This the list of new shell commands for poly/mono functionality explained in the pdf.


Le 28/06/2016 05:22, Ben Gonzales a écrit :
Could someone provide instructions re how to load the patch please? I've compiled before, but not installed patches. I'd like to try this with my EWI and RPi2 running Jessie.


On 25/06/16 19:31, Ben Gonzales wrote:
Hi Jean-Jacques.

I haven't participated in this sort of development before, so I don't know the protocols. I re-read a lot of the PDF and I think there are some errors/typos. How are they normally handled? Feedback on the forum? Private e-mail?

One item immediately: In section 3.1.3, "Playing Legato", you mention that the EWI detects legato playing and sends a "CC Legato On" message. In my work with the EWI I had not seen these messages, so I tested for them today, and my EWI-USB does not send them. It may be that only the more sophisticated models send those CC messages, or my instrument has not been configured to do so - I don't know. Can you comment please?


On 24/06/16 23:04, CERESA Jean-Jacques ENAC/ENAC wrote:
Hi Ben

>I've read the pdf doc and understand a lot of it, but I don't understand the need for the "base" channels. 1)"Basic channels" is a MIDI specification.In short this allows to split the whole set of synthesizer channels in distinct MIDI channels groups. Each group is composed of continus MIDI channels starting from the first called "Basic Channel". Each group can be set in different mode via MIDI CCs (Polyphonic,Mono, OmniOn,OmniOff) that have to be send to the Basic Channel.

>Does it mean you need less cpu to run Fluidsynth?.No, assuming no reverb, no chorus, cpu usage is hightly related to the number of a voice a simple note need. For example on RPi2 Fluidsynth (using the 4 cores) can plays 180 voices maximum.(note that a "voice" in FluidSynth spelling is what is called an "Instrument Zone" in SF2.1)

Assuming the patch applied, by default a FluidSynth instance have a default Basic Channel number 0, Poly, Omni On. That mean that this instance is ready to play on 16 MIDI channels (the default channel settings), in Polyphonic.

2) So in this state the FluidSynth instance plays polyphonically on each channels. If a CC legato On is send to a channel, this one switchs from polyphonic to monophonic and behave monophonically. This is a MIDI behavior specifications. This is a real-time Poly/mono control of a MIDI channels.

On a MIDI channel in the monophonic state, the "legato playing" manner works , but with serious limitations (discuted in the pdf).

3)>How do I test this patch? Download the latest git and re-compile? Add the patch somehow? You cannot download the latest git until the patch will be accepted and committed . You need to apply this patch by your own on your actual source version (1.1.6). The manner depends on the platform you works. I am not an expert in patch, i don't know how to do but, i wish that it isn't complicated to do. I hope this post will be read by a developer who practice the procedure and can describe it. Note that apart the patch file that adds functionality to existing file (fluid_synth.c, ...), there are 2 new files (fluid_synth_polymono.c, fluid_synth_mono.c) that must be added to the make steps.
May be Pedro Lopez-Cabanillas can help on this matter ?

fluid-dev mailing list

fluid-dev mailing list

fluid-dev mailing list

fluid-dev mailing list

reply via email to

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