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
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]
