Hi,

On Mon, Jan 20, 2020 at 9:58 PM Arshia Cont <[email protected]> wrote:
>
> Jonathan,
>
> First of all: Paul Davis is right. Both “internalLatency” and “outputLatency” 
> values from AVAudioSession are estimations and not exact. They are most 
> reliable when used without any external audio. Least reliable of course with 
> Bluetooth!

Of course. In my testing, I get an additional 3ms round-trip latency
that is not part of the calculation.

> Now:
> I was also surprised to see the ‘4’ factor instead of ‘2’! My only raw guess 
> is because my stream is stereo (which doesn’t make sense!).
>
> The formula you sent is more or less correct. It actually depends on the 
> values of ioBufferDuration and the other two latencies. Think of it this way: 
> If the outputLatency is higher than the ioBuffer it probably means that the 
> output buffer is also longer, then in a Pull system you need more of the 
> system buffers to fill out that buffer. In most real-time scheduling 
> mechanisms we introduce lags to make sure underflow or overflow doesn’t occur.

I just did a quick test here using my app AUM.

Focusrite Scarlett 6i6 connected via USB and lightning-to-USB adapter,
with loop-back cable from out to in, 44.1kHz, using two different
buffer sizes:

64 frame buffer size:
- buffer duration = 1.45 ms
- input latency = 1.02 ms
- output latency = 1.54 ms
- calculated round-trip latency (inputLatency + outputLatency + 2 *
ioBufferDuration) = 5.46 ms

256 frame buffer size:
- buffer duration = 5.80 ms
- input latency = 1.02 ms
- output latency = 1.54 ms
- calculated round-trip latency = 14.17 ms

This is also a stereo stream BTW, which I don't think is relevant. In
both cases I get about 3 ms extra latency, not part of the
calculation. I don't have a setting for buffer sizes smaller than 64
frames, so I didn't test the case where inputLatency >
ioBufferDuration.

Using `4 * ioBufferDuration` would yield a larger error in the second
case, and it would give a different error in the two cases. I still
believe 2 is the correct factor to use!

> PS: Nice Apps! ;)

Thanks! :)

/Jonatan

> On 20 Jan 2020, at 19:24, Jonatan Liljedahl <[email protected]> wrote:
>
> On Mon, Jan 20, 2020 at 6:36 PM Arshia Cont via Coreaudio-api
> <[email protected]> wrote:
>
> You get the following from AVAudioSession:
> inputLatency
> outputLatency
> ioBufferDuration
>
> Then your throughput latency, assuming a Stereo Stream, would be:  
> inputLatency + outputLatency + 4*ioBufferDuration
>
>
> I did the same, but I arrived at inputLatency + outputLatency + 2 *
> ioBufferDuration!
>
> In case inputLatency > ioBufferDuration, you add one more ioBufferDuration. 
> Same with outputLatency! This means that when lowering your ioBufferDuration, 
> your Session mode becomes important (which directly affects input and output 
> latencies). The lowest you can achieve would thus be with the Measurement 
> Mode.
>
>
> So you mean the formula would be:
>
> inputLatency + outputLatency + (inputLatency > ioBufferDuration ? 5 :
> 4) * ioBufferDuration
>
> Do you have an explanation why?
>
> --
> /Jonatan
> http://kymatica.com
>
>


-- 
/Jonatan
http://kymatica.com
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/coreaudio-api/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to