Summary
FMixerPlatformCoreAudio::InitializeHardware (Engine/Source/Runtime/Apple/AudioMixerCoreAudio/Private/AudioMixerPlatformCoreAudio.cpp) logs this warning every time an audio device is created on a Mac: at editor startup, on every PIE start (PIE creates a new audio device per session), and at game startup.
LogAudioMixerAudioUnit: Warning: Error querying Sample Rate: 2003332927
2003332927 is 0x77686F3F, the four-character code ‘who?’, which is kAudioHardwareUnknownPropertyError.
Lines 86-90 ask kAudioObjectSystemObject for kAudioHardwarePropertyDefaultOutputDevice. Line 97 then passes the same DevicePropertyAddress to the device to read GraphSampleRate. mSelector is never changed to kAudioDevicePropertyNominalSampleRate, and AudioDeviceQuerySize is still sizeof(AudioDeviceID), 4 bytes, for a double. An audio device has no ‘dOut’ property, so the call fails on every Mac, whatever the hardware.
The effect is harmless: GraphSampleRate keeps its 48 kHz default, and the DefaultOutput unit resamples to the device. But every Mac log carries a warning that says nothing about the machine, and the “Sample Rate: %f” success path never runs.
Suggested fix, before line 97:
DevicePropertyAddress.mSelector = kAudioDevicePropertyNominalSampleRate;
AudioDeviceQuerySize = sizeof(GraphSampleRate);
This makes the mixer run at the device’s nominal rate (for example 44.1 or 96 kHz) instead of 48 kHz. If 48 kHz is the intended rate, deleting the query is the other fix.
What Type of Bug are you experiencing?
Audio
Steps to Reproduce
Reading the code is the shortest route (lines 86-97 above). To observe it:
- Open any project in the UE 5.8.3 editor on a Mac.
- Start PIE.
- Search the Output Log for “Error querying Sample Rate”. It appears once at editor startup and again on each PIE start.
To confirm the cause outside the engine, this standalone program makes the engine’s two calls, then the intended one (clang q.c -framework CoreAudio):
#include <CoreAudio/AudioHardware.h>
#include <stdio.h>
int main(void) {
AudioObjectID dev; double rate = 48000.0; OSStatus st;
AudioObjectPropertyAddress a = { kAudioHardwarePropertyDefaultOutputDevice, kAudioObjectPropertyScopeGlobal, 0 };
UInt32 sz = sizeof(AudioDeviceID);
AudioObjectGetPropertyData(kAudioObjectSystemObject, &a, 0, NULL, &sz, &dev);
st = AudioObjectGetPropertyData(dev, &a, 0, NULL, &sz, &rate); /* as the engine does */
printf("engine query: status %d\n", (int)st);
a.mSelector = kAudioDevicePropertyNominalSampleRate; sz = sizeof(rate);
st = AudioObjectGetPropertyData(dev, &a, 0, NULL, &sz, &rate); /* the intended query */
printf("nominal rate query: status %d, rate %.0f\n", (int)st, rate);
return 0;
}
Expected Result
No warning. The log shows “LogAudioMixerAudioUnit: Display: Sample Rate: <the device’s nominal rate>”.
Observed Result
“LogAudioMixerAudioUnit: Warning: Error querying Sample Rate: 2003332927” each time an audio device is created. The standalone program prints status 2003332927 (‘who?’) for the engine’s query, and status 0 with a rate of 48000 for kAudioDevicePropertyNominalSampleRate.
Tested on UE 5.8.3 (launcher build, CL 58210709), macOS 27.0.1, Xcode 27.1, Apple Silicon (M5 Pro).
Affects Versions
5.8
Platform(s)
Mac
Additional Notes
The same warning appears in logs posted to this forum since 2022, from UE 4.27 (Mac and iOS) through 5.0 and 5.2, with no diagnosis: LogAudioMixerAudioUnit: Warning: Error querying Sample Rate: 2003332927
The 5.8 iOS backend (AudioMixerAudioUnit) reads the rate from AVAudioSession and does not have this bug.
Workaround for a clean log until it is fixed: [Core.Log] LogAudioMixerAudioUnit=Error in DefaultEngine.ini. That also hides the backend’s other lines.
Related, in the same function: if the default-output-device query at line 90 fails, the code logs a warning and carries on with DeviceAudioObjectID uninitialized. It is then used at line 97 and again to set the buffer size at line 172.