Re: [linux-audio-dev] XAP: Some thoughts on control ramping

New Message Reply About this list Date view Thread view Subject view Author view Other groups

Subject: Re: [linux-audio-dev] XAP: Some thoughts on control ramping
From: David Olofson (david@olofson.net)
Date: Tue Jan 21 2003 - 06:09:34 EET


On Tuesday 21 January 2003 00.41, David Olofson wrote:
[...]
> > > So, alternative 1; RAMP events only:
[...]
> > No branch is needed,
>
> Excellent! :-)

I just realized something that might be worth pointing out.

If you send multiple RAMP events for the same control at the same
timestamp, only the last one will have any effect. This is because
RAMP events change only the delta, and it takes sample frame loops to
actually change the value.

The problem is that if you send multiple RAMP events that are so
close together they end up getting the same timestamp, results won't
be what you want.

For example, setting the initial level of an envelope and then
setting up the delay or attack phase won't work, unless you wait for
one frame before sending the RAMP event for the delay or attack
phase. Similarly, an attack duration of 0 would result in the decay
starting at the current value, instead of the attack peak level.

Note that waiting for one frame after saying "ramp to y over 0
frames" is actually illegal by the definition! You're one frame past
the aim point when the next event arrives, so results are undefined.

So, it seems like we'll need that 0 test anyway. It should obviously
apply the target value instantly, so that later events will work even
if they land at the same timestamp. It doesn't have to set the delta
at all, as sending a 0 duration means you *have* to send another
event with the same timestamp anyway.

Resulting Audiality code (how unusual! ;-):

        if(ev->arg2)
        {
                v->ic[ev->index].dv = ev->arg1 << RAMP_BITS;
                v->ic[ev->index].dv -= v->ic[ev->index].v;
                v->ic[ev->index].dv /= ev->arg2 + 1;
        }
        else
                v->ic[ev->index].v = ev->arg1 << RAMP_BITS;

//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 ---


New Message Reply About this list Date view Thread view Subject view Author view Other groups

This archive was generated by hypermail 2b28 : Tue Jan 21 2003 - 06:16:00 EET