[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Date Index][Thread Index][Author Index]

Re: Real-time category

Stefan Tiedje wrote:
 > If you want to shut up something, you'd always want to fade it out, fade
 > out is way less critical than triggering in terms of timing.

Yes, I don't think the delayed fade out is a big problem.  If the fade
happens exactly on the attack of a loud sound, you might hear a little
"bump" if you're transitioning into silence.  But if you're triggering
something it's hard to notice.  The fade can also be done very rapidly,
I find a fade range of 128 samples sounds fine, that's only about 3ms.

But the discussion has now reached the one area where I think an RTOS
has a clear advantage: triggering or any other form of unquantized
change to what is being played.  Here, output latency is critical and
an RTOS will provide lower latency than a general purpose OS.

With an ASIO buffer size of 256, the sound card behaves like a 5.8ms
delay line.  This number must be added to the MIDI latency to get the
delay between when a key is pressed and a sound is heard, around 7 to
8ms.  Many people find this acceptable, or are at least willing to
tolerate it because they have other reasons for using a PC.  For EDP
style looping this affects the following functions:

    Record Stop (begin playback of initial recording)
    Unrounded Multiply
    Replace Stop (resume playback after replace)

In a soft-synth, the sample is delayed slightly but it plays
accurately from the beginning.  But in a system that is recording and
playing at the same time, like a looper, we have another problem,
making sure that what we are playing is aligned with what we are
recording.  We must always be playing 5.8ms ahead of where the
musician thinks they are.

When a trigger command is received, we've already asked the sound card
to play the next 5.8ms of the current loop and we must let that
happen.  But now we can't start playing from the beginning of the next
loop, we have to start playing 5.8ms into the next loop or else the
recording and playback positions will be out of alignment and overdubs
will start to sound like they are in the wrong place.

This adjustment is most noticeable in Record Stop and the triggering
functions because it will cut off 256 samples of the attack and fade
in.  If the loop started with a loud percussive sound, this may alter
the attack transient enough to have an audible effect.  This only
happens the first time it is triggered though, if you let it play it
will be accurate the second time.

This is essential for Record Stop in order to support the popular "end
a record with overdub" feature.  It is arguably not as important for
triggering pre-recorded loops, but since you can always be in overdub
mode immediately after the trigger it is easier to make the adjustment
consistently everywhere.

I don't notice this effect at latencies below 512 samples and I
haven't received any complaints.  But it is one area where an RTOS can
undeniably give you better results.