[linux-audio-dev] Plugin APIs (again)

David Olofson david at olofson.net
Sat Dec 7 19:51:01 UTC 2002


On Sunday 08 December 2002 01.26, Nathaniel Virgo wrote:
> On Saturday 07 December 2002 11:29 pm, David Olofson wrote:
[...velocity or not...]
> > Well, keep arguing, and I'll try to figure out more reasons why
> > velocity is not special, nor universal. ;-)
>
> I think velocity is special because it is often needed by the
> synthesis algorithm only at the beginning of the note.  For
> instance, if you have a physical model of a bell then the velocity
> will determine the shape and magnitude of the impulse function you
> use to represent the striker.  Changing it midway through the note,
> after the bell has been hit, is meaningless.

Of course. (Waving the club around in the air in front of the gong 
will probably affect the sound slightly, but you may not be 
interested in emulating that. :-)

However, how does velocity making sense for *some* instruments make 
velocity special? I bet there are *at least* as many instruments 
where velocity does *not* make sense, but "pressure/speed" does. So, 
we might as well decide that "pressure/speed" is the normal (or 
"special") way to control instruments, and velocity is the special 
case, right?

I think both are special cases. In some cases, you don't need either 
of them. In most cases, you'll need one of them, and sometimes, you 
may even want to use both.


> That said, it would be cool if you could support multiple
> velocity-like parameters, so that it would be possible to control
> the position of the striker and the strength of the strike
> independently for each note.

Yes indeed. I have that kind of controls in Audiality (used only for 
positional 2D audio so far) - but those are actually continous 
controllers.


> Multiple poly-aftertouch-like
> controllers would also be cool, but I think they are a different
> thing.

I'm not so sure... What happens if you hit a snare drum, and then let 
the stick rest on the surface? ;-)

What I'm saying is that if you thing about what you're actually 
trying to simulate, it becomes clear that continous controllers will 
fit practically any application.

Want positional info on drums? Think of X and Y as the "aim point", 
and just make sure you're aiming at the right spot before you kick 
the velocity control to the desired value - which, with this 
instrument, instantly triggers the sound. Setting velocity back to 0 
would correspond to NoteOff - although at least 90% of all drum 
patches will completely ignore that anyway.

Want to play the trumpet? Well, just set up the right pitch first, 
and then "stroke" the breath control as required. Whenever breath is 
non-zero, you have a note.


The point I think you're missing is that a "control change" event is 
*exactly* the same thing as a "voice start" event on the bits and 
bytes level. Both carry some data. Both will have the plugin run some 
code at the specified time. It's just a matter of how the plugin 
interprets the data - so you may decide to have the breath control 
trigger your synths internal voice on/off events by detecting 
transitions from and to 0.

It's nothing like LADSPA, where you have to *poll* control ports to 
do this kind of stuff.


//David Olofson - Programmer, Composer, Open Source Advocate

.- The Return of Audiality! --------------------------------.
| Free/Open Source Audio Engine for use in Games or Studio. |
| RT and off-line synth. Scripting. Sample accurate timing. |
`---------------------------> http://olofson.net/audiality -'
.- M A I A -------------------------------------------------.
|    The Multimedia Application Integration Architecture    |
`----------------------------> http://www.linuxdj.com/maia -'
   --- http://olofson.net --- http://www.reologica.se ---



More information about the Linux-audio-dev mailing list