Skip to content

PHASE tvOS xcode13.0 beta2

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

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

diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASE.h	2021-06-12 19:49:45.000000000 -0400
@@ -0,0 +1,30 @@
+//
+//  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>
+#import <PHASE/PHASEGeneratorParameters.h>
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEAssetRegistry.h	2021-06-17 14:34:30.000000000 -0400
@@ -0,0 +1,243 @@
+//
+//  PHASEAssetRegistry.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEAssetRegistry_h
+#define PHASEAssetRegistry_h
+
+#import <CoreAudioTypes/CoreAudioTypes.h>
+#import <AVFAudio/AVAudioFormat.h>
+#import <PHASE/PHASESoundEventNodes.h>
+#import <PHASE/PHASETypes.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PHASEMetaParameter;
+
+#pragma mark - PHASEAsset
+
+/**************************************************************************************************/
+/*!
+    @interface PHASEAsset
+    @abstract An object that represents a registered asset in the asset registry.
+ */
+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 uniquely represents this asset.
+*/
+@property(readonly) NSString* identifier;
+
+@end
+
+#pragma mark - PHASESoundAsset
+
+/****************************************************************************************************/
+/*!
+    @interface PHASESoundAsset
+    @abstract An object that represents a registered sound asset in the asset registry.
+ */
+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 the sound asset, if applicable.
+*/
+@property(readonly, nullable) NSURL* url;
+
+/*!
+    @property data
+    @abstract The buffer for the sound asset, if applicable.
+*/
+@property(readonly, nullable) NSData* data;
+
+/*!
+    @property type
+    @abstract The sound asset type.
+*/
+@property(readonly) PHASEAssetType type;
+
+@end
+
+#pragma mark - PHASESoundEventNodeAsset
+
+/****************************************************************************************************/
+/*!
+    @interface PHASESoundEventNodeAsset
+    @abstract An object that represents a registered sound event asset in the asset registry.
+ */
+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 asset registry.
+ */
+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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEAssetRegistry
+    @abstract Asset registry
+ */
+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 Register a global metaparameter with the asset registry.
+    @param metaParameterDefinition
+        The metaparameter 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
+NS_SWIFT_NAME(registerGlobalMetaParameter(metaParameterDefinition:));
+
+
+/*!
+    @method registerSoundEventAssetWithRootNode:identifier:error
+    @abstract Register a sound event asset with the asset registry.
+    @param rootNode
+        The root node of the sound event asset to register.
+    @param identifier
+        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 Register an audio file as a sound asset in the system.
+    @note
+        This function is synchronous and thread-safe.
+        While it could potentially take some time to preprocess the asset into the runtime format,
+        you can run this function for multiple assets in multiple threads to speed up the loading process.
+    @param url
+        The URL of the audio file.
+    @param identifier
+        The identifier to assign to this sound asset. Nil generates an automatic identifier.
+    @param assetType
+        The asset type for this sound asset.
+    @param channelLayout
+        The audio channel layout for this sound 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 audio 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 Register audio data as a sound asset in the system.
+    @note
+        This function is synchronous and thread-safe.
+        While it could potentially take some time to preprocess the asset into the runtime format,
+        you can run this function for multiple assets in multiple threads to speed up the loading process.
+    @param data
+        A buffer containing the audio data to register as a sound asset.
+        Audio data must either be a single channel-interleaved PCM buffer or per-channel de-interleaved PCM buffers packed back to back.
+    @param identifier
+        The identifier to assign to this sound 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 Unregister and unload an asset.
+    @param identifier
+        The identifier of the PHASEAsset object to unregister
+    @param completionBlock
+        An optional completion block that will be called when the asset has been unregistered.
+        Once you receive this callback, it's safe to deallocate external resources, if applicable.
+*/
+- (void)unregisterAssetWithIdentifier:(NSString*)identifier completionBlock:(nullable void (^)(bool success))completionBlock
+NS_SWIFT_NAME(unregisterAsset(identifier:completionBlock:));
+
+/*!
+    @method assetForIdentifier
+    @abstract Finds an asset in the asset registry, given an identifier.
+    @param identifier
+        The identifier of this asset
+    @return
+        A PHASEAsset object, or nil if one could not be found.
+*/
+- (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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDefinition.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,38 @@
+//
+//  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 The base class for a definition.
+    @discussion
+        Contains an identifer that uniquely represents this definition.
+ */
+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 identifier
+    @abstract The identifier that uniquely represents this definition.
+*/
+@property(readonly, nonatomic) NSString* identifier;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDefinition_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDirectivityModel.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,171 @@
+//
+//  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 of the subband, 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 The default value for each angle is 360.0. outerAngle must be >= innerAngle.
+*/
+- (void)setInnerAngle:(double)innerAngle outerAngle:(double)outerAngle
+NS_SWIFT_NAME(setAngles(innerAngle:outerAngle:));
+
+/*!
+    @property frequency
+    @abstract The frequency of the subband, 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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEDirectivityModelParameters
+    @abstract Directivity model parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEDirectivityModelParameters : NSObject
+
+@end
+
+#pragma mark - PHASECardioidDirectivityModelParameters
+
+/****************************************************************************************************/
+/*!
+    @interface 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
+API_DEPRECATED_WITH_REPLACEMENT("-initWithSubbandParameters:", macos(10.16, 11.0), ios(14.0, 14.0));
+
+@property(nonatomic, strong, readonly) NSMutableArray<PHASECardioidDirectivityModelSubbandParameters*>* subbands
+API_DEPRECATED_WITH_REPLACEMENT("-initWithSubbandParameters:", macos(10.16, 11.0), ios(14.0, 14.0));
+
+- (instancetype)initWithSubbandParameters: (NSArray<PHASECardioidDirectivityModelSubbandParameters*>*) subbandParameters;
+
+/*!
+    @property subbandParameters
+    @abstract An array of subband parameters.
+*/
+@property(nonatomic, strong, readonly) NSArray<PHASECardioidDirectivityModelSubbandParameters*>* subbandParameters;
+
+@end
+
+#pragma mark - PHASEConeDirectivityModelParameters
+
+/****************************************************************************************************/
+/*!
+    @interface 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)initWithSubbandParameters: (NSArray<PHASEConeDirectivityModelSubbandParameters*>*) subbandParameters;
+
+/*!
+    @property subbandParameters
+    @abstract An array of subband parameters.
+*/
+@property(nonatomic, strong, readonly) NSArray<PHASEConeDirectivityModelSubbandParameters*>* subbandParameters;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDirectivityModel_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDistanceModel.h	2021-06-22 17:34:47.000000000 -0400
@@ -0,0 +1,129 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEDistanceModelFadeOutParameters
+    @abstract Distance model fade out parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEDistanceModelFadeOutParameters : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*!
+    @method initWithCullDistance
+    @abstract Initialize 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
+        An instance, or nil if initialization fails.
+*/
+- (instancetype)initWithCullDistance:(double)cullDistance NS_DESIGNATED_INITIALIZER;
+
+/*!
+    @property cullDistance
+    @abstract The distance beyond which the sound will be culled.
+    @note
+        Values are clamped the range [1, DBL_MAX].
+        This value is scaled by unitsPerMeter internally, so can be provided at the client's native spatial scale.
+*/
+@property(nonatomic,readonly) double cullDistance;
+
+@end
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEDistanceModelParameters
+    @abstract Distance model parameters.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) 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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEGeometricSpreadingDistanceModelParameters
+    @abstract Geometric spreading distance model parameters.
+    @discussion
+        Standard geometric spreading loss as a function of geometry and distance.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASEGeometricSpreadingDistanceModelParameters : PHASEDistanceModelParameters
+
+- (instancetype)init;
+
+/*!
+    @property rolloffFactor
+    @abstract 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(12.0), ios(15.0)) API_UNAVAILABLE(tvos) 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 values are interpreted as distance and the y values interpreted as gain.
+    @return
+        An instance, or nil if initialization failed.
+*/
+- (instancetype)initWithEnvelope:(PHASEEnvelope*)envelope NS_DESIGNATED_INITIALIZER;
+
+/*!
+    @property envelope
+    @abstract A PHASEEnvelope object
+    @note
+        The x values are interpreted as distance and the y values are interpreted as gain.
+*/
+@property(nonatomic, strong, readonly) PHASEEnvelope* envelope;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDistanceModel_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEDucker.h	2021-06-17 14:34:30.000000000 -0400
@@ -0,0 +1,139 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEDucker
+    @abstract A PHASEDucker is used to describe the ducking behavior across different groups.
+*/
+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:
+    @discussion
+        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.
+    @note
+        The ducker is initialially inactive. You must call activate() to make it active.
+        The ducker must also be deactivated with a call to deactivate() before you can release it from memory.
+    @param engine
+        The engine  to register this ducker with.
+    @param sourceGroups
+        Thesource groups that will trigger the ducker when a sound in one of the source groups starts playback.
+    @param targetGroups
+        The target groups that will be ducked when a sound in one of the source groups triggers the ducker.
+    @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 type of curve function to use during the attack phase of gain reduction.
+    @param releaseCurve
+        The type of curve function to use during the release phase of gain reduction.
+*/
+- (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:));
+
+/*!
+    @method activate
+    @abstract Activates the ducker
+*/
+-(void)activate;
+
+/*!
+    @method deactivate
+    @abstract Deactivates the ducker
+*/
+-(void)deactivate;
+
+/*!
+    @method isActive
+    @abstract Returns YES if the ducker is active; otherwise, returns NO.
+*/
+-(BOOL)isActive;
+
+/*!
+    @property sourceGroups
+    @abstract The source groups that will trigger the ducker when a sound in one of the source groups starts playback.
+*/
+@property(nonatomic, readonly, copy) NSSet<PHASEGroup*>* sourceGroups;
+
+/*!
+    @property targetGroups
+    @abstract The target groups that will be ducked when a sound in one of the source groups triggers the ducker.
+*/
+@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 type of curve function to use during the attack phase of gain reduction.
+*/
+@property(nonatomic, readonly) PHASECurveType attackCurve;
+
+/*!
+    @property releaseCurve
+    @abstract The type of curve function to use during the release phase of gain reduction.
+*/
+@property(nonatomic, readonly) PHASECurveType releaseCurve;
+
+/*!
+    @property identifier
+    @abstract The identifier that uniquely represents this ducker.
+*/
+@property(nonatomic, readonly) NSString* identifier;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEDucker_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEngine.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,174 @@
+//
+//  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 <AVFAudio/AVAudioFormat.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEEngine
+    @abstract PHASE engine instance.
+*/
+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 with an update mode.
+    @param updateMode
+        Defines how the engine 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 the engine instance on the calling thread.
+    @discussion
+        This will kick off all of the API commands called since the last call to update,
+        update any systems and objects that need to be kept current, and call any registered handlers.
+    @note
+        This function has no effect if the engine's update mode is PHASEUpdateModeAutomatic.
+*/
+- (void)update;
+
+/*!
+    @property outputSpatializationMode
+    @discussion
+        When set to a value other than PHASESpatializationModeAutomatic,
+        overrides the default output spatializer and uses the specified one instead.
+*/
+@property(nonatomic, assign) PHASESpatializationMode outputSpatializationMode;
+
+/*!
+    @property renderingState
+    @abstract The engine's current rendering state.
+*/
+@property(nonatomic, readonly) PHASERenderingState renderingState;
+
+/*!
+    @property rootObject
+    @abstract The root object of the engine's scene graph.
+    @discussion
+        Attach objects to the engine's rootObject or one of its children to make them active within the engine's scene graph.
+        This will ensure they take part in the simulation.
+    @note
+        The rootObject 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 rootObject's transform 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 default medium in the engine.
+    @discussion
+        The default value is PHASEMediumPresetDefault.
+*/
+@property(nonatomic, strong) PHASEMedium* defaultMedium;
+
+/*!
+    @property defaultReverbPreset
+    @abstract The default reverb preset in the engine.
+    @discussion
+        The default value 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 spatial 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 soundEvents
+    @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(nonatomic, 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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEEnvelope.h	2021-06-17 14:34:29.000000000 -0400
@@ -0,0 +1,175 @@
+//
+//  PHASEEnvelope.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEEnvelope_h
+#define PHASEEnvelope_h
+
+#import <PHASE/PHASETypes.h>
+
+#import <simd/types.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*!
+    @interface PHASENumericPair
+    @abstract A numeric pair.
+*/
+OS_EXPORT API_AVAILABLE(macos(12.0), ios(15.0)) API_UNAVAILABLE(tvos) API_UNAVAILABLE(watchos)
+@interface PHASENumericPair : NSObject
+
+/*!
+    @method initWithFirstValue:secondValue
+    @abstract Initialize a numeric pair with a first and second value.
+    @param first
+        The first value in the pair.
+    @param second
+        The second value in the pair.
+    @return
+        A new pair.
+ */
+- (instancetype)initWithFirstValue:(double)first secondValue:(double)second;
+
+/*!
+    @property first
+    @abstract The first value in the numeric pair.
+    @discussion
+        The default value is 0.0.
+ */
+@property(nonatomic, assign) double first;
+
+/*! @property second
+    @abstract The second value in the numeric pair.
+    @discussion
+        The default value is 0.0.
+ */
+@property(nonatomic, assign) double second;
+
+@end
+
+#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 an endPoint and a curveType.
+    @param endPoint
+        The end point of the segment.
+    @param curveType
+        The curve type.
+    @return
+        A new envelope.
+ */
+- (instancetype)initWithEndPoint:(simd_double2)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) simd_double2 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
+
+/****************************************************************************************************/
+/*!
+    @interface 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.
+    @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.
+    @param startPoint
+        The start point of the envelope.
+    @param segments
+        An array of segments.
+    @return
+        A new envelope.
+ */
+- (nullable instancetype)initWithStartPoint:(simd_double2)startPoint
+                                   segments:(NSArray<PHASEEnvelopeSegment*>*)segments NS_DESIGNATED_INITIALIZER;
+
+/*!
+    @method evaluateForValue
+    @abstract Evaluates the envelope.
+    @discussion
+        If required, x will be clamped to the envelope's domain.
+    @param x
+        The input along the x-axis.
+    @return
+        The output along the y-axis.
+ */
+- (double)evaluateForValue:(double)x
+NS_SWIFT_NAME(evaluate(x:));
+
+/*!
+    @property startPoint
+    @abstract The start point of the envelope.
+ */
+@property(nonatomic, readonly) simd_double2 startPoint;
+
+/*!
+    @property segments
+    @abstract The segments of the envelope.
+ */
+@property(nonatomic, readonly, copy) NSArray<PHASEEnvelopeSegment*>* segments;
+
+/*!
+    @property domain
+    @abstract The domain (along the x-axis).
+    @discussion
+        The first value in the pair is the minimum value of the domain.
+        The second value in the pair is the maximum value of the domain.
+ */
+@property(nonatomic, strong, readonly) PHASENumericPair* domain;
+
+/*!
+    @property range
+    @abstract The range (along the y-axis).
+    @discussion
+        The first value in the pair is the minimum value of the range.
+        The second value in the pair is the maximum value of the range.
+ */
+@property(nonatomic, strong, readonly) PHASENumericPair* range;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEEnvelope_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGeneratorParameters.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGeneratorParameters.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGeneratorParameters.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGeneratorParameters.h	2021-06-17 03:44:26.000000000 -0400
@@ -0,0 +1,41 @@
+//
+//  PHASEGeneratorParameters.h
+//  PHASE
+//
+//  Copyright © 2019 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASEGeneratorParams_h
+#define PHASEGeneratorParams_h
+
+#import <PHASE/PHASEGroup.h>
+#import <PHASE/PHASETypes.h>
+
+@class PHASENumberMetaParameterDefinition;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/****************************************************************************************************/
+/*! @interface PHASEGeneratorParameters
+ *  @abstract An object that holds a standard set of audio parameters common to several objects
+ */
+OS_EXPORT API_DEPRECATED("", macos(10.15, 10.15), ios(14.0,14.0), tvos(15.0,15.0)) API_UNAVAILABLE(watchos)
+@interface PHASEGeneratorParameters : NSObject
+
+/*! @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 gain
+    @abstract Linear gain scalar.
+    @note Values are clamped to the range [0.25, 4]. Default value is 1.
+*/
+@property(nonatomic, assign) double rate;
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEGeneratorParams_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroup.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,145 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEGroup
+    @discussion
+        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
+
+- (instancetype)init NS_UNAVAILABLE;
++ (instancetype)new NS_UNAVAILABLE;
+
+/*!
+    @method initWithIdentifier:
+    @abstract Initialize a new 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 engine so that referenced assets can find it.
+    @note
+        An exception will be thrown if the engine is invalid or the group already exists.
+    @param engine
+        An engine 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.
+        The duration is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+    @param curveType
+        The type of curve function that is applied during the fade period.
+*/
+- (void)fadeGain:(double)gain duration:(double)duration curveType:(PHASECurveType)curveType
+NS_SWIFT_NAME(fadeGain(gain:duration: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.
+        The duration is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+    @param curveType
+        The type of curve that is applied during the fade period.
+*/
+- (void)fadeRate:(double)rate duration:(double)duration curveType:(PHASECurveType)curveType
+NS_SWIFT_NAME(fadeRate(rate:duration: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 identifier that uniquely represents 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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEGroupPreset.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,178 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface 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
+
+/****************************************************************************************************/
+/*!
+    @interface 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 or deactivate to switch to 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<NSString*, 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<NSString*, 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 internal timeToTarget value is used.
+        The current preset will be deactivated automatically.
+ */
+- (void)activate;
+
+/*!
+    @method activateWithTimeToTargetOverride
+    @abstract
+        Activate this preset in the PHASEEngine object it was initialized with.
+        The current preset will be deactivated automatically.
+    @param timeToTargetOverride
+        Override the timeToTarget value in the preset with this value.
+    @note
+        The timeToTargetOverride is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+ */
+- (void)activateWithTimeToTargetOverride:(double)timeToTargetOverride
+NS_SWIFT_NAME(activate(timeToTargetOverride:));
+
+/*!
+    @method deactivate
+    @abstract
+        Deactivate this preset and return the system to default unity values. The internal timeToReset value is used.
+ */
+- (void)deactivate;
+
+/*!
+    @method deactivateWithTimeToResetOverride
+    @abstract
+        Deactivate this preset and return the system to default unity values.
+    @param timeToResetOverride
+        Override the timeToReset value in the preset with this value.
+    @note
+        The timeToResetOverride is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+ */
+- (void)deactivateWithTimeToResetOverride:(double)timeToResetOverride
+NS_SWIFT_NAME(deactivate(timeToResetOverride:));
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASEGroupPreset_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEListener.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,47 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEListener
+    @abstract A PHASEListener represents the listener's point of view within the simulated acoustic scene.
+*/
+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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMaterial.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,62 @@
+//
+//  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 Material preset
+*/
+typedef NS_ENUM(NSInteger, PHASEMaterialPreset) {
+    PHASEMaterialPresetDefault = 'mDef',
+    PHASEMaterialPresetCardboard = 'mCrd',
+    PHASEMaterialPresetGlass = 'mGls',
+    PHASEMaterialPresetBrickwork = 'mBrk',
+    PHASEMaterialPresetConcrete = 'mCcr',
+    PHASEMaterialPresetGypsumBoard = 'mGyp',
+    PHASEMaterialPresetDrywall = 'mDrw',
+    PHASEMaterialPresetDoorWoodLight = 'mDWL',
+    PHASEMaterialPresetDoorWoodHeavy = 'mDWH',
+    PHASEMaterialPresetDoorSoundproof = 'mDsp',
+    PHASEMaterialPresetWindowSinglePane = 'mWsp',
+    PHASEMaterialPresetWindowDoublePane = 'mWdp',
+};
+
+
+#pragma mark - PHASEMaterial
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEMaterial
+    @abstract A PHASEMaterial describes the acoustic properties of a material.
+*/
+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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMedium.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,48 @@
+//
+//  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 Medium preset
+*/
+typedef NS_ENUM(NSInteger, PHASEMediumPreset) {
+    PHASEMediumPresetDefault = 'mdDf',
+    PHASEMediumPresetRoomAir = 'mdRA',
+}
+NS_SWIFT_NAME(PHASEMedium.Preset);
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEMedium
+    @abstract A PHASEMedium describes the acoustic properties of a medium.
+*/
+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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMetaParameter.h	2021-06-22 17:34:48.000000000 -0400
@@ -0,0 +1,310 @@
+//
+//  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 value of the metaparameter.
+*/
+@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:minimum:maximum: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:minimum:maximum
+    @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 that uniquely represents 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
+NS_SWIFT_NAME(fade(value: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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEMixer.h	2021-06-17 14:34:30.000000000 -0400
@@ -0,0 +1,299 @@
+//
+//  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 An base object that defines how audio is rendered to the output.
+ */
+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 Spatial mixer definition.
+    @discussion
+        Spatial mixers render audio with spatialization and environmental effects.
+ */
+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 Ambient mixer definition.
+    @discussion
+        Ambient mixers render audio with spatialization but without environmental effects.
+    @note
+        Ambient mixers do not support distance modeling or directivity modeling.
+        Clients can however set the orientation at initialization time.
+ */
+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
+NS_SWIFT_NAME(init(channelLayout:orientation: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
+NS_SWIFT_NAME(init(channelLayout:orientation:));
+
+/*!
+    @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 Channel mixer definition.
+    @discussion
+        Channel mixers render audio without spatialization or environmental effects.
+ */
+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
+NS_SWIFT_NAME(init(channelLayout: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
+NS_SWIFT_NAME(init(channelLayout:));
+
+/*!
+    @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 identifier
+    @abstract The identifier that uniquely represents this mixer.
+*/
+@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;
+
+@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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEObject.h	2021-06-17 03:44:26.000000000 -0400
@@ -0,0 +1,113 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEObject
+    @abstract A PHASEObject represents a 3D object in the engine, which can be organized into a hierarchy with relative transforms.
+*/
+
+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 this object
+    @param child
+        The child object
+    @param error
+        Returns an error if the child already has a parent different from this object.
+    @return
+        YES for success
+*/
+- (BOOL)addChild:(PHASEObject*)child error:(NSError**)error
+NS_SWIFT_NAME(addChild(child:));
+
+/*!
+    @method removeChild:
+    @abstract Remove a child from this object.
+*/
+- (void)removeChild:(PHASEObject*)child
+NS_SWIFT_NAME(removeChild(child:));
+
+/*!
+    @method removeChildren
+    @abstract Remove all the children from this object
+*/
+- (void)removeChildren;
+
+/*!
+    @property parent
+    @abstract The parent of this object, or nil if this object doesn't have a parent object.
+*/
+@property(nullable, nonatomic, readonly, weak) PHASEObject* parent;
+
+/*!
+    @property children
+    @abstract The children of this 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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEOccluder.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,50 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEOccluder
+    @abstract A PHASEOccluder represents a shape and associated material that can affect sound transmission within the simulated acoustic scene.
+*/
+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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASEShape.h	2021-06-17 03:44:26.000000000 -0400
@@ -0,0 +1,98 @@
+//
+//  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
+
+/****************************************************************************************************/
+/*!
+    @interface 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)
+NS_SWIFT_NAME(PHASEShape.Element)
+@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
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEShape
+    @abstract A three-dimensional shape that is used as the physical representation of a source or occluder in a scene.
+*/
+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 a mesh.
+    @discussion
+        One PHASEShapeElement will be created for every submesh within the mesh.
+    @note
+        A single shape can be used to create multiple instances of sources and occluders.
+        For example, a client could create a single shape for a window, then create multiple occluders from it.
+        The same can be done with with sources.
+    @param engine
+        The engine this shape will be used with.
+    @param mesh
+        A Model I/O mesh object.
+    @return
+        A new shape object
+*/
+- (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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEvent.h	2021-06-22 17:37:47.000000000 -0400
@@ -0,0 +1,187 @@
+//
+//  PHASESoundEvent.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASESoundEvent_h
+#define PHASESoundEvent_h
+
+#import <AVFAudio/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
+
+/****************************************************************************************************/
+/*!
+    @interface 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 prepareWithCompletionBlock
+    @abstract Prepare the sound event
+    @param completionBlock
+        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 function notifies the engine to begin preparing a sound event, then returns immediately.
+        Once the sound event is prepared (or has failed to prepare), you will receive a callback via the completionBlock.
+        If you call startWithCompletionBlock() before receiving the callback, the sound event will start as soon as it's prepared.
+ */
+- (void)prepareWithCompletionBlock:(void (^)(PHASESoundEventPrepareHandlerReason reason))completionBlock;
+
+/*!
+    @method prepareAndReturnError
+    @abstract Prepare the sound event
+    @discussion
+        This function notifies the engine to begin preparing a sound event, then returns immediately.
+        If an error occurs while kicking off the work, the function will return false and optionally fill out error.
+ */
+- (BOOL)prepareAndReturnError:(NSError* _Nullable *)error;
+
+/*!
+    @method startWithCompletionBlock
+    @abstract Start the sound event
+    @param completionBlock
+        The block that will be called when the sound event has stopped.
+    @discussion
+        This function notifies the engine to start the sound event, then returns immediately.
+        Once the sound event is playing (or has failed to start), you will receive a callback via the completionBlock.
+        Playback will begin immediately if the sound event has been prepared; otherwise, it will start as soon as it is finished preparing.
+ */
+- (BOOL)startWithCompletionBlock:(void (^)(PHASESoundEventStartHandlerReason reason))completionBlock;
+
+/*!
+    @method startAndReturnError
+    @abstract Start the sound event
+    @discussion
+        This function notifies the engine to start the sound event, then returns immediately.
+        If an error occurs while kicking off the work, the function will return false and optionally fill out error.
+        Playback will begin immediately if the sound event has been prepared; otherwise, it will start as soon as it is finished preparing.
+*/
+- (BOOL)startAndReturnError:(NSError* _Nullable *)error;
+
+/*!
+    @method seekToTime:completionBlock
+    @abstract Seeks all leaf nodes in a PHASESoundEvent to a specified time relative to the start of the sound event.
+    @discussion
+        This function notifies the engine to seek the sound event, then returns immediately.
+        Once the sound event has seeked to the new offset (or has failed to seek), you will receive a callback via the completionBlock.
+        If any leaf nodes do not support seeking, those nodes will ignore this 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 wake up.
+    @note
+        The time is scaled by unitsPerSecond internally, so can be provided at the client's native time scale.
+*/
+- (BOOL)seekToTime:(double)time completionBlock:(nullable void (^)(PHASESoundEventSeekHandlerReason reason))completionBlock
+NS_SWIFT_NAME(seek(time:completionBlock:));
+
+/*!
+    @method pause
+    @abstract Pause the sound event.
+ */
+- (void)pause;
+
+/*!
+    @method resume
+    @abstract Resume the 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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESoundEventNodes.h	2021-06-17 03:44:26.000000000 -0400
@@ -0,0 +1,703 @@
+//
+//  PHASESoundEventNodes.h
+//  PHASE
+//
+//  Copyright © 2021 Apple Inc. All rights reserved.
+//
+
+#ifndef PHASESoundEventNodes_h
+#define PHASESoundEventNodes_h
+
+#import <AVFAudio/AVAudioBuffer.h>
+#import <AVFAudio/AVAudioFormat.h>
+#import <AVFAudio/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
+NS_SWIFT_NAME(setCalibrationMode(calibrationMode:level:));
+
+/*!
+    @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 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.
+    @discussion
+        Sampler nodes play back registered sound assets.
+ */
+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:identifier
+    @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;
+
+/*! @property cullOption
+    @abstract The cull option for the sampler.
+    @discussion
+        The default value is PHASECullOptionTerminate.
+*/
+ @property(nonatomic) PHASECullOption cullOption;
+
+/*! @property playbackMode
+    @abstract The playback mode for the sampler.
+    @discussion
+     If the playback mode is set to PHASEPlaybackModeOneShot, you need to make sure the the audio data in the registered sound asset associated with this sampler
+ begins and ends at zero crossings. Otherwise, you'll hear a click when beginning playback and / or ending playback.
+    If the playback mode is set to PHASEPlaybackModeLooping, you need to make sure the audio data in the registered sound asset associated with this sampler
+ loops smoothly from the end sample to the start sample. Please verify this during authoring. Failing to do so will result in audible clicks at loop boundaries.
+    The default value is PHASEPlaybackModeOneShot.
+*/
+@property(nonatomic) PHASEPlaybackMode playbackMode;
+
+@end
+
+#pragma mark - PHASEContainerNodeDefinition
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEContainerNodeDefinition
+    @abstract An object for defining a container sound event node when building a sound event.
+    @discussion
+        A container node plays back all its children at once.
+ */
+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 addSubtree
+    @abstract Add a subtree to this node
+    @param subtree
+        Add a subtree of PHASESoundEventNodeDefinition nodes beneath this node.
+*/
+- (void)addSubtree:(PHASESoundEventNodeDefinition*)subtree
+NS_SWIFT_NAME(addSubtree(subtree:));
+
+@end
+
+#pragma mark - PHASEBlendNodeDefinition
+
+/****************************************************************************************************/
+/*!
+    @interface PHASEBlendNodeDefinition
+    @abstract An object for defining a blend sound event node when building a sound event.
+    @discussion
+        A blend node blends between its children based on a numeric parameter.
+ */
+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:identifier
+    @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:identifier
+    @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(addRangeForInputValuesBelow(value: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(addRangeForInputValuesBetween(lowValue: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(addRangeForInputValuesAbove(value: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.
+    @discussion
+        A switch node switches between its children based on a string parameter.
+ */
+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:identifier
+    @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
+NS_SWIFT_NAME(addSubtree(subtree: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.
+    @discussion
+        A random node selects one of its children based on a weighted random choice.
+ */
+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
+NS_SWIFT_NAME(addSubtree(subtree:weight:));
+
+/*! @property uniqueSelectionQueueLength
+    @abstract Subtrees will not be repeated until after this random node is activated uniqueSelectionQueueLength number of times.
+*/
+@property(nonatomic) NSInteger uniqueSelectionQueueLength;
+
+@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:identifier
+    @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).
+        The buffer format must be same as format specified during player instantiation
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer
+NS_SWIFT_NAME(scheduleBuffer(buffer:));
+
+/*!
+    @method scheduleBuffer:completionCallbackType:completionHandler:
+    @abstract Schedule a buffer for playback.
+    @discussion
+        Schedules the buffer to be played following any previously scheduled buffer(s).
+        The buffer format must be same as format specified during player instantiation
+    @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 specified completion callback type
+        or when the player is stopped, at which point the buffer can be recycled.
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer
+  completionCallbackType:(PHASEPushStreamCompletionCallbackType)completionCallbackType
+       completionHandler:(void (^)(PHASEPushStreamCompletionCallbackType callbackType))completionHandler
+NS_SWIFT_NAME(scheduleBuffer(buffer:completionCallbackType:completionHandler:));
+
+/*! @method scheduleBuffer:atTime:options:
+    @abstract Schedule a buffer for playback at a given time.
+    @discussion
+        The buffer format must be same as format specified during player instantiation
+    @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.
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer atTime:(nullable AVAudioTime*)when options:(PHASEPushStreamBufferOptions)options
+NS_SWIFT_NAME(scheduleBuffer(buffer:time:options:));
+
+/*!
+    @method scheduleBuffer:atTime:options:completionCallbackType:completionHandler:
+    @abstract Schedule a buffer for playback at a given time.
+    @discussion
+        The buffer format must be same as format specified during player instantiation
+    @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.
+*/
+- (void)scheduleBuffer:(AVAudioPCMBuffer*)buffer
+                atTime:(nullable AVAudioTime*)when
+               options:(PHASEPushStreamBufferOptions)options
+completionCallbackType:(PHASEPushStreamCompletionCallbackType)completionCallbackType
+     completionHandler:(void (^)(PHASEPushStreamCompletionCallbackType callbackType))completionHandler
+NS_SWIFT_NAME(scheduleBuffer(buffer:time:options:completionCallbackType:completionHandler:));
+
+@end
+
+NS_ASSUME_NONNULL_END
+
+#endif /* PHASESoundEventNodes_h */
diff -ruN /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESource.h	2021-06-17 03:44:27.000000000 -0400
@@ -0,0 +1,68 @@
+//
+//  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 where sound originates within the simulated acoustic scene.
+    @discussion
+        PHASE supports both point sources and volumetric sources.
+        A point source simulates the sound from a point in space.
+        A volumetric source simulates the sound from a shape.
+*/
+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 volumetric 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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASESpatialPipeline.h	2021-06-17 03:44:26.000000000 -0400
@@ -0,0 +1,123 @@
+//
+//  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.
+    @discussion
+        It's invalid to pass options == 0 to this function. Doing so will return nil.
+    @param options
+        Options for direct path transmission, early reflections, late reverb, etc.
+*/
+- (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_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h
--- /Applications/Xcode_13.0.0-beta.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h	1969-12-31 19:00:00.000000000 -0500
+++ /Applications/Xcode_13.0.0-beta2.app/Contents/Developer/Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS.sdk/System/Library/Frameworks/PHASE.framework/Headers/PHASETypes.h	2021-06-16 03:25:24.000000000 -0400
@@ -0,0 +1,318 @@
+//
+//  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
+        The engine update mode determines the rate at which the engine consumes client commands, performs internal updates, and calls any registered handlers.
+        All API calls to the engine are queued until the engine updates.
+        The engine update mode determines if the engine or the application triggers the consumption of API commands.
+    @note
+        The update mode does not affect the Audio IO Thread or rendering, in general. The Audio IO Thread always runs in the background, independent of the update mode.
+    @constant PHASEUpdateModeAutomatic
+        The engine will internally consume client commands at a rate opaque to the client.
+        In general, automatic update mode is meant for simpler applications that just want to play sounds, without having to maintain a strict update loop.
+        Due to the fact that the engine consumes client commands at its own internal rate, the client is never guaranteed that two independent commands will synchronize.
+    @constant PHASEUpdateModeManual
+        When an application requires precise synchronization of API calls with the main update, manual mode is the best choice.
+        In this mode, clients will need to call [PHASEEngine update] periodically to process new commands, perform internal updates, and receive callbacks.
+        The rate at which the client calls update should at least match the rate at which other time-critical subsystems are updated, such graphics rendering etc.
+        API calls between calls to [PHASEEngine update] are guaranteed to be synchronized.
+        For example, the client can move two sources into place, request to start two sound events (one per source), then call [PHASEEngine update].
+        These calls will be guaranteed to be processed at the same time.
+*/
+
+typedef NS_ENUM(NSInteger, PHASEUpdateMode) {
+    PHASEUpdateModeAutomatic = 0,
+    PHASEUpdateModeManual = 1,
+}
+NS_SWIFT_NAME(PHASEEngine.UpdateMode);
+
+/*!
+    @enum PHASERenderingState
+    @abstract Rendering state for sound events.
+    @constant PHASERenderingStateStopped
+        The sound event is stopped.
+    @constant PHASERenderingStateStarted
+        The sound event is playing back.
+    @constant PHASERenderingStatePaused
+        The sound event is paused.
+*/
+typedef NS_ENUM(NSInteger, PHASERenderingState) {
+    PHASERenderingStateStopped = 0,
+    PHASERenderingStateStarted = 1,
+    PHASERenderingStatePaused = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.RenderingState);
+
+/*!
+    @enum PHASESpatializationMode
+    @abstract Spatialization mode.
+    @constant PHASESpatializationModeAutomatic
+        Automatically select the spatialization mode based on the current output device.
+    @constant PHASESpatializationModeAlwaysUseBinaural
+        Always use binaural rendering, whether playing back on headphones or speakers.
+        Note that when rendering binaural over speakers, special filters are applied to achieve the expected behavior.
+    @constant PHASESpatializationModeAlwaysUseChannelBased
+        Always use the appropriate channel-based panning algorithm for the output layout.
+        Note that when rendering channel-based over headphones, the sound will play back in stereo.
+*/
+typedef NS_ENUM(NSInteger, PHASESpatializationMode) {
+    PHASESpatializationModeAutomatic = 0,
+    PHASESpatializationModeAlwaysUseBinaural = 1,
+    PHASESpatializationModeAlwaysUseChannelBased = 2,
+};
+
+/*!
+    @enum PHASEReverbPreset
+    @abstract Reverb preset
+*/
+typedef NS_ENUM(NSInteger, PHASEReverbPreset) {
+    PHASEReverbPresetNone = 'rNon',
+    PHASEReverbPresetSmallRoom = 'rSRm',
+    PHASEReverbPresetMediumRoom = 'rMRm',
+    PHASEReverbPresetLargeRoom = 'rLR1',
+    PHASEReverbPresetLargeRoom2 = 'rLR2',
+    PHASEReverbPresetMediumChamber = 'rMCh',
+    PHASEReverbPresetLargeChamber = 'rLCh',
+    PHASEReverbPresetMediumHall = 'rMH1',
+    PHASEReverbPresetMediumHall2 = 'rMH2',
+    PHASEReverbPresetMediumHall3 = 'rMH3',
+    PHASEReverbPresetLargeHall = 'rLH1',
+    PHASEReverbPresetLargeHall2 = 'rLH2',
+    PHASEReverbPresetCathedral = 'rCth',
+};
+
+/*!
+    @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 PHASESoundEventErrorDomain
+    @abstract The NSErrorDomain for PHASE sound event errors.
+ */
+OS_EXPORT NSErrorDomain const PHASESoundEventErrorDomain;
+
+/*!
+    @enum PHASESoundEventError
+    @abstract Sound event error.
+ */
+typedef NS_ERROR_ENUM(PHASESoundEventErrorDomain, PHASESoundEventError) {
+    PHASESoundEventErrorNotFound = 'PHta',
+    PHASESoundEventErrorBadData = 'PHtb',
+    PHASESoundEventErrorInvalidInstance = 'PHtc',
+    PHASESoundEventErrorAPIMisuse = 'PHtd',
+    PHASESoundEventErrorSystemNotInitialized = 'PHte',
+    PHASESoundEventErrorOutOfMemory = 'PHtf',
+};
+
+/*!
+    @const PHASEAssetErrorDomain
+    @abstract The NSErrorDomain for PHASE Asset errors
+ */
+OS_EXPORT NSErrorDomain const PHASEAssetErrorDomain;
+
+/*!
+    @enum PHASEAssetError
+    @abstract Asset error
+ */
+typedef NS_ERROR_ENUM(PHASEAssetErrorDomain, PHASEAssetError) {
+    PHASEAssetErrorFailedToLoad = 'PHaa',
+    PHASEAssetErrorInvalidEngineInstance = 'PHab',
+    PHASEAssetErrorBadParameters = 'PHac',
+    PHASEAssetErrorAlreadyExists = 'PHad',
+    PHASEAssetErrorGeneralError = 'PHae',
+    PHASEAssetErrorMemoryAllocation = 'PHaf',
+};
+
+/*!
+    @enum PHASESoundEventPrepareHandlerReason
+    @abstract Sound event prepare handler reason
+ */
+typedef NS_ENUM(NSInteger, PHASESoundEventPrepareHandlerReason) {
+    PHASESoundEventPrepareHandlerReasonError = 0,
+    PHASESoundEventPrepareHandlerReasonPrepared = 1,
+    PHASESoundEventPrepareHandlerReasonTerminated = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.PrepareHandlerReason);
+
+/*!
+    @enum PHASESoundEventStartHandlerReason
+    @abstract Sound event start handler reason
+ */
+typedef NS_ENUM(NSInteger, PHASESoundEventStartHandlerReason) {
+    PHASESoundEventStartHandlerReasonError = 0,
+    PHASESoundEventStartHandlerReasonFinishedPlaying = 1,
+    PHASESoundEventStartHandlerReasonTerminated = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.StartHandlerReason);
+
+/*!
+    @enum PHASESoundEventSeekHandlerReason
+    @abstract Sound event seek handler reason
+ */
+typedef NS_ENUM(NSInteger, PHASESoundEventSeekHandlerReason) {
+    PHASESoundEventSeekHandlerReasonError = 0,
+    PHASESoundEventSeekHandlerReasonErrorSeekAlreadyInProgress = 1,
+    PHASESoundEventSeekHandlerReasonSeekSuccessful = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.SeekHandlerReason);
+
+/*!
+    @enum PHASESoundEventPrepareState
+    @abstract Sound event prepare state
+ */
+typedef NS_ENUM(NSInteger, PHASESoundEventPrepareState) {
+    PHASESoundEventPrepareStatePrepareNotStarted = 0,
+    PHASESoundEventPrepareStatePrepareInProgress = 1,
+    PHASESoundEventPrepareStatePrepared = 2,
+}
+NS_SWIFT_NAME(PHASESoundEvent.PrepareState);
+
+/*!
+    @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 Curve types.
+    @constant PHASECurveTypeLinear
+        A curve of the form y = x.
+    @constant PHASECurveTypeSquared
+        A curve of the form y = x^2.
+    @constant PHASECurveTypeInverseSquared
+        A curve of the form y = 1 / x^2.
+    @constant PHASECurveTypeCubed
+        A curve of the form y = x^3.
+    @constant PHASECurveTypeInverseCubed
+        A curve of the form y = 1 / x^3.
+    @constant PHASECurveTypeSine
+        A sine curve.
+    @constant PHASECurveTypeInverseSine
+        An inverse sine curve.
+    @constant PHASECurveTypeSigmoid
+        A sigmoid curve.
+        Also known as an s-curve, slow at the ends and quick in the middle.
+    @constant PHASECurveTypeInverseSigmoid
+        An inverse sigmoid curve.
+        Also known as an inverse s-curve, quick at the ends and slow in the middle.
+ */
+typedef NS_ENUM(NSInteger, PHASECurveType) {
+    PHASECurveTypeLinear = 'crLn',
+    PHASECurveTypeSquared = 'crSq',
+    PHASECurveTypeInverseSquared = 'crIQ',
+    PHASECurveTypeCubed = 'crCu',
+    PHASECurveTypeInverseCubed = 'crIC',
+    PHASECurveTypeSine = 'crSn',
+    PHASECurveTypeInverseSine = 'crIS',
+    PHASECurveTypeSigmoid = 'crSg',
+    PHASECurveTypeInverseSigmoid = 'crIG',
+};
+
+/*!
+    @enum PHASECullOption
+    @abstract Cull option.
+    @discussion Determines what the engine should do when a sound asset becomes cullable.
+    @constant PHASECullOptionTerminate
+        If cullable, the sound asset will stop. Note that this can occur before or during playback.
+    @constant PHASECullOptionSleepWakeAtZero
+        If cullable, the sound asset will be put to sleep. Upon waking, start playback at the beginning.
+    @constant PHASECullOptionSleepWakeAtRandomOffset
+        If cullable, the sound asset will be put to sleep. Upon waking, start playback at random offset.
+    @constant PHASECullOptionSleepWakeAtRealtimeOffset
+        If cullable, the sound asset will be put to sleep. Upon waking, start playback at realtime offset.
+    @constant PHASECullOptionDoNotCull
+        If cullable, continue playback, even if the sound is inaudible.
+*/
+typedef NS_ENUM(NSInteger, PHASECullOption) {
+    PHASECullOptionTerminate = 0,
+    PHASECullOptionSleepWakeAtZero = 1,
+    PHASECullOptionSleepWakeAtRandomOffset = 2,
+    PHASECullOptionSleepWakeAtRealtimeOffset = 3,
+    PHASECullOptionDoNotCull = 4,
+};
+
+/*!
+    @enum PHASEPlaybackMode
+    @abstract Playback mode.
+    @constant PHASEPlaybackModeOneShot
+        Play the sound asset once, then stop.
+    @constant PHASEPlaybackModeLooping
+        Loop the sound asset indefinitely.
+*/
+typedef NS_ENUM(NSInteger, PHASEPlaybackMode) {
+    PHASEPlaybackModeOneShot = 0,
+    PHASEPlaybackModeLooping = 1,
+};
+
+/*!
+   @enum PHASENormalizationMode
+   @abstract Normalization mode
+   @discussion Determines how sound assets are normalized for calibrated loudness on the output device.
+   @note In general, clients are advised to normalize sound assets (and streams).
+        This will make it easier to mix the content once assigned to a generator with a specified calbration mode and level.
+   @constant PHASENormalizationModeNone
+        No normalization is applied. In this case, it's advised that the client perform custom normalization.
+   @constant PHASENormalizationModeDynamic
+        Dynamic Normalization is applied.
+ */
+typedef NS_ENUM(NSInteger, PHASENormalizationMode) {
+    PHASENormalizationModeNone = 0,
+    PHASENormalizationModeDynamic = 1,
+};
+
+/*!
+    @enum PHASECalibrationMode
+    @abstract Calibration mode.
+    @note In general, clients are advised use a calibrated input mode. Setting the value to PHASECalibrationModeNone is not advised.
+    @constant PHASECalibrationModeNone
+        Linear gain with no reference (uncailbrated).
+    @constant PHASECalibrationModeRelativeSpl
+        SPL relative to a device-tuned SPL (when available).
+    @constant PHASECalibrationModeAbsoluteSpl
+        Absolute SPL. The system will hit the value 'if it can' (depending on the capabilities of the current output device).
+*/
+typedef NS_ENUM(NSInteger, PHASECalibrationMode) {
+    PHASECalibrationModeNone = 0,
+    PHASECalibrationModeRelativeSpl = 1,
+    PHASECalibrationModeAbsoluteSpl = 2,
+};
+
+#endif /* PHASETypes_h */
+
Clone this wiki locally