Browse Source

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

v7.0.9
hogliux 2 years ago
parent
commit
a8a0342745
1 changed files with 20 additions and 7 deletions
  1. +20
    -7
      modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp

+ 20
- 7
modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp 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);
}
//==============================================================================


Loading…
Cancel
Save