Skip to content

PHASE macOS xcode13.0 beta1

Manuel de la Pena edited this page Jul 12, 2021 · 3 revisions

#PHASE.framework https://github.com/xamarin/xamarin-macios/pull/12098

diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h	2021-06-01 20:41:07.000000000 -0400
@@ -0,0 +1,29 @@
+//
+//  PHASE.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#import <PHASE/PHASEAssetRegistry.h>
+#import <PHASE/PHASEDefinition.h>
+#import <PHASE/PHASEDirectivityModel.h>
+#import <PHASE/PHASEDistanceModel.h>
+#import <PHASE/PHASEDucker.h>
+#import <PHASE/PHASEEngine.h>
+#import <PHASE/PHASEEnvelope.h>
+#import <PHASE/PHASEGroup.h>
+#import <PHASE/PHASEGroupPreset.h>
+#import <PHASE/PHASEListener.h>
+#import <PHASE/PHASEMaterial.h>
+#import <PHASE/PHASEMedium.h>
+#import <PHASE/PHASEMetaParameter.h>
+#import <PHASE/PHASEMixer.h>
+#import <PHASE/PHASEObject.h>
+#import <PHASE/PHASEOccluder.h>
+#import <PHASE/PHASEShape.h>
+#import <PHASE/PHASESoundEvent.h>
+#import <PHASE/PHASESoundEventNodes.h>
+#import <PHASE/PHASESource.h>
+#import <PHASE/PHASESpatialPipeline.h>
+#import <PHASE/PHASETypes.h>
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h	2021-06-02 12:48:07.000000000 -0400
@@ -0,0 +1,218 @@
+//
+//  PHASEAssetRegistry.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEAssetRegistry_h
+#define PHASEAssetRegistry_h
+
+#import <CoreAudioTypes/CoreAudioTypes.h>
+#import <AVFoundation/AVAudioFormat.h>
+#import <PHASE/PHASESoundEventNodes.h>
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PHASEMetaParameter;
+
+#pragma mark - PHASEAsset
+
+/****************************************************************************************************/
+/*! @interface PHASEAsset
+ *  @abstract A base object that represents a registered asset in the PHASEAssetRegistry
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEAsset : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property identifier
+    @abstract The identifier that describes this unqiue asset
+*/
+@property(readonly) NSString* identifier;
+
+@end
+
+#pragma mark - PHASESoundAsset
+
+/****************************************************************************************************/
+/*! @interface PHASESoundAsset
+ *  @abstract An object that represents a registered sound asset in the PHASEAssetRegistry
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESoundAsset : PHASEAsset
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property url
+    @abstract The URL of this asset, if applicable.
+*/
+@property(readonly, nullable) NSURL* url;
+
+/*! @property data
+    @abstract The buffer for this asset, if applicable.
+*/
+@property(readonly, nullable) NSData* data;
+
+/*! @property type
+    @abstract The asset type.
+*/
+@property(readonly) PHASEAssetType type;
+
+@end
+
+#pragma mark - PHASESoundEventNodeAsset
+
+/****************************************************************************************************/
+/*! @interface PHASESoundEventNodeAsset
+ *  @abstract An object that represents a registered tree of SoundEvent nodes in the PHASEAssetRegistry
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESoundEventNodeAsset : PHASEAsset
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+#pragma mark - PHASEGlobalMetaParameterAsset
+
+/****************************************************************************************************/
+/*! @interface PHASEGlobalMetaParameterAsset
+ *  @abstract An object that represents a registered global metaparameter asset in the PHASEAssetRegistry
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEGlobalMetaParameterAsset : PHASEAsset
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+#pragma mark - PHASEAssetRegistry
+
+/****************************************************************************************************/
+/*! @class PHASEAssetRegistry
+    @abstract A Registry for assets
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEAssetRegistry : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method registerGlobalMetaParameter:error
+    @abstract Loads and registers a Data Bundle from a JSON file at a given URL
+    @param metaParameterDefinition
+        The PHASEMetaParameterDefinition object to register
+    @param error
+        The error object in case of an error
+    @return
+        A PHASEGlobalMetaParameterAsset object
+*/
+- (nullable PHASEGlobalMetaParameterAsset*)registerGlobalMetaParameter:(PHASEMetaParameterDefinition*)metaParameterDefinition
+                                                              error:(NSError**)error;
+
+
+/*! @method registerSoundEventAssetWithRootNode:identifier:error
+    @abstract Registers a sound event node tree with the registry for quick and efficient recall for repeated playback
+    @param rootNode
+        The PHASESoundEventNodeDefinition root node of a tree to register
+    @param identifier
+        Optional.  The identifier to assign to this object.  Nil generates an automatic identifier.
+    @param error
+        The error object in case of an error
+    @return
+        A PHASESoundEventNodeAsset object
+*/
+- (nullable PHASESoundEventNodeAsset*)registerSoundEventAssetWithRootNode:(PHASESoundEventNodeDefinition*)rootNode
+                                                               identifier:(nullable NSString*)identifier
+                                                                    error:(NSError**)error
+NS_SWIFT_NAME(registerSoundEventAsset(rootNode:identifier:));
+
+/*! @method registerSoundAssetAtURL:identifier:assetType:channelLayout:normalizationMode:error
+    @abstract Registers a sound file as an asset in the system.
+    @param url
+        The URL of this asset file.
+    @param identifier
+        The identifier to assign to this asset. Nil generates an automatic identifier.
+    @param assetType
+        The PHASEAssetType for this asset.
+    @param channelLayout
+        The audio channel layout for this asset.
+        If a valid channel layout definition is read from the file being registered, this will override it.
+        If nil is passed as a value for this property, the file must either be mono or stereo, or already contain a vaild channel layout
+   definition. This channel layout must have the same channel count as the file being loaded.
+    @param normalizationMode
+        The normalization mode.
+    @param error
+        The error object in case of an error
+    @return
+        A PHASESoundAsset object
+*/
+- (nullable PHASESoundAsset*)registerSoundAssetAtURL:(NSURL*)url
+                                          identifier:(nullable NSString*)identifier
+                                           assetType:(PHASEAssetType)assetType
+                                       channelLayout:(nullable AVAudioChannelLayout*)channelLayout
+                                   normalizationMode:(PHASENormalizationMode)normalizationMode
+                                               error:(NSError**)error
+NS_SWIFT_NAME(registerSoundAsset(url:identifier:assetType:channelLayout:normalizationMode:));
+
+/*! @method registerSoundAssetWithData:identifier:format:normalizationMode:error
+    @abstract Registers a data buffer as an asset in the system.
+    @param data
+        A buffer containing the audio data to register as an asset. Audio data must either bea single interleaved PCM buffer or
+        de-interleaved PCM buffers packed back to back.
+    @param identifier
+        The PHASEUID to assign to this asset. Nil generates an automatic identifier.
+    @param format
+        The AVAudioFormat object that describes the audio data in the buffer.
+    @param normalizationMode
+        The normalization mode.
+    @param error
+        The error object in case of an error.
+    @return
+        A PHASESoundAsset object.
+*/
+- (nullable PHASESoundAsset*)registerSoundAssetWithData:(NSData*)data
+                                             identifier:(nullable NSString*)identifier
+                                                 format:(AVAudioFormat*)format
+                                      normalizationMode:(PHASENormalizationMode)normalizationMode
+                                                  error:(NSError**)error
+NS_SWIFT_NAME(registerSoundAsset(data:identifier:format:normalizationMode:));
+
+
+/*! @method unregisterAssetWithIdentifier
+    @abstract Unregisters and unloads an asset if applicable
+    @param identifier
+        The identifier of the PHASEAsset object to unregister
+    @param completionHandler
+        An optional completion handler that will be called when the asset has been deregistered and it is safe to deallocate external
+   resources, if there are any
+*/
+- (void)unregisterAssetWithIdentifier:(NSString*)identifier completionHandler:(nullable void (^)(PHASEAssetUnregisterHandlerReason reason, NSError* error))completionHandler
+NS_SWIFT_NAME(unregisterAsset(identifier:completionHandler:));
+
+/*! @method assetForIdentifier
+    @abstract Looks up and returns a PHASEAsset object if found in the registry
+    @param identifier
+        The identifier of this asset
+    @return
+        A PHASEAsset object
+*/
+- (nullable PHASEAsset*)assetForIdentifier:(NSString*)identifier;
+
+/*! @property globalMetaParameters
+    @abstract A dictionary of global metaparameters
+*/
+@property(atomic, readonly, copy) NSDictionary<NSString*, PHASEMetaParameter*>* globalMetaParameters;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEAssetRegistry_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h	2021-06-02 11:07:59.000000000 -0400
@@ -0,0 +1,31 @@
+//
+//  PHASEDefinition.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEDefinition_h
+#define PHASEDefinition_h
+
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @interface PHASEDefinition
+ *  @abstract A base object that represents a definition object for building playable object in PHASE
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEDefinition : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@property(readonly, nonatomic) NSString* identifier;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDefinition_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h	2021-06-02 12:45:09.000000000 -0400
@@ -0,0 +1,145 @@
+//
+//  PHASEDirectivityModel.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEDirectivityModel_h
+#define PHASEDirectivityModel_h
+
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASECardioidDirectivityModelSubbandParameters
+
+/****************************************************************************************************/
+/*! @interface PHASECardioidDirectivityModelSubbandParameters
+ *  @abstract Cardioid directivity model subband parameters.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASECardioidDirectivityModelSubbandParameters : NSObject
+
+- (instancetype)init;
+
+/*! @property frequency
+    @abstract The frequency, in hertz.
+    @note Values are clamped to the range [20.0, 20000.0]. Default value is 1000.0.
+*/
+@property(nonatomic) double frequency;
+
+/*! @property pattern
+    @abstract The directivity pattern.
+    @note Values are clamped to the range [0.0, 1.0]. Default value is 0.0. 0.0 is omnidirectional. 0.5 is cardioid. 1.0 is dipole.
+*/
+@property(nonatomic) double pattern;
+
+/*! @property sharpness
+    @abstract The sharpness of the directivity pattern.
+    @note Values are clamped to the range [1.0, DBL_MAX]. Default value is 1.0. Values > 1.0 increase sharpness.
+*/
+@property(nonatomic) double sharpness;
+
+@end
+
+#pragma mark - PHASEConeDirectivityModelSubbandParameters
+
+/****************************************************************************************************/
+/*! @interface PHASEConeDirectivityModelSubbandParameters
+ *  @abstract Cone directivity model subband parameters.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEConeDirectivityModelSubbandParameters : NSObject
+
+- (instancetype)init;
+
+/*! @method setInnerAngle:outerAngle
+    @abstract Set the innerAngle and outerAngle of the Cone Directivity Model Subband
+    @param innerAngle
+        The inner angle of the cone directivity model, must be less than or equal to outer angle.
+    @param outerAngle
+        The outer angle of the cone directivity model, must be greater than or equal to inner angle.
+    @note Default value for each angle is 360.0. outerAngle must be >= innerAngle
+*/
+- (void)setInnerAngle:(double)innerAngle outerAngle:(double)outerAngle;
+
+/*! @property frequency
+    @abstract The frequency, in hertz.
+    @note Default value is 1000.0.
+*/
+@property(nonatomic) double frequency;
+
+/*! @property innerAngle
+    @abstract The inner angle, in degrees.
+    @note Default value is 360.0.
+*/
+@property(readonly) double innerAngle;
+
+/*! @property outerAngle
+    @abstract The outer angle, in degrees.
+    @note Default value is 360.0.
+*/
+@property(readonly) double outerAngle;
+
+/*! @property outerGain
+    @abstract The outer gain.
+    @note Values are clamped to the range [0.0, 1.0]. Default value is 1.0.
+*/
+@property(nonatomic) double outerGain;
+
+@end
+
+#pragma mark - PHASEDirectivityModelParameters
+
+/****************************************************************************************************/
+/*! @class PHASEDirectivityModelParameters
+    @abstract Directivity model parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEDirectivityModelParameters : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+#pragma mark - PHASECardioidDirectivityModelParameters
+
+/****************************************************************************************************/
+/*! @class PHASECardioidDirectivityModelParameters
+    @abstract Cardioid directivity model parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASECardioidDirectivityModelParameters : PHASEDirectivityModelParameters
+
+- (instancetype)init;
+
+/*! @property subbands
+    @abstract A mutable array of PHASECardioidDirectivityModelSubbandParameters.
+*/
+@property(nonatomic, strong, readonly) NSMutableArray<PHASECardioidDirectivityModelSubbandParameters*>* subbands;
+
+@end
+
+#pragma mark - PHASEConeDirectivityModelParameters
+
+/****************************************************************************************************/
+/*! @class PHASEConeDirectivityModelParameters
+    @abstract Cone directivity model parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEConeDirectivityModelParameters : PHASEDirectivityModelParameters
+
+- (instancetype)init;
+
+/*! @property subbands
+    @abstract A mutable array of PHASEConeDirectivityModelSubbandParameters.
+*/
+@property(nonatomic, strong, readonly) NSMutableArray<PHASEConeDirectivityModelSubbandParameters*>* subbands;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDirectivityModel_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h	2021-06-02 11:07:58.000000000 -0400
@@ -0,0 +1,112 @@
+//
+//  PHASEDistanceModel.h
+//  PHASE
+//
+//  Copyright © 2020 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEDistanceModel_h
+#define PHASEDistanceModel_h
+
+#import <PHASE/PHASETypes.h>
+#import <PHASE/PHASEEnvelope.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEDistanceModelFadeOutParameters
+    @abstract Distance model fade out parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(10.15), ios(14.0), tvos(15.0)) API_UNAVAILABLE(watchos)
+@interface PHASEDistanceModelFadeOutParameters : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithCullDistance
+    @abstract Initialize a PHASEDistanceModelFadeOutParameters with a cullDistance.
+    @param cullDistance
+        The distance beyond which the sound will be culled. Values must be >= 1.
+    @note
+        The cullDistance is scaled by unitsPerMeter internally, so can be provided at the client's native spatial scale.
+        The system will smoothly fade the sound to zero before reaching this distance to avoid any audible artifacts.
+    @return
+    self
+*/
+- (instancetype)initWithCullDistance:(double)cullDistance NS_DESIGNATED_INITIALIZER;
+
+/*! @property cullDistance
+    @abstract The distance (scaled by unitsPerMeter) between the source and listener for a sound to be heard.  Sounds outside this distance will be culled.
+    @note Values are clamped the range [0, DBL_MAX].
+*/
+@property(nonatomic,readonly) double cullDistance;
+
+@end
+
+/****************************************************************************************************/
+/*! @class PHASEDistanceModelParameters
+    @abstract Distance model parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(10.15), ios(14.0), tvos(15.0)) API_UNAVAILABLE(watchos)
+@interface PHASEDistanceModelParameters : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property fadeOutParameters
+    @abstract Fade out parameters (optional).
+*/
+@property(nullable, nonatomic, strong) PHASEDistanceModelFadeOutParameters* fadeOutParameters;
+
+@end
+
+/****************************************************************************************************/
+/*! @class PHASEGeometricSpreadingDistanceModelParameters
+    @abstract Geometric spreading distance model parameters.
+    @discussion Standard geometric spreading loss as a function of geometry and distance.
+*/
+OS_EXPORT API_AVAILABLE(macos(10.15), ios(14.0), tvos(15.0)) API_UNAVAILABLE(watchos)
+@interface PHASEGeometricSpreadingDistanceModelParameters : PHASEDistanceModelParameters
+
+- (instancetype)init;
+
+/*! @property rolloffFactor
+    @abstract The rolloff factor.
+    @note Values are clamped to the range [0.0, DBL_MAX]. Default value is 1.0. 0.0 is no effect. 0.5 is half the effect. 1.0 is normal. 2.0
+   is double the effect.
+*/
+@property(nonatomic) double rolloffFactor;
+
+@end
+
+/****************************************************************************************************/
+/*! @class PHASEEnvelopeDistanceModelParameters
+    @abstract Envelope distance model parameters.
+    @discussion Envelope-driven attenuation over distance.
+*/
+OS_EXPORT API_AVAILABLE(macos(10.15), ios(14.0), tvos(15.0)) API_UNAVAILABLE(watchos)
+@interface PHASEEnvelopeDistanceModelParameters : PHASEDistanceModelParameters
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEnvelope
+    @abstract Initialize a PHASEEnvelopeDistanceModelParameters with a PHASEEnvelope
+    @param envelope
+        An envelope object where x points are interpreted as distance and y points interpreted as gain.
+    @return
+    self
+*/
+- (instancetype)initWithEnvelope:(PHASEEnvelope*)envelope NS_DESIGNATED_INITIALIZER;
+
+/*! @property envelope
+    @abstract A PHASEEnvelope object
+    @note X parameter of the Envelope is interpreted as distance, while Y parameter is interpreted as gain
+*/
+@property(nonatomic, strong, readonly) PHASEEnvelope* envelope;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDistanceModel_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h	2021-06-02 12:48:07.000000000 -0400
@@ -0,0 +1,116 @@
+//
+//  PHASEDucker.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEDucker_h
+#define PHASEDucker_h
+
+#import <PHASE/PHASETypes.h>
+#import <PHASE/PHASEGroup.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEDucker
+    @abstract A PHASEDucker is used to describe the ducking behavior across different groups.
+    @discussion ..
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEDucker : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithSourceGroups:targetGroups:attenuation:attackTime:releaseTime:
+    @abstract
+        Whenever a sound from any source group plays, all the sounds in the target groups will be
+        ducked by the given gain using the given attack and release times.
+    @param engine
+        The PHASEEngine object to register this ducker with.
+    @param sourceGroups
+        The sounds determining the ducking behavior for target sounds.
+    @param targetGroups
+        The sounds which will be ducked when a sound from any source group plays.
+    @param gain
+        The linear gain scalar amount to apply when the ducker is engaged. A value of 0 means full attenuation, and 1 is no attenuation. Values are clamped to the range [0, 1].
+    @param attackTime
+        The time for the attenuation gain to ramp into effect. This value is scaled by unitsPerSecond internally, so can be provided at the
+   client's native time scale.
+    @param releaseTime
+        The time for the ducked sounds to ramp back to their original level. This value is scaled by unitsPerSecond internally, so can be
+   provided at the client's native time scale.
+    @param attackCurve
+        The curve function to use during the attack phase of gain reduction.
+    @param releaseCurve
+        The curve function to use during the release phase of gain reduction.
+    @discussion
+        The ducker will be inactive after init, and must be activated via the "active" property.
+        The ducker must also be deactivated with the property before it will be released from memory.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine
+                  sourceGroups:(NSSet<PHASEGroup*>*)sourceGroups
+                  targetGroups:(NSSet<PHASEGroup*>*)targetGroups
+                          gain:(double)gain
+                    attackTime:(double)attackTime
+                   releaseTime:(double)releaseTime
+                   attackCurve:(PHASECurveType)attackCurve
+                  releaseCurve:(PHASECurveType)releaseCurve
+NS_SWIFT_NAME(init(engine:sourceGroups:targetGroups:gain:attackTime:releaseTime:attackCurve:releaseCurve:));
+
+
+/*! @property sourceGroups
+    @abstract The sounds determining the ducking behavior for target sounds.
+*/
+@property(nonatomic, readonly, copy) NSSet<PHASEGroup*>* sourceGroups;
+
+/*! @property targetGroups
+    @abstract The sounds which will be ducked when a sound from any source group plays.
+*/
+@property(nonatomic, readonly, copy) NSSet<PHASEGroup*>* targetGroups;
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic, readonly) double gain;
+
+/*! @property attackTime
+    @abstract The time for the attenuation gain to ramp into effect.
+    @note     The attack time is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+@property(nonatomic, readonly) double attackTime;
+
+/*! @property releaseTime
+    @abstract The time for the ducked sounds to ramp back to their original level.
+    @note     The release time is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+@property(nonatomic, readonly) double releaseTime;
+
+/*! @property attackCurve
+    @abstract The unique identifier for this object
+*/
+@property(nonatomic, readonly) PHASECurveType attackCurve;
+
+/*! @property releaseCurve
+    @abstract The curve function to use during the attack phase of gain reduction.
+*/
+@property(nonatomic, readonly) PHASECurveType releaseCurve;
+
+/*! @property identifier
+    @abstract The identifier representing this ducker.
+*/
+@property(nonatomic, readonly) NSString* identifier;
+
+/*! @property active;
+    @abstract Activates and deactivates the ducker
+*/
+@property(nonatomic, readwrite, getter=isActive) BOOL active;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDucker_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h	2021-06-02 12:48:07.000000000 -0400
@@ -0,0 +1,150 @@
+//
+//  PHASEEngine.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+
+#import <PHASE/PHASESoundEventNodes.h>
+#import <PHASE/PHASEAssetRegistry.h>
+#import <PHASE/PHASEDucker.h>
+#import <PHASE/PHASEGroupPreset.h>
+#import <PHASE/PHASEMedium.h>
+#import <PHASE/PHASEObject.h>
+#import <PHASE/PHASESoundEvent.h>
+#import <PHASE/PHASETypes.h>
+#import <AVFoundation/AVAudioFormat.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+/****************************************************************************************************/
+/*! @class PHASEEngine
+    @abstract A PHASEEngine spatializes sounds attached to sources for a listener in a global world.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEEngine : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithUpdateMode:
+    @abstract Initialize a new engine.
+    @param updateMode
+        Defines how PHASE will be updated
+*/
+- (instancetype)initWithUpdateMode:(PHASEUpdateMode)updateMode NS_DESIGNATED_INITIALIZER;
+
+/*! @method startAndReturnError:
+    @abstract Start or resume the engine.
+    @return
+        YES for success
+*/
+- (BOOL)startAndReturnError:(NSError**)error;
+
+/*! @method pause
+    @abstract Pause the engine.
+*/
+- (void)pause;
+
+/*! @method stop
+    @abstract Stop the engine.
+*/
+- (void)stop;
+
+/*! @method update:
+    @abstract Manually update PHASE's systems on the calling thread
+    @discussion
+        This will kick off all of the API commands called since the last call to update,
+        as well as update any systems and objects that need to be kept current.
+*/
+- (void)update;
+
+/*! @property overrideOutputSpatializationMode
+    @abstract When set to a value other than PHASESpatializationModeAutomatic, overrides the default output spatializer and uses the
+   specified one instead
+    @discussion
+        PHASE will enable Binaural, Channel-Based, or other spatializer modes based on active device and peripheral types.
+        This will override this behavior and explicitly select a spatializer mode.
+*/
+@property(nonatomic, assign) PHASESpatializationMode overrideOutputSpatializationMode;
+
+/*! @property renderingState
+    @abstract Engine's current rendering state
+*/
+@property(nonatomic, readonly) PHASERenderingState renderingState;
+
+/*! @property rootObject
+    @abstract The root object of the engine
+    @discussion
+        This object is created and owned by the engine.
+        The rootObject may not be set as the child of another object. This will cause an error to be thrown.
+        The transform of the rootObject may not be changed. This will cause an error to be thrown.
+        The rootObject may not be copied. This will cause an error to be thrown.
+ */
+@property(nonatomic, readonly, strong) PHASEObject* rootObject;
+
+/*! @property defaultMedium
+    @abstract The medium for all objects in the engine that are not within an enclosing environment.
+*/
+@property(nonatomic, strong) PHASEMedium* defaultMedium;
+
+/*! @property defaultReverbPreset
+    @abstract The default reverb preset on the engine.
+    @discussion
+        The reverb preset for all objects in the engine that are not within an enclosing environment.
+        Default is PHASEReverbPresetNone.
+*/
+@property(nonatomic, assign) PHASEReverbPreset defaultReverbPreset;
+
+/*! @property unitsPerSecond
+    @abstract The number of units in a second.
+    @discussion
+        The unitsPerSecond is used internally to scale time/duration values passed to the API.
+        This allows clients to pass time/duration values in their own native time scale.
+    @note Values are clamped to the range [0, inf]. Default value is 1.
+*/
+@property(nonatomic, assign) double unitsPerSecond;
+
+/*! @property unitsPerMeter
+    @abstract The number of units in a meter.
+    @discussion
+        The unitsPerMeter is used internally to scale metric values passed to the API.
+        This allows clients to pass metric values in their own native scale.
+    @note Values are clamped to the range [0, inf]. Default value is 1.
+*/
+@property(nonatomic, assign) double unitsPerMeter;
+
+/*! @property assetRegistry
+    @abstract A registry for assets available to the engine
+*/
+@property(nonatomic, readonly, strong) PHASEAssetRegistry* assetRegistry;
+
+/*! @property activeSoundEvents
+    @abstract An array of the active sound event objects in the system
+    @discussion Returns a dictionary of the sound events at the time it is retrieved. This includes all sound events that are registered with the engine, including those that are preparing, playing, paused or stopping.
+*/
+@property(nonatomic, readonly, copy) NSArray<PHASESoundEvent*>* soundEvents;
+
+/*! @property groups
+    @abstract A dictionary of the groups in the system
+    @discussion Returns a dictionary of the groups at the time it is retrieved.
+*/
+@property(readonly, copy) NSDictionary<NSString*, PHASEGroup*>* groups;
+
+/*! @property duckers
+    @abstract An array of the ducker objects in the system
+    @discussion Returns a dictionary of the ducker objects at the time it is retrieved.
+*/
+@property(nonatomic, readonly, copy) NSArray<PHASEDucker*>* duckers;
+
+/*! @property activeGroupPreset
+    @abstract The active group mixer preset in the system
+    @discussion Returns nil if there are no active group presets in the engine. Activate or Deactivate the preset via [PHASEGroupPreset activate] and [PHASEGroupPreset deactivate]
+*/
+@property(nonatomic, readonly, strong, nullable) PHASEGroupPreset* activeGroupPreset;
+
+@end  // PHASEEngine
+
+NS_ASSUME_NONNULL_END
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h	2021-06-02 11:07:58.000000000 -0400
@@ -0,0 +1,123 @@
+//
+//  PHASEEnvelope_Internal.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEEnvelope_Internal_h
+#define PHASEEnvelope_Internal_h
+
+#import <PHASE/PHASETypes.h>
+
+#import <simd/types.h>
+
+typedef simd_double2 PHASEEnvelopePoint;
+typedef simd_double2 PHASEEnvelopeMinMax;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASEEnvelopeSegment
+
+/****************************************************************************************************/
+/*! @class PHASEEnvelopeSegment
+    @abstract An envelope segment defined by an end point and a curve type.
+    @discussion
+        Envelope segments do 'not' contain a start point.
+        We do this so we can connect envelope segments together end to end and gaurantee continuity along the x and y axes.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEEnvelopeSegment : NSObject
+
+/*! @method initWithEndPoint:curveType
+ @abstract Initialize an envelope segment with \a endPoint and \a curveType.
+ @param endPoint
+ The end point of the segment.
+ @param curveType
+ The curve type.
+ @return
+ A new envelope.
+ */
+- (instancetype)initWithEndPoint:(PHASEEnvelopePoint)endPoint curveType:(PHASECurveType)curveType;
+
+/*! @property endPoint
+ @abstract The end point of the envelope segment.
+ @discussion
+ The default value is [0.0, 0.0].
+ */
+@property(nonatomic, assign) PHASEEnvelopePoint endPoint;
+
+/*! @property curveType
+ @abstract The curve type of the envelope segment.
+ @discussion
+ The default value is PHASECurveTypeLinear.
+ */
+@property(nonatomic, assign) PHASECurveType curveType;
+
+@end
+
+#pragma mark - PHASEEnvelope
+
+/****************************************************************************************************/
+/*! @class PHASEEnvelope
+    @abstract A segmented envelope.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEEnvelope : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithStartPoint:segments
+ @abstract Initialize an envelope from a start point and an array of segments.
+ @param startPoint
+ The start point of the envelope.
+ @param segments
+ An array of segments.
+ @return
+ A new envelope.
+ @discussion
+ If the segment array is empty (i.e., count == 0), the envelope will internally create a single segment with an end point matching the start
+ point. If the segment array has more than one segment, segments will be sorted internally in ascending order of x value. Note that the
+ startPoint.x value must be <= the segment with the lowest x value provided in segments. Failure to do so will cause this function to return
+ nil.
+ */
+- (nullable instancetype)initWithStartPoint:(PHASEEnvelopePoint)startPoint
+                                   segments:(NSArray<PHASEEnvelopeSegment*>*)segments NS_DESIGNATED_INITIALIZER;
+
+/*! @method evaluateForValue
+ @abstract Evaluates the envelope.
+ @param x
+ The input along the x-axis.
+ @return
+ The output along the y-axis.
+ @discussion
+ If required, x will be clamped to the envelope's domain.
+ */
+- (double)evaluateForValue:(double)x;
+
+/*! @property startPoint
+ @abstract The start point of the envelope.
+ */
+@property(nonatomic, readonly) PHASEEnvelopePoint startPoint;
+
+/*! @property segments
+ @abstract The segments of the envelope.
+ */
+@property(nonatomic, readonly, copy) NSArray<PHASEEnvelopeSegment*>* segments;
+
+/*! @property domain
+ @abstract The [min, max] domain (along the x-axis).
+ */
+@property(nonatomic, readonly) PHASEEnvelopeMinMax domain;
+
+/*! @property range
+ @abstract The [min, max] range (along the y-axis).
+ */
+@property(nonatomic, readonly) PHASEEnvelopeMinMax range;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEEnvelope_Internal_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h	2021-06-02 11:07:59.000000000 -0400
@@ -0,0 +1,126 @@
+//
+//  PHASEGroup.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEGroup_h
+#define PHASEGroup_h
+
+#import <PHASE/PHASETypes.h>
+
+@class PHASEEngine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEGroup
+    @abstract A PHASEGroup allows clients to group sounds into mixing and control hierarchies.
+    Clients can set the gain, playback rate, mute and solo all the sounds in a group.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEGroup : NSObject<NSCopying>
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithIdentifier:
+    @abstract Initialize a new sound group.
+    @param identifier
+        An identifier to reference this group with.
+*/
+- (instancetype)initWithIdentifier:(NSString*)identifier NS_DESIGNATED_INITIALIZER;
+
+/*! @method registerWithEngine
+    @abstract Registers a group with a particular PHASEEngine so that referencing assets can find it.
+    @note An exception will be thrown if the engine is invalid or the group already exists.
+    @param engine
+        A PHASEEngine object to associate this group with
+*/
+- (void)registerWithEngine:(PHASEEngine*)engine
+NS_SWIFT_NAME(register(engine:));
+
+/*! @method unregisterFromEngine
+    @abstract Removes the group from a PHASEEngine
+*/
+- (void)unregisterFromEngine;
+
+/*! @method fadeGain:duration:curveType:
+    @abstract Apply a gain scalar on the base gain over the specified duration.
+    @param gain
+        The gain scalar. Values are clamped to the range [0, 1].
+    @param duration
+        The duration over which to ramp to the gain scalar. Values must be >= 0.
+    @param curveType
+        The curve that is applied during the fade period.
+    @note
+        The duration is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+- (void)fadeGain:(double)gain duration:(double)duration curveType:(PHASECurveType)curveType;
+
+/*! @method fadeRate:duration:curveType:
+    @abstract Apply a rate scalar on the base rate over the specified duration.
+    @param rate
+        The rate scalar.
+    @param duration
+        The duration (scaled by unitsPerSecond) over which to ramp to the rate scalar.
+    @param curveType
+        The type of curve that is applied during the fade period.
+    @note
+        The duration is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+- (void)fadeRate:(double)rate duration:(double)duration curveType:(PHASECurveType)curveType;
+
+/*! @method mute
+    @abstract Mute the group.
+*/
+- (void)mute;
+
+/*! @method unmute
+    @abstract Unmute the group.
+*/
+- (void)unmute;
+
+/*! @method solo
+    @abstract Solo the group.
+*/
+- (void)solo;
+
+/*! @method unsolo
+    @abstract Unsolo the group.
+*/
+- (void)unsolo;
+
+/*! @property identifier
+    @abstract The unique identifier of this group
+*/
+@property(nonatomic, readonly) NSString* identifier;
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic, assign) double gain;
+
+/*! @property rate
+    @abstract Linear rate scalar.
+    @note Values are clamped to the range [0.25, 4]. Default value is 1.
+*/
+@property(nonatomic, assign) double rate;
+
+/*! @property muted
+    @abstract Whether or not this group is muted.
+*/
+@property(readonly, getter=isMuted) BOOL muted;
+
+/*! @property soloed
+    @abstract Whether or not this group is soloed.
+*/
+@property(readonly, getter=isSoloed) BOOL soloed;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEGroup_h*/
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h	2021-06-02 12:45:09.000000000 -0400
@@ -0,0 +1,159 @@
+//
+//  PHASEGroupPreset.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEGroupPreset_h
+#define PHASEGroupPreset_h
+
+#import <PHASE/PHASEGroup.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASEGroupPresetSetting
+
+/****************************************************************************************************/
+/*! @class  PHASEGroupPresetSetting
+    @abstract   A PHASEGroupPresetSetting is an object that holds settings that can be
+                applied to a PHASEGroup object.
+    @discussion These can be manually created and added to a PHASEGroupPreset
+                object, or PHASEGroupPreset addGroup can be used to create these inline.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEGroupPresetSetting : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithGain:rate:gainCurveType:rateCurveType
+    @abstract Initialize the PHASEGroupPresetSetting object with an existing PHASEGroup object.
+    @param gain
+        The main gain setting to apply to the group. Values are clamped to the range [0, 1]. Default value is 1.
+    @param rate
+        The playback rate setting to apply to the group. Values are clamped to the range [0.25, 4]. Default value is 1.
+    @param gainCurveType
+        The type of curve to apply to the gain as the preset changes to this new setting..
+    @param rateCurveType
+        The type of curve to apply to the rate as the preset changes to this new setting..
+ */
+- (instancetype)initWithGain:(double)gain
+                        rate:(double)rate
+               gainCurveType:(PHASECurveType)gainCurveType
+               rateCurveType:(PHASECurveType)rateCurveType
+NS_SWIFT_NAME(init(gain:rate:gainCurveType:rateCurveType:));
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic, readonly) double gain;
+
+/*! @property rate
+    @abstract The playback rate setting to apply to the group
+*/
+@property(nonatomic, readonly) double rate;
+
+/*! @property gainCurveType
+    @abstract The type of curve to apply to the gain as the preset changes to this new setting..
+*/
+@property(nonatomic, readonly) PHASECurveType gainCurveType;
+
+/*! @property rateCurveType
+    @abstract The type of curve to apply to the rate as the preset changes to this new setting..
+*/
+@property(nonatomic, readonly) PHASECurveType rateCurveType;
+
+@end
+
+#pragma mark - PHASEGroupPreset
+
+/****************************************************************************************************/
+/*! @class PHASEGroupPreset
+    @abstract A PHASEGroupPreset holds a collection of PHASEGroupPresetSetting
+              objects and other parameters to be applied all at once during playback.
+    @discussion Initialize beforehand, and use activate/deactivate to switch the
+                new preset during playback.  Activating a preset will automatically deactivate the current one.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEGroupPreset : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine
+    @abstract
+        Create a new PHASEGroupPreset object with a given PHASEEngine object.
+    @param engine
+        The PHASEEngine object to register this preset with.
+    @param settings
+            A dictionary containing PHASEGroupPresetSetting objects paired with PHASEGroup objects as keys.
+    @param timeToTarget
+        The time interval that all group settings in this preset will take to gradually fade to the new value
+    @param timeToReset
+        The time interval that all group settings in this preset will take to gradually fade to the unity value
+    @note
+        The timeToTarget and timeToReset are scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+     */
+- (instancetype)initWithEngine:(PHASEEngine*)engine
+                      settings:(NSDictionary<PHASEGroup*, PHASEGroupPresetSetting*>*)settings
+                  timeToTarget:(double)timeToTarget
+                   timeToReset:(double)timeToReset NS_DESIGNATED_INITIALIZER;
+
+/*! @property settings
+    @abstract The collection of PHASEGroupPresetSetting objects to apply when this preset is activated.
+*/
+@property(nonatomic, readonly) NSDictionary<PHASEGroup*, PHASEGroupPresetSetting*>* settings;
+
+/*! @property timeToTarget
+    @abstract The time interval that all group settings in this preset will take to gradually fade to the new value
+    @note The timeToTarget is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+@property(nonatomic, readonly) double timeToTarget;
+
+/*! @property timeToReset
+    @abstract The time interval that all group settings in this preset will take to gradually fade to the unity value
+    @note The timeToReset is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+@property(nonatomic, readonly) double timeToReset;
+
+/*! @method activate
+    @abstract
+        Activate this preset in the PHASEEngine object it was initialized with.  The current preset will be deactivated automatically.
+ */
+- (void)activate;
+
+/*! @method activateWithOverrideTimeInterval
+    @abstract
+        Activate this preset in the PHASEEngine object it was initialized with.  The current preset will be deactivated automatically.
+    @param overrideTimeInterval
+        Override the timeToTarget value in the preset with this value.
+    @note
+        The overrideTimeInterval is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+ */
+- (void)activateWithOverrideTimeInterval:(double)overrideTimeInterval
+NS_SWIFT_NAME(activate(overrideTimeInterval:));
+
+/*! @method deactivate
+    @abstract
+        Deactivate this preset and return the system to default unity values.
+ */
+- (void)deactivate;
+
+/*! @method deactivateWithOverrideTimeInterval
+    @abstract
+        Deactivate this preset and return the system to default unity values.
+    @param overrideTimeInterval
+        Override the timeToReset value in the preset with this value.
+    @note
+        The overrideTimeInterval is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+ */
+- (void)deactivateWithOverrideTimeInterval:(double)overrideTimeInterval
+NS_SWIFT_NAME(deactivate(overrideTimeInterval:));
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEGroupPreset_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h	2021-06-02 11:07:59.000000000 -0400
@@ -0,0 +1,43 @@
+//
+//  PHASEListener.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEListener_h
+#define PHASEListener_h
+
+#import <PHASE/PHASEObject.h>
+#import <PHASE/PHASETypes.h>
+
+@class PHASEEngine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEListener
+    @abstract A PHASEListener represents a listener within a 3D virtual audio environment.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEListener : PHASEObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:
+    @abstract Initialize a new listener.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine NS_DESIGNATED_INITIALIZER;
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic, assign) double gain;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEListener_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h	2021-06-02 11:07:59.000000000 -0400
@@ -0,0 +1,63 @@
+//
+//  PHASEMaterial.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEMaterial_h
+#define PHASEMaterial_h
+
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PHASEEngine;
+
+#pragma mark - PHASEMaterialPreset
+
+/*! @enum PHASEMaterialPreset
+    @abstract List of material presets
+*/
+typedef NS_ENUM(NSInteger, PHASEMaterialPreset) {
+    PHASEMaterialPresetDefault,
+    PHASEMaterialPresetWood,
+    PHASEMaterialPresetCardboard,
+    PHASEMaterialPresetGlass,
+    PHASEMaterialPresetBrickwork,
+    PHASEMaterialPresetConcrete,
+    PHASEMaterialPresetGypsumBoard,
+    PHASEMaterialPresetDrywall,
+    PHASEMaterialPresetPlaster,
+    PHASEMaterialPresetDoorWoodLight,
+    PHASEMaterialPresetDoorWoodHeavy,
+    PHASEMaterialPresetDoorMetalLight,
+    PHASEMaterialPresetDoorMetalHeavy,
+    PHASEMaterialPresetDoorSoundproof,
+    PHASEMaterialPresetWindowSinglePane,
+    PHASEMaterialPresetWindowDoublePane
+};
+
+
+#pragma mark - PHASEMaterial
+
+/****************************************************************************************************/
+/*! @type PHASEMaterial
+    @abstract A PHASEMaterial describes the acoustic properties of material through a library of presets
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMaterial : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:preset
+    @abstract Initialize a new material from a preset.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine preset:(PHASEMaterialPreset)preset;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEMaterial_h*/
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h	2021-06-02 11:07:59.000000000 -0400
@@ -0,0 +1,45 @@
+//
+//  PHASEMedium.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEMedium_h
+#define PHASEMedium_h
+
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PHASEEngine;
+
+/*! @enum PHASEMediumPreset
+    @abstract List of medium presets
+*/
+typedef NS_ENUM(NSInteger, PHASEMediumPreset) {
+    PHASEMediumPresetDefault = 0,
+    PHASEMediumPresetRoomAir = 1,
+}
+NS_SWIFT_NAME(PHASEMedium.Preset);
+
+/****************************************************************************************************/
+/*! @class PHASEMedium
+    @abstract A PHASEMedium describes the acoustic properties of a medium through a library of presets.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMedium : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:preset
+    @abstract Initialize a new medium from a preset.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine preset:(PHASEMediumPreset)preset;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEMedium_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h	2021-06-02 12:48:07.000000000 -0400
@@ -0,0 +1,284 @@
+//
+//  PHASEMetaParameter.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEMetaParameter_h
+#define PHASEMetaParameter_h
+
+#import <PHASE/PHASEEnvelope.h>
+#import <PHASE/PHASETypes.h>
+#import <PHASE/PHASEDefinition.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASEMetaParameterDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEMetaParameterDefinition
+ *  @abstract A base object for Metaparameter definitions
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMetaParameterDefinition : PHASEDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property value
+    @abstract The readonly value that this metaparameter definition was initialized with
+*/
+@property(nonatomic, readonly, strong) id value;
+
+@end
+
+#pragma mark - PHASENumberMetaParameterDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASENumberMetaParameterDefinition
+ *  @abstract A Metaparameter that has a numeric value
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASENumberMetaParameterDefinition : PHASEMetaParameterDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithValue:identifier
+    @abstract
+        Create a new numeric metaparameter definition
+    @param value
+        The initial value of the metaparameter
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        The new PHASENumberMetaParameterDefinition object
+*/
+- (instancetype)initWithValue:(double)value identifier:(NSString*)identifier;
+
+/*! @method initWithValue
+    @abstract
+        Create a new numeric metaparameter definition
+    @param value
+        The initial value of the metaparameter
+    @return
+        The new PHASENumberMetaParameterDefinition object
+*/
+- (instancetype)initWithValue:(double)value;
+
+/*! @method initWithValue:rangeMin:rangeMax:identifier
+    @abstract
+        Create a new numeric metaparameter definition and a predefined min and maximum range
+    @param value
+        The initial value of the metaparameter
+    @param minimum
+        The minimum value for this metaparameter.  Values set to this metaparamter less than the minimum will be clamped.
+    @param maximum
+        The maximum value for this metaparameter.  Values set to this metaparamter less than the minimum will be clamped.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        The new PHASENumberMetaParameterDefinition object
+*/
+- (instancetype)initWithValue:(double)value minimum:(double)minimum maximum:(double)maximum identifier:(NSString*)identifier;
+
+/*! @method initWithValue:rangeMin:rangeMax
+    @abstract
+        Create a new numeric metaparameter definition and a predefined min and maximum range
+    @param value
+        The initial value of the metaparameter
+    @param minimum
+        The minimum value for this metaparameter.  Values set to this metaparamter less than the minimum will be clamped.
+    @param maximum
+        The maximum value for this metaparameter.  Values set to this metaparamter less than the minimum will be clamped.
+    @return
+        The new PHASENumberMetaParameterDefinition object
+*/
+- (instancetype)initWithValue:(double)value minimum:(double)minimum maximum:(double)maximum NS_DESIGNATED_INITIALIZER;
+
+
+/*! @property minimum
+    @abstract The readonly minimum that this metaparameter definition was initialized with
+*/
+@property(nonatomic, readonly) double minimum;
+
+/*! @property maximum
+    @abstract The readonly maximum that this metaparameter definition was initialized with
+*/
+@property(nonatomic, readonly) double maximum;
+
+@end
+
+#pragma mark - PHASEStringMetaParameterDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEStringMetaParameterDefinition
+ *  @abstract A Metaparameter that has a string value
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEStringMetaParameterDefinition : PHASEMetaParameterDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithValue:identifier
+    @abstract
+        Create a new string metaparameter definition
+    @param value
+        The initial value of the metaparameter
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        The new PHASEStringMetaParameterDefinition object
+*/
+- (instancetype)initWithValue:(NSString*)value identifier:(NSString*)identifier;
+
+/*! @method initWithValue
+    @abstract
+        Create a new string metaparameter definition
+    @param value
+        The initial value of the metaparameter
+    @return
+        The new PHASEStringMetaParameterDefinition object
+*/
+- (instancetype)initWithValue:(NSString*)value NS_DESIGNATED_INITIALIZER;
+
+@end
+
+#pragma mark - PHASEMappedMetaParameterDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEMappedMetaParameterDefinition
+ *  @abstract An object to define a Mapped Metaparameter when building an sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMappedMetaParameterDefinition : PHASENumberMetaParameterDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+- (instancetype)initWithValue:(double)value identifier:(NSString*)identifier NS_UNAVAILABLE;
+
+- (instancetype)initWithValue:(double)value NS_UNAVAILABLE;
+
+- (instancetype)initWithValue:(double)value minimum:(double)minimum maximum:(double)maximum identifier:(NSString*)identifier NS_UNAVAILABLE;
+
+- (instancetype)initWithValue:(double)value minimum:(double)minimum maximum:(double)maximum NS_UNAVAILABLE;
+
+/*! @method initWithInputMetaParameterDefinition:identifier
+    @abstract
+        Create a new mapped range metaparameter definition
+    @param inputMetaParameterDefinition
+        The metaparameter that will provide an input for this mapped metaparameter
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        The new PHASEMappedMetaParameterDefinition object
+*/
+- (instancetype)initWithInputMetaParameterDefinition:(PHASENumberMetaParameterDefinition*)inputMetaParameterDefinition
+                                            envelope:(PHASEEnvelope*)envelope
+                                          identifier:(NSString*)identifier;
+
+/*! @method initWithInputMetaParameterDefinition
+    @abstract
+        Create a new mapped range metaparameter definition
+    @param inputMetaParameterDefinition
+        The metaparameter that will provide an input for this mapped metaparameter
+    @return
+        The new PHASEMappedMetaParameterDefinition object
+*/
+- (instancetype)initWithInputMetaParameterDefinition:(PHASENumberMetaParameterDefinition*)inputMetaParameterDefinition
+                                            envelope:(PHASEEnvelope*)envelope NS_DESIGNATED_INITIALIZER;
+
+/*! @property envelope
+    @abstract An Envelope to define segments of curves
+*/
+@property(nonatomic, readonly, strong) PHASEEnvelope* envelope;
+
+/*! @property inputMetaParameterDefinition
+    @abstract The readonly PHASENumberMetaParameterDefinition that this metaparameter definition was initialized with
+*/
+@property(nonatomic, readonly, strong) PHASENumberMetaParameterDefinition* inputMetaParameterDefinition;
+
+@property(nonatomic, readonly) double minimum NS_UNAVAILABLE;
+
+@property(nonatomic, readonly) double maximum NS_UNAVAILABLE;
+
+@end
+
+#pragma mark - PHASEMetaParameter
+
+/****************************************************************************************************/
+/*! @interface PHASEMetaParameter
+ *  @abstract A generic object that represents an active metaparameter in the system
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMetaParameter : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property identifier
+    @abstract The identifier of this metaparameter
+*/
+@property(nonatomic, readonly, strong) NSString* identifier;
+
+/*! @property value
+    @abstract The value of this metaparameter
+*/
+@property(nonatomic, readwrite, strong) id value;
+
+@end
+
+#pragma mark - PHASENumberMetaParameter
+
+/****************************************************************************************************/
+/*! @interface PHASENumberMetaParameter
+ *  @abstract An object that represents an active numeric metaparameter in the system
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASENumberMetaParameter : PHASEMetaParameter
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property minimum
+    @abstract The minimum value this metaparameter can be set to
+*/
+@property(nonatomic, readonly) double minimum;
+
+/*! @property maximum
+    @abstract The maximum value this metaparameter can be set to
+*/
+@property(nonatomic, readonly) double maximum;
+
+/*! @method fadeToValue
+    @abstract
+        Fades to a new value over an interval of time
+    @param value
+        The new destination value to fade to
+    @param duration
+        The length of time it takes to arrive at the destination value
+*/
+- (void)fadeToValue:(double)value duration:(NSTimeInterval)duration;
+
+@end
+
+#pragma mark - PHASEStringMetaParameter
+
+/****************************************************************************************************/
+/*! @interface PHASEStringMetaParameter
+ *  @abstract An object that represents an active string metaparameter in the system
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEStringMetaParameter : PHASEMetaParameter
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEMetaParameter_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h	2021-06-02 12:45:10.000000000 -0400
@@ -0,0 +1,261 @@
+//
+//  PHASEMixer.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEMixer_h
+#define PHASEMixer_h
+
+#import <AVFoundation/AVFAudio.h>
+#import <simd/types.h>
+
+#import <PHASE/PHASETypes.h>
+#import <PHASE/PHASEDefinition.h>
+
+@class PHASESource;
+@class PHASEListener;
+@class PHASENumberMetaParameterDefinition;
+@class PHASEMetaParameter;
+@class PHASEDistanceModelParameters;
+@class PHASEDirectivityModelParameters;
+@class PHASESpatialPipeline;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASEMixerDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEMixerDefinition
+ *  @abstract A generic object to define a mix node object.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMixerDefinition : PHASEDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic) double gain;
+
+/*! @property gainMetaParameterDefinition
+    @abstract Optionally attach a metaparameter definition here to enable real-time control of the gain during playback.
+*/
+@property(nonatomic, strong, nullable) PHASENumberMetaParameterDefinition* gainMetaParameterDefinition;
+
+@end
+
+#pragma mark - PHASESpatialMixerDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASESpatialMixerDefinition
+ *  @abstract An object to define a spatial mix node object.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESpatialMixerDefinition : PHASEMixerDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithSpatialPipeline
+    @abstract Create a new PHASESpatialMixerDefinition
+    @param spatialPipeline
+        A spatial pipeline.
+    @return
+        A new PHASESpatialMixerDefinition object
+*/
+- (instancetype)initWithSpatialPipeline:(PHASESpatialPipeline*)spatialPipeline NS_DESIGNATED_INITIALIZER;
+
+/*! @method initWithSpatialPipeline:identifier
+    @abstract Create a new PHASESpatialMixerDefinition
+    @param spatialPipeline
+        A spatial pipeline.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASESpatialMixerDefinition object
+*/
+- (instancetype)initWithSpatialPipeline:(PHASESpatialPipeline*)spatialPipeline identifier:(NSString*)identifier;
+
+/*! @property spatialPipeline
+    @abstract Spatial Pipeline.
+*/
+@property(nonatomic, strong, readonly) PHASESpatialPipeline* spatialPipeline;
+
+/*! @property distanceModelParameters
+    @abstract Distance model parameters (optional).
+*/
+@property(nullable, nonatomic, strong) PHASEDistanceModelParameters* distanceModelParameters;
+
+/*! @property listenerDirectivityModelParameters
+    @abstract Listener directivity model parameters (optional).
+*/
+@property(nullable, nonatomic, strong) PHASEDirectivityModelParameters* listenerDirectivityModelParameters;
+
+/*! @property sourceDirectivityModelParameters
+    @abstract Source directivity model parameters (optional).
+*/
+@property(nullable, nonatomic, strong) PHASEDirectivityModelParameters* sourceDirectivityModelParameters;
+
+@end
+
+#pragma mark - PHASEAmbientMixerDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEAmbientMixerDefinition
+ *  @abstract An object to define an ambient mix node object.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEAmbientMixerDefinition : PHASEMixerDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithChannelLayout:orientation:identifier
+    @abstract Create a new PHASEAmbientMixerDefinition
+    @param layout
+        The input channel layout for this ambient mixer node. Any connected sampler must match this channel layout.
+    @param orientation
+        The orientation of the speaker layout, relative to scene root, as a quaternion.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASEAmbientMixerDefinition object
+*/
+- (instancetype)initWithChannelLayout:(AVAudioChannelLayout*)layout orientation:(simd_quatf)orientation identifier:(NSString*)identifier;
+
+/*! @method initWithChannelLayout:orientation
+    @abstract Create a new PHASEAmbientMixerDefinition
+    @param layout
+        The input channel layout for this channel mixer node. Any connected sampler must match this channel layout.
+    @param orientation
+     The orientation of the speaker layout, relative to scene root, as a quaternion.
+    @return
+        A new PHASEAmbientMixerDefinition object
+*/
+- (instancetype)initWithChannelLayout:(AVAudioChannelLayout*)layout orientation:(simd_quatf)orientation NS_DESIGNATED_INITIALIZER;
+
+/*! @property orientation
+    @abstract A readonly value of the ambient source's orientation relative to the scene root.
+*/
+@property(nonatomic, readonly) simd_quatf orientation;
+
+/*! @property inputChannelLayout
+    @abstract A readonly value of the input channel layout this mixer was initialized with.
+*/
+@property(nonatomic, strong, readonly) AVAudioChannelLayout* inputChannelLayout;
+
+@end
+
+#pragma mark - PHASEChannelMixerDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEChannelMixerDefinition
+ *  @abstract An object to define a channel mix node object.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEChannelMixerDefinition : PHASEMixerDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithChannelLayout:mode:identifier
+    @abstract Create a new PHASEChannelMixerDefinition
+    @param layout
+        The input channel layout for this channel mixer node. Any connected sampler must match this channel layout.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASEChannelMixerDefinition object
+*/
+- (instancetype)initWithChannelLayout:(AVAudioChannelLayout*)layout identifier:(NSString*)identifier;
+
+/*! @method initWithChannelLayout:mode
+    @abstract Create a new PHASEChannelMixerDefinition
+    @param layout
+        The input channel layout for this channel mixer node. Any connected sampler must match this channel layout.
+    @return
+        A new PHASEChannelMixerDefinition object
+*/
+- (instancetype)initWithChannelLayout:(AVAudioChannelLayout*)layout NS_DESIGNATED_INITIALIZER;
+
+/*! @property inputChannelLayout
+    @abstract A readonly value of the input channel layout this mixer was initialized with.
+*/
+@property(nonatomic, strong, readonly) AVAudioChannelLayout* inputChannelLayout;
+
+@end
+
+
+#pragma mark - PHASEMixer
+
+/****************************************************************************************************/
+/*! @interface PHASEMixer
+ *  @abstract A generic object the represents an active mixer in the system
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMixer : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+@property(nonatomic, readonly, strong) NSString* identifier;
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic, readonly) double gain;
+
+/*! @property gainMetaParameter
+    @abstract The metaparameter that can be used to adjust the gain during playback
+*/
+@property(nonatomic, strong, readonly, nullable) PHASEMetaParameter* gainMetaParameter;
+
+/*! @property mixerType
+    @abstract The  mixer type
+*/
+@property(nonatomic, readwrite) PHASEMixerType mixerType;
+
+@end
+
+#pragma mark - PHASEMixerParameters
+
+/****************************************************************************************************/
+/*! @interface PHASEMixerParameters
+ *  @abstract An object that holds runtime parameters for mixers when creating PHASESoundEvents.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEMixerParameters : NSObject
+
+/*! @method addSpatialMixerParametersWithIdentifier:source:listener
+    @abstract Adds runtime parameters for a spatial mixer
+    @param identifier
+        The unique identifier assigned to a spatial submixer object.
+    @param source
+        The PHASESource object that this mixer will use to spatialize sounds.
+    @param listener
+        The PHASEListener object that this mixer will use to spatialize sounds.
+*/
+- (void)addSpatialMixerParametersWithIdentifier:(NSString*)identifier source:(PHASESource*)source listener:(PHASEListener*)listener
+NS_SWIFT_NAME(addSpatialMixerParameters(identifier:source:listener:));
+
+/*! @method addAmbientMixerParametersWithIdentifier:listener
+    @abstract Adds runtime parameters for an ambient mixer
+    @param identifier
+        The unique identifier assigned to a spatial submixer object.
+    @param listener
+        The PHASEListener object that this mixer will use to orient sounds.
+*/
+- (void)addAmbientMixerParametersWithIdentifier:(NSString*)identifier listener:(PHASEListener*)listener
+NS_SWIFT_NAME(addAmbientMixerParameters(identifier:listener:));
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEMixer_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h	2021-06-02 11:07:58.000000000 -0400
@@ -0,0 +1,97 @@
+//
+//  PHASEObject.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEObject_h
+#define PHASEObject_h
+
+#import <PHASE/PHASETypes.h>
+
+#import <simd/types.h>
+
+@class PHASEEngine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEObject
+    @abstract A PHASEObject represents an object in the engine object hierarchy.
+*/
+
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEObject : NSObject<NSCopying>
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:
+    @abstract Initialize a new object.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine NS_DESIGNATED_INITIALIZER;
+
+/*! @method addChild:error:
+    @abstract Add a child to the current object
+    @param child
+        The child object
+    @param error
+        Returns error if the child already has a parent different from the current object.
+    @return
+        YES for success
+*/
+- (BOOL)addChild:(PHASEObject*)child error:(NSError**)error;
+
+/*! @method removeChild:
+    @abstract Remove a child from the current object.
+*/
+- (void)removeChild:(PHASEObject*)child;
+
+/*! @method removeChildren
+    @abstract Remove all the children from the current object.
+*/
+- (void)removeChildren;
+
+/*! @property parent
+    @abstract The parent of the current object, nil if not attached to a parent.
+*/
+@property(nullable, nonatomic, readonly, weak) PHASEObject* parent;
+
+/*! @property children
+    @abstract List of all the direct children of the current object.
+*/
+@property(nonatomic, readonly, copy) NSArray<PHASEObject*>* children;
+
+/*! @property right
+    @abstract The direction PHASE treats as "right" in local space for all objects.
+*/
+@property(class, readonly) simd_float3 right;
+
+/*! @property up
+    @abstract The direction PHASE treats as "up" in local space for all objects.
+*/
+@property(class, readonly) simd_float3 up;
+
+/*! @property forward
+    @abstract The direction PHASE treats as "forward" in local space for all objects.
+*/
+@property(class, readonly) simd_float3 forward;
+
+/*! @property transform
+    @abstract The object's transform.
+    @note The transform must have orthogonal basis vectors and uniform scale.
+*/
+@property(nonatomic, assign) simd_float4x4 transform;
+
+/*! @property worldTransform
+    @abstract The world transform applied to the object.
+ @note The transform must have orthogonal basis vectors and uniform scale.
+*/
+@property(nonatomic, assign) simd_float4x4 worldTransform;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEObject_h*/
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h	2021-06-02 11:07:58.000000000 -0400
@@ -0,0 +1,48 @@
+//
+//  PHASEOccluder.h
+//  PHASE
+//
+//  Copyright © 2021 Apple. All rights reserved.
+//
+
+#ifndef PHASEOccluder_h
+#define PHASEOccluder_h
+
+#import <PHASE/PHASEObject.h>
+#import <PHASE/PHASEShape.h>
+#import <PHASE/PHASETypes.h>
+
+@class PHASEEngine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEOccluder
+    @abstract A PHASEOccluder represents an shape and associated material that can occlude or dampen sound in a 3D virtual audio enivronment.
+    @discussion ..
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEOccluder : PHASEObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+- (instancetype)initWithEngine:(PHASEEngine*)engine NS_UNAVAILABLE;
+
+/*! @method initWithEngine:shapes:
+    @abstract Initialize a new occluder with shapes.
+    @discussion
+        The shapes array cannot be empty, otherwise an exception is thrown.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine shapes:(NSArray<PHASEShape*>*)shapes NS_DESIGNATED_INITIALIZER;
+
+/*! @property shapes
+    @abstract Array of shapes associated with this occluder.
+*/
+@property(nonatomic, readonly, copy) NSArray<PHASEShape*>* shapes;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEOccluder_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h	2021-06-02 11:07:58.000000000 -0400
@@ -0,0 +1,88 @@
+//
+//  PHASEShape.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEShape_h
+#define PHASEShape_h
+
+#import <ModelIO/ModelIO.h>
+#import <PHASE/PHASEMaterial.h>
+#import <PHASE/PHASETypes.h>
+
+@class PHASEEngine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASEShapeElement
+    @abstract A single element within a shape. The attached material defines its acoustical properties.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEShapeElement : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property material
+    @abstract The shape's material defines the acoustical properties of this element.
+*/
+@property(nullable, nonatomic, strong) PHASEMaterial* material;
+
+@end
+
+/****************************************************************************************************/
+/*! @class PHASEShape
+    @abstract A three-dimensional shape that is used as the physical representation of a PHASEObject within a scene. Is made up of multiple
+   PHASEShapeElements.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEShape : NSObject<NSCopying>
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:mesh
+    @abstract Initialize a shape from an MDLMesh
+    @param engine
+        The engine this shape will be used with
+    @param mesh
+        A Model I/O mesh object.
+    @return
+        A new shape object
+    @discussion
+        One PHASEShapeElement will be created for every submesh within the mesh
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine mesh:(MDLMesh*)mesh NS_DESIGNATED_INITIALIZER;
+
+/*! @method initWithEngine:mesh
+    @abstract Initialize a shape from an MDLMesh and a list of materials
+    @param engine
+        The engine this shape will be used with
+    @param mesh
+        A Model I/O mesh object.
+    @param materials
+        An array of PHASEMaterial objects that overrides any acoustical materials within the mesh object
+    @return
+        A new shape object
+    @discussion
+        The materials array cannot be empty and cannot contain nil entries, otherwise an exception is thrown.
+        If the number of submeshes within the mesh are less than or equal to the size of the material array, the material will be assigned
+   to the corresponding element. If the number of submeshes within the mesh is greater than the size of the material array, the material
+   assigned to the element will be the index of the element modulo the number of materials. IE: given a mesh with 6 submeshes and an array
+   of 3 materials, the element at index 5 will be assigned the material at index: 5 % 3 = 2.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine mesh:(MDLMesh*)mesh materials:(NSArray<PHASEMaterial*>*)materials;
+
+/*! @property elements
+    @abstract List of all the shape elements associated with this shape.
+*/
+@property(nonatomic, readonly, copy) NSArray<PHASEShapeElement*>* elements;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEShape_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h	2021-06-02 12:48:07.000000000 -0400
@@ -0,0 +1,157 @@
+//
+//  PHASESoundEvent.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASESoundEvent_h
+#define PHASESoundEvent_h
+
+#import <AVFoundation/AVAudioTime.h>
+#import <PHASE/PHASETypes.h>
+
+@class PHASESoundEventNodeAsset;
+@class PHASEEngine;
+@class PHASEListener;
+@class PHASEMixer;
+@class PHASESource;
+@class PHASEMixerParameters;
+@class PHASESoundEventNodeDefinition;
+@class PHASEMetaParameter;
+@class PHASEPushStreamNode;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASESoundEvent
+    @abstract A PHASESoundEvent is an object that represents a playable sound event in the PHASE system.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESoundEvent : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:assetIdentifier:mixerParameters:error
+    @abstract Creates a new sound event instance
+    @param engine
+        The PHASEEngine object that the sound event will be played by.
+    @param assetIdentifier
+        The identifier registered with the Asset Registry for the particular PHASESoundEventNodeAsset that this sound instance will play. If the asset identifier is not registered, this function will fail.
+    @param mixerParameters
+        A dictionary of PHASEMixerParameters objects with keys that match the identifiers of the spatial mixers in the sound event
+    @discussion
+        This will look up the asset in the asset registry and create the necessary objects to play the sound event
+ */
+- (nullable instancetype)initWithEngine:(PHASEEngine*)engine
+                        assetIdentifier:(NSString*)assetIdentifier
+                        mixerParameters:(PHASEMixerParameters*)mixerParameters
+                                  error:(NSError**)error;
+
+/*! @method initWithEngine:assetIdentifier:error
+    @abstract Creates a new sound event instance
+    @param engine
+        The PHASEEngine object that the sound event will be played by.
+    @param assetIdentifier
+        The identifier registered with the Asset Registry for the particular PHASESoundEventNodeAsset that this sound event will play. If the asset identifier is not registered, this function will fail.
+    @discussion
+        This will look up the asset in the asset registry and create the necessary objects to play the sound event
+ */
+- (nullable instancetype)initWithEngine:(PHASEEngine*)engine
+                        assetIdentifier:(NSString*)assetIdentifier
+                                  error:(NSError**)error;
+
+/*! @method prepareWithCompletionHandler
+    @abstract Prepare the sound event
+    @param completionHandler
+        The block that will be called when the PHASESoundEvent has finished preparing and is ready to start.  Pass in nil for no handler.
+    @discussion
+        This will only prepare the sound event and get it ready to be played by the startWithCompletionHandler() function.
+        If startWithCompletionHandler is called before it is done preparing, the sound event will start as soon as it is done preparing.
+ */
+- (void)prepareWithCompletionHandler:(void (^)(PHASESoundEventPrepareHandlerReason reason, NSError* _Nullable error))completionHandler;
+
+/*! @method prepareAndReturnError
+    @abstract Prepare the sound event
+    @discussion
+        This will only prepare the sound event and get it ready to be played by the startWithCompletionHandler() function.
+        If startWithCompletionHandler is called before it is done preparing, the sound event will start as soon as it is done preparing.
+ */
+- (BOOL)prepareAndReturnError:(NSError* _Nullable *)error;
+
+/*! @method startWithCompletionHandler
+    @abstract Start the sound event
+    @param completionHandler
+        The block that will be called when sound event have stopped.
+    @discussion
+        This will start the sound event's execution and sound playback, if applicable.
+        Playback will begin immediately if the sound event has been prepared, otherwise it will start as soon as it is finished preparing.
+ */
+- (BOOL)startWithCompletionHandler:(void (^)(PHASESoundEventStartHandlerReason reason, NSError* _Nullable error))completionHandler;
+
+/*! @method startAndReturnError
+    @abstract start the sound event.
+*/
+- (BOOL)startAndReturnError:(NSError* _Nullable *)error;
+
+/*! @method     seekToTime:completionHandler
+    @abstract   Seeks all leaf nodes in a PHASESoundEvent to a specified time relative to the start of the sound event.
+    @discussion
+        If any leaf nodes do not support seeking, those nodes will  ignore the command.  Nodes that have finished playing or have stopped
+   will not seek. Nodes that are sleeping will seek, and will resume at the correct time when they are awoken.
+    @note The  time is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+- (BOOL)seekToTime:(double)time completionHandler:(nullable void (^)(PHASESoundEventSeekHandlerReason reason, NSError* _Nullable error))completionHandler;
+
+/*! @method pause
+    @abstract pause the sound event.
+ */
+- (void)pause;
+
+/*! @method resume
+    @abstract resume a paused sound event.
+ */
+- (void)resume;
+
+/*! @method stopAndInvalidate
+    @abstract stop and invalidate the sound event
+ */
+- (void)stopAndInvalidate;
+
+/*! @property renderingState
+    @abstract Sound Event's current rendering state
+*/
+@property(readonly) PHASERenderingState renderingState;
+
+/*! @property prepareState
+    @abstract Sound Event's current preparation state
+*/
+@property(readonly) PHASESoundEventPrepareState prepareState;
+
+/*! @property metaParameters
+    @abstract A Dictionary containing the MetaParameters associated with this sound event
+*/
+@property(readonly, copy) NSDictionary<NSString*, PHASEMetaParameter*>* metaParameters;
+
+/*! @property mixNodes
+    @abstract A Dictionary containing the mix nodes associated with this sound event
+*/
+@property(readonly, copy) NSDictionary<NSString*, PHASEMixer*>* mixers;
+
+/*! @property pushStreamNodes
+    @abstract A Dictionary containing the push stream nodes associated with this sound event, for pushing buffers to.
+*/
+@property(readonly, copy) NSDictionary<NSString*, PHASEPushStreamNode*>* pushStreamNodes;
+
+/*! @property indefinite
+    @abstract A boolean that tell if this sound event will run indefinitely, or finish executing on its own
+*/
+@property(readonly, getter=isIndefinite) BOOL indefinite;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+
+#endif /* PHASESoundEvent_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h	2021-06-02 12:48:06.000000000 -0400
@@ -0,0 +1,631 @@
+//
+//  PHASESoundEventNodes.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASESoundEventNodes_h
+#define PHASESoundEventNodes_h
+
+#import <AVFoundation/AVAudioBuffer.h>
+#import <AVFoundation/AVAudioFormat.h>
+#import <AVFoundation/AVAudioTime.h>
+#import <PHASE/PHASEEnvelope.h>
+#import <PHASE/PHASEMetaParameter.h>
+#import <PHASE/PHASEMixer.h>
+#import <PHASE/PHASETypes.h>
+#import <PHASE/PHASEGroup.h>
+
+@class PHASESoundAsset;
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASEPushStreamBufferOptions
+
+/****************************************************************************************************/
+/*!
+    @enum PHASEPushStreamBufferOptions
+    @abstract	Options controlling buffer scheduling.
+
+    @constant	PHASEPushStreamBufferDefault
+                    The buffer plays following any previously scheduled buffer(s).
+    @constant	PHASEPushStreamBufferLoops
+                    The buffer loops indefinitely.
+    @constant	PHASEPushStreamBufferInterrupts
+                    The buffer interrupts any buffer already playing.
+    @constant	PHASEPushStreamBufferInterruptsAtLoop
+                    The buffer interrupts any buffer already playing, at its loop point.
+*/
+typedef NS_OPTIONS(NSUInteger, PHASEPushStreamBufferOptions) {
+    PHASEPushStreamBufferDefault = 1UL << 0,          // 0x01
+    PHASEPushStreamBufferLoops = 1UL << 1,            // 0x02
+    PHASEPushStreamBufferInterrupts = 1UL << 2,       // 0x04
+    PHASEPushStreamBufferInterruptsAtLoop = 1UL << 3  // 0x08
+};
+
+#pragma mark - PHASEPushStreamCompletionCallbackType
+
+/*!
+    @enum PHASEPushStreamCompletionCallbackType
+    @abstract	Specifies when the completion handler must be invoked.
+
+    @constant	PHASEPushStreamCompletionDataRendered
+                    The buffer data has been rendered by the player. This
+                    does not account for any signal processing latencies downstream of the player
+                    in the engine.
+*/
+typedef NS_ENUM(NSInteger, PHASEPushStreamCompletionCallbackType) {
+    PHASEPushStreamCompletionDataRendered = 0,
+};
+
+#pragma mark - PHASESoundEventNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASESoundEventNodeDefinition
+ *  @abstract The base class for a sound event node definition
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESoundEventNodeDefinition : PHASEDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property children
+    @abstract The sound event node definition children of this node definition.
+*/
+@property(readonly, copy) NSArray<PHASESoundEventNodeDefinition*>* children;
+
+@end
+
+
+#pragma mark - PHASEGeneratorNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEGeneratorNodeDefinition
+ *  @abstract An object for defining a generator node when building a sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEGeneratorNodeDefinition : PHASESoundEventNodeDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method setCalibrationMode:level
+    @abstract Set the generator's calibration mode and level.
+    @param calibrationMode
+        The calibration mode.
+    @param level
+        The level.
+    @note
+        The level, including its underlying unit and range, are dependent on the calibration mode.
+*/
+- (void)setCalibrationMode:(PHASECalibrationMode)calibrationMode level:(double)level;
+
+/*! @property playbackMode
+    @abstract The PHASEPlaybackMode enum that describes the playback behavior of this generator.
+*/
+@property(nonatomic) PHASEPlaybackMode playbackMode;
+
+/*! @property calibrationMode
+    @abstract The generator's calibration mode. The default value is PHASECalibrationModeNone.
+*/
+@property(readonly) PHASECalibrationMode calibrationMode;
+
+/*! @property level
+    @abstract The generator's level. The default value is 1.
+    @note The level's underlying unit and range are dependent on the calibrationMode.
+
+*/
+@property(readonly) double level;
+
+/*! @property rate
+    @abstract Linear rate scalar.
+    @note Values are clamped to the range [0.25, 4]. Default value is 1.
+*/
+@property(nonatomic, assign) double rate;
+
+/*! @property cullOption
+    @abstract The cullOption for the node.
+*/
+ @property(nonatomic) PHASECullOption cullOption;
+
+/*! @property group
+    @abstract The PHASEGroup object this generator should be associated with for gain and rate control.
+*/
+@property(nonatomic, nullable, weak) PHASEGroup* group;
+
+/*! @property gainMetaParameterDefinition
+    @abstract Optionally attach a metaparameter definition here to enable dynamic control of the gain during playback.
+*/
+@property(nonatomic, strong, nullable, readwrite) PHASENumberMetaParameterDefinition* gainMetaParameterDefinition;
+
+/*! @property rateMetaParameterDefinition
+    @abstract Optionally attach a metaparameter definition here to enable dynamic control of the rate during playback.
+*/
+@property(nonatomic, strong, nullable, readwrite) PHASENumberMetaParameterDefinition* rateMetaParameterDefinition;
+
+/*! @property mixerDefinition
+    @abstract The readonly property that returns the PHASEMixerDefinition this generator was created with and assigned to.
+*/
+@property(nonatomic, strong, readonly) PHASEMixerDefinition* mixerDefinition;
+
+@end
+
+#pragma mark - PHASESamplerNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASESamplerNodeDefinition
+ *  @abstract An object for defining a sampler sound event node when building a sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESamplerNodeDefinition : PHASEGeneratorNodeDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithSoundAssetIdentifier:mixerDefinition:uid
+    @abstract Create a sampler node definition
+    @param soundAssetIdentifier
+        The identifier of the registered sound asset this sampler will play
+    @param mixerDefinition
+        The mixer definition this sampler will be assigned to
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASESamplerNodeDefinition object
+*/
+- (instancetype)initWithSoundAssetIdentifier:(NSString*)soundAssetIdentifier mixerDefinition:(PHASEMixerDefinition*)mixerDefinition identifier:(NSString*)identifier;
+
+/*! @method initWithSoundAssetIdentifier:mixerDefinition
+    @abstract Create a sampler node definition
+    @param soundAssetIdentifier
+        The identifier of the registered sound asset this sampler will play
+    @param mixerDefinition
+        The mixer definition this sampler will be assigned to
+    @return
+        A new PHASESamplerNodeDefinition object
+*/
+- (instancetype)initWithSoundAssetIdentifier:(NSString*)soundAssetIdentifier
+                      mixerDefinition:(PHASEMixerDefinition*)mixerDefinition NS_DESIGNATED_INITIALIZER;
+
+/*! @property assetIdentifier
+    @abstract The identifier that uniquely references the registered sound asset this sampler will play.
+*/
+@property(nonatomic, strong, readonly) NSString* assetIdentifier;
+
+@end
+
+#pragma mark - PHASEContainerNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEContainerNodeDefinition
+ *  @abstract An object for defining a container sound event node when building a sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEContainerNodeDefinition : PHASESoundEventNodeDefinition
+
+/*! @method init
+    @abstract Create a container node definition
+    @return
+        A new PHASEContainerNodeDefinition object
+*/
+- (instancetype)init;
+
+/*! @method new
+    @abstract Create a container node definition
+    @return
+        A new PHASEContainerNodeDefinition object
+*/
++ (instancetype)new;
+
+/*! @method initWithIdentifier
+    @abstract Create a container node definition
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASEContainerNodeDefinition object
+*/
+- (instancetype)initWithIdentifier:(NSString*)identifier;
+
+/*! @method initWithSoundAssetUID:mixerDefinition
+    @abstract Create a container node definition
+    @param subtree
+        Add a subtree of PHASESoundEventNodeDefinition nodes beneath this node.
+*/
+- (void)addSubtree:(PHASESoundEventNodeDefinition*)subtree;
+
+@end
+
+#pragma mark - PHASEBlendNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEBlendNodeDefinition
+ *  @abstract An object for defining a blend sound event node when building a
+ * sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEBlendNodeDefinition : PHASESoundEventNodeDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithBlendMetaParameterDefinition:uid
+    @abstract Create a blend node definition
+    @param blendMetaParameterDefinition
+        A metaparameter definition that wil be used to control the parameter of
+   the blend node at runtime.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASEBlendNodeDefinition object
+*/
+- (instancetype)initWithBlendMetaParameterDefinition:(PHASENumberMetaParameterDefinition *)blendMetaParameterDefinition
+                                          identifier:(NSString*)identifier;
+
+/*! @method initWithBlendMetaParameterDefinition
+    @abstract Create a blend node definition
+    @param blendMetaParameterDefinition
+        A metaparameter definition that wil be used to control the parameter of the blend node at runtime.
+    @return
+        A new PHASEBlendNodeDefinition object
+*/
+- (instancetype)initWithBlendMetaParameterDefinition:
+    (PHASENumberMetaParameterDefinition *)blendMetaParameterDefinition
+    NS_DESIGNATED_INITIALIZER;
+
+/*! @method initDistanceBlendWithSpatialMixerDefinition:uid
+    @abstract Create a blend node definition
+    @param spatialMixerDefinition
+        A PHASESpatialMixerDefinition that will bind the blend parameter to the distance between the source and listener.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASEBlendNodeDefinition object
+*/
+- (instancetype)initDistanceBlendWithSpatialMixerDefinition:(PHASESpatialMixerDefinition *)spatialMixerDefinition
+                                                 identifier:(NSString*)identifier
+    NS_SWIFT_NAME(init(spatialMixerDefinition:identifier:));
+
+
+/*! @method initDistanceBlendWithSpatialMixerDefinition
+    @abstract Create a blend node definition
+    @param spatialMixerDefinition
+        A PHASESpatialMixerDefinition that will bind the blend parameter to the distance between the source and listener.
+    @return
+        A new PHASEBlendNodeDefinition object
+*/
+- (instancetype)initDistanceBlendWithSpatialMixerDefinition:
+    (PHASESpatialMixerDefinition *)spatialMixerDefinition
+    NS_DESIGNATED_INITIALIZER
+    NS_SWIFT_NAME(init(spatialMixerDefinition:));
+
+/*! @property blendParameterDefinition
+    @abstract The readonly property that returns the PHASENumberMetaParameterDefinition this blend node was created with and assigned to.
+*/
+@property(nonatomic, strong, readonly, nullable)
+    PHASENumberMetaParameterDefinition* blendParameterDefinition;
+
+/*! @property distanceSpatialMixerDefinition
+    @abstract The readonly property that returns the PHASESpatialMixerDefinition this blend node was created with and assigned to.
+*/
+@property(nonatomic, strong, readonly, nullable)
+    PHASESpatialMixerDefinition* spatialMixerDefinitionForDistance;
+
+
+/*! @method addRangeForInputValuesBelow:fullGainAtValue:fadeCurveType:subtree
+    @abstract Create a blend range that is active for all values below a given threshold.
+    @param value
+        The value for which the range will be active if the blend node's input value is below this threshold.
+    @param fullGainAtValue
+        This value defines a threshold for which a fade curve will be applied to the gain, when the input value is between "value" and "fullGainAtValue".
+    @param fadeCurveType
+        A curve type that defines which kind of fade curve to apply.
+    @param subtree
+        A PHASESoundEventNodeDefinition subtree that will be active for this range.
+*/
+- (void)addRangeForInputValuesBelow:(double)value
+                    fullGainAtValue:(double)fullGainAtValue
+                      fadeCurveType:(PHASECurveType)fadeCurveType
+                            subtree:(PHASESoundEventNodeDefinition*)subtree
+NS_SWIFT_NAME(addRangeForInputValues(belowValue:fullGainAtValue:fadeCurveType:subtree:));
+
+/*! @method addRangeForInputValuesBetween:highValue:fullGainAtLowValue:fullGainAtHighValue:lowFadeCurveType:highFadeCurveType:subtree
+    @abstract Create a blend range that is active for all input values between lowValue and highValue
+    @param lowValue
+        The lower bound for which this range is active.
+    @param highValue
+        The upper bound for which this range is active.
+    @param fullGainAtLowValue
+        The threshold for which a fade curve defined by lowFadeCurveType will be applied to the gain when the input value is between lowValue and fullGainAtLowValue
+    @param fullGainAtHighValue
+        The threshold for which a fade curve defined by highFadeCurveType will be applied to the gain when the input value is between highValue and fullGainAtHighValue
+    @param lowFadeCurveType
+        A curve type that defines which kind of fade curve to apply for the low fade range.
+    @param highFadeCurveType
+        A curve type that defines which kind of fade curve to apply for the high fade range..
+    @param subtree
+        A PHASESoundEventNodeDefinition subtree that will be active for this range.
+*/
+- (void)addRangeForInputValuesBetween:(double)lowValue
+                            highValue:(double)highValue
+                   fullGainAtLowValue:(double)fullGainAtLowValue
+                  fullGainAtHighValue:(double)fullGainAtHighValue
+                     lowFadeCurveType:(PHASECurveType)lowFadeCurveType
+                    highFadeCurveType:(PHASECurveType)highFadeCurveType
+                              subtree:(PHASESoundEventNodeDefinition*)subtree
+NS_SWIFT_NAME(addRangeForInputValues(betweenLowValue:highValue:fullGainAtLowValue:fullGainAtHighValue:lowFadeCurveType:highFadeCurveType:subTree:));
+
+/*! @method addRangeForInputValuesAbove:fullGainAtValue:fadeCurveType:subtree
+    @abstract Create a blend range that is active for all values above a given threshold.
+    @param value
+        The value for which the range will be active if the blend node's input value is above this threshold.
+    @param fullGainAtValue
+        This value defines a threshold for which a fade curve will be applied to the gain, when the input value is between "value" and "fullGainAtValue".
+    @param fadeCurveType
+        A curve type that defines which kind of fade curve to apply.
+    @param subtree
+        A PHASESoundEventNodeDefinition subtree that will be active for this range.
+*/
+- (void)addRangeForInputValuesAbove:(double)value
+                    fullGainAtValue:(double)fullGainAtValue
+                      fadeCurveType:(PHASECurveType)fadeCurveType
+                            subtree:(PHASESoundEventNodeDefinition*)subtree
+NS_SWIFT_NAME(addRangeForInputValues(aboveValue:fullGainAtValue:fadeCurveType:subTree:));
+
+/*! @method addRangeWithEnvelope:subtree
+    @abstract Create a blend range defined by a PHASEEnvelope object.
+    @param envelope
+        The PHASEEnvelope object that defines the output gain for a range.
+    @param subtree
+        A PHASESoundEventNodeDefinition subtree that will be active for this range.
+*/
+- (void)addRangeWithEnvelope:(PHASEEnvelope*)envelope
+                     subtree:(PHASESoundEventNodeDefinition*)subtree
+NS_SWIFT_NAME(addRange(envelope:subtree:));
+
+@end
+
+#pragma mark - PHASESwitchNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASESwitchNodeDefinition
+ *  @abstract An object for defining a switch sound event node when building a sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESwitchNodeDefinition : PHASESoundEventNodeDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithSwitchMetaParameterDefinition:uid
+    @abstract Create a switch node definition
+    @param switchMetaParameterDefinition
+        A metaparameter definition that wil be used to control the parameter of the switch node at runtime.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASESwitchNodeDefinition object
+*/
+- (instancetype)initWithSwitchMetaParameterDefinition:(PHASEStringMetaParameterDefinition*)switchMetaParameterDefinition
+                                           identifier:(NSString*)identifier NS_SWIFT_NAME(init(switchMetaParameterDefinition:identifier:));
+
+/*! @method initWithSwitchMetaParameterDefinition
+    @abstract Create a switch node definition
+    @param switchMetaParameterDefinition
+        A metaparameter definition that wil be used to control the parameter of the switch node at runtime.
+    @return
+        A new PHASESwitchNodeDefinition object
+*/
+- (instancetype)initWithSwitchMetaParameterDefinition:(PHASEStringMetaParameterDefinition*)switchMetaParameterDefinition
+  NS_SWIFT_NAME(init(switchMetaParameterDefinition:))NS_DESIGNATED_INITIALIZER;
+
+/*! @method addSubtree
+    @abstract Add a subtree to a switch node
+    @param subTree
+        A PHASESoundEventNodeDefinition that will be a child node of this switch node
+    @param switchValue
+        A string value that the metaparameter will use to activate this subtree
+*/
+- (void)addSubtree:(PHASESoundEventNodeDefinition*)subtree switchValue:(NSString*)switchValue;
+
+/*! @property mixerDefinition
+    @abstract The readonly property that returns the PHASEMixerDefinition this sampler was created with and assigned to.
+*/
+@property(nonatomic, strong, readonly) PHASEStringMetaParameterDefinition* switchMetaParameterDefinition;
+
+@end
+
+
+#pragma mark - PHASERandomNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASERandomNodeDefinition
+ *  @abstract An object for defining a random sound event node when building a sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASERandomNodeDefinition : PHASESoundEventNodeDefinition
+
+/*! @method init
+    @abstract Create a random node definition
+    @return
+        A new PHASERandomNodeDefinition object
+*/
+- (instancetype)init NS_DESIGNATED_INITIALIZER;
+
+/*! @method initWithIdentifier
+    @abstract Create a random node definition
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASERandomNodeDefinition object
+*/
+- (instancetype)initWithIdentifier:(NSString*)identifier;
+
+/*! @method addSubtree
+    @abstract Add a subtree to a random node
+    @param subtree
+        A PHASESoundEventNodeDefinition that will be a child node of this random node
+    @param weight
+        The probability weight of this subtree.  Higher numbers compared to other subtree weights will increase the likelihood of being
+   chosen.
+*/
+- (void)addSubtree:(PHASESoundEventNodeDefinition*)subtree weight:(NSNumber*)weight;
+
+/*! @property noRepeatLastX
+    @abstract Subtrees will not be repeated after they've been played for this many times this random node is activated.
+*/
+@property(nonatomic) NSInteger noRepeatLastX;
+
+@end
+
+#pragma mark - PHASEPushStreamNodeDefinition
+
+/****************************************************************************************************/
+/*! @interface PHASEPushStreamNodeDefinition
+ *  @abstract An object for defining a push stream sound event node when building a sound event.
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEPushStreamNodeDefinition : PHASEGeneratorNodeDefinition
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithMixerDefinition:format:uid
+    @abstract Create a push stream node definition
+    @param mixerDefinition
+        The mixer definition this stream will be assigned to
+    @param format
+        The AVAudioFormat object that will define the attributes of the audio this node will accept.
+    @param identifier
+        An optional custom identifier to give to this object
+    @return
+        A new PHASEPushStreamNodeDefinition object
+*/
+- (instancetype)initWithMixerDefinition:(PHASEMixerDefinition*)mixerDefinition format:(AVAudioFormat*)format identifier:(NSString*)identifier;
+
+/*! @method initWithMixerDefinition:format
+    @abstract Create a push stream node definition
+    @param mixerDefinition
+        The mixer definition this stream will be assigned to
+    @param format
+        The AVAudioFormat object that will define the attributes of the audio this node will accept.
+    @return
+        A new PHASEPushStreamNodeDefinition object
+*/
+- (instancetype)initWithMixerDefinition:(PHASEMixerDefinition*)mixerDefinition format:(AVAudioFormat*)format NS_DESIGNATED_INITIALIZER;
+
+/*! @property format
+    @abstract The readonly property that returns the AVAudioFormat that this stream was initialized with
+*/
+@property(nonatomic, strong, readonly) AVAudioFormat* format;
+
+/*! @property normalize
+    @abstract Determines whether or not the engine should normalize the stream. The default value is NO.
+    @discussion
+        In general, client's are advised to normalize the input. Normalization is required to properly calibrate the output level.
+        If you set this value to NO, it's advised that you do custom normalization of the audio data prior to passing the buffers to PHASE.
+*/
+@property(nonatomic) BOOL normalize;
+
+@end
+
+#pragma mark - PHASEPushStreamNode
+
+/****************************************************************************************************/
+/*! @interface PHASEPushStreamNode
+ *  @abstract An object for addessing an instance of a stream in an executing sound event
+ */
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEPushStreamNode : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @property gainMetaParameter
+    @abstract If specified during construction, the metaparameter for controlling gain will be available here
+*/
+@property(nonatomic, strong, nullable, readonly) PHASENumberMetaParameter* gainMetaParameter;
+
+/*! @property rateMetaParameter
+    @abstract If specified during construction, the metaparameter for controlling rate/pitch will be available here
+*/
+@property(nonatomic, strong, nullable, readonly) PHASENumberMetaParameter* rateMetaParameter;
+
+/*! @property mixer
+    @abstract The readonly property that returns the PHASEMixer this sampler was created with and assigned to.
+*/
+@property(nonatomic, strong, readonly) PHASEMixer* mixer;
+
+/*! @property format
+    @abstract The readonly property that returns the AVAudioFormat that this stream was initialized with.
+*/
+@property(nonatomic, strong, readonly) AVAudioFormat* format;
+
+/*! @method scheduleBuffer
+    @abstract Schedule a buffer for playback.
+    @param buffer
+        The buffer with PCM audio data.
+    @discussion
+        Schedules the buffer to be played following any previously scheduled buffer(s).
+        Buffer format must be same as format specified during player instantiation
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer;
+
+/*! @method scheduleBuffer:completionCallbackType:completionHandler:
+    @abstract Schedule a buffer for playback.
+    @param buffer
+        The buffer with PCM audio data.
+    @param completionCallbackType
+        option to specify when the completion handler must be called.
+    @param completionHandler
+        The completionHandler to be called as per the callback type specified or when
+        the player is stopped, at which point the buffer can be recycled.
+    @discussion
+        Schedules the buffer to be played following any previously scheduled buffer(s).
+        Buffer format must be same as format specified during player instantiation
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer
+  completionCallbackType:(PHASEPushStreamCompletionCallbackType)completionCallbackType
+       completionHandler:(void (^)(PHASEPushStreamCompletionCallbackType callbackType))completionHandler;
+
+/*! @method scheduleBuffer:atTime:options:
+    @abstract Schedule a buffer for playback at a given time.
+    @param buffer
+        The buffer with PCM audio data.
+    @param when
+        The time at which to play the buffer. see the discussion of timestamps, above.
+    @param options
+        options for looping, interrupting other buffers, etc.
+    @discussion
+        Buffer format must be same as format specified during player instantiation
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer atTime:(nullable AVAudioTime*)when options:(PHASEPushStreamBufferOptions)options;
+
+/*! @method scheduleBuffer:atTime:options:completionCallbackType:completionHandler:
+    @abstract Schedule a buffer for playback at a given time.
+    @param buffer
+        The buffer with PCM audio data.
+    @param when
+        The time at which to play the buffer. see the discussion of timestamps, above.
+    @param options
+        options for looping, interrupting other buffers, etc.
+    @param completionCallbackType
+        option to specify when the completion handler must be called.
+    @param completionHandler
+        The completionHandler to be called as per the callback type specified or when
+        the player is stopped, at which point the buffer can be recycled.
+    @discussion
+        Buffer format must be same as format specified during player instantiation
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer
+                atTime:(nullable AVAudioTime*)when
+               options:(PHASEPushStreamBufferOptions)options
+completionCallbackType:(PHASEPushStreamCompletionCallbackType)completionCallbackType
+     completionHandler:(void (^)(PHASEPushStreamCompletionCallbackType callbackType))completionHandler;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASESoundEventNodes_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h	2021-06-02 11:07:59.000000000 -0400
@@ -0,0 +1,58 @@
+//
+//  PHASESource.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASESource_h
+#define PHASESource_h
+
+#import <PHASE/PHASEObject.h>
+#import <PHASE/PHASEShape.h>
+#import <PHASE/PHASETypes.h>
+
+@class PHASEEngine;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @class PHASESource
+    @abstract A PHASESource represents a sound source as PHASEShape(s)
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESource : PHASEObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithEngine:
+    @abstract Initialize a new point source.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine NS_DESIGNATED_INITIALIZER;
+
+/*! @method initWithEngine:shapes:
+    @abstract Initialize a new source with shapes.
+    @param shapes
+        The shape(s) of the source within the world
+    @discussion
+        The shapes array cannot be empty, otherwise an exception is thrown.
+*/
+- (instancetype)initWithEngine:(PHASEEngine*)engine shapes:(NSArray<PHASEShape*>*)shapes NS_DESIGNATED_INITIALIZER;
+
+/*! @property gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic, assign) double gain;
+
+/*! @property shapes
+    @abstract Array of shapes associated with this source.
+*/
+@property(nonatomic, readonly, copy) NSArray<PHASEShape*>* shapes;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASESource_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h	2021-06-02 11:07:58.000000000 -0400
@@ -0,0 +1,115 @@
+//
+//  PHASESpatialPipeline.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASESpatialPipeline_h
+#define PHASESpatialPipeline_h
+
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - PHASESpatialCategory
+
+typedef NSString* PHASESpatialCategory NS_TYPED_ENUM;
+
+/*!
+ @constant PHASESpatialCategoryDirectPathTransmission
+ */
+OS_EXPORT PHASESpatialCategory const  PHASESpatialCategoryDirectPathTransmission;
+
+/*!
+ @constant PHASEEarlyReflections
+ */
+OS_EXPORT PHASESpatialCategory const PHASESpatialCategoryEarlyReflections;
+
+/*!
+ @constant PHASELateReverb
+ */
+OS_EXPORT PHASESpatialCategory const PHASESpatialCategoryLateReverb;
+
+#pragma mark - PHASESpatialPipelineOptions
+
+/****************************************************************************************************/
+/*!
+    @enum PHASESpatialPipelineOptions
+    @abstract    Spatial Pipeline Options.
+
+    @constant    PHASESpatialPipelineOptionDirectPathTransmission
+                    Direct Path Transmission.
+    @constant    PHASESpatialPipelineOptionEarlyReflections
+                    Early Reflections.
+    @constant    PHASESpatialPipelineOptionLateReverb
+                    Late Reverb.
+*/
+typedef NS_OPTIONS(NSUInteger, PHASESpatialPipelineOptions) {
+    PHASESpatialPipelineOptionDirectPathTransmission = 1UL << 0,
+    PHASESpatialPipelineOptionEarlyReflections = 1UL << 1,
+    PHASESpatialPipelineOptionLateReverb = 1UL << 2,
+}
+NS_SWIFT_NAME(PHASESpatialPipeline.Options);
+
+#pragma mark - PHASESpatialPipelineEntry
+
+@class PHASENumberMetaParameterDefinition;
+
+/****************************************************************************************************/
+/*! @class PHASESpatialPipelineEntry
+    @abstract Spatial Pipeline Entry.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESpatialPipelineEntry : NSObject
+
+/*! @property sendLevel
+    @abstract Send level.
+    @note Values are clamped to the range [0, 1]. Default value is 1.
+*/
+@property(nonatomic) double sendLevel;
+
+/*! @property sendLevelMetaParameterDefinition
+    @abstract An optional metaparameter used to drive the send level during playback.
+*/
+@property(nonatomic, strong, nullable) PHASENumberMetaParameterDefinition* sendLevelMetaParameterDefinition;
+
+@end
+
+#pragma mark - PHASESpatialPipeline
+
+/****************************************************************************************************/
+/*! @class PHASESpatialPipeline
+    @abstract Spatial Pipeline.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASESpatialPipeline : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*! @method initWithOptions
+    @abstract Initialize a Spatial Pipeline with the provided options.
+    @param options
+        Options for direct path transmission, early reflections, late reverb, etc.
+    @discussion It's invalid to pass options == 0 to this function. Doing so will return nil.
+*/
+- (nullable instancetype)initWithOptions:(PHASESpatialPipelineOptions)options NS_DESIGNATED_INITIALIZER;
+
+/*! @property options
+    @abstract Spatial Pipeline Options.
+*/
+@property(nonatomic, readonly) PHASESpatialPipelineOptions options;
+
+/*! @property entries
+    @abstract A dictionary of entries in the Spatial Pipeline.
+    @discussion Upon initialization, an entry will be created for every option in the PHASESpatialPipelineOptions options passed to
+   PHASESpatialPipeline:initWithOptions.
+*/
+@property(readonly, copy) NSDictionary<PHASESpatialCategory, PHASESpatialPipelineEntry*>* entries;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASESpatialPipeline_h */
diff -ruN /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h
--- /Applications/Xcode_12.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h	2021-06-02 12:48:07.000000000 -0400
@@ -0,0 +1,350 @@
+//
+//  PHASETypes.h
+//  PHASE
+//
+//  Copyright © 2021 Apple. All rights reserved.
+//
+
+#ifndef PHASETypes_h
+#define PHASETypes_h
+
+#import <Foundation/Foundation.h>
+
+/*! @enum PHASEUpdateMode
+    @abstract Update mode for the engine.
+    @discussion
+            PHASEUpdateModeAutomatic - The system will update itself automatically.  No need to call any functions to keep the engine going.
+            PHASEUpdateModeManual - The user will need to call [PHASEEngine update] periodically to process new commands and updates.
+*/
+typedef NS_ENUM(NSInteger, PHASEUpdateMode) {
+    PHASEUpdateModeAutomatic = 0,
+    PHASEUpdateModeManual = 1,
+}
+NS_SWIFT_NAME(PHASEEngine.UpdateMode);
+
+/*! @enum PHASERenderingState
+    @abstract Rendering state of players and sound events
+*/
+typedef NS_ENUM(NSInteger, PHASERenderingState) {
+    PHASERenderingStateStopped = 0,
+    PHASERenderingStateStarted = 1,
+    PHASERenderingStatePaused = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.RenderingState);
+
+/*! @enum PHASESpatializationMode
+    @abstract Setting for the engine's spatializer (e.g. Binaural, Channel-based, etc.)
+*/
+typedef NS_ENUM(NSInteger, PHASESpatializationMode) {
+    PHASESpatializationModeAutomatic = 0,
+    PHASESpatializationModeBinaural,     /** Use binaural rendering, either for headphones or speakers. Note that when rendering binaural over speakers, special filters are applied to achieve the expected behavior. */
+    PHASESpatializationModeChannelBased, /** Use the appropriate channel-based panning algorithm for the output layout. */
+};
+
+/*! @enum PHASEReverbPreset
+    @abstract List of reverb presets
+*/
+typedef NS_ENUM(NSInteger, PHASEReverbPreset) {
+    PHASEReverbPresetNone = 0,
+    PHASEReverbPresetCathedral,
+    PHASEReverbPresetLargeChamber,
+    PHASEReverbPresetLargeHall,
+    PHASEReverbPresetLargeRoom,
+    PHASEReverbPresetLargeRoom2,
+    PHASEReverbPresetLargeHall2,
+    PHASEReverbPresetMediumChamber,
+    PHASEReverbPresetMediumHall,
+    PHASEReverbPresetMediumHall2,
+    PHASEReverbPresetMediumHall3,
+    PHASEReverbPresetMediumRoom,
+    PHASEReverbPresetSmallRoom
+};
+
+/*!
+ * @const PHASEErrorDomain
+ * @abstract The NSErrorDomain for general PHASE errors
+ */
+OS_EXPORT NSErrorDomain const PHASEErrorDomain;
+
+/*!
+ * @enum           PHASEError
+ * @abstract       General PHASE error codes
+ */
+typedef NS_ERROR_ENUM(PHASEErrorDomain, PHASEError) {
+    PHASEErrorInitializeFailed = 'PHEa',
+};
+
+/*!
+ * @const PHASEParseErrorDomain
+ * @abstract The NSErrorDomain for PHASE parse errors
+ */
+OS_EXPORT NSErrorDomain const PHASEParseErrorDomain;
+
+/*!
+ * @enum           PHASEParserError
+ * @abstract       Parser specific error codes
+ */
+typedef NS_ERROR_ENUM(PHASEParseErrorDomain, PHASEParserError) {
+    PHASEParserErrorParseError = 'PHpa',
+    PHASEParserErrorMissingRequiredField = 'PHpb',
+    PHASEParserErrorFieldWithWrongType = 'PHpc',
+    PHASEParserErrorOutOfMemory = 'PHpd',
+    PHASEParserErrorStringTooLong = 'PHpe',
+    PHASEParserErrorInvalidValue = 'PHpf',
+    PHASEParserErrorWrongVersion = 'PHpg',
+    PHASEParserErrorBadData = 'PHph',
+    PHASEParserErrorNotImplemented = 'PHpi',
+};
+
+/*!
+ * @const PHASESoundEventErrorDomain
+ * @abstract The NSErrorDomain for PHASE sound event errors
+ */
+OS_EXPORT NSErrorDomain const PHASESoundEventErrorDomain;
+
+/*!
+ * @enum           PHASESoundEventError
+ * @abstract       Sound Event specific error codes
+ */
+typedef NS_ERROR_ENUM(PHASESoundEventErrorDomain, PHASESoundEventError) {
+    PHASESoundEventErrorNotFound = 'PHta',
+    PHASESoundEventErrorBadData = 'PHtb',
+    PHASESoundEventErrorInvalidInstance = 'PHtc',
+    PHASESoundEventErrorAPIMisuse = 'PHtd',
+    PHASESoundEventErrorSystemNotInitialized = 'PHte',
+    PHASESoundEventErrorOutOfMemory = 'PHtf',
+};
+
+/*!
+ * @const PHASEExternalStreamErrorDomain
+ * @abstract The NSErrorDomain for PHASE external stream errors
+ */
+OS_EXPORT NSErrorDomain const PHASEExternalStreamErrorDomain;
+
+/*!
+ * @enum           PHASEExternalStreamError
+ * @abstract       External stream specific error codes
+ */
+typedef NS_ERROR_ENUM(PHASEExternalStreamErrorDomain, PHASEExternalStreamError) {
+    PHASEExternalStreamErrorNotAvailable = 'PHna',
+    PHASEExternalStreamErrorInvalidArguments = 'PHia',
+    PHASEExternalStreamErrorStreamAlreadyExists = 'PHse',
+    PHASEExternalStreamErrorStreamDoesNotExist = 'PHns',
+    PHASEExternalStreamErrorStreamAlreadyClaimed = 'PHcs',
+    PHASEExternalStreamErrorStreamNotClaimed = 'PHus',
+    PHASEExternalStreamErrorAllocationFailed = 'PHaf',
+};
+
+/*!
+ * @const PHASEAssetErrorDomain
+ * @abstract The NSErrorDomain for PHASE Asset errors
+ */
+OS_EXPORT NSErrorDomain const PHASEAssetErrorDomain;
+
+/*!
+ * @enum           PHASEAssetError
+ * @abstract       Asset specific error codes
+ */
+typedef NS_ERROR_ENUM(PHASEAssetErrorDomain, PHASEAssetError) {
+    PHASEAssetErrorFailedToLoad = 'PHaa',
+    PHASEAssetErrorInvalidEngineInstance = 'PHab',
+    PHASEAssetErrorBadParameters = 'PHac',
+    PHASEAssetErrorAlreadyExists = 'PHad',
+    PHASEAssetErrorGeneralError = 'PHae',
+    PHASEAssetErrorMemoryAllocation = 'PHaf',
+};
+
+typedef NS_ENUM(NSInteger, PHASESoundEventStartHandlerReason) {
+    PHASESoundEventStartHandlerReasonError = 0,
+    PHASESoundEventStartHandlerReasonFinishedPlaying = 1,
+    PHASESoundEventStartHandlerReasonTerminated = 2,
+    PHASESoundEventStartHandlerReasonKilled API_DEPRECATED_WITH_REPLACEMENT("PHASESoundEventStartHandlerReasonTerminated", macos(10.5, 10.5)) = PHASESoundEventStartHandlerReasonTerminated,
+}
+NS_SWIFT_NAME(PHASESoundEvent.StartHandlerReason);
+
+typedef NS_ENUM(NSInteger, PHASESoundEventPrepareHandlerReason) {
+    PHASESoundEventPrepareHandlerReasonError = 0,
+    PHASESoundEventPrepareHandlerReasonPrepared = 1,
+    PHASESoundEventPrepareHandlerReasonTerminated = 2,
+    PHASESoundEventPrepareHandlerReasonKilled API_DEPRECATED_WITH_REPLACEMENT("PHASESoundEventPrepareHandlerReasonTerminated", macos(10.5, 10.5)) = PHASESoundEventPrepareHandlerReasonTerminated,
+}
+NS_SWIFT_NAME(PHASESoundEvent.PrepareHandlerReason);
+
+typedef NS_ENUM(NSInteger, PHASESoundEventSeekHandlerReason) {
+    PHASESoundEventSeekHandlerReasonError = 0,
+    PHASESoundEventSeekHandlerReasonErrorSeekAlreadyInProgress = 1,
+    PHASESoundEventSeekHandlerReasonSeekSuccessful = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.SeekHandlerReason);
+
+typedef NS_ENUM(NSInteger, PHASESoundEventPrepareState) {
+    PHASESoundEventPrepareStatePrepareNotStarted = 0,
+    PHASESoundEventPrepareStatePrepareInProgress = 1,
+    PHASESoundEventPrepareStatePrepared = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.PrepareState);
+
+typedef NS_ENUM(NSInteger, PHASEAssetUnregisterHandlerReason) {
+    PHASEAssetUnregisterHandlerReasonError,
+    PHASEAssetUnregisterHandlerReasonSuccess,
+}
+NS_SWIFT_NAME(PHASEAsset.UnregisterHandlerReason);
+
+/*!
+    @enum PHASEAssetType
+    @abstract   Asset types.
+    @discussion Determines how assets are loaded into memory and prepared for playback.
+                'Preparing' an asset for playback may include decompression and/or format conversion,
+                depending on the type of the underlying asset data.
+    @constant   PHASEAssetTypeResident
+                    If the asset is on disk, it is loaded into memory and prepared for playback.
+                    If the asset is in memory, it is prepared for playback.
+    @constant   PHASEAssetTypeStreamed
+                    If the asset is on disk, it is streamed from disk into memory and prepared during playback.
+                    If the asset is in memory, it is streamed from memory and prepared during playback.
+*/
+typedef NS_ENUM(NSInteger, PHASEAssetType) {
+    PHASEAssetTypeResident = 0,
+    PHASEAssetTypeStreamed = 1,
+}
+NS_SWIFT_NAME(PHASEAsset.AssetType);
+
+/****************************************************************************************************/
+/*! @enum PHASECurveType
+ *  @abstract Enumeration for specifying interpolation curves for gain and other values.
+ *  @discussion
+ *  PHASECurveTypeLinear
+ *  A curve using a linear function
+ *
+ *  PHASECurveTypeLog
+ *     A curve using a logarithmic function
+ *
+ *  PHASECurveTypeExponential
+ *     A curve using an exponential (inverse logarithmic) function
+ *
+ *  PHASECurveTypeRounded
+ *     A curve that starts exponential, but ends logarithmic.
+ *     (quick at the ends and slow in the middle)
+ *
+ *  PHASECurveTypeSCurve
+ *     A curve that starts logarithmic, but ends exponential.
+ *     (slow at the ends and quick in the middle)
+ */
+typedef NS_ENUM(NSInteger, PHASECurveType) {
+    PHASECurveTypeLinear,
+    PHASECurveTypeSquared,
+    PHASECurveTypeInverseSquared,
+    PHASECurveTypeCubed,
+    PHASECurveTypeInverseCubed,
+    PHASECurveTypeSineReciprocal,
+    PHASECurveTypeSine,
+    PHASECurveTypeSigmoid,
+    PHASECurveTypeInverseSigmoid
+};
+
+/****************************************************************************************************/
+/*! @enum PHASECullOption
+ *  @abstract Enumeration of various cull options.
+ *  @discussion
+ *      PHASECullOptionTerminate
+ *          If cullable, the sound will stop and not restart.
+ *
+ *      PHASECullOptionSleepWakeAtZero
+ *          If cullable, put to sleep. Upon waking, restart at beginning of sound.
+ *
+ *      PHASECullOptionSleepWakeAtRandomOffset
+ *          If cullable, put to sleep. Upon waking, start playback at random offset in sound.
+ *
+ *      PHASECullOptionSleepWakeAtRealtimeOffset
+ *          If cullable, put to sleep. Upon waking, start playback at realtime offset in sound.
+ *
+ *      PHASECullOptionDoNotCull
+ *          Never cull.
+ */
+typedef NS_ENUM(NSInteger, PHASECullOption) {
+    PHASECullOptionTerminate,
+    PHASECullOptionSleepWakeAtZero,
+    PHASECullOptionSleepWakeAtRandomOffset,
+    PHASECullOptionSleepWakeAtRealtimeOffset,
+    PHASECullOptionDoNotCull,
+    PHASECullOptionKill API_DEPRECATED_WITH_REPLACEMENT("PHASECullOptionTerminate", macos(10.5, 10.5)) = PHASECullOptionTerminate,
+};
+
+/****************************************************************************************************/
+/*! @enum PHASEPlaybackMode
+ *  @abstract Enumeration of various playback types
+ *  @discussion
+ *      PHASEPlaybackModeOneShot
+ *          Play the sound asset once and stop.
+ *
+ *      PHASEPlaybackModeLooping
+ *          Loop the sound asset indefinitely.
+ *
+ *      PHASEPlaybackModeLoopingRandomStartOffset
+ *          Loop the audio buffer indefinitely, starting at a random offset.
+ */
+typedef NS_ENUM(NSInteger, PHASEPlaybackMode) {
+    PHASEPlaybackModeOneShot,
+    PHASEPlaybackModeLooping,
+    PHASEPlaybackModeLoopingRandomStartOffset,
+};
+
+/****************************************************************************************************/
+/*! @enum PHASEMixerType
+ *  @abstract Enumeration of various mixer types
+ *  @discussion
+ *      PHASEMixerTypeSpatial
+ *          Sound is spatialized using rotation and translation.
+ *
+ *      PHASEMixerTypeAmbient
+ *          Sound is spatialized using rotation only.
+ *
+ *      PHASEMixerTypeChannel
+ *          Sound is not spatialized.
+ *
+ */
+typedef NS_ENUM(NSInteger, PHASEMixerType) {
+    PHASEMixerTypeUnknown = 0,
+    PHASEMixerTypeSpatial,
+    PHASEMixerTypeAmbient,
+    PHASEMixerTypeChannel,
+}
+NS_SWIFT_NAME(PHASEMixer.MixerType);
+
+/****************************************************************************************************/
+/*! @enum PHASENormalizationMode
+ *  @abstract Normalization Mode
+ *  @note In general, client's are advised to normalize the input. Normalization is required to properly calibrate the output level.
+ *  @discussion
+ *      PHASENormalizationModeNone
+ *          No normalization is applied. In this case, it's advised that the client perform custom normalization.
+ *
+ *      PHASENormalizationModeDynamic
+ *          Dynamic Normalization is applied.
+ */
+typedef NS_ENUM(NSInteger, PHASENormalizationMode) {
+    PHASENormalizationModeNone = 0,
+    PHASENormalizationModeDynamic = 1,
+};
+
+/****************************************************************************************************/
+/*! @enum PHASECalibrationMode
+ *  @abstract Calibration Mode
+ *  @note In general, client's are advised use a calibrated input mode. Setting the value to PHASECalibrationModeNone is not advised.
+ *  @discussion
+ *      PHASECalibrationModeNone
+ *          Linear gain with no reference (uncalibrated).
+ *
+ *      PHASECalibrationModeRelativeSpl
+ *          SPL relative to a device-tuned SPL (when available).
+ *
+ *      PHASECalibrationModeAbsoluteSpl
+ *          Absolute SPL (the system will hit the value 'if it can').
+ */
+typedef NS_ENUM(NSInteger, PHASECalibrationMode) {
+    PHASECalibrationModeNone = 0,
+    PHASECalibrationModeRelativeSpl = 1,
+    PHASECalibrationModeAbsoluteSpl = 2
+};
+
+#endif /* PHASETypes_h */
Clone this wiki locally