Ich versuche CoreAudio zu verwenden, um die erwarteten Puffergrößen auf der Hardware für MacOS zu erhalten. Meine aktuelle Strategie hierfür basiert auf this technical note.kAudioDevicePropertyBufferFrameSizeRange liefert {0, 0}
Der Code wird wie folgt implementiert:
AudioObjectID DeviceAudioObjectID;
AudioObjectPropertyAddress DevicePropertyAddress;
UInt32 AudioDeviceQuerySize;
OSStatus Status;
int32 BufferSize = 0;
//Get Audio Device ID
DevicePropertyAddress.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
DevicePropertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
DevicePropertyAddress.mElement = 0;
AudioDeviceQuerySize = sizeof(AudioDeviceID);
Status = AudioObjectGetPropertyData(kAudioObjectSystemObject, &DevicePropertyAddress, 0, nullptr, &AudioDeviceQuerySize, &DeviceAudioObjectID);
DevicePropertyAddress.mSelector = kAudioDevicePropertyBufferFrameSizeRange;
DevicePropertyAddress.mScope = kAudioObjectPropertyScopeGlobal;
DevicePropertyAddress.mElement = kAudioObjectPropertyElementMaster;
AudioValueRange BufferSizeRange = { 0, 0 };
AudioDeviceQuerySize = sizeof(AudioValueRange);
Status = AudioObjectGetPropertyData(DeviceAudioObjectID, &DevicePropertyAddress, 0, nullptr, &AudioDeviceQuerySize, &BufferSizeRange);
Auf meinem aktuellen Mac (Mac Pro läuft Sierra), Der letzte Aufruf von AudioObjectGetPropertyData
hier ergibt sich BufferSizeRange
explizit auf { 0, 0 }
gesetzt wird. Der Anruf kehrt mit 0
zurück und zeigt den Erfolg an.
Wie kann ich den Bereich möglicher Puffergrößen, die von der Hardware unterstützt werden, richtig abfragen?
Erhalten Sie eine gültige 'AudioObjectID', die von Ihrem ersten' AudioObjectGetPropertyData() '- Aufruf zurückgegeben wurde? Und stimmt diese ID mit einem der Geräte überein, wenn 'system_profiler SPAudioDataType' im Terminal aufgerufen wird? Ich würde nach der Art von Standardausgabegerät suchen, das das System gerade eingestellt hat. –
Das war das Problem. AudioObjectID wurde auf dem Gerät nicht auf eine gültige ID festgelegt. Vielen Dank! – Kadinski