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

Re: Real-time category

Stefan Tiedje wrote:
 > Jeff Larson wrote:
 >> 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.
 > Not if you trigger with audio as explained. Actually the audio trigger
 > will have exactly the same delay as the audio, thus they arrive both at
 > the same time, absolutely in sync.

No, it is worse if you embed the trigger in the audio stream.  There
are three things involved here:

   1) Audio Input Latency, the amount of time it takes for audio entering
      the sound card to reach the looper

   2) MIDI Input Latency, the amount of time it takes for a MIDI event
      to reach the looper

   3) Audio Output Latency, the amount of time it takes for something
      the looper sends to the sound card to be heard

Again assuming a 256 block size example, at any moment in time,
you are receiving audio that was captured 5.8ms in the past.  If you
are embedding looper commands in the audio stream they will always
be delayed by 5.8ms.   MIDI latency is only around 2ms, so the commands
will arrive at the looper faster using MIDI.

Now after waiting 5.8ms for that command to come in you start to buffer
the sample that was triggered.  It still takes 5.8ms for this sample
to be heard by the musician so the perceived latency is 11.6ms.

Embedding the command in the audio stream works very well for
recording control commands like record, overdub, insert, multiply, etc.
because it will be exactly aligned with the audio that is to be modified,
and since we are not changing what is being played the added latency
doesn't matter.  But for triggering commands it makes the latency worse.