I have used the pan controls, and the volume (and expression) controls on individual MIDI channels (assuming the MIDI channel limitation is the limiting factor here), using Qsynth (which uses fluidsynth) for synthesizing sound (rather than the fluidsynth DSSI plugin instances).
I have had a need for parallel output to two sets of MIDI channels with fluidsynth as the synthesizer. I have done this with no noticeable latency problems, though percussion instruments show latency problems more readily than melodic instruments. I use this for performing using what I call "Composite Voices".
The way I did this, is to add another Qsynth "engine" (by default you get only one). It's easy to add more, and each one can have its own configuration parameters. Then I piped my keyboard MIDI output to both Qsynth engines simultaneously.
Having done this, I have two sets of 16 MIDI channels, one set using the original Qsynth port as the playback device, and the other set using the 2nd Qsynth 'engine' as the playback device. I can use the pan and volume/expression controls for any of these MIDI channel voices.
I do not notice additional latency for the 2nd Qsynth engine, though I do notice it uses the amount of memory required for the sound-font for each 'engine' (they don't share sound-font memory). Since the sound-font it uses is nearly 150 megabytes, this can be a problem on machines having less that 1 megabytes of RAM. I get around that problem on lower-RAM machines by using a smaller soundfont for the 2nd Qsynth 'engine'.
Since I use piano/guitar sounds, I'm quite sure I would have noticed if the 2nd Qsynth engine added additional latency. I have had pieces messed up by latency before (with different causes), and know what those problems sound like.
One 'fly in the ointment' on this, is that I tried this with the current (available with Ubuntu 12.04) versions of Qsynth (fluidsynth), and Rosegarden, and I could not make any other MIDI channel than 10 work as a percussion track.
HOWEVER, the current development version of Rosegarden, along with the latest available version of libfluidsynth1 (used by qsynth), let me make channels other than 10 function as percussion tracks. I also verified that they responded to the volume and pan settings (though they didn't seem to respond until I selected a different track, then re-selected the track I changed).
Adding an additional qsynth engine would give you 16 more such percussion instruments, and you can add more qsynth engines, each time giving you 16 more percussion instruments, probably without adding noticeable latency (though I haven't tried a 3rd or 4th qsynth engine).
Anyway, perhaps this gives you some ideas of other approaches to solving your problem.
I am not a Rosegarden developer, or a fluidsynth developer. However, I use these components a lot, in a lot of different ways, and am trying to teach people how to do the same.
On Sat, 2012-09-15 at 22:31 +0200, Holger Marzen wrote:
to pan, mix and process the drums separately I have to waste one
instrument (one fluidsynth-instance) per drum. Only 16 are available.
Would it be possible to add more slots for synth plugins?
Of course I could run fluidsynth instances as separate programs to get
16 more instruments but this adds latency and cannot be stored inside
(Hydrogen is no altenative for me since it adds variable(!) delays when
I route MIDI-events to it. This kills every groove.)
How fast is your code?
3 out of 4 devs don\\\'t know how their code performs in production.
Find out how slow your code is with AppDynamics Lite.
Rosegarden-devel mailing list
Rosegardenfirstname.lastname@example.org - use the link below to unsubscribe