2017-09-11 4 views
0

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) 
    } 
+0

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. –

+0

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

+0

Comment/d'où obtenez-vous l'identifiant de l'appareil? –

Répondre

1

kAudioUnitSubType_DefaultOutput pistes du dispositif de sortie de courant choisi par l'utilisateur dans les préférences sonores. Pour jouer sur un appareil spécifique, utilisez kAudioUnitSubType_HALOutput. Les commentaires AUComponent.h sont utiles:

@enum   Apple input/output audio unit sub types (OS X) 
@constant  kAudioUnitSubType_HALOutput   
        - desktop only 
       The audio unit that interfaces to any audio device. The user specifies which 
       audio device to track. The audio unit can do input from the device as well as 
       output to the device. Bus 0 is used for the output side, bus 1 is used 
       to get audio input from the device. 

@constant  kAudioUnitSubType_DefaultOutput  
        - desktop only 
       A specialisation of AUHAL that is used to track the user's selection of the 
       default device as set in the Sound Prefs 

@constant  kAudioUnitSubType_SystemOutput  
        - desktop only 
       A specialisation of AUHAL that is used to track the user's selection of the 
       device to use for sound effects, alerts 
       and other UI sounds. 

Vous n'avez pas spécifié comment vous configurez votre sortie (AUGraph?) De sorte que la façon d'utiliser kAudioUnitSubType_HALOutput varie.

+0

c'est exactement ce que je suis essayer de trouver!!!! Merci beaucoup sbooth XD – okskpark