J'essaie d'utiliser CoreAudio pour obtenir les tailles de buffer attendues sur le matériel pour MacOS. Ma stratégie actuelle pour cela est basée sur this technical note.kAudioDevicePropertyBufferFrameSizeRange renvoie {0, 0}
Le code est mis en œuvre comme suit:
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);
Sur mon Mac actuel (un Mac Pro en cours d'exécution Sierra), le dernier AudioObjectGetPropertyData
résulte ici BufferSizeRange
étant explicitement mis à { 0, 0 }
. L'appel revient avec 0
, indiquant le succès.
Comment interroger correctement la plage de tailles de tampons possibles supportées par le matériel?
Est-ce que vous obtenez un 'AudioObjectID 'valide retourné à partir de votre premier appel' AudioObjectGetPropertyData() '? Et cet identifiant correspond-il à l'un des périphériques lors de l'appel de 'system_profiler SPAudioDataType' dans le terminal? J'irais chercher le type de périphérique de sortie par défaut que le système a actuellement défini. –
C'était le problème. AudioObjectID n'a pas été défini sur un ID valide sur le périphérique. Merci! – Kadinski