I'm using PlayAndRecord session mode. With internal speaker/mic I get: 256 frame buffer size - buffer duration 5.8 ms - input latency 12.15 ms - output latency 17.66 ms
And recording a metronome click via speaker -> mic and compensating for calculated round-trip latency shows an extra 8 ms delay. If I turn on MeasurementMode I get: - device input latency 0.14 ms - output latency 2.7 ms But still the same extra 8 ms unknown delay. On Tue, Jan 21, 2020 at 10:13 AM Arshia Cont <[email protected]> wrote: > > 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 > -- /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]
