J'ai fait mon application peut sélectionner la sortie audio. (comme 'système par défaut' ou 'utilisateur DAC')Comment ignorer l'évolution de la sortie audio à partir des préférences du système? (macOS)
mais lorsque l'utilisateur choisit une sortie du panneau de préférences du système - son, la sortie de mon application suit l'utilisateur de sortie sélectionné.
J'ai beaucoup cherché et j'ai ajouté un écouteur pour que je puisse changer immédiatement la sortie de mon application à l'utilisateur précédemment sélectionné si la sortie du système a été modifiée. MAIS cela fait très anonying quelques millisecondes de retard de swiching. Je suppose que c'est parce que je change la sortie de mon application après qu'elle est déjà passée à la valeur par défaut du système.
Donc, je me demande si je peux savoir AVANT que la sortie par défaut du système change. (Comme viewWillAppear api de cacao)
Merci.
L'écouteur que j'ai utilisé pour connaître la sortie audio par défaut du système provient de l'article ci-dessous.
How to get notification if System Preferences Default Sound changed
grâce
plus de détails
je AudioUnitSetProperty(audioOut, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Output, 0, &deviceID, (UInt32)sizeof(deviceID))
pour sélectionner périphérique de sortie. apple document
et ajoutez cet écouteur
func addListenerBlock(listenerBlock: @escaping AudioObjectPropertyListenerBlock, onAudioObjectID: AudioObjectID, forPropertyAddress: inout AudioObjectPropertyAddress) {
if (kAudioHardwareNoError != AudioObjectAddPropertyListenerBlock(onAudioObjectID, &forPropertyAddress, nil, listenerBlock)) {
LOG("Error calling: AudioObjectAddPropertyListenerBlock") }
}
func add() {
var propertyAddress = AudioObjectPropertyAddress(mSelector: kAudioHardwarePropertyDefaultOutputDevice,
mScope: kAudioObjectPropertyScopeGlobal,
mElement: kAudioObjectPropertyElementMaster)
self.addListenerBlock(listenerBlock: audioObjectPropertyListenerBlock,
onAudioObjectID: AudioObjectID(bitPattern: kAudioObjectSystemObject),
forPropertyAddress: &propertyAddress)
}
Vous devez expliquer quelles API vous utilisez. Comment établissez-vous les choses? Comment commutez-vous l'appareil? Etc. Ce qui se passe exactement et comment vous devrez changer les choses dépend de ce que vous faites actuellement. –
Je reçois un ID de périphérique et appelle 'AudioUnitSetProperty (audioOut, kAudioOutputUnitProperty_CurrentDevice, kAudioUnitScope_Output, 0, & deviceID, (UInt32) sizeof (deviceID))' pour sélectionner le périphérique de sortie. [referene] (https://developer.apple.com/documentation/audiotoolbox/1440371-audiounitsetproperty?language=objc) – okskpark
Comment/d'où obtenez-vous l'identifiant de l'appareil? –