<!--
{
  "availability" : [
    "DriverKit: 21.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AudioDriverKit",
  "identifier" : "/documentation/AudioDriverKit/IOUserAudioDevice",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "AudioDriverKit"
    ],
    "preciseIdentifier" : "c:@S@IOUserAudioDevice"
  },
  "title" : "IOUserAudioDevice"
}
-->

# IOUserAudioDevice

An audio clock device object that handles the configurations for running I/O.

```
class IOUserAudioDevice;
```

## Overview

The [`IOUserAudioDevice`](/documentation/AudioDriverKit/IOUserAudioDevice) class subclasses [`IOUserAudioClockDevice`](/documentation/AudioDriverKit/IOUserAudioClockDevice) and can contain [`IOUserAudioStream`](/documentation/AudioDriverKit/IOUserAudioStream) instances that perform I/O for the audio device.

## Topics

### Creating an Audio Device

[`static OSSharedPtr<IOUserAudioDevice> Create(IOUserAudioDriver *in_driver, bool in_supports_prewarming, OSString *in_device_uid, OSString *in_model_uid, OSString *in_manufacturer_uid, uint32_t in_zero_timestamp_period);`](/documentation/AudioDriverKit/IOUserAudioDevice/Create)

Allocates and initializes an instance of the audio device class.

[`virtual bool init(IOUserAudioDriver *in_driver, bool in_supports_prewarming, OSString *in_device_uid, OSString *in_model_uid, OSString *in_manufacturer_uid, uint32_t in_zero_timestamp_period);`](/documentation/AudioDriverKit/IOUserAudioDevice/init)

Initializes an instance of the audio device class.

[`class IOUserAudioDriver;`](/documentation/AudioDriverKit/IOUserAudioDriver)

A DriverKit provider object that manages communications with an audio device.

### Freeing an Audio Device

[`virtual void free();`](/documentation/AudioDriverKit/IOUserAudioDevice/free)

Frees the audio device.

### Getting Information About the Class

[`virtual IOUserAudioClassID GetClassID();`](/documentation/AudioDriverKit/IOUserAudioDevice/GetClassID)

Gets the audio class identifier of the object.

[`virtual IOUserAudioClassID GetBaseClassID();`](/documentation/AudioDriverKit/IOUserAudioDevice/GetBaseClassID)

Gets the audio class identifier of the base class object.

[`enum IOUserAudioClassID : uint32_t;`](/documentation/AudioDriverKit/AudioDriverKit/IOUserAudioClassID)

An identifier for the type of audio object.

### Performing I/O

[`virtual kern_return_t StartIO(IOUserAudioStartStopFlags in_flags);`](/documentation/AudioDriverKit/IOUserAudioDevice/StartIO)

Tells the device to start I/O.

[`virtual kern_return_t StopIO(IOUserAudioStartStopFlags in_flags);`](/documentation/AudioDriverKit/IOUserAudioDevice/StopIO)

Tells the device to stop I/O.

[`enum IOUserAudioStartStopFlags : uint64_t;`](/documentation/AudioDriverKit/AudioDriverKit/IOUserAudioStartStopFlags)

Values that indicate I/O starts or stops.

### Supporting Device Configuration Changes

[`virtual kern_return_t PerformDeviceConfigurationChange(uint64_t in_change_action, OSObject *in_change_info);`](/documentation/AudioDriverKit/IOUserAudioDevice/PerformDeviceConfigurationChange)

Tells the device to handle a configuration change.

[`virtual kern_return_t AbortDeviceConfigurationChange(uint64_t in_change_action, OSObject *in_change_info);`](/documentation/AudioDriverKit/IOUserAudioDevice/AbortDeviceConfigurationChange)

Tells the device to stop handling a configuration change.

### Supporting Sample Rate Changes

[`virtual kern_return_t HandleChangeSampleRate(double in_sample_rate);`](/documentation/AudioDriverKit/IOUserAudioDevice/HandleChangeSampleRate)

Tells the device the sample rate is changing.

[`kern_return_t DeviceSampleRateChanged(double in_sample_rate);`](/documentation/AudioDriverKit/IOUserAudioStream/DeviceSampleRateChanged)

Updates stream formats, in response to the owning audio device changing its sample rate.

### Working with Audio Streams

[`kern_return_t AddStream(IOUserAudioStream *in_stream);`](/documentation/AudioDriverKit/IOUserAudioDevice/AddStream)

Adds an audio stream to the device.

[`kern_return_t RemoveStream(IOUserAudioStream *in_stream);`](/documentation/AudioDriverKit/IOUserAudioDevice/RemoveStream)

Removes an audio stream from the device.

[`class IOUserAudioStream;`](/documentation/AudioDriverKit/IOUserAudioStream)

An audio object that performs I/O for an audio device.

### Working with Default Device Behavior

[`kern_return_t SetCanBeDefaultInputDevice(bool in_can_be_default);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetCanBeDefaultInputDevice)

Sets a Boolean value that indicates if this device can be the host’s default input device.

[`uint32_t CanBeDefaultInputDevice();`](/documentation/AudioDriverKit/IOUserAudioDevice/CanBeDefaultInputDevice)

Returns a Boolean value that indicates if this device can be the host’s default input device.

[`kern_return_t SetCanBeDefaultOutputDevice(bool in_can_be_default);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetCanBeDefaultOutputDevice)

Sets a Boolean value that indicates if this device can be the host’s default output device.

[`uint32_t CanBeDefaultOutputDevice();`](/documentation/AudioDriverKit/IOUserAudioDevice/CanBeDefaultOutputDevice)

Returns a Boolean value that indicates if this device can be the host’s default output device.

[`kern_return_t SetCanBeDefaultSystemOutputDevice(bool in_can_be_default);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetCanBeDefaultSystemOutputDevice)

Sets a Boolean value that indicates if this device can be the system’s default output device.

[`uint32_t CanBeDefaultSystemOutputDevice();`](/documentation/AudioDriverKit/IOUserAudioDevice/CanBeDefaultSystemOutputDevice)

Returns a Boolean value that indicates if this device can be the system’s default output device.

### Working with Safety Offset Behvaior

[`kern_return_t SetInputSafetyOffset(uint32_t in_safety_offset);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetInputSafetyOffset)

Specifies the input safety offset of the device.

[`uint32_t GetInputSafetyOffset();`](/documentation/AudioDriverKit/IOUserAudioDevice/GetInputSafetyOffset)

Returns the input safety offset of the device.

[`kern_return_t SetOutputSafetyOffset(uint32_t in_safety_offset);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetOutputSafetyOffset)

Specifies the output safety offset of the device.

[`uint32_t GetOutputSafetyOffset();`](/documentation/AudioDriverKit/IOUserAudioDevice/GetOutputSafetyOffset)

Returns the output safety offset of the device.

### Working with Channel Layouts

[`kern_return_t SetPreferredChannelsForStereo(uint32_t in_left_channel, uint32_t in_right_channel);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetPreferredChannelsForStereo)

Sets the channel indices for the prefered stereo pair.

[`void GetPreferredChannelsForStereo(uint32_t *out_left_channel, uint32_t *out_right_channel);`](/documentation/AudioDriverKit/IOUserAudioDevice/GetPreferredChannelsForStereo)

Returns the channel indices for the prefered stereo pair.

[`kern_return_t SetPreferredInputChannelLayout(IOUserAudioChannelLabel *in_channel_labels, size_t in_num_channels);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetPreferredInputChannelLayout)

Sets the input channel layout, using an array of audio channel label values.

[`kern_return_t SetPreferredOutputChannelLayout(IOUserAudioChannelLabel *in_channel_labels, size_t in_num_channels);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetPreferredOutputChannelLayout)

Sets the output channel layout, using an array of audio channel label values.

[`enum IOUserAudioChannelLabel : uint32_t;`](/documentation/AudioDriverKit/AudioDriverKit/IOUserAudioChannelLabel)

Constants to set the preferred channel layout on an audio device.

### Instance Methods

[`void GetCurrentClientIOTime(bool in_is_input, uint64_t *out_sample_time, uint64_t *out_host_time);`](/documentation/AudioDriverKit/IOUserAudioDevice/GetCurrentClientIOTime)

[`kern_return_t SetIOOperationHandler(IOOperationHandler in_io_operation_block);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetIOOperationHandler)

[`void SetWantsStreamFormatsRestored(bool in_wants_stream_formats_restored);`](/documentation/AudioDriverKit/IOUserAudioDevice/SetWantsStreamFormatsRestored)

## Relationships

### Inherits From

[`IOUserAudioClockDevice`](/documentation/AudioDriverKit/IOUserAudioClockDevice)

---

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)