[linux-audio-dev] Catching up with XAP

David Olofson david at olofson.net
Wed Jan 15 13:40:01 UTC 2003


On Wednesday 15 January 2003 18.10, Steve Harris wrote:
> On Wed, Jan 15, 2003 at 03:43:52 +0100, David Olofson wrote:
> > Another observation:
> >
> > There are two ways you could start notes on a monophonic synth:
> > 	1. Use the same VVID for all notes
> > 	2. Use a new VVID for each note.
>
> I dont think that a (typical) monosynth should have or use VVIDs at
> all.

No, and it doesn't have to. It can still respond to VVID allocation 
events by just assuming they're about this single, physically 
non-existent, fake VVID. All you need to know is when the sender 
wants you to start a new context, and that's what the VVID allocation 
event tells you.


> However I do now see your paino example, if we can implement this
> cleanly its a natural way for the gong example to work too.

Can't see any real issues with it so far. You basically just have 
each voice of a poly synth act as a mono synth.

The closest thing to an issue is that you need to implement *some* 
form of "continue" feature for the synth to do something sensible 
when a sender uses this feature. This could actually just be a 
recommendation to synth authours, but I think it should be easy 
enough to do something sensible in practically any synth.

The nice way for a sampler or similar to handle it would be to set 
the current voice to a quick declick release, while grabbing a new 
voice for the new note. The old voice will be released as soon 
as the declick envelope has finished. Obviously, you can implement 
that as part of each voice or something like that as well. Point is 
that reusing a VVID effectively makes the context steal it's own 
voice. *How* this is done is an implementation issue - but "nice" 
voice stealing is something every serious synth must have anyway. 
(This even goes for some kinds of mono synths.)

If you're *real* lazy, you can just treat new notes while the voice 
is playing by restarting the envelopes. Given that you handle pitch 
in the usual way (ie as continous pitch - like MIDI pitch + pitch 
bend, basically), you get primitive legato when reusing VVIDs. Pretty 
much a free bonus feature.

A virtual analog synth would just retrig envelopes and stuff, but 
(depending on the patch) perhaps not reset the oscillator phase. 
(Rather similar to the "free legato", that is.) Entirely 
implementation and patch dependent, though - this is just an example. 

Glisando and similar pitch effects would be handled in similar ways.

The common logic here is that the current state of the context 
effectively becomes parameters for the new note - and this applies to 
both mono and poly synths.


//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 -'
   --- http://olofson.net --- http://www.reologica.se ---



More information about the Linux-audio-dev mailing list