On Tuesday 07 January 2003 10.19, Steve Harris wrote:
On Tue, Jan 07, 2003 at 03:21:22 +0100, David Olofson
wrote:
> > Problem is step 1. If the voice
allocator looks at velocity,
> > it won't work, since that information is not available when
> > you do the allocation. Likewise for setting up waveforms with
> > velocity maps and the like.
But in the general case this is just mapping to parameters, you
have to be able to handle parameter changes during the run of the
instrument, so why not at creation time too?
[...]
Yeah, byt you may not want control values to be latched except when a
note is actually triggered (be it explicitly, or as a result of a
contro change). Also, this voice.set_voice_map() may have significant
cost, and it seems like a bad idea to have the API practically
enforce that such things are done twice for every note.
> > When
are you supposed to do that sort of stuff? VOICE_ON is
> > what triggers it in a normal synth, but with this scheme, you
> > have to wait for some vaguely defined "all parameters
> > available" point.
>
> So maybe VOICE creation needs to be a three-step process.
> * Allocate voice
> * Set initial voice-controls
> * Voice on
I think this is harder to handle.
Why?
This is essentially saying that initial parameters
are
'special', and they are in many-ways (I'm sure velocity maps
are just one case).
Yes; there can be a whole lot of such parameters for percussion
instruments, for example. (Drums, cymbals, marimba etc...)
I still dont think there special. Velicty maps only behave this way
in midi because you cant change velovity during the note in midi,
you still need to be able to call up the map instantly, so it
doesn't matter if you dont know the map at the point the note is
'created'.
It's just that there's a *big* difference between latching control
values when starting a note and being able to "morph" while the note
is played... I think it makes a lot of sense to allow synths to do it
either way.
Or we can make the rule that you do not choose an
entry in a
velocity map until you start PROCESSING a voice, not when you
create it. VOICE_ON is a placeholder. The plugin should see
that a voice is on that has no velocity-map entry and deal with
it whn processing starts. Maybe not.
No, I think that's just moving the problem deeper into synth
implementations.
Why? You can create it with the map for velocity=0.0 or whatever,
and change it if needed. This seems like it will lead to cleaner
instrument code.
Cleaner, maybe, but slower and more importantly, incorrect.
Bad Things(TM) will happen if you happen to play a "note-on latched
velocity" synth with data that was recorded from a continous velocity
controller, for example. What are you supposed to do with the
sequenced data (or real time input, for that matter!) to have correct
playback? I don't like the idea of having two different *types* of
controls (continous and "event latched") for everything, just to deal
with this.
//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 ---