On Saturday 29 Apr 2006 17:42, Dave Robillard wrote: > On Sat, 2006-04-29 at 17:24 +0200, Lars Luthman wrote: > > The things that aren't obvious how to do are > > > > 1) the configure() callback > > OSC message.
And there you've introduced something I haven't seen in this thread yet: sending messages rather than just values to your plugin. How come there are dozens of posts here talking about the name of the API and bitching over whether this "extensible" plugin API should start out with a logarithmic port hint, when things like this are going unmentioned? Is the expectation that any plugin be able to define that a certain port accepts any given structure of data, defined entirely in the RDF? Or what? > > 2) the dynamic program lists and midi mappings (static definitions > > could be written in the RDF file, but that's no fun) > > That's a tougher one. > > > 3) program selection > > OSC message. You see that's all terribly glib, but the things that make the non-GUI parts of DSSI complex are not so much about how data is passed to and from the plugin as when it is passed, what the dependencies between things are (e.g. when you change a configure value, the programs may change; when you change a program, the ports may change), what the threading requirements are and so on. An entirely generic anything-in anything-out plugin is unlikely to be much actual use, in practice. > > 4) the run_multiple*() callbacks (how many plugins use these?) Hexter, Xsynth, WhySynth etc. run_multiple is DSSI's equivalent of MIDI channels. There is no channel information in the note messages passed to a plugin; instead the host creates as many instances as it needs, effectively one instance per channel, and run_multiple allows the plugin to share work between them if appropriate. If it has no work to share, it just doesn't bother providing this function. This can have advantages for the plugin (the simple case is simpler) and user (any plugin appears able to receive any number of channels of input, without the user's having to know what the plugin's actual configuration is). The main disadvantage is simply that it's different from how other MIDI-based APIs work. In my view it's better in isolation -- in a homogenous environment -- but can become awkward when mixed with actual MIDI devices. Chris
