<!--
{
  "availability" : [
    "iOS: 9.0.0 -",
    "iPadOS: 9.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.11.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AudioToolbox",
  "identifier" : "/documentation/AudioToolbox/AUAudioUnit",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Audio Toolbox"
    ],
    "preciseIdentifier" : "c:objc(cs)AUAudioUnit"
  },
  "title" : "AUAudioUnit"
}
-->

# AUAudioUnit

A class that defines a host’s interface to an audio unit.

```
class AUAudioUnit
```

## Overview

Hosts can instantiate either version 3 or version 2 audio units with this class, and to some extent control whether an audio unit is instantiated in-process or in a separate extension process.

Version 3 audio units should subclass the [`AUAudioUnit`](/documentation/AudioToolbox/AUAudioUnit) class. Version 3 audio unit components can be registered in the following ways:

- Package the component into an app extension containing an `AudioComponents`  `Info.plist` entry. The principal class must conform to the [`AUAudioUnitFactory`](/documentation/AudioToolbox/AUAudioUnitFactory) protocol, which will typically instantiate an [`AUAudioUnit`](/documentation/AudioToolbox/AUAudioUnit) subclass.
- Call the [`registerSubclass(_:as:name:version:)`](/documentation/AudioToolbox/AUAudioUnit/registerSubclass(_:as:name:version:)) method to associate a component description with an [`AUAudioUnit`](/documentation/AudioToolbox/AUAudioUnit) subclass. Use the convention `<manufacturer name>:<audio unit name>` when naming your audio unit component.

Version 2 audio units should subclass the [`AUAudioUnitV2Bridge`](/documentation/AudioToolbox/AUAudioUnitV2Bridge) class instead. Version 2 audio unit components can be registered in the following ways:

- Package the component into a component bundle containing an `AudioComponents` `Info.plist` entry, referring to an `AudioComponentFactoryFunction` function.
- Call the `AudioComponentRegister` function to associate a component description with an `AudioComponentFactoryFunction` function.

A host does not need to be aware of the concrete [`AUAudioUnit`](/documentation/AudioToolbox/AUAudioUnit) subclass that is being instantiated. The [`init(componentDescription:options:)`](/documentation/AudioToolbox/AUAudioUnit/init(componentDescription:options:)) method ensures that the proper subclass is used.

> Important:
> When using the ``doc://com.apple.audiotoolbox/documentation/AudioToolbox/AUAudioUnit`` class with a version 2 audio unit, or the C ``doc://com.apple.audiotoolbox/documentation/AudioToolbox/AudioComponent`` and `AudioUnit` APIs with a version 3 audio unit, all major pieces of functionality are bridged between the two APIs. When applicable, this document references the version 2 API equivalent of each version 3 method or property.

## Topics

### Creating an Audio Unit

[`init(componentDescription:)`](/documentation/AudioToolbox/AUAudioUnit/init(componentDescription:))

Synchronously initializes a new audio unit object.

[`init(componentDescription:options:)`](/documentation/AudioToolbox/AUAudioUnit/init(componentDescription:options:))

Synchronously initializes a new audio unit object.

[`instantiate(with:options:completionHandler:)`](/documentation/AudioToolbox/AUAudioUnit/instantiate(with:options:completionHandler:))

Asynchronously creates an audio unit instance.

### Returning the Audio Busses

[`inputBusses`](/documentation/AudioToolbox/AUAudioUnit/inputBusses)

An array containing the audio unit’s input connection points.

[`outputBusses`](/documentation/AudioToolbox/AUAudioUnit/outputBusses)

An array containing the audio unit’s output connection points.

### Customizing the Audio Unit Behavior

These methods and properties are only of interest to audio unit subclasses.

[`registerSubclass(_:as:name:version:)`](/documentation/AudioToolbox/AUAudioUnit/registerSubclass(_:as:name:version:))

Registers an audio unit subclass.

[`shouldChange(to:for:)`](/documentation/AudioToolbox/AUAudioUnit/shouldChange(to:for:))

This is called when you set the format on a bus.

[`setRenderResourcesAllocated(_:)`](/documentation/AudioToolbox/AUAudioUnit/setRenderResourcesAllocated(_:))

Sets the Boolean value of the [`renderResourcesAllocated`](/documentation/AudioToolbox/AUAudioUnit/renderResourcesAllocated) property.

[`internalRenderBlock`](/documentation/AudioToolbox/AUAudioUnit/internalRenderBlock)

The block which you must provide, via a getter, in order to implement rendering.

[`midiOutputBufferSizeHint`](/documentation/AudioToolbox/AUAudioUnit/midiOutputBufferSizeHint)

[`AUInternalRenderBlock`](/documentation/AudioToolbox/AUInternalRenderBlock)

A block to render the audio unit.

### Querying Parameters

[`parameterTree`](/documentation/AudioToolbox/AUAudioUnit/parameterTree)

An audio unit’s parameters, organized in a tree hierarchy.

[`allParameterValues`](/documentation/AudioToolbox/AUAudioUnit/allParameterValues)

Special read-only property for KVO.

[`parametersForOverview(withCount:)`](/documentation/AudioToolbox/AUAudioUnit/parametersForOverview(withCount:))

Returns the audio unit’s most important parameters.

### Providing Data to the Host

[`musicalContextBlock`](/documentation/AudioToolbox/AUAudioUnit/musicalContextBlock)

A callback to the host for musical context information.

[`transportStateBlock`](/documentation/AudioToolbox/AUAudioUnit/transportStateBlock)

A callback to the host for transport state information.

[`contextName`](/documentation/AudioToolbox/AUAudioUnit/contextName)

Information about the host context in which the audio unit is connected, for display in the audio unit’s view.

[`supportsMPE`](/documentation/AudioToolbox/AUAudioUnit/supportsMPE)

A Boolean value that indicates whether the audio unit supports multi-dimensional polyphonic expression.

[`AUHostMusicalContextBlock`](/documentation/AudioToolbox/AUHostMusicalContextBlock)

A block through which hosts provide musical tempo, time signature, and beat position.

[`AUHostTransportStateBlock`](/documentation/AudioToolbox/AUHostTransportStateBlock)

A block through which hosts provide information about their transport state.

### Managing MIDI Events

[`isMusicDeviceOrEffect`](/documentation/AudioToolbox/AUAudioUnit/isMusicDeviceOrEffect)

Specifies whether an audio unit responds to MIDI events.

[`virtualMIDICableCount`](/documentation/AudioToolbox/AUAudioUnit/virtualMIDICableCount)

The number of virtual MIDI cables implemented by a music device or effect.

[`scheduleMIDIEventBlock`](/documentation/AudioToolbox/AUAudioUnit/scheduleMIDIEventBlock)

A block used to schedule MIDI events.

[`midiOutputEventBlock`](/documentation/AudioToolbox/AUAudioUnit/midiOutputEventBlock)

[`midiOutputNames`](/documentation/AudioToolbox/AUAudioUnit/midiOutputNames)

The names of the MIDI outputs.

[`AUScheduleMIDIEventBlock`](/documentation/AudioToolbox/AUScheduleMIDIEventBlock)

A block to schedule MIDI events.

[`AUMIDIOutputEventBlock`](/documentation/AudioToolbox/AUMIDIOutputEventBlock)

### Managing Presets

[`fullState`](/documentation/AudioToolbox/AUAudioUnit/fullState)

A persistable snapshot of the audio unit’s properties and parameters, suitable for saving as a user preset.

[`fullStateForDocument`](/documentation/AudioToolbox/AUAudioUnit/fullStateForDocument)

A persistable snapshot of the audio unit’s properties and parameters, suitable for saving in a user’s document.

[`factoryPresets`](/documentation/AudioToolbox/AUAudioUnit/factoryPresets)

A collection of presets provided by the audio unit’s developer.

[`currentPreset`](/documentation/AudioToolbox/AUAudioUnit/currentPreset)

The audio unit’s last-selected preset.

[`supportsUserPresets`](/documentation/AudioToolbox/AUAudioUnit/supportsUserPresets)

[`userPresets`](/documentation/AudioToolbox/AUAudioUnit/userPresets)

[`saveUserPreset(_:)`](/documentation/AudioToolbox/AUAudioUnit/saveUserPreset(_:))

[`deleteUserPreset(_:)`](/documentation/AudioToolbox/AUAudioUnit/deleteUserPreset(_:))

[`presetState(for:)`](/documentation/AudioToolbox/AUAudioUnit/presetState(for:))

### Managing the Render Cycle

[`allocateRenderResources()`](/documentation/AudioToolbox/AUAudioUnit/allocateRenderResources())

Allocates resources required to render audio.

[`deallocateRenderResources()`](/documentation/AudioToolbox/AUAudioUnit/deallocateRenderResources())

Deallocates resources required to render audio.

[`reset()`](/documentation/AudioToolbox/AUAudioUnit/reset())

Resets transitory rendering state to its initial state.

[`renderResourcesAllocated`](/documentation/AudioToolbox/AUAudioUnit/renderResourcesAllocated)

Determines whether the audio unit has allocated render resources.

[`renderBlock`](/documentation/AudioToolbox/AUAudioUnit/renderBlock)

The block that hosts use to ask the audio unit to render audio.

[`scheduleParameterBlock`](/documentation/AudioToolbox/AUAudioUnit/scheduleParameterBlock)

The block that hosts use to schedule parameters.

[`maximumFramesToRender`](/documentation/AudioToolbox/AUAudioUnit/maximumFramesToRender)

The maximum number of frames that the audio unit can render at once.

[`token(byAddingRenderObserver:)`](/documentation/AudioToolbox/AUAudioUnit/token(byAddingRenderObserver:))

Adds a block to be called on each render cycle.

[`removeRenderObserver(_:)`](/documentation/AudioToolbox/AUAudioUnit/removeRenderObserver(_:))

Removes an observer block previously added to the render cycle.

[`renderContextObserver`](/documentation/AudioToolbox/AUAudioUnit/renderContextObserver)

The block that the system calls when the rendering context changes.

[`AURenderContextObserver`](/documentation/AudioToolbox/AURenderContextObserver)

A custom block that tells the audio unit which thread context to use for the next render cycle.

[`AudioUnitRenderContext`](/documentation/AudioToolbox/AudioUnitRenderContext)

A structure that contains thread context information for a real-time rendering operation.

[`AURenderObserver`](/documentation/AudioToolbox/AURenderObserver)

A block called when an audio unit renders audio.

### Messaging Channels

[`messageChannel(for:)`](/documentation/AudioToolbox/AUAudioUnit/messageChannel(for:))

Returns an object for bidirectional communication between an audio unit and its host.

[`AUMessageChannel`](/documentation/AudioToolbox/AUMessageChannel)

A specification for a bidirectional communication message channel.

### Optimizing Performance

[`latency`](/documentation/AudioToolbox/AUAudioUnit/latency)

The audio unit’s processing latency, in seconds.

[`tailTime`](/documentation/AudioToolbox/AUAudioUnit/tailTime)

The audio unit’s tail time, in seconds.

[`renderQuality`](/documentation/AudioToolbox/AUAudioUnit/renderQuality)

Provides a trade-off between rendering quality and CPU load.

[`shouldBypassEffect`](/documentation/AudioToolbox/AUAudioUnit/shouldBypassEffect)

Determines whether an effect should route input directly to output, without any processing.

[`canProcessInPlace`](/documentation/AudioToolbox/AUAudioUnit/canProcessInPlace)

Determines whether an audio unit can process in place.

[`isRenderingOffline`](/documentation/AudioToolbox/AUAudioUnit/isRenderingOffline)

Communicates to an audio unit that it is rendering offline.

[`osWorkgroup`](/documentation/AudioToolbox/AUAudioUnit/osWorkgroup)

The workgroup associated with the audio device underlying this Audio Unit.

### Describing the Audio Unit

[`componentDescription`](/documentation/AudioToolbox/AUAudioUnit/componentDescription)

The component description with which the audio unit was created.

[`component`](/documentation/AudioToolbox/AUAudioUnit/component)

The component found in the component description with which the audio unit was created.

[`componentName`](/documentation/AudioToolbox/AUAudioUnit/componentName)

The audio unit’s component’s name.

[`componentVersion`](/documentation/AudioToolbox/AUAudioUnit/componentVersion)

The audio unit’s component’s version.

[`audioUnitName`](/documentation/AudioToolbox/AUAudioUnit/audioUnitName)

The audio unit’s name, derived from the component’s name.

[`audioUnitShortName`](/documentation/AudioToolbox/AUAudioUnit/audioUnitShortName)

[`manufacturerName`](/documentation/AudioToolbox/AUAudioUnit/manufacturerName)

The manufacturer’s name, derived from the component’s name.

### Configuring the Channel Capabilities

[`channelCapabilities`](/documentation/AudioToolbox/AUAudioUnit/channelCapabilities)

Expresses valid combinations of input and output channels.

[`channelMap`](/documentation/AudioToolbox/AUAudioUnit/channelMap)

[`profileState(forCable:channel:)`](/documentation/AudioToolbox/AUAudioUnit/profileState(forCable:channel:))

[`enable(_:cable:onChannel:)`](/documentation/AudioToolbox/AUAudioUnit/enable(_:cable:onChannel:))

[`disableProfile(_:cable:onChannel:)`](/documentation/AudioToolbox/AUAudioUnit/disableProfile(_:cable:onChannel:))

[`profileChangedBlock`](/documentation/AudioToolbox/AUAudioUnit/profileChangedBlock)

### Configuring the Device

[`deviceID`](/documentation/AudioToolbox/AUAudioUnit/deviceID)

Gets the I/O hardware device.

[`setDeviceID(_:)`](/documentation/AudioToolbox/AUAudioUnit/setDeviceID(_:))

Sets the I/O hardware device.

[`canPerformInput`](/documentation/AudioToolbox/AUAudioUnit/canPerformInput)

Determines whether the I/O device can perform input.

[`canPerformOutput`](/documentation/AudioToolbox/AUAudioUnit/canPerformOutput)

Determines whether the I/O device can perform output.

[`isInputEnabled`](/documentation/AudioToolbox/AUAudioUnit/isInputEnabled)

A flag enabling audio input from the unit.

[`isOutputEnabled`](/documentation/AudioToolbox/AUAudioUnit/isOutputEnabled)

A flag enabling audio output from the unit.

[`inputHandler`](/documentation/AudioToolbox/AUAudioUnit/inputHandler)

The block that the output unit will call to notify when input is available.

[`outputProvider`](/documentation/AudioToolbox/AUAudioUnit/outputProvider)

The block that the output unit will call to get audio to send to the output.

[`deviceInputLatency`](/documentation/AudioToolbox/AUAudioUnit/deviceInputLatency)

The audio device’s input latency, in seconds.

[`deviceOutputLatency`](/documentation/AudioToolbox/AUAudioUnit/deviceOutputLatency)

The audio devic’s output latency, in seconds.

[`startHardware()`](/documentation/AudioToolbox/AUAudioUnit/startHardware())

Starts the audio hardware.

[`stopHardware()`](/documentation/AudioToolbox/AUAudioUnit/stopHardware())

Stops the audio hardware.

[`AURenderPullInputBlock`](/documentation/AudioToolbox/AURenderPullInputBlock)

A block to supply audio input to a render block.

### Configuring the User Interface

[`providesUserInterface`](/documentation/AudioToolbox/AUAudioUnit/providesUserInterface)

A Boolean that indicates whether the audio unit provides a user interface, normally in the form of a view controller.

[`supportedViewConfigurations(_:)`](/documentation/AudioToolbox/AUAudioUnit/supportedViewConfigurations(_:))

[`select(_:)`](/documentation/AudioToolbox/AUAudioUnit/select(_:))

### Getting the Runtime Behavior

[`isRunning`](/documentation/AudioToolbox/AUAudioUnit/isRunning)

[`isLoadedInProcess`](/documentation/AudioToolbox/AUAudioUnit/isLoadedInProcess)

### Constants

[AUEventSampleTime](/documentation/AudioToolbox/1387633-aueventsampletime)

Expresses time as a sample count.

[`AUAudioUnitBusType`](/documentation/AudioToolbox/AUAudioUnitBusType)

[`AUHostTransportStateFlags`](/documentation/AudioToolbox/AUHostTransportStateFlags)

[`AURenderEventType`](/documentation/AudioToolbox/AURenderEventType)

[`AURenderBlock`](/documentation/AudioToolbox/AURenderBlock)

A block to render the audio unit.

[`AUInputHandler`](/documentation/AudioToolbox/AUInputHandler)

A block to notify the host of an I/O unit that an input is available.

### Getting the Audio Unit Presets

[`kAUPresetNumberKey`](/documentation/AudioToolbox/kAUPresetNumberKey)

[`kAUPresetCPULoadKey`](/documentation/AudioToolbox/kAUPresetCPULoadKey)

[`kAUPresetDataKey`](/documentation/AudioToolbox/kAUPresetDataKey)

[`kAUPresetElementNameKey`](/documentation/AudioToolbox/kAUPresetElementNameKey)

[`kAUPresetExternalFileRefs`](/documentation/AudioToolbox/kAUPresetExternalFileRefs)

[`kAUPresetMASDataKey`](/documentation/AudioToolbox/kAUPresetMASDataKey)

[`kAUPresetManufacturerKey`](/documentation/AudioToolbox/kAUPresetManufacturerKey)

[`kAUPresetNameKey`](/documentation/AudioToolbox/kAUPresetNameKey)

[`kAUPresetPartKey`](/documentation/AudioToolbox/kAUPresetPartKey)

If present, distinguishes a global preset that is set on the global scope from a part-based preset that is set on the part scope. The value of this key is defined by the audio unit it applies to.

[`kAUPresetRenderQualityKey`](/documentation/AudioToolbox/kAUPresetRenderQualityKey)

[`kAUPresetSubtypeKey`](/documentation/AudioToolbox/kAUPresetSubtypeKey)

[`kAUPresetTypeKey`](/documentation/AudioToolbox/kAUPresetTypeKey)

[`kAUPresetVSTDataKey`](/documentation/AudioToolbox/kAUPresetVSTDataKey)

VST state from a VST “bank.”

[`kAUPresetVSTPresetKey`](/documentation/AudioToolbox/kAUPresetVSTPresetKey)

VST state from a VST “preset.”

[`kAUPresetVersionKey`](/documentation/AudioToolbox/kAUPresetVersionKey)

### Instance properties

[`audioUnitMIDIProtocol`](/documentation/AudioToolbox/AUAudioUnit/audioUnitMIDIProtocol)

[`hostMIDIProtocol`](/documentation/AudioToolbox/AUAudioUnit/hostMIDIProtocol)

[`midiOutputEventListBlock`](/documentation/AudioToolbox/AUAudioUnit/midiOutputEventListBlock)

[`migrateFromPlugin`](/documentation/AudioToolbox/AUAudioUnit/migrateFromPlugin)

[`scheduleMIDIEventListBlock`](/documentation/AudioToolbox/AUAudioUnit/scheduleMIDIEventListBlock)

### Instance Methods

[`requestViewController(completionHandler:)`](/documentation/AudioToolbox/AUAudioUnit/requestViewController(completionHandler:))

Requests an audio unit’s custom view controller.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)