1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

CoreAudio: Include buffer size and stream latency when calculating CoreAudio device's total latency

This commit is contained in:
hogliux 2022-10-06 15:45:36 +02:00
parent 9a62775809
commit a8a0342745

View file

@ -915,15 +915,28 @@ public:
{
const auto scope = getScope (isInput);
const auto latency = audioObjectGetProperty<UInt32> (parent.deviceID, { kAudioDevicePropertyLatency,
scope,
juceAudioObjectPropertyElementMain }).value_or (0);
const auto deviceLatency = audioObjectGetProperty<UInt32> (parent.deviceID, { kAudioDevicePropertyLatency,
scope,
juceAudioObjectPropertyElementMain }).value_or (0);
const auto safetyOffset = audioObjectGetProperty<UInt32> (parent.deviceID, { kAudioDevicePropertySafetyOffset,
scope,
juceAudioObjectPropertyElementMain }).value_or (0);
const auto safetyOffset = audioObjectGetProperty<UInt32> (parent.deviceID, { kAudioDevicePropertySafetyOffset,
scope,
juceAudioObjectPropertyElementMain }).value_or (0);
return static_cast<int> (latency + safetyOffset);
const auto framesInBuffer = audioObjectGetProperty<UInt32> (parent.deviceID, { kAudioDevicePropertyBufferFrameSize,
kAudioObjectPropertyScopeWildcard,
juceAudioObjectPropertyElementMain }).value_or (0);
UInt32 streamLatency = 0;
if (auto streams = audioObjectGetProperties<AudioStreamID> (parent.deviceID, { kAudioDevicePropertyStreams,
scope,
juceAudioObjectPropertyElementMain }); ! streams.empty())
streamLatency = audioObjectGetProperty<UInt32> (streams.front(), { kAudioStreamPropertyLatency,
scope,
juceAudioObjectPropertyElementMain }).value_or (0);
return static_cast<int> (deviceLatency + safetyOffset + framesInBuffer + streamLatency);
}
//==============================================================================