From: yikyak <yi...@gm...> - 2008-09-26 15:49:54
|
On Fri, Sep 26, 2008 at 3:38 PM, Chris Cannam <ca...@al...> wrote: > No, you aren't misunderstanding anything. Rosegarden is very > simplistic in this respect -- it mixes the number of audio outputs up > or down to match the number of channels on the track, which is always > either 1 or 2 depending on whether the stereo button in the instrument > parameters is pushed in or not. > > If the aim is to accept multi-MIDI-channel input and send > multi-channel output in order to support multiple effective instances > on separate tracks, the "DSSI way" to do that is to have several > actual instances (perhaps sharing data behind the scenes) and then > call run_multiple_synths once for all of them instead of run_synth on > each one. Rosegarden will do this if you have the same plugin set for > more than one track (and it supports run_multiple_synths). > > Unfortunately, that mechanism is rather different from any other plugin format. Thanks Chris, that's just the information I was looking for. I was thinking more of the situation where where you have *single*-midi-channel input but, as with some synths and samplers, want to run the output to different banks of effects (e.g. LADSPA plugins) depending on the specific midi note or the range in which that note lies (output groups). This seems "theoretically" possible under DSSI using only run_synth() (given an idiosyncratic parsing of the DSSI spec) but not if the host routes all output ports through the same audio channel. At the same time, I can see the problem from the host developers' perspective: the DSSI spec uses LADSPA's port system and there's no good reason for an effect's output ever to be routed to multiple 'host audio channels'. The two other ways of doing it would seem to be: 1) Incorporate a 'channel' system and ladspa hosting system *internal* to the instrument which would then only ever need a stereo output to the host (the massive downside of this being that it unnecessarily replicates complex functionality already provided by the host); or 2) Use run_multiple_synths() in a hackish manner for which it probably wasn't fully intended, as you'd be writing to separate LADSPA handles but essentially using only one midi event queue (this would also have the nasty side effect of requiring multiple redundant instances simply to use their output ports). You could probably do something equally nasty by playing with the descriptor returning and instantiate functions. Anyway, thanks again. It's not a Rosegarden-specific issue, I know; more strangeness in the DSSI spec coupled with my own ignorance. Chris Williams |