Just out of curiosity, what is your AVAudioSession mode? What if you use 
internal speaker/microphone?

> On 21 Jan 2020, at 09:36, Jonatan Liljedahl <[email protected]> wrote:
> 
> 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

Attachment: smime.p7s
Description: S/MIME cryptographic signature

 _______________________________________________
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