text: /*!
  	@file		AudioServices.h
  	@framework	AudioToolbox.framework
  	@copyright	(c) 2006-2015 by Apple, Inc., all rights reserved.
      @abstract   API's for general high level audio services.
  
      @discussion
  
      AudioServices provides a means to play audio for things such as UI sound effects.
      
      The Audio Hardware Service (AHS) provides a way for applications to query and manipulate the
      aspects of an audio hardware device without incurring the overhead of loading the full audio
      HAL. AHS provides access to all the AudioObjects and their properties on the system. However,
      access is limited to only those properties that do not directly impact IO. For example, you can
      query the device's format but you can't query its IO buffer size. As such, the AHS API directly
      incorporates the various structures and constants in HAL's API, with the caveat that the
      AudioObjectIDs used in AHS cannot be used with the HAL.
  */
  
  #ifndef AudioToolbox_AudioServices_h
  #define AudioToolbox_AudioServices_h
  
  //==================================================================================================
  #pragma mark    Includes
  
  #include <TargetConditionals.h>
  #include <Availability.h>
  #if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
          #include <CoreAudio/AudioHardware.h>
      #include <CoreFoundation/CoreFoundation.h>
  #else
  	#include <AudioHardware.h>
      #include <CFRunLoop.h>
      #include <CFString.h>
      #include <CFURL.h>
  #endif
  
  //==================================================================================================
  CF_ASSUME_NONNULL_BEGIN
  
  #if defined(__cplusplus)
  extern "C"
  {
  #endif
  
  //==================================================================================================
  #pragma mark    AudioServices Error Constants
  
  /*!
      @enum           AudioServices error codes
      @abstract       Error codes returned from the AudioServices portion of the API.
      @constant       kAudioServicesNoError
                          No error has occurred
      @constant       kAudioServicesUnsupportedPropertyError 
                          The property is not supported.
      @constant       kAudioServicesBadPropertySizeError 
                          The size of the property data was not correct.
      @constant       kAudioServicesBadSpecifierSizeError 
                          The size of the specifier data was not correct.
      @constant       kAudioServicesSystemSoundUnspecifiedError 
                          A SystemSound unspecified error has occurred.
      @constant       kAudioServicesSystemSoundClientTimedOutError 
                          SystemSound client message timed out
  */
  CF_ENUM(OSStatus)
  {
  	kAudioServicesNoError									=  0,
  	kAudioServicesUnsupportedPropertyError					= 'pty?',
  	kAudioServicesBadPropertySizeError						= '!siz',
  	kAudioServicesBadSpecifierSizeError 					= '!spc',
  
  	kAudioServicesSystemSoundUnspecifiedError				= -1500,
  	kAudioServicesSystemSoundClientTimedOutError			= -1501
  };
  
  //==================================================================================================
  #pragma mark    AudioServices Types
  
  /*!
      @typedef        SystemSoundID
      @abstract       SystemSoundIDs are created by the System Sound client application
                      for playback of a provided AudioFile.
  */
  typedef UInt32      SystemSoundID;
  
  /*!
      @typedef        AudioServicesPropertyID
      @abstract       Type used for specifying an AudioServices property.
  */
  typedef UInt32      AudioServicesPropertyID;
  
  /*!
      @typedef        AudioServicesSystemSoundCompletionProc
      @abstract       A function to be executed when a SystemSoundID finishes playing.
      @discussion     AudioServicesSystemSoundCompletionProc may be provided by client application to be
                      called when a SystemSoundID has completed playback.
      @param          ssID
                          The SystemSoundID that completed playback
      @param          userData
                          Client application user data
  */
  typedef void
  (*AudioServicesSystemSoundCompletionProc)(  SystemSoundID       ssID,
                                          	void* __nullable    clientData);
  
  //==================================================================================================
  #pragma mark    AudioServices Constants
  
  /*!
      @enum           AudioServices constants
      @abstract       Constants for use with System Sound portion of the AudioServices APIs.
      @constant       kSystemSoundID_UserPreferredAlert 
                          Use this constant with the play sound APIs to
                          playback the alert sound selected by the User in System Preferences.
      @constant       kSystemSoundID_FlashScreen
                          Use this constant with the play sound APIs to flash the screen
                          - Desktop systems only
  */
  CF_ENUM(SystemSoundID)
  {
      kSystemSoundID_UserPreferredAlert   = 0x00001000,
      kSystemSoundID_FlashScreen          = 0x00000FFE,
          // this has been renamed to be consistent
      kUserPreferredAlert     = kSystemSoundID_UserPreferredAlert
  };
  
  
  //==================================================================================================
  #pragma mark    AudioServices Properties
  
  /*!
      @enum           AudioServices property codes
      @abstract       These are the property codes used with the AudioServices API.
      @constant       kAudioServicesPropertyIsUISound
                          a UInt32 where 1 means that the SystemSoundID passed in the
                          inSpecifier parameter will respect the 'Play user interface sounds effects'
                          check box in System Preferences and be silent when the user turns off UI
                          sounds. This property is set to 1 by default. Set to 0 if it is desired for
                          an SystemSoundID to always be heard when passed to AudioServicesPlaySystemSound(), 
                          regardless of user's setting in the Sound Preferences.
      @constant       kAudioServicesPropertyCompletePlaybackIfAppDies 
                          a UInt32 where 1 means that the SystemSoundID passed in the
                          inSpecifier parameter will finish playing even if the client application goes away.
  */
  CF_ENUM(AudioServicesPropertyID)
  {
      kAudioServicesPropertyIsUISound                   = 'isui',
      kAudioServicesPropertyCompletePlaybackIfAppDies   = 'ifdi'
  };
  
  //==================================================================================================
  #pragma mark    AudioServices Functions
  
  /*!
      @functiongroup  AudioServices
  */
  
  /*!
      @function       AudioServicesCreateSystemSoundID
      @abstract       Allows the application to designate an audio file for playback by the System Sound server.
      @discussion     SystemSoundIDs are used passed to
                      AudioServicesPlayAlertSound() & AudioServicesPlaySystemSound(),
                      designating the audio data to be played by the System Sound server.
      @param          inFileURL
                          A CFURLRef for an AudioFile.
      @param          outSystemSoundID
                          Returns a SystemSoundID.
  */
  extern OSStatus 
  AudioServicesCreateSystemSoundID(   CFURLRef                    inFileURL,
                                      SystemSoundID*              outSystemSoundID)
                                                                  __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
  	
  /*!
      @function       AudioServicesDisposeSystemSoundID
      @abstract       Allows the System Sound server to dispose any resources needed for the provided
                      SystemSoundID.
      @discussion     Allows the application to tell the System Sound server that the resources for the
                      associated audio file are no longer required.
      @param          inSystemSoundID
                          A SystemSoundID that the application no longer needs to use.
  */
  extern OSStatus 
  AudioServicesDisposeSystemSoundID(SystemSoundID inSystemSoundID)                                    
                                                                  __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
  
  /*!
      @function       AudioServicesPlayAlertSoundWithCompletion
      @abstract       Play an alert sound
      @discussion     Play the sound designated by the provided SystemSoundID with alert sound behavior.
      @param          inSystemSoundID
                          The SystemSoundID to be played. On the desktop the kSystemSoundID_UserPreferredAlert
                          constant can be passed in to play back the alert sound selected by the user
                          in System Preferences. On iOS there is no preferred user alert sound.
      @param          inCompletionBlock
                          The completion block gets executed for every attempt to play a system sound irrespective
                          of success or failure. The callbacks are issued on a serial queue and the client is
                          responsible for handling thread safety.
  */
  extern void
  AudioServicesPlayAlertSoundWithCompletion(  SystemSoundID inSystemSoundID,
                                              void (^__nullable inCompletionBlock)(void))
                                                                      __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0);
                                                                  
  /*!
      @function       AudioServicesPlaySystemSoundWithCompletion
      @abstract       Play a system sound
      @discussion     Play the sound designated by the provided SystemSoundID.
      @param          inSystemSoundID
                          The SystemSoundID to be played.
      @param          inCompletionBlock
                          The completion block gets executed for every attempt to play a system sound irrespective 
                          of success or failure. The callbacks are issued on a serial queue and the client is 
                          responsible for handling thread safety.
  */
  extern void
  AudioServicesPlaySystemSoundWithCompletion(     SystemSoundID inSystemSoundID,
                                                  void (^__nullable inCompletionBlock)(void))
                                                                          __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0);
                                                                  
  /*!
      @function       AudioServicesGetPropertyInfo
      @abstract       Get information about the size of an AudioServices property and whether it can
                      be set.
      @param          inPropertyID
                          a AudioServicesPropertyID constant.
      @param          inSpecifierSize
                          The size of the specifier data.
      @param          inSpecifier
                          A specifier is a buffer of data used as an input argument to some of the
                          properties.
      @param          outPropertyDataSize
                          The size in bytes of the current value of the property. In order to get the
                          property value, you will need a buffer of this size.
      @param          outWritable
                          Will be set to 1 if writable, or 0 if read only.
      @result         returns kAudioServicesNoError if successful.
  */                            
  extern OSStatus 
  AudioServicesGetPropertyInfo( AudioServicesPropertyID   inPropertyID,
                                UInt32                    inSpecifierSize,
                                const void * __nullable   inSpecifier,
                                UInt32 * __nullable       outPropertyDataSize,
                                Boolean * __nullable      outWritable)
                                                                      __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
  
  /*!
      @function       AudioServicesGetProperty
      @abstract       Retrieve the indicated property data
      @param          inPropertyID
                          a AudioServicesPropertyID constant.
      @param          inSpecifierSize
                          The size of the specifier data.
      @param          inSpecifier
                          A specifier is a buffer of data used as an input argument to some of the
                          properties.
      @param          ioPropertyDataSize
                          On input, the size of the outPropertyData buffer. On output the number of
                          bytes written to the buffer.
      @param          outPropertyData
                          The buffer in which to write the property data. May be NULL if caller only
                          wants ioPropertyDataSize to be filled with the amount that would have been
                          written.
      @result         returns kAudioServicesNoError if successful.
  */                        
  extern OSStatus 
  AudioServicesGetProperty(   AudioServicesPropertyID         inPropertyID,
                              UInt32                          inSpecifierSize,
                              const void * __nullable         inSpecifier,
                              UInt32 *                        ioPropertyDataSize,
                              void * __nullable               outPropertyData)
                                                                  __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
  
  /*!
      @function       AudioServicesSetProperty
      @abstract       Set the indicated property data
      @param          inPropertyID
                          a AudioServicesPropertyID constant.
      @param          inSpecifierSize
                          The size of the specifier data.
      @param          inSpecifier
                          A specifier is a buffer of data used as an input argument to some of the
                          properties.
      @param          inPropertyDataSize
                          The size of the inPropertyData buffer.
      @param          inPropertyData
                          The buffer containing the property data.
      @result         returns kAudioServicesNoError if successful.
  */
  extern OSStatus 
  AudioServicesSetProperty(   AudioServicesPropertyID             inPropertyID,
                              UInt32                              inSpecifierSize,
                              const void * __nullable             inSpecifier,
                              UInt32                              inPropertyDataSize,
                              const void *                        inPropertyData)
                                                                  __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
                                                                  
  /*!
      This function will be deprecated in a future release. Use AudioServicesPlayAlertSoundWithCompletion instead.
   
      @function       AudioServicesPlayAlertSound
      @abstract       Play an Alert Sound
      @discussion     Play the provided SystemSoundID with AlertSound behavior.
      @param          inSystemSoundID
                          A SystemSoundID for the System Sound server to play. On the desktop you
                          can pass the kSystemSoundID_UserPreferredAlert constant to playback the alert sound 
                          selected by the user in System Preferences. On iOS there is no preferred user alert sound.
  */
  extern void 
  AudioServicesPlayAlertSound(SystemSoundID inSystemSoundID)                                          
                                                                  __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
                                                                  
  /*!
      This function will be deprecated in a future release. Use AudioServicesPlaySystemSoundWithCompletion instead.
   
      @function       AudioServicesPlaySystemSound
      @abstract       Play the sound designated by the provided SystemSoundID.
      @discussion     A SystemSoundID indicating the desired System Sound to be played.
      @param          inSystemSoundID
                          A SystemSoundID for the System Sound server to play.
  */
  extern void 
  AudioServicesPlaySystemSound(SystemSoundID inSystemSoundID)                                         
                                                                  __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
                                                                  
  /*!
      This function will be deprecated in a future release. Use AudioServicesPlayAlertSoundWithCompletion 
      or AudioServicesPlaySystemSoundWithCompletion instead.
   
      @function       AudioServicesAddSystemSoundCompletion
      @abstract       Call the provided Completion Routine when provided SystemSoundID
                      finishes playing.
      @discussion     Once set, the System Sound server will send a message to the System Sound client
                      indicating which SystemSoundID has finished playing.
      @param          inSystemSoundID
                          The SystemSoundID to associate with the provided completion
                          routine.
      @param          inRunLoop
                          A CFRunLoopRef indicating the desired run loop the completion routine should
                          be run on. Pass NULL to use the main run loop.
      @param          inRunLoopMode
                          A CFStringRef indicating the run loop mode for the runloop where the
                          completion routine will be executed. Pass NULL to use kCFRunLoopDefaultMode.
      @param          inCompletionRoutine
                          An AudioServicesSystemSoundCompletionProc to be called when the provided
                          SystemSoundID has completed playing in the server.
      @param          inClientData
                          A void* to pass client data to the completion routine.
  */
  extern OSStatus 
  AudioServicesAddSystemSoundCompletion(  SystemSoundID                                       inSystemSoundID,
                                      	CFRunLoopRef __nullable                             inRunLoop,
                                      	CFStringRef __nullable                              inRunLoopMode,
                                      	AudioServicesSystemSoundCompletionProc              inCompletionRoutine,
                                      	void * __nullable                                   inClientData)
                                                                      __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
  
  /*!
      This function will be deprecated in a future release. Use AudioServicesPlayAlertSoundWithCompletion
      or AudioServicesPlaySystemSoundWithCompletion instead.
   
      @function       AudioServicesRemoveSystemSoundCompletion
      @abstract       Disassociate any completion proc for the specified SystemSoundID
      @discussion     Tells the SystemSound client to remove any completion proc associated with the
                      provided SystemSoundID
      @param          inSystemSoundID
                          The SystemSoundID for which completion routines should be
                          removed.
  */
  extern void 
  AudioServicesRemoveSystemSoundCompletion(SystemSoundID inSystemSoundID)                             
                                                                      __OSX_AVAILABLE_STARTING(__MAC_10_5,__IPHONE_2_0);
  
  //==================================================================================================
  #pragma mark    Audio Hardware Service Properties
  
  /*!
      @enum           Audio Hardware Service Properties
      @abstract       AudioObjectPropertySelector values that apply to various kinds of AudioObjects
                      only when accessed via the Audio Hardware Service API.
      @constant       kAudioHardwareServiceProperty_ServiceRestarted
                          A Float32 whose value has no meaning. Rather, this property exists so that
                          clients can be informed when the service has been reset for some reason.
                          When a reset happens, any state the client has with AHS, such as cached data
                          or added listeners, must be re-established by the client.
      @constant       kAudioHardwareServiceDeviceProperty_VirtualMasterVolume
                          A Float32 that represents the value of the volume control. The range is
                          between 0.0 and 1.0 (inclusive). This actual volume controls this property
                          manipulates depends on what the device provides. If the device has a true
                          master volume control, this property directly controls that. If the device
                          has individual channel volume controls, this property will apply to those
                          identified by the device's preferred multi-channel layout (or preferred
                          stereo pair if the device is stereo only). Note that this control maintains
                          the relative balance between all the channels it affects.
      @constant       kAudioHardwareServiceDeviceProperty_VirtualMasterBalance
                          A Float32 that represents the value of the stereo balance control. The range
                          is from 0.0 (all power to the left) to 1.0 (all power to the right) with
                          the value of 0.5 signifying that the channels have equal power. This control
                          is only present for devices that have individual channel volume controls. It
                          manipulates the relative balance between the volume controls on the channels
                          identified as the device's default stereo pair.
  */
  CF_ENUM(AudioObjectPropertySelector)
  {
      kAudioHardwareServiceProperty_ServiceRestarted              = 'srst',
      kAudioHardwareServiceDeviceProperty_VirtualMasterVolume     = 'vmvc',
      kAudioHardwareServiceDeviceProperty_VirtualMasterBalance    = 'vmbc'
  };
  
  //==================================================================================================
  #pragma mark    Audio Hardware Service Functions
  
  /*!
      @functiongroup  Audio Hardware Service
  */
  
  /*!
      @function       AudioHardwareServiceHasProperty
      @abstract       Queries an AudioObject about whether or not it has the given property.
      @param          inObjectID
                          The AudioObject to query.
      @param          inAddress
                          An AudioObjectPropertyAddress indicating which property is being queried.
      @result         A Boolean indicating whether or not the AudioObject has the given property.
  */
  extern Boolean
  AudioHardwareServiceHasProperty(    AudioObjectID                       inObjectID,
                                      const AudioObjectPropertyAddress*   inAddress)                  
                                                              __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  /*!
      @function       AudioHardwareServiceIsPropertySettable
      @abstract       Queries an AudioObject about whether or not the given property can be set using
                      AudioHardwareServiceSetPropertyData.
      @param          inObjectID
                          The AudioObject to query.
      @param          inAddress
                          An AudioObjectPropertyAddress indicating which property is being queried.
      @param          outIsSettable
                          A Boolean indicating whether or not the property can be set.
      @result         An OSStatus indicating success or failure.
  */
  extern OSStatus
  AudioHardwareServiceIsPropertySettable( AudioObjectID                       inObjectID,
                                          const AudioObjectPropertyAddress*   inAddress,
                                          Boolean*                            outIsSettable)          
                                                              __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  /*!
      @function       AudioHardwareServiceGetPropertyDataSize
      @abstract       Queries an AudioObject to find the size of the data for the given property.
      @param          inObjectID
                          The AudioObject to query.
      @param          inAddress
                          An AudioObjectPropertyAddress indicating which property is being queried.
      @param          inQualifierDataSize
                          A UInt32 indicating the size of the buffer pointed to by inQualifierData.
                          Note that not all properties require qualification, in which case this
                          value will be 0.
      @param          inQualifierData
                          A buffer of data to be used in determining the data of the property being
                          queried. Note that not all properties require qualification, in which case
                          this value will be NULL.
      @param          outDataSize
                          A UInt32 indicating how many bytes the data for the given property occupies.
      @result         An OSStatus indicating success or failure.
  */
  extern OSStatus
  AudioHardwareServiceGetPropertyDataSize(    AudioObjectID                       inObjectID,
                                              const AudioObjectPropertyAddress*   inAddress,
                                              UInt32                              inQualifierDataSize,
                                              const void*                         inQualifierData,
                                              UInt32*                             outDataSize)        
                                                              __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  /*!
      @function       AudioHardwareServiceGetPropertyData
      @abstract       Queries an AudioObject to get the data of the given property and places it in
                      the provided buffer.
      @param          inObjectID
                          The AudioObject to query.
      @param          inAddress
                          An AudioObjectPropertyAddress indicating which property is being queried.
      @param          inQualifierDataSize
                          A UInt32 indicating the size of the buffer pointed to by inQualifierData.
                          Note that not all properties require qualification, in which case this
                          value will be 0.
      @param          inQualifierData
                          A buffer of data to be used in determining the data of the property being
                          queried. Note that not all properties require qualification, in which case
                          this value will be NULL.
      @param          ioDataSize
                          A UInt32 which on entry indicates the size of the buffer pointed to by
                          outData and on exit indicates how much of the buffer was used.
      @param          outData
                          The buffer into which the AudioObject will put the data for the given
                          property.
      @result         An OSStatus indicating success or failure.
  */
  extern OSStatus
  AudioHardwareServiceGetPropertyData(    AudioObjectID                       inObjectID,
                                          const AudioObjectPropertyAddress*   inAddress,
                                          UInt32                              inQualifierDataSize,
                                          const void*                         inQualifierData,
                                          UInt32*                             ioDataSize,
                                          void*                               outData)                
                                                          __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  /*!
      @function       AudioHardwareServiceSetPropertyData
      @abstract       Tells an AudioObject to change the value of the given property using the
                      provided data.
      @discussion     Note that the value of the property should not be considered changed until the
                      HAL has called the listeners as many properties values are changed
                      asynchronously.
      @param          inObjectID
                          The AudioObject to change.
      @param          inAddress
                          An AudioObjectPropertyAddress indicating which property is being changed.
      @param          inQualifierDataSize
                          A UInt32 indicating the size of the buffer pointed to by inQualifierData.
                          Note that not all properties require qualification, in which case this
                          value will be 0.
      @param          inQualifierData
                          A buffer of data to be used in determining the data of the property being
                          queried. Note that not all properties require qualification, in which case
                          this value will be NULL.
      @param          inDataSize
                          A UInt32 indicating the size of the buffer pointed to by inData.
      @param          inData
                          The buffer containing the data to be used to change the property's value.
      @result         An OSStatus indicating success or failure.
  */
  extern OSStatus
  AudioHardwareServiceSetPropertyData(    AudioObjectID                       inObjectID,
                                          const AudioObjectPropertyAddress*   inAddress,
                                          UInt32                              inQualifierDataSize,
                                          const void*                         inQualifierData,
                                          UInt32                              inDataSize,
                                          const void*                         inData)                 
                                                          __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  /*!
      @function       AudioHardwareServiceAddPropertyListener
      @abstract       Registers the given AudioObjectPropertyListenerProc to receive notifications
                      when the given properties change.
      @param          inObjectID
                          The AudioObject to register the listener with.
      @param          inAddress
                          The AudioObjectPropertyAddresses indicating which property the listener
                          should be notified about.
      @param          inListener
                          The AudioObjectPropertyListenerProc to call.
      @param          inClientData
                          A pointer to client data that is passed to the listener when it is called.
      @result         An OSStatus indicating success or failure.
  */
  extern OSStatus
  AudioHardwareServiceAddPropertyListener(    AudioObjectID                       inObjectID,
                                              const AudioObjectPropertyAddress*   inAddress,
                                              AudioObjectPropertyListenerProc     inListener,
                                              void*                               inClientData)       
                                                          __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  /*!
      @function       AudioHardwareServiceRemovePropertyListener
      @abstract       Unregisters the given AudioObjectPropertyListenerProc from receiving
                      notifications when the given properties change.
      @param          inObjectID
                          The AudioObject to unregister the listener from.
      @param          inAddress
                          The AudioObjectPropertyAddresses indicating which property the listener
                          will stop being notified about.
      @param          inListener
                          The AudioObjectPropertyListenerProc being removed.
      @param          inClientData
                          A pointer to client data that is passed to the listener when it is called.
      @result         An OSStatus indicating success or failure.
  */
  extern OSStatus
  AudioHardwareServiceRemovePropertyListener( AudioObjectID                       inObjectID,
                                              const AudioObjectPropertyAddress*   inAddress,
                                              AudioObjectPropertyListenerProc     inListener,
                                              void*                               inClientData)       
                                                          __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_5,__MAC_10_11, __IPHONE_NA, __IPHONE_NA);
  
  
  CF_ASSUME_NONNULL_END
      
  #ifdef __cplusplus
  }
  #endif
  
  #endif /* AudioToolbox_AudioServices_h */
  