Re: CoreAudio: Calculate total latency between input and output with kAudioUnitSubType_VoiceProcessingIO
Re: CoreAudio: Calculate total latency between input and output with kAudioUnitSubType_VoiceProcessingIO
- Subject: Re: CoreAudio: Calculate total latency between input and output with kAudioUnitSubType_VoiceProcessingIO
- From: Arshia Cont via Coreaudio-api <email@hidden>
- Date: Tue, 21 Jan 2020 10:13:04 +0100
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@hidden> wrote:
>
> Hi,
>
> On Mon, Jan 20, 2020 at 9:58 PM Arshia Cont <email@hidden> 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@hidden> wrote:
>>
>> On Mon, Jan 20, 2020 at 6:36 PM Arshia Cont via Coreaudio-api
>> <email@hidden> 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@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden