Skip to content

AVFAudio macOS xcode27.0 b1

Alex Soto edited this page Jun 9, 2026 · 1 revision

#AVFAudio.framework

diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h	2026-04-18 23:16:03
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConnectionPoint.h	2026-05-22 08:28:50
@@ -19,7 +19,7 @@
 	
 		Instances of this class are immutable.
 */
-API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
 @interface AVAudioConnectionPoint : NSObject {
 @private
 	AVAudioNode *_node;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h	2026-04-18 21:41:01
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioConverter.h	2026-05-22 08:25:33
@@ -151,14 +151,13 @@
 		convertToBuffer:error:withInputFromBlock: will return as much output as could be converted
 		with the input already supplied.
 */
-typedef AVAudioBuffer * __nullable (^ NS_SWIFT_SENDABLE AVAudioConverterInputBlock)(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus* outStatus);
+typedef AVAudioBuffer * __nullable (^ NS_SWIFT_NONSENDABLE AVAudioConverterInputBlock)(AVAudioPacketCount inNumberOfPackets, AVAudioConverterInputStatus* outStatus);
 
 /*!
 	@class AVAudioConverter
 	@abstract
 		Converts streams of audio between various formats.
 */
-NS_SWIFT_SENDABLE
 API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
 @interface AVAudioConverter : NSObject {
 @private
@@ -301,7 +300,7 @@
 		It attempts to fill the buffer to its capacity. On return, the buffer's length indicates the number of 
 		sample frames successfully converted.
 */
-- (AVAudioConverterOutputStatus)convertToBuffer:(AVAudioBuffer *)outputBuffer error:(NSError **)outError withInputFromBlock:(AVAudioConverterInputBlock)inputBlock;
+- (AVAudioConverterOutputStatus)convertToBuffer:(AVAudioBuffer *)outputBuffer error:(NSError **)outError withInputFromBlock:(NS_NOESCAPE AVAudioConverterInputBlock)inputBlock;
 
 @end
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h	2026-04-18 19:16:24
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEngine.h	2026-05-22 05:24:21
@@ -135,9 +135,21 @@
 	In such a case, the client could implement their own synchronization between their realtime
 	and non-realtime threads and retry calling `AVAudioEngineManualRenderingBlock`.
 */
-typedef AVAudioEngineManualRenderingStatus (^AVAudioEngineManualRenderingBlock)(AVAudioFrameCount numberOfFrames, AudioBufferList *outBuffer, OSStatus * __nullable outError) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+typedef AVAudioEngineManualRenderingStatus (^ NS_SWIFT_NONSENDABLE AVAudioEngineManualRenderingBlock)(AVAudioFrameCount numberOfFrames, AudioBufferList *outBuffer, OSStatus * __nullable outError) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
 
 /*!
+	@typedef		AVMIDIEventListBlock
+	@abstract		A block used by an audio unit to send or receive MIDIEventList data.
+	@param eventSampleTime
+					The time in samples at which the MIDI events are to occur.
+	@param cable
+					The virtual cable number associated with this MIDI data.
+	@param eventList
+					One full MIDI, partial MIDI SysEx, or a full SysEx UMP message.
+*/
+typedef OSStatus (^ NS_SWIFT_NONSENDABLE AVMIDIEventListBlock)(SInt64 eventSampleTime, UInt8 cable, const struct MIDIEventList* eventList) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), watchos(27.0));
+
+/*!
 	@class AVAudioEngine
 
 	An AVAudioEngine contains a group of connected AVAudioNodes ("nodes"), each of which performs
@@ -157,7 +169,7 @@
 	audio device and rendering in response to requests from the client, normally at or
 	faster than realtime rate.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioEngine : NSObject {
 @private
 	void *_impl;
@@ -227,8 +239,37 @@
 	Note that any pre-existing connection(s) involving the source's output bus or the
 	destination's input bus will be broken.
 */
-- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 fromBus:(AVAudioNodeBus)bus1 toBus:(AVAudioNodeBus)bus2 format:(AVAudioFormat * __nullable)format;
+- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 fromBus:(AVAudioNodeBus)bus1 toBus:(AVAudioNodeBus)bus2 format:(AVAudioFormat * __nullable)format API_DEPRECATED_WITH_REPLACEMENT("connect:to:fromBus:toBus:format:error:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
 
+/*! @method connect:to:fromBus:toBus:format:error
+	@abstract
+		Establish a connection between two nodes.
+	@param node1
+		The source node
+	@param node2
+		The destination node
+	@param bus1
+		The output bus on the source node
+	@param bus2
+		The input bus on the destination node
+	@param format
+		If non-nil, the format of the source node's output bus is set to this
+		format. In all cases, the format of the destination node's input bus is set to
+		match that of the source node's output bus.
+	@param error
+		on exit, if an error occurs, a description of the error
+	@return
+		YES for success
+
+	Nodes have input and output buses (AVAudioNodeBus). Use this method to establish
+	one-to-one connections betweeen nodes. Connections made using this method are always
+	one-to-one, never one-to-many or many-to-one.
+
+	Note that any pre-existing connection(s) involving the source's output bus or the
+	destination's input bus will be broken.
+*/
+- (BOOL)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 fromBus:(AVAudioNodeBus)bus1 toBus:(AVAudioNodeBus)bus2 format:(AVAudioFormat * __nullable)format error:(NSError**)error NS_SWIFT_NAME(connectNode(_:to:fromBus:toBus:format:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
 /*!	@method connect:to:format:
 	@abstract
 		Establish a connection between two nodes
@@ -237,8 +278,22 @@
 	and bus 0 on the destination node, except in the case of a destination which is a mixer,
 	in which case the destination is the mixer's nextAvailableInputBus.
 */
-- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 format:(AVAudioFormat * __nullable)format;
+- (void)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 format:(AVAudioFormat * __nullable)format API_DEPRECATED_WITH_REPLACEMENT("connect:to:format:error:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0));
 
+/*!	@method connect:to:format:error:
+	@abstract
+		Establish a connection between two nodes
+	@param error
+		on exit, if an error occurs, a description of the error
+	@return
+		YES for success
+
+	This calls connect:to:fromBus:toBus:format: using bus 0 on the source node,
+	and bus 0 on the destination node, except in the case of a destination which is a mixer,
+	in which case the destination is the mixer's nextAvailableInputBus.
+*/
+- (BOOL)connect:(AVAudioNode *)node1 to:(AVAudioNode *)node2 format:(AVAudioFormat * __nullable)format error:(NSError**)error NS_SWIFT_NAME(connectNode(_:to:format:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
 /*! @method connect:toConnectionPoints:fromBus:format:
 	@abstract
 		Establish connections between a source node and multiple destination nodes.
@@ -274,8 +329,49 @@
 		- any AVAudioUnitTimeEffect
 		- any sample rate conversion
 */
-- (void)connect:(AVAudioNode *)sourceNode toConnectionPoints:(NSArray *)destNodes fromBus:(AVAudioNodeBus)sourceBus format:(AVAudioFormat * __nullable)format API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));
+- (void)connect:(AVAudioNode *)sourceNode toConnectionPoints:(NSArray *)destNodes fromBus:(AVAudioNodeBus)sourceBus format:(AVAudioFormat * __nullable)format API_DEPRECATED_WITH_REPLACEMENT("connect:toConnectionPoints:fromBus:format:error:", ios(9.0, 27.0), watchos(2.0, 27.0), macos(10.11, 27.0), tvos(9.0, 27.0));
 
+/*! @method connect:toConnectionPoints:fromBus:format:error:
+	@abstract
+		Establish connections between a source node and multiple destination nodes.
+	@param sourceNode
+		The source node
+	@param destNodes
+		An array of AVAudioConnectionPoint objects specifying destination
+		nodes and busses
+	@param sourceBus
+		The output bus on source node
+	@param format
+		If non-nil, the format of the source node's output bus is set to this
+		format. In all cases, the format of the destination nodes' input bus is set to
+		match that of the source node's output bus
+	@param error
+		on exit, if an error occurs, a description of the error
+	@return
+		YES for success
+
+	Use this method to establish connections from a source node to multiple destination nodes.
+	Connections made using this method are either one-to-one (when a single destination
+	connection is specified) or one-to-many (when multiple connections are specified), but
+	never many-to-one.
+
+	To incrementally add a new connection to a source node, use this method with an array
+	of AVAudioConnectionPoint objects comprising of pre-existing connections (obtained from
+	`outputConnectionPointsForNode:outputBus:`) and the new connection.
+
+	Note that any pre-existing connection involving the destination's input bus will be
+	broken. And, any pre-existing connection on source node which is not a part of the
+	specified destination connection array will also be broken.
+
+	Also note that when the output of a node is split into multiple paths, all the paths
+	must render at the same rate until they reach a common mixer.
+	In other words, starting from the split node until the common mixer node where all split
+	paths terminate, you cannot have:
+		- any AVAudioUnitTimeEffect
+		- any sample rate conversion
+*/
+- (BOOL)connect:(AVAudioNode *)sourceNode toConnectionPoints:(NSArray *)destNodes fromBus:(AVAudioNodeBus)sourceBus format:(AVAudioFormat * __nullable)format error:(NSError**)error NS_SWIFT_NAME(connectNode(_:to:fromBus:format:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0));
+
 /*! @method disconnectNodeInput:bus:
 	@abstract
 		Remove a connection between two nodes.
@@ -424,7 +520,7 @@
 	@abstract
 		The MusicSequence previously attached to the engine (if any).
  */
-@property (nonatomic, nullable) MusicSequence musicSequence;
+@property (nonatomic, nullable) MusicSequence musicSequence NS_REFINED_FOR_SWIFT;
 #endif
 
 /*! @property outputNode
@@ -748,8 +844,41 @@
     Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
     will be overwritten when making the MIDI connection.
  */
-- (void)connectMIDI:(AVAudioNode *)sourceNode to:(AVAudioNode *)destinationNode format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(13.0), ios(16.0), tvos(16.0), watchos(9.0));
+- (void)connectMIDI:(AVAudioNode *)sourceNode to:(AVAudioNode *)destinationNode format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock __attribute__((swift_attr("@_disfavoredOverload"))) API_DEPRECATED_WITH_REPLACEMENT("connectMIDI:to:format:eventListProvider:", macos(13.0, 27.0), ios(16.0, 27.0), watchos(9.0, 27.0), tvos(16.0, 27.0));
 
+/*! @method connectMIDI:to:format:eventListProvider:
+	@abstract
+		Establish a MIDI only connection between two nodes.
+	@param sourceNode
+		The source node.
+	@param destinationNode
+		The destination node.
+	@param format
+		If non-nil, the format of the source node's output bus is set to this format.
+		In all cases, the format of the source nodes' output bus has to match with the
+		destination nodes' output bus format.
+		Although the output bus of the source is not in use, the format needs to be set
+		in order to be able to use the sample rate for MIDI event timing calculations.
+	@param tapBlock
+		This block is called from the source node's `AUMIDIOutputEventListBlock`
+		on the realtime thread. The host can tap the MIDI data of the source node through
+		this block.
+
+	Use this method to establish a MIDI only connection between a source node and a
+	destination node that has MIDI input capability.
+
+	The source node can only be a AVAudioUnit node of type `kAudioUnitType_MIDIProcessor`.
+	The destination node types can be `kAudioUnitType_MusicDevice`,
+	`kAudioUnitType_MusicEffect` or `kAudioUnitType_MIDIProcessor`.
+
+	Note that any pre-existing MIDI connection involving the destination will be broken.
+
+	Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
+	will be overwritten when making the MIDI connection.
+ */
+
+- (void)connectMIDI:(AVAudioNode *)sourceNode to:(AVAudioNode *)destinationNode format:(AVAudioFormat * __nullable)format eventListProvider:(AVMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), watchos(27.0));
+
 /*! @method connectMIDI:toNodes:format:block:
     @abstract
         Establish a MIDI only connection between a source node and multiple destination nodes.
@@ -820,7 +949,43 @@
     Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
     will be overwritten when making the MIDI connection.
  */
-- (void)connectMIDI:(AVAudioNode *)sourceNode toNodes:(NSArray *)destinationNodes format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(13.0), ios(16.0), tvos(16.0), watchos(9.0));
+- (void)connectMIDI:(AVAudioNode *)sourceNode toNodes:(NSArray *)destinationNodes format:(AVAudioFormat * __nullable)format eventListBlock:(AUMIDIEventListBlock __nullable)tapBlock __attribute__((swift_attr("@_disfavoredOverload"))) API_DEPRECATED_WITH_REPLACEMENT("connectMIDI:toNodes:format:eventListProvider:", macos(13.0, 27.0), ios(16.0, 27.0), watchos(9.0, 27.0), tvos(16.0, 27.0));
+
+/*! @method connectMIDI:toNodes:format:eventListProvider:
+	@abstract
+		Establish a MIDI only connection between a source node and multiple destination nodes.
+	@param sourceNode
+		The source node.
+	@param destinationNodes
+		An array of AVAudioNodes specifying destination nodes.
+	@param format
+		If non-nil, the format of the source node's output bus is set to this format.
+		In all cases, the format of the source nodes' output bus has to match with the
+		destination nodes' output bus format.
+		Although the output bus of the source is not in use, the format needs to be set
+		in order to be able to use the sample rate for MIDI event timing calculations.
+	@param tapBlock
+		This block is called from the source node's `AUMIDIOutputEventListBlock`
+		on the realtime thread. The host can tap the MIDI data of the source node through
+		this block.
+
+	Use this method to establish a MIDI only connection between a source node and
+	multiple destination nodes.
+
+	The source node can only be a AVAudioUnit node of type `kAudioUnitType_MIDIProcessor`.
+	The destination node types can be `kAudioUnitType_MusicDevice`,
+	`kAudioUnitType_MusicEffect` or `kAudioUnitType_MIDIProcessor`.
+
+	MIDI connections made using this method are either one-to-one (when a single
+	destination connection is specified) or one-to-many (when multiple connections are
+	specified), but never many-to-one.
+
+	Note that any pre-existing connection involving the destination will be broken.
+
+	Any client installed block on the source node's audio unit `AUMIDIOutputEventListBlock`
+	will be overwritten when making the MIDI connection.
+ */
+- (void)connectMIDI:(AVAudioNode *)sourceNode toNodes:(NSArray *)destinationNodes format:(AVAudioFormat * __nullable)format eventListProvider:(AVMIDIEventListBlock __nullable)tapBlock API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), watchos(27.0));
 
 /*! @method disconnectMIDI:from:
     @abstract
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h	2026-04-18 22:05:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioEnvironmentNode.h	2026-05-23 02:50:53
@@ -50,7 +50,7 @@
         A standalone instance of AVAudioEnvironmentDistanceAttenuationParameters cannot be created. 
         Only an instance vended out by a source object (e.g. AVAudioEnvironmentNode) can be used.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioEnvironmentDistanceAttenuationParameters : NSObject {
 @private
 	void *_impl;
@@ -113,7 +113,7 @@
         Only an instance vended out by a source object (e.g. AVAudioEnvironmentNode) can be used.
 */
 
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioEnvironmentReverbParameters : NSObject {
 @private
 	void *_impl;
@@ -205,7 +205,7 @@
         with a desired AudioChannelLayout.
 */
 
-API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos)
 @interface AVAudioEnvironmentNode : AVAudioNode 
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h	2026-04-18 21:41:01
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFile.h	2026-05-22 08:25:33
@@ -25,7 +25,7 @@
 		Reads and writes are always sequential, but random access is possible by setting the
 		framePosition property.
 */
-NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioFile : NSObject
 - (instancetype)init API_DEPRECATED("Deprecated - use initForReading or initForWriting", macos(10.10, 26.0), ios(8.0, 26.0), watchos(2.0, 26.0), tvos(9.0, 26.0), macCatalyst(10.10, 26.0));
 
@@ -133,6 +133,10 @@
 		YES for success.
 	@discussion
 		Like `readIntoBuffer:error:`, but can be used to read fewer frames than buffer.frameCapacity.
+
+		Starting in macOS 27.0, iOS 27.0, watchOS 27.0, and tvOS 27.0, attempting to read beyond the
+		end of the file will return NO and set outError to an NSError with domain NSOSStatusErrorDomain
+		and code kAudioFileEndOfFileError.
 */
 - (BOOL)readIntoBuffer:(AVAudioPCMBuffer *)buffer frameCount:(AVAudioFrameCount)frames error:(NSError **)outError;
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h	2026-04-18 22:05:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioFormat.h	2026-05-22 05:36:49
@@ -7,7 +7,7 @@
 
 #import 
 
-#if __has_include() && !0
+#if __has_include() && !0 && !0
 #define AVAUDIOFORMAT_HAVE_CMFORMATDESCRIPTION 1
 #import 
 #endif
@@ -45,7 +45,7 @@
 	
 		Instances of this class are immutable.
 */
-NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioFormat : NSObject  {
 @private
 	AudioStreamBasicDescription _asbd;
@@ -148,7 +148,18 @@
  	@discussion
  		If formatDescription is invalid, this method fails (returns nil).
  */
-- (instancetype)initWithCMAudioFormatDescription:(CMAudioFormatDescriptionRef)formatDescription API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));
+- (instancetype)initWithCMAudioFormatDescription:(CMAudioFormatDescriptionRef)formatDescription API_DEPRECATED_WITH_REPLACEMENT("initWithFormatDescription:", macos(10.11, 27.0), ios(9.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0));
+
+/*!
+	@method initWithFormatDescription:
+	@abstract initialize from a CMAudioFormatDescriptionRef.
+	@param formatDescription
+		the CMAudioFormatDescriptionRef.
+	@discussion
+		If formatDescription is invalid, this method fails (returns nil).
+ */
+- (nullable instancetype)initWithFormatDescription:(CMAudioFormatDescriptionRef)formatDescription API_AVAILABLE(macos(27), ios(27), watchos(27), tvos(27));
+
 #endif
 
 /*!	@method isEqual:
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h	2026-04-18 19:21:10
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioIONode.h	2026-05-22 05:43:57
@@ -35,11 +35,20 @@
  
 		Note that when the engine is configured to operate in 
 		`AVAudioEngineManualRenderingModeRealtime`, this block will be called from a realtime 
-		context. Care should be taken not to make any blocking call (e.g. calling libdispatch,
+		context and using AVAudioIONodeInputBlockRealtimeSafe is preferred.
+		Care should be taken not to make any blocking call (e.g. calling libdispatch,
 		blocking on a mutex, allocating memory etc.) which may cause an overload at the lower layers.
 */
-typedef const AudioBufferList * __nullable (^AVAudioIONodeInputBlock)(AVAudioFrameCount inNumberOfFrames) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
+typedef const AudioBufferList * __nullable (^ NS_SWIFT_NONSENDABLE AVAudioIONodeInputBlock)(AVAudioFrameCount inNumberOfFrames) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
 
+/*! @typedef AVAudioIONodeInputBlockRealtimeSafe
+    @abstract
+		Identical to AVAudioIONodeInputBlock, with the addition of a realtime-safety guarantee.
+		When the engine is configured to operate in `AVAudioEngineManualRenderingModeRealtime`,
+		use of this block is preferred.
+*/
+typedef const AudioBufferList * __nullable (^AVAudioIONodeInputBlockRealtimeSafe)(AVAudioFrameCount inNumberOfFrames) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
 /*!
 	@enum       AVAudioVoiceProcessingSpeechActivityEvent
 	@abstract	Types of speech activity events.
@@ -100,7 +109,7 @@
 		In the manual rendering mode, the AVAudioInputNode and AVAudioOutputNode perform the input
 		and output in the engine, in response to client's request.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioIONode : AVAudioNode
 
 /*!	@property presentationLatency
@@ -120,7 +129,7 @@
 	@discussion
 		This is only necessary for certain advanced usages.
 */
-@property (nonatomic, readonly, nullable) AudioUnit audioUnit;
+@property (nonatomic, readonly, nullable) AudioUnit audioUnit NS_REFINED_FOR_SWIFT;
 #endif
 
 /*! @property voiceProcessingEnabled
@@ -179,7 +188,7 @@
 		In the manual rendering mode, the format of the output scope is initially the same as that
 		of the input, but you may set it to a different format, in which case the node will convert.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(4.0), tvos(11.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(4.0), tvos(11.0))
 @interface AVAudioInputNode : AVAudioIONode 
 - (instancetype)init NS_UNAVAILABLE; // fetch instance via -[AVAudioEngine inputNode].
 
@@ -201,6 +210,13 @@
 */
 - (BOOL)setManualRenderingInputPCMFormat:(AVAudioFormat *)format inputBlock:(AVAudioIONodeInputBlock)block API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0));
 
+/*! @method setRealtimeSafeManualRenderingInputPCMFormat:inputBlock:
+    @abstract
+        Identical to setManualRenderingInputPCMFormat:inputBlock:, but requires a realtime-safe
+        input block.
+*/
+- (BOOL)setRealtimeSafeManualRenderingInputPCMFormat:(AVAudioFormat *)format inputBlock:(AVAudioIONodeInputBlockRealtimeSafe)block API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads");
+
 /*! @property voiceProcessingBypassed
     @abstract
        Bypass all processing for microphone uplink done by the voice processing unit.
@@ -238,7 +254,7 @@
 		Continuous presence of or lack of speech activity during mute will not cause redundant notification.
 		In order to use this API, it's expected to implement the mute via the voiceProcessingInputMuted.
 */
-- (BOOL)setMutedSpeechActivityEventListener:(nullable void (^)(AVAudioVoiceProcessingSpeechActivityEvent event))listenerBlock API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0)) API_UNAVAILABLE(watchos);
+- (BOOL)setMutedSpeechActivityEventListener:(nullable void (^ NS_SWIFT_SENDABLE)(AVAudioVoiceProcessingSpeechActivityEvent event))listenerBlock API_AVAILABLE(macos(14.0), ios(17.0), tvos(17.0)) API_UNAVAILABLE(watchos);
 
 /*! @property voiceProcessingOtherAudioDuckingConfiguration
 	@abstract
@@ -270,7 +286,7 @@
 		The format of the input scope is initially the same as that of the
 		output, but you may set it to a different format, in which case the node will convert.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioOutputNode : AVAudioIONode
 - (instancetype)init NS_UNAVAILABLE; // fetch instance via -[AVAudioEngine outputNode].
 
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h	2026-04-18 23:16:02
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixerNode.h	2026-05-22 08:28:49
@@ -19,7 +19,7 @@
 		conversions. It also accepts any channel count and will correctly upmix or downmix
 		to the output channel count.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioMixerNode : AVAudioNode 
 
 - (instancetype)init NS_DESIGNATED_INITIALIZER;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h	2026-04-18 21:43:23
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioMixing.h	2026-05-22 05:24:21
@@ -42,7 +42,7 @@
 	For example, an AVAudioPlayerNode that is being used in a gaming scenario can set up its
 	3D mixing settings and then move from one environment to another.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @protocol AVAudioMixing 
 
 /*! @abstract Returns the AVAudioMixingDestination object corresponding to specified mixer node and
@@ -85,7 +85,7 @@
 /*! @protocol   AVAudioStereoMixing
     @abstract   Protocol that defines stereo mixing properties
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @protocol AVAudioStereoMixing 
 
 /*! @property pan
@@ -223,6 +223,7 @@
 /*! @protocol   AVAudio3DMixing
     @abstract   Protocol that defines 3D mixing properties
 */
+NS_SWIFT_SENDABLE
 @protocol AVAudio3DMixing 
 
 /*! @property renderingAlgorithm
@@ -319,7 +320,7 @@
 		Only an instance vended by a source node (e.g. AVAudioPlayerNode) can be used
 		(see `AVAudioMixing`).
 */
-API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0))
 @interface AVAudioMixingDestination : NSObject  {
 @private
 	void *_impl;
diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h
--- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h	2026-04-18 21:43:24
+++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioNode.h	2026-05-22 05:24:22
@@ -29,7 +29,7 @@
 	@discussion
 		CAUTION: This callback may be invoked on a thread other than the main thread.
 */
-typedef void (^AVAudioNodeTapBlock)(AVAudioPCMBuffer *buffer, AVAudioTime *when);
+typedef void (^ NS_SWIFT_NONSENDABLE AVAudioNodeTapBlock)(AVAudioPCMBuffer *buffer, AVAudioTime *when);
 
 /*!
 	@class AVAudioNode
@@ -48,7 +48,7 @@
 
 		Nodes do not currently provide useful functionality until attached to an engine.
 */
-API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
+NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0))
 @interface AVAudioNode : NSObject {
 @protected
 	void *_impl;
@@ -114,13 +114,57 @@
 // start engine
 
*/ -- (void)installTapOnBus:(AVAudioNodeBus)bus bufferSize:(AVAudioFrameCount)bufferSize format:(AVAudioFormat * __nullable)format block:(AVAudioNodeTapBlock)tapBlock; +- (void)installTapOnBus:(AVAudioNodeBus)bus bufferSize:(AVAudioFrameCount)bufferSize format:(AVAudioFormat * __nullable)format block:(AVAudioNodeTapBlock)tapBlock API_DEPRECATED_WITH_REPLACEMENT("installTapOnBus:bufferSize:format:error:block", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0)); +/*! @method installTapOnBus:bufferSize:forma:errort:block: + @abstract Create a "tap" to record/monitor/observe the output of the node. + @param bus + the node output bus to which to attach the tap + @param bufferSize + the requested size of the incoming buffers in sample frames. Supported range is [100, 400] ms. + @param format + If non-nil, attempts to apply this as the format of the specified output bus. This should + only be done when attaching to an output bus which is not connected to another node; an + error will result otherwise. + The tap and connection formats (if non-nil) on the specified bus should be identical. + Otherwise, the latter operation will override any previously set format. + @param outError + on exit, if an error occurs, a description of the error. + @param tapBlock + a block to be called with audio buffers. + @return + YES for success. + + @discussion + Only one tap may be installed on any bus. Taps may be safely installed and removed while + the engine is running. + + Note that if you have a tap installed on AVAudioOutputNode, there could be a mismatch + between the tap buffer format and AVAudioOutputNode's output format, depending on the + underlying physical device. Hence, instead of tapping the AVAudioOutputNode, it is + advised to tap the node connected to it. + + E.g. to capture audio from input node: +

+AVAudioEngine *engine = [[AVAudioEngine alloc] init];
+AVAudioInputNode *input = [engine inputNode];
+AVAudioFormat *format = [input outputFormatForBus: 0];
+NSError *error = nil;
+BOOL success = [input installTapOnBus: 0 bufferSize: 8192 format: format error:&error block: ^(AVAudioPCMBuffer *buf, AVAudioTime *when) {
+// ‘buf' contains audio captured from input node at time 'when'
+}];
+....
+// start engine
+
+*/ +- (BOOL)installTapOnBus:(AVAudioNodeBus)bus bufferSize:(AVAudioFrameCount)bufferSize format:(AVAudioFormat * __nullable)format error:(NSError **)outError block:(AVAudioNodeTapBlock)tapBlock NS_REFINED_FOR_SWIFT API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0)); + /*! @method removeTapOnBus: @abstract Destroy a tap. @param bus the node output bus whose tap is to be destroyed */ + - (void)removeTapOnBus:(AVAudioNodeBus)bus; /*! @property engine @@ -158,7 +202,7 @@ directly on the audio unit. These include changing initialization state, stream formats, channel layouts or connections to other audio units. */ -@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); +@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)) NS_REFINED_FOR_SWIFT; #endif // AVAUDIONODE_HAVE_AUAUDIOUNIT /*! @property latency diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h 2026-04-18 19:21:10 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayer.h 2026-05-22 08:25:34 @@ -123,7 +123,7 @@ @end /* A protocol for delegates of AVAudioPlayer */ -__WATCHOS_AVAILABLE(3_0) +NS_SWIFT_UI_ACTOR @protocol AVAudioPlayerDelegate @optional /* audioPlayerDidFinishPlaying:successfully: is called when a sound has finished playing. This method is NOT called if the player is stopped due to an interruption. */ diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioPlayerNode.h 2026-05-22 05:36:49 @@ -75,7 +75,7 @@ some synchronisation between the calling threads internally. If you want to call player node API within this completion handler block, calls should be synchronised to the same thread/queue. */ -typedef void (^AVAudioPlayerNodeCompletionHandler)(AVAudioPlayerNodeCompletionCallbackType callbackType) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); +typedef void (^ NS_SWIFT_SENDING AVAudioPlayerNodeCompletionHandler)(AVAudioPlayerNodeCompletionCallbackType callbackType) API_AVAILABLE(macos(10.13), ios(11.0), watchos(4.0), tvos(11.0)); /*! @class AVAudioPlayerNode @@ -152,7 +152,7 @@ `outputPresentationLatency`) can be used to track how much data the player has rendered and how much more data is left to render. */ -API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) @interface AVAudioPlayerNode : AVAudioNode - (instancetype)init NS_DESIGNATED_INITIALIZER; @@ -309,8 +309,19 @@ @discussion equivalent to playAtTime:nil */ -- (void)play; +- (void)play API_DEPRECATED_WITH_REPLACEMENT("playAndReturnError:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0)); +/*! @method playAndReturnError: + @abstract Start or resume playback immediately. + @param outError + on exit, if an error occurs, a description of the error. + @return + YES for success + @discussion + equivalent to playAtTime:nil error:&error +*/ +- (BOOL)playAndReturnError:(NSError **)outError NS_SWIFT_NAME(playAudio()) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0)); + /*! @method playAtTime: @abstract Start or resume playback at a specific time. @param when @@ -337,7 +348,39 @@ } */ -- (void)playAtTime:(AVAudioTime * __nullable)when; +- (void)playAtTime:(AVAudioTime * __nullable)when API_DEPRECATED_WITH_REPLACEMENT("playAtTime:error:", ios(8.0, 27.0), watchos(2.0, 27.0), macos(10.10, 27.0), tvos(9.0, 27.0)); + +/*! @method playAtTime:error: + @abstract Start or resume playback at a specific time. + @param when + the node time at which to start or resume playback. nil signifies "now". + @param outError + on exit, if an error occurs, a description of the error. + @return + YES for success + @discussion + This node is initially paused. Requests to play buffers or file segments are enqueued, and + any necessary decoding begins immediately. Playback does not begin, however, until the player + has started playing, via this method. + + Note that providing an AVAudioTime which is past (before lastRenderTime) will cause the + player to begin playback immediately. + + E.g. To start a player X seconds in future: +

+// start engine and player
+NSError *nsErr = nil;
+[_engine startAndReturnError:&nsErr];
+if (!nsErr) {
+	const float kStartDelayTime = 0.5; // sec
+	AVAudioFormat *outputFormat = [_player outputFormatForBus:0];
+	AVAudioFramePosition startSampleTime = _player.lastRenderTime.sampleTime + kStartDelayTime * outputFormat.sampleRate;
+	AVAudioTime *startTime = [AVAudioTime timeWithSampleTime:startSampleTime atRate:outputFormat.sampleRate];
+	[_player playAtTime:startTime];
+}
+
+*/ +- (BOOL)playAtTime:(AVAudioTime * __nullable)when error:(NSError **)outError NS_SWIFT_NAME(playAudio(at:)) API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0)); /*! @method pause @abstract Pause playback. diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h 2026-04-18 21:41:00 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioRecorder.h 2026-05-22 08:18:58 @@ -19,7 +19,6 @@ @class AVAudioRecorder @abstract An object that records audio data to a file. */ -NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.7), ios(3.0), watchos(4.0), tvos(17.0)) @interface AVAudioRecorder : NSObject { @private diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h 2026-04-18 19:21:10 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSession.h 2026-05-22 05:35:05 @@ -20,6 +20,9 @@ // Forward declarations @class NSError, NSString, NSNumber; @class AVAudioChannelLayout; +@class AVAudioSessionInterruptionContext; +@class AVAudioSessionDeactivationContext; +@class AVAudioSessionResumptionContext; // ================================================================================================= #pragma mark-- iOS/tvOS/watchOS AVAudioSession interface -- @@ -197,19 +200,19 @@ After an audio session goes active, `isEchoCancelledInputEnabled` property can be queried to check if the option was honored. Note that the enabled state may change after route changes, e.g. if user plugs in a headset, that route might not support echo cancellation. */ -- (BOOL)setPrefersEchoCancelledInput:(BOOL)value error:(NSError **)error API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(tvos, watchos, macos, visionos); -@property (readonly, nonatomic) BOOL prefersEchoCancelledInput API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(tvos, watchos, macos, visionos); +- (BOOL)setPrefersEchoCancelledInput:(BOOL)value error:(NSError **)error API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(macos) API_UNAVAILABLE(tvos, watchos, visionos); +@property (readonly, nonatomic) BOOL prefersEchoCancelledInput API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(macos) API_UNAVAILABLE(tvos, watchos, visionos); /// Returns YES if echo cancelled input is successfully enabled on an active session. /// Please see `prefersEchoCancelledInput` above for more details. -@property (readonly, nonatomic) BOOL isEchoCancelledInputEnabled API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(tvos, watchos, macos, visionos); +@property (readonly, nonatomic) BOOL isEchoCancelledInputEnabled API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(macos) API_UNAVAILABLE(tvos, watchos, visionos); /// This property will return YES if the device supports echo cancellation with the following category and mode combinations: /// - ``AVAudioSessionCategoryPlayAndRecord`` with ``AVAudioSessionModeDefault`` /// - ``AVAudioSessionCategoryMultiRoute`` with ``AVAudioSessionModeDualRoute`` /// /// Query whether built-in mic / built-in speaker route supports echo cancellation for the session's given category and mode. -@property(readonly, nonatomic) BOOL isEchoCancelledInputAvailable API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(watchos, tvos) API_UNAVAILABLE(macos); +@property(readonly, nonatomic) BOOL isEchoCancelledInputAvailable API_AVAILABLE(ios(18.2)) API_UNAVAILABLE(watchos, tvos, macos) ; /// Sets a Boolean value to inform the system to mute the session's output audio. The default value is false (unmuted). /// @@ -272,8 +275,19 @@ AVAudioSessionRouteSharingPolicyLongFormAudio should be prepared for this method to fail if no eligible audio route can be activated or if the user cancels the route picker view. */ -- (void)activateWithOptions:(AVAudioSessionActivationOptions)options completionHandler:(void (^)(BOOL activated, NSError * _Nullable error))handler API_AVAILABLE(watchos(5.0)) API_UNAVAILABLE(ios, tvos) API_UNAVAILABLE(macos, macCatalyst); +- (void)activateWithOptions:(AVAudioSessionActivationOptions)options completionHandler:(void (^)(BOOL activated, NSError * _Nullable error))handler API_AVAILABLE(ios(27.0), watchos(5.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos); +/// Deactivates the audio session asynchronously. +/// +/// This method returns immediately without blocking the calling thread. The system calls the completion handler with the result. +/// +/// - Parameters: +/// - options: Deactivation options. +/// - handler: A completion handler called with a success flag and an error if deactivation failed. +- (void)deactivateWithOptions:(AVAudioSessionDeactivationOptions)options + completionHandler:(void (^)(BOOL deactivated, NSError *_Nullable error))handler + API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos); + @end // AVAudioSession(Activation) /*! @@ -549,6 +563,59 @@ @end // AVAudioSession (NowPlayingCandidacy) #endif // TARGET_OS_VISION + +// ================================================================================================= +#pragma mark-- Async Activation Types -- + +/// An object that provides context about an audio session interruption. +API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) +NS_SWIFT_NAME(AVAudioSession.InterruptionContext) +NS_SWIFT_SENDABLE +@interface AVAudioSessionInterruptionContext : NSObject + +/// The reason for the interruption. +@property (readonly, nonatomic) AVAudioSessionInterruptionReason reason; + +/// Unavailable - contexts are created by the system. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +/// An object that describes why and how the audio session deactivated. +API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) +NS_SWIFT_NAME(AVAudioSession.DeactivationContext) +NS_SWIFT_SENDABLE +@interface AVAudioSessionDeactivationContext : NSObject + +/// The source of the audio session deactivation. +@property (readonly, nonatomic) AVAudioSessionDeactivationSource source; + +/// Context about the interruption that caused deactivation. +/// +/// This property is only present when the session was interrupted by another application. +@property (readonly, nonatomic, nullable) AVAudioSessionInterruptionContext *interruptionContext; + +/// Unavailable - contexts are created by the system. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end + +/// An object that provides context when resumption becomes available. +API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) +NS_SWIFT_NAME(AVAudioSession.ResumptionContext) +NS_SWIFT_SENDABLE +@interface AVAudioSessionResumptionContext : NSObject + +/// The system's recommendation on whether to resume playback. +@property (readonly, nonatomic) AVAudioSessionResumptionRecommendation recommendation; + +/// Unavailable - contexts are created by the system. +- (instancetype)init NS_UNAVAILABLE; ++ (instancetype)new NS_UNAVAILABLE; + +@end NS_ASSUME_NONNULL_END diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h 2026-04-18 21:56:21 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionRoute.h 2026-05-22 08:25:33 @@ -146,6 +146,7 @@ /// /// Please see ``AVAudioSessionCategoryOptions/AVAudioSessionCategoryOptionBluetoothHighQualityRecording`` for details. @property (readonly, strong, nonatomic, nonnull) AVAudioSessionCapability* highQualityRecording; + /// Describes whether this port supports far-field input capture. @property (readonly, strong, nonatomic, nonnull) AVAudioSessionCapability* farFieldCapture; @end diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h 2026-04-18 20:48:53 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSessionTypes.h 2026-05-23 02:44:28 @@ -84,6 +84,9 @@ /// Input or output connected via Thunderbolt OS_EXPORT AVAudioSessionPort const AVAudioSessionPortThunderbolt API_AVAILABLE(ios(14.0), watchos(7.0), tvos(14.0)) API_UNAVAILABLE(macos); +/// Output to a media device vended through a system-wide extension that the user has installed +OS_EXPORT AVAudioSessionPort const AVAudioSessionPortMediaDeviceExtension API_AVAILABLE(ios(27.0)) API_UNAVAILABLE(watchos, tvos, macos, visionos); + #pragma mark -- audio session categories -- /// A category defines a broad set of behaviors for a session. @@ -197,19 +200,18 @@ /// - if the session is output muted, system may prevent interrupting other active audio apps. OS_EXPORT AVAudioSessionMode const AVAudioSessionModeShortFormVideo API_AVAILABLE(ios(26.0)) API_UNAVAILABLE(watchos, tvos, visionos, macos); -/// Appropriate for applications that require simultaneous use of built-in microphone/speaker -/// with a secondary audio device that supports both input and output capabilities. +/// A mode that provides simultaneous use of the built-in microphone/speaker and a secondary audio device that supports input and output. /// -/// Only valid with ``AVAudioSessionCategoryMultiRoute``. +/// This mode can only be used with the ``AVAudioSessionCategoryMultiRoute`` category. It additionally requires you to set the ``AVAudioSesssion/CategoryOptions/allowBluetoothHFP`` option. /// -/// This mode requires ``AVAudioSessionCategoryOptionAllowBluetoothHFP`` to be set +/// Enabling this mode results in the following behavior: +/// - The primary audio route is always the built-in microphone/speaker. +/// - The supported secondary route types are ``AVAudioSessionPortHeadsetMic``, ``AVAudioSessionPortHeadphones``, ``AVAudioSessionPortBluetoothLE``, and ``AVAudioSessionPortBluetoothHFP``. +/// - Only audio routes that support input and output are available for use. +/// - The hardware volume controls adjusts the volume for both primary and secondary routes. +/// - The system may engage appropriate signal processing for output routes. /// -/// When this mode is set: -/// - The audio route will always include built-in mic/speaker as the primary route -/// - Supported secondary route types: ``AVAudioSessionPortHeadsetMic``, ``AVAudioSessionPortHeadphones``, ``AVAudioSessionPortBluetoothLE``, ``AVAudioSessionPortBluetoothHFP`` -/// - Only routes with both input/output capabilities will be supported -/// - Hardware volume controls will adjust volume for both primary and secondary routes -/// - System may engage appropriate signal processing for output routes +/// > Important: This API may not be used to enable recordings of others without their awareness. OS_EXPORT AVAudioSessionMode const AVAudioSessionModeDualRoute API_AVAILABLE(ios(26.2)) API_UNAVAILABLE(watchos, tvos, visionos, macos); #pragma mark-- Names for NSNotifications -- @@ -224,7 +226,7 @@ In the case of a begin interruption notification, the reason for the interruption can be found within the info dictionary under the key AVAudioSessionInterruptionReasonKey. */ -OS_EXPORT NSNotificationName const AVAudioSessionInterruptionNotification API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos); +OS_EXPORT NSNotificationName const AVAudioSessionInterruptionNotification API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(macos); /*! @brief Notification sent to registered listeners when an audio route change has occurred. @@ -303,6 +305,21 @@ /// Notification sent to registered listeners when the application's output is muted and user hints to unmute. OS_EXPORT NSNotificationName const AVAudioSessionUserIntentToUnmuteOutputNotification API_AVAILABLE(ios(26.0)) API_UNAVAILABLE(watchos, tvos, visionos, macos) NS_SWIFT_NAME(AVAudioSession.userIntentToUnmuteOutputNotification); +/// Notification sent when the audio session becomes active. +/// +/// This notification has no userInfo payload. +OS_EXPORT NSNotificationName const AVAudioSessionDidBecomeActiveNotification API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) NS_SWIFT_NAME(AVAudioSession.didBecomeActiveNotification); + +/// Notification sent when the audio session becomes inactive. +/// +/// The userInfo dictionary contains an ``AVAudioSessionDeactivationContext`` object accessible via ``AVAudioSessionDeactivationContextKey``. +OS_EXPORT NSNotificationName const AVAudioSessionDidBecomeInactiveNotification API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) NS_SWIFT_NAME(AVAudioSession.didBecomeInactiveNotification); + +/// Notification sent when the system provides a resumption recommendation. +/// +/// The userInfo dictionary contains an ``AVAudioSessionResumptionContext`` object accessible via ``AVAudioSessionResumptionContextKey``. +OS_EXPORT NSNotificationName const AVAudioSessionResumptionRecommendationNotification API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) NS_SWIFT_NAME(AVAudioSession.resumptionRecommendationNotification); + #pragma mark-- Keys for NSNotification userInfo dictionaries -- /// keys for AVAudioSessionSpatialPlaybackCapabilitiesChangedNotification @@ -311,13 +328,13 @@ /// keys for AVAudioSessionInterruptionNotification /// Value is an NSNumber representing an AVAudioSessionInterruptionType -OS_EXPORT NSString *const AVAudioSessionInterruptionTypeKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos); +OS_EXPORT NSString *const AVAudioSessionInterruptionTypeKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(macos); /// Only present for end interruption events. Value is of type AVAudioSessionInterruptionOptions. -OS_EXPORT NSString *const AVAudioSessionInterruptionOptionKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos); +OS_EXPORT NSString *const AVAudioSessionInterruptionOptionKey API_AVAILABLE(ios(6.0), watchos(2.0), tvos(9.0)) API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(macos); /// Only present in begin interruption events. Value is of type AVAudioSessionInterruptionReason. -OS_EXPORT NSString *const AVAudioSessionInterruptionReasonKey API_AVAILABLE(ios(14.5), watchos(7.3)) API_UNAVAILABLE(tvos, macos); +OS_EXPORT NSString *const AVAudioSessionInterruptionReasonKey API_AVAILABLE(ios(14.5), watchos(7.3)) API_DEPRECATED("Use AVAudioSessionDeactivationContext.interruptionDetails.reason instead", ios(14.5, 27.0), watchos(7.3, 27.0), tvos(14.5, 27.0), visionos(1.0, 27.0)) API_UNAVAILABLE(tvos, macos); /*! Only present in begin interruption events, where the interruption is a direct result of the @@ -355,6 +372,16 @@ /// Value is an NSNumber whose boolean value indicates if microphone injection is available. OS_EXPORT NSString *const AVAudioSessionMicrophoneInjectionIsAvailableKey API_AVAILABLE(ios(18.2), visionos(2.2)) API_UNAVAILABLE(tvos, watchos, macos); +/// Keys for ``AVAudioSessionDidBecomeInactiveNotification`` +/// Value is an ``AVAudioSessionDeactivationContext`` object describing the deactivation. +OS_EXPORT NSString *const AVAudioSessionDeactivationContextKey API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) +NS_SWIFT_NAME(AVAudioSession.deactivationContextKey); + +/// Keys for ``AVAudioSessionResumptionRecommendationNotification`` +/// Value is an ``AVAudioSessionResumptionContext`` describing the resumption recommendation. +OS_EXPORT NSString *const AVAudioSessionResumptionContextKey API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) +NS_SWIFT_NAME(AVAudioSession.resumptionContextKey); + /*! @brief Notification sent to registered listeners when there are changes in ``availableInputs``. @@ -368,13 +395,19 @@ /*! @enum AVAudioSessionActivationOptions @brief For use with activateWithOptions:completionHandler: - - Reserved for future use. Added in watchOS 5.0. */ typedef NS_OPTIONS(NSUInteger, AVAudioSessionActivationOptions) { AVAudioSessionActivationOptionNone = 0 }; +/// Options for deactivating an AVAudioSession +typedef NS_OPTIONS(NSUInteger, AVAudioSessionDeactivationOptions) { + AVAudioSessionDeactivationOptionNone = 0, + + /// Notify an interrupted app that the interruption has ended and it may resume playback. + AVAudioSessionDeactivationOptionNotifyOthersOnDeactivation API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos) = 1 << 0, +}; + /// For use with overrideOutputAudioPort:error: typedef NS_ENUM(NSUInteger, AVAudioSessionPortOverride) { /// No override. Return audio routing to the default state for the current audio category. @@ -566,7 +599,7 @@ /// This option should be used if a session prefers to use FarFieldInput when available. /// This option is only valid with categories that support input - - /// ``AVAudioSessionCategoryPlayAndRecord`` and ``AVAudioSessionCategoryRecord``. + /// ``AVAudioSessionCategoryPlayAndRecord``, ``AVAudioSessionCategoryRecord``, and ``AVAudioSessionMultiRoute`` with ``AVAudioSessionModeDualRoute``. /// /// - This option requires ``AVAudioSessionCategoryOptionAllowBluetoothHFP`` to be set. /// Otherwise error will be returned. @@ -607,14 +640,14 @@ typedef NS_ENUM(NSUInteger, AVAudioSessionInterruptionType) { AVAudioSessionInterruptionTypeBegan = 1, ///< the system has interrupted your audio session AVAudioSessionInterruptionTypeEnded = 0, ///< the interruption has ended -}; +} API_DEPRECATED("Use AVAudioSessionDidBecomeInactiveNotification and AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)); /// Values for AVAudioSessionInterruptionOptionKey in AVAudioSessionInterruptionNotification's /// userInfo dictionary. typedef NS_OPTIONS(NSUInteger, AVAudioSessionInterruptionOptions) { /// Indicates that you should resume playback now that the interruption has ended. AVAudioSessionInterruptionOptionShouldResume = 1 -}; +} API_DEPRECATED("Use AVAudioSessionResumptionRecommendationNotification instead", ios(6.0, 27.0), watchos(2.0, 27.0), tvos(9.0, 27.0), visionos(1.0, 27.0)); /*! @enum AVAudioSessionInterruptionReason @@ -651,6 +684,20 @@ AVAudioSessionInterruptionReasonDeviceUnauthenticated API_UNAVAILABLE(visionos) = 5, #endif // TARGET_OS_VISION } NS_SWIFT_NAME(AVAudioSession.InterruptionReason); + +/// The source of the audio session deactivation. +typedef NS_ENUM(NSInteger, AVAudioSessionDeactivationSource) { + AVAudioSessionDeactivationSourceApp = 1, // App requested deactivation. + AVAudioSessionDeactivationSourceSystem = 2, // The system deactivated the session. +} NS_SWIFT_NAME(AVAudioSession.DeactivationSource) +API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos); + +/// The system's recommendation on whether to resume playback. +typedef NS_ENUM(NSInteger, AVAudioSessionResumptionRecommendation) { + AVAudioSessionResumptionRecommendationShouldNotResume = 0, // The system recommends not resuming. + AVAudioSessionResumptionRecommendationShouldResume = 1, // The system recommends resuming. +} NS_SWIFT_NAME(AVAudioSession.ResumptionRecommendation) +API_AVAILABLE(ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(macos); /// options for use when calling setActive:withOptions:error: typedef NS_OPTIONS(NSUInteger, AVAudioSessionSetActiveOptions) diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h 2026-04-18 23:16:02 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSinkNode.h 2026-05-23 02:50:53 @@ -30,8 +30,15 @@ An OSStatus result code. If an error is returned, the input data should be assumed to be invalid. */ -typedef OSStatus (^AVAudioSinkNodeReceiverBlock)(const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, const AudioBufferList *inputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ; +typedef OSStatus (^ NS_SWIFT_NONSENDABLE AVAudioSinkNodeReceiverBlock)(const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, const AudioBufferList *inputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ; +/*! @typedef AVAudioSinkNodeReceiverBlockRealtimeSafe + @abstract + Identical to AVAudioSinkNodeReceiverBlock, with the addition of a realtime-safety + guarantee. +*/ +typedef OSStatus (^AVAudioSinkNodeReceiverBlockRealtimeSafe)(const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, const AudioBufferList *inputData) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads"); + /*! @class AVAudioSinkNode @abstract AVAudioSinkNode wraps a client provided block to receive input audio on the audio IO thread. @discussion @@ -49,7 +56,7 @@ AVAudioSinkNode does not have an output bus and therefore it does not support tapping. */ -API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) @interface AVAudioSinkNode : AVAudioNode - (instancetype)init NS_UNAVAILABLE; @@ -59,6 +66,8 @@ @param block The block that receives audio data from the input. @discussion + The preferred initializer is initWithRealtimeSafeReceiverBlock: and should be used instead. + The receiver block is called when the input data is available. The block will be called on the realtime thread and it is the client's responsibility to @@ -70,6 +79,12 @@ The audio format for the data received by the block will be set to the node's input format. */ - (instancetype)initWithReceiverBlock:(AVAudioSinkNodeReceiverBlock)block NS_DESIGNATED_INITIALIZER; + +/*! @method initWithRealtimeSafeReceiverBlock: + @abstract + Identical to initWithReceiverBlock:, but requires a realtime-safe block and is the preferred initializer. +*/ +- (instancetype)initWithRealtimeSafeReceiverBlock:(AVAudioSinkNodeReceiverBlockRealtimeSafe)block NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads"); @end diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h 2026-04-18 19:21:10 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioSourceNode.h 2026-05-22 05:36:49 @@ -38,18 +38,25 @@ An OSStatus result code. If an error is returned, the audio data should be assumed to be invalid. */ -typedef OSStatus (^AVAudioSourceNodeRenderBlock)(BOOL *isSilence, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, AudioBufferList *outputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ; +typedef OSStatus (^ NS_SWIFT_NONSENDABLE AVAudioSourceNodeRenderBlock)(BOOL *isSilence, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, AudioBufferList *outputData) API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) ; +/*! @typedef AVAudioSourceNodeRenderBlockRealtimeSafe + @abstract + Identical to AVAudioSourceNodeRenderBlock, with the addition of a realtime-safety + guarantee. +*/ +typedef OSStatus (^AVAudioSourceNodeRenderBlockRealtimeSafe)(BOOL *isSilence, const AudioTimeStamp *timestamp, AVAudioFrameCount frameCount, AudioBufferList *outputData) CA_REALTIME_API API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads"); + /*! @class AVAudioSourceNode @abstract AVAudioSourceNode wraps a client provided block to supply audio. @discussion With AVAudioSourceNode the client can supply audio data for rendering through an - AVAudioSourceNodeRenderBlock block. + AVAudioSourceNodeRenderBlock or AVAudioSourceNodeRenderBlockRealtimeSafe block. This is similar to setting the input callback on an Audio Unit with the kAudioUnitProperty_SetRenderCallback property. */ -API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.15), ios(13.0), tvos(13.0), watchos(6.0)) @interface AVAudioSourceNode : AVAudioNode - (instancetype)init NS_UNAVAILABLE; @@ -61,6 +68,8 @@ @discussion The block can be called on realtime or non-realtime threads depending on the engine’s operating mode and it is the client's responsibility to handle it in a thread-safe manner. + When the the engine is configured for realtime use (rendering to a device, or using + `AVAudioEngineManualRenderingModeRealtime`) initWithRealtimeSafeRenderBlock: is preferred. The audio format for the output bus will be set from the connection format when connecting to another node. @@ -70,6 +79,14 @@ */ - (instancetype)initWithRenderBlock:(AVAudioSourceNodeRenderBlock)block NS_DESIGNATED_INITIALIZER; +/*! @method initWithRealtimeSafeRenderBlock: + @abstract + Identical to initWithRenderBlock:, but requires a realtime-safe block. + When the the engine is configured for realtime use (rendering to a device, or using + `AVAudioEngineManualRenderingModeRealtime`) this initializer is preferred. +*/ +- (instancetype)initWithRealtimeSafeRenderBlock:(AVAudioSourceNodeRenderBlockRealtimeSafe)block NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads"); + /*! @method initWithFormat:renderBlock: @abstract Create a node with a render block. @param format @@ -79,6 +96,8 @@ @discussion The block can be called on realtime or non-realtime threads depending on the engine’s operating mode and it is the client's responsibility to handle it in a thread-safe manner. + When the the engine is configured for realtime use (rendering to a device, or using + `AVAudioEngineManualRenderingModeRealtime`) initWithFormat:realtimeSafeRenderBlock: is preferred. The audio format for the output bus will be set from the connection format when connecting to another node. @@ -87,6 +106,14 @@ Linear PCM conversions are supported (sample rate, bit depth, interleaving). */ - (instancetype)initWithFormat:(AVAudioFormat*)format renderBlock:(AVAudioSourceNodeRenderBlock)block NS_DESIGNATED_INITIALIZER; + +/*! @method initWithFormat:realtimeSafeRenderBlock: + @abstract + Identical to initWithFormat:renderBlock:, but requires a realtime-safe block. + When the the engine is configured for realtime use (rendering to a device, or using + `AVAudioEngineManualRenderingModeRealtime`) this initializer is preferred. +*/ +- (instancetype)initWithFormat:(AVAudioFormat*)format realtimeSafeRenderBlock:(AVAudioSourceNodeRenderBlockRealtimeSafe)block NS_DESIGNATED_INITIALIZER API_AVAILABLE(macos(27.0), ios(27.0), watchos(27.0), tvos(27.0), visionos(27.0)) __SWIFT_UNAVAILABLE_MSG("Swift is not supported for use with audio realtime threads"); @end diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h 2026-04-18 22:05:09 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioTypes.h 2026-05-22 08:28:48 @@ -42,7 +42,7 @@ the callback arrives on a non-main thread and it is the client's responsibility to handle it in a thread-safe manner. */ -typedef void (^AVAudioNodeCompletionHandler)(void); +typedef void (^ NS_SWIFT_SENDING AVAudioNodeCompletionHandler)(void); /*! @typedef AVAudioNodeBus @abstract The index of a bus on an AVAudioNode. diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h 2026-04-18 21:43:24 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnit.h 2026-05-22 08:25:34 @@ -24,7 +24,7 @@ An AVAudioUnit is an AVAudioNode implemented by an audio unit. Depending on the type of the audio unit, audio is processed either in real-time or non real-time. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnit : AVAudioNode #if AVAUDIOUNIT_HAVE_AUDIOUNIT @@ -47,7 +47,7 @@ AVAudioUnitGenerator, AVAudioUnitMIDIInstrument, or AVAudioUnitTimeEffect), selected according to the component's type. */ -+ (void)instantiateWithComponentDescription:(AudioComponentDescription)audioComponentDescription options:(AudioComponentInstantiationOptions)options completionHandler:(void (^)(__kindof AVAudioUnit * __nullable audioUnit, NSError * __nullable error))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)); ++ (void)instantiateWithComponentDescription:(AudioComponentDescription)audioComponentDescription options:(AudioComponentInstantiationOptions)options completionHandler:(void (^ NS_SWIFT_SENDING)(__kindof AVAudioUnit * __nullable audioUnit, NSError * __nullable error))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)); /*! @method loadAudioUnitPresetAtURL:error: @abstract Load an audio unit preset. @@ -75,7 +75,7 @@ directly on the audio unit. These include changing initialization state, stream formats, channel layouts or connections to other audio units. */ -@property (nonatomic, readonly) AudioUnit audioUnit; +@property (nonatomic, readonly) AudioUnit audioUnit NS_REFINED_FOR_SWIFT; #ifdef __OBJC2__ /*! @property AUAudioUnit @@ -89,7 +89,7 @@ engine should be performed directly on the audio unit. These include changing initialization state, stream formats, channel layouts or connections to other audio units. */ -@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)); +@property (nonatomic, readonly) AUAudioUnit *AUAudioUnit API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) NS_REFINED_FOR_SWIFT; #endif // __OBJC2__ /*! @property name diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h 2026-04-18 20:48:54 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitComponent.h 2026-05-22 08:18:59 @@ -174,7 +174,7 @@ #pragma mark AVAudioUnitComponentManager /* The notification object is an AVAudioUnitComponent object */ -extern NSString * const AVAudioUnitComponentTagsDidChangeNotification API_AVAILABLE(macos(10.10), ios(9.0), tvos(9.0)) API_UNAVAILABLE(watchos); +extern NSString * const AVAudioUnitComponentTagsDidChangeNotification API_AVAILABLE(macos(10.10), ios(9.0), tvos(9.0)) API_DEPRECATED("User tags are only supported on macOS", ios(9.0, 27.0), tvos(9.0, 27.0)) API_UNAVAILABLE(watchos) API_UNAVAILABLE(watchos); /*! @class AVAudioUnitComponentManager diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h 2026-04-18 23:16:02 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDelay.h 2026-05-22 08:28:49 @@ -18,7 +18,7 @@ a tape delay. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitDelay : AVAudioUnitEffect /*! @property delayTime diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitDistortion.h 2026-05-22 08:28:50 @@ -38,7 +38,7 @@ @abstract An AVAudioUnitEffect that implements a multi-stage distortion effect. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitDistortion : AVAudioUnitEffect /*! @method loadFactoryPreset: diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h 2026-04-18 21:43:23 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEQ.h 2026-05-23 02:44:29 @@ -81,7 +81,7 @@ A standalone instance of AVAudioUnitEQFilterParameters cannot be created. Only an instance vended out by a source object (e.g. AVAudioUnitEQ) can be used. */ -API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), watchos(2.0), tvos(9.0)) @interface AVAudioUnitEQFilterParameters : NSObject { @private void *_impl; @@ -135,7 +135,7 @@ @abstract An AVAudioUnitEffect that implements a Multi-Band Equalizer. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitEQ : AVAudioUnitEffect /*! @method initWithNumberOfBands: diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitEffect.h 2026-05-22 08:28:50 @@ -21,7 +21,7 @@ example of an effect unit. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitEffect : AVAudioUnit #if AVAUDIOUNIT_HAVE_AUDIOUNIT diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h 2026-04-18 23:16:04 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitGenerator.h 2026-05-22 08:28:51 @@ -18,7 +18,7 @@ A generator will have no audio input, but will just produce audio output. A tone generator is an example of this. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitGenerator : AVAudioUnit #if AVAUDIOUNIT_HAVE_AUDIOUNIT diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h 2026-04-18 19:21:10 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitMIDIInstrument.h 2026-05-22 05:43:57 @@ -20,7 +20,7 @@ NS_ASSUME_NONNULL_BEGIN /// Base class for MIDI instruments. -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitMIDIInstrument : AVAudioUnit AVAudioUnitMIDIInstrument_MixingConformance #if AVAUDIOUNIT_HAVE_AUDIOUNIT diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitReverb.h 2026-05-22 08:28:50 @@ -22,7 +22,8 @@ AVAudioUnitReverbPresetLargeRoom2 = 9, AVAudioUnitReverbPresetMediumHall2 = 10, AVAudioUnitReverbPresetMediumHall3 = 11, - AVAudioUnitReverbPresetLargeHall2 = 12 + AVAudioUnitReverbPresetLargeHall2 = 12, + AVAudioUnitReverbPresetOutdoorGeneral API_AVAILABLE(macos(27.0), ios(27.0), tvos(27.0), visionos(27.0)) API_UNAVAILABLE(watchos) = 24 } NS_ENUM_AVAILABLE(10_10, 8_0); /*! @class AVAudioUnitReverb @@ -33,7 +34,7 @@ the original signal using the wetDryMix parameter. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitReverb : AVAudioUnitEffect /*! @method loadFactoryPreset: diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h 2026-04-18 23:16:04 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitSampler.h 2026-05-22 08:28:51 @@ -19,7 +19,7 @@ The output is a single stereo bus. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitSampler : AVAudioUnitMIDIInstrument /*! @method loadSoundBankInstrumentAtURL:program:bankMSB:bankLSB:error: diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimeEffect.h 2026-05-22 08:28:51 @@ -17,7 +17,7 @@ unit is an example of a time effect unit. */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitTimeEffect : AVAudioUnit #if AVAUDIOUNIT_HAVE_AUDIOUNIT diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitTimePitch.h 2026-05-22 08:28:49 @@ -15,7 +15,7 @@ In this time effect, the playback rate and pitch parameters function independently of each other */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitTimePitch : AVAudioUnitTimeEffect /*! @property rate diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h 2026-04-18 23:16:02 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVAudioUnitVarispeed.h 2026-05-22 08:28:49 @@ -12,7 +12,7 @@ /*! @class AVAudioUnitVarispeed @abstract an AVAudioUnitTimeEffect that can be used to control the playback rate */ -API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) +NS_SWIFT_SENDABLE API_AVAILABLE(macos(10.10), ios(8.0), tvos(9.0)) API_UNAVAILABLE(watchos) @interface AVAudioUnitVarispeed : AVAudioUnitTimeEffect /*! @property rate diff -ruN /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h --- /Applications/Xcode_26.5.0.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h 2026-04-18 23:16:03 +++ /Applications/Xcode_27.0.0-beta.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AVFAudio.framework/Headers/AVMIDIPlayer.h 2026-05-22 08:28:50 @@ -14,7 +14,7 @@ /*! @typedef AVMIDIPlayerCompletionHandler @abstract Generic callback block. */ -typedef void (^AVMIDIPlayerCompletionHandler)(void); +typedef void (^ NS_SWIFT_SENDING AVMIDIPlayerCompletionHandler)(void); /*! @class AVMIDIPlayer @abstract A player for music file formats (MIDI, iMelody).

Clone this wiki locally