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

# IOUserAudioStream

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

```
class IOUserAudioStream;
```

## Overview

[`IOUserAudioStream`](/documentation/AudioDriverKit/IOUserAudioStream) allocates memory descriptors that the host uses for running I/O. An [`IOUserAudioDevice`](/documentation/AudioDriverKit/IOUserAudioDevice) uses an [`IOUserAudioStream`](/documentation/AudioDriverKit/IOUserAudioStream) instance to perform I/O. Changes to the device that owns a stream may update formats on the underlying stream, which you handle by overriding [`HandleChangeCurrentStreamFormat`](/documentation/AudioDriverKit/IOUserAudioStream/HandleChangeCurrentStreamFormat) and [`HandleChangeStreamIsActive`](/documentation/AudioDriverKit/IOUserAudioStream/HandleChangeStreamIsActive).

## Topics

### Creating an Audio Stream

[`static OSSharedPtr<IOUserAudioStream> Create(IOUserAudioDriver *in_driver, IOUserAudioStreamDirection in_direction, IOMemoryDescriptor *in_io_memory_descriptor);`](/documentation/AudioDriverKit/IOUserAudioStream/Create)

Allocates and initializes an instance of the audio stream class.

[`virtual bool init(IOUserAudioDriver *in_driver, IOUserAudioStreamDirection in_direction, IOMemoryDescriptor *in_io_memory_descriptor);`](/documentation/AudioDriverKit/IOUserAudioStream/init)

Initializes an instance of the audio stream class.

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

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

### Freeing an Audio Stream

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

Frees the audio stream.

### Getting Information About the Class

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

Gets the audio class identifier of the object.

[`virtual IOUserAudioClassID GetBaseClassID();`](/documentation/AudioDriverKit/IOUserAudioStream/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/IOUserAudioStream/StartIO)

Tells the stream to start I/O.

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

Tells the stream to stop I/O.

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

Values that indicate I/O starts or stops.

### Working with Stream Formats

[`kern_return_t SetCurrentStreamFormat(const IOUserAudioStreamBasicDescription *in_format);`](/documentation/AudioDriverKit/IOUserAudioStream/SetCurrentStreamFormat)

Sets the current stream format to a given audio stream basic description.

[`IOUserAudioStreamBasicDescription GetCurrentStreamFormat();`](/documentation/AudioDriverKit/IOUserAudioStream/GetCurrentStreamFormat)

Returns the current stream format, as an audio stream basic description.

[`kern_return_t SetAvailableStreamFormats(const IOUserAudioStreamBasicDescription *in_formats, uint32_t in_num_formats);`](/documentation/AudioDriverKit/IOUserAudioStream/SetAvailableStreamFormats)

Sets the available stream formats to an array of audio stream basic descriptions.

[`size_t GetAvailableStreamFormats(IOUserAudioStreamBasicDescription *out_formats, size_t in_num_formats);`](/documentation/AudioDriverKit/IOUserAudioStream/GetAvailableStreamFormats)

Returns the available stream formats as an array of audio stream basic descriptions.

[`size_t GetNumberAvailableStreamFormats();`](/documentation/AudioDriverKit/IOUserAudioStream/GetNumberAvailableStreamFormats)

Returns the number of available stream formats.

[`struct IOUserAudioStreamBasicDescription;`](/documentation/AudioDriverKit/AudioDriverKit/IOUserAudioStreamBasicDescription)

A structure that encapsulates all of the information for describing the basic format properties of a stream of audio data.

[`IOUserAudioStreamDirection GetStreamDirection();`](/documentation/AudioDriverKit/IOUserAudioStream/GetStreamDirection)

Gets the direction of the stream: input or output.

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

A type representing the direction of audio flow.

[`kern_return_t SetStreamIsActive(bool in_is_active);`](/documentation/AudioDriverKit/IOUserAudioStream/SetStreamIsActive)

Sets a Boolean value that indicates whether the stream is active and doing I/O.

[`bool GetStreamIsActive();`](/documentation/AudioDriverKit/IOUserAudioStream/GetStreamIsActive)

Gets a value that indicates whether the stream is active and doing I/O.

### Working with Stream Terminals

[`kern_return_t SetTerminalType(IOUserAudioStreamTerminalType in_terminal_type);`](/documentation/AudioDriverKit/IOUserAudioStream/SetTerminalType)

Sets the terminal type of the stream.

[`IOUserAudioStreamTerminalType GetTerminalType();`](/documentation/AudioDriverKit/IOUserAudioStream/GetTerminalType)

Gets the terminal type of the stream.

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

Constants that describe the terminal type of an audio stream.

### Working with Memory Descriptors

[`OSSharedPtr<IOMemoryDescriptor> GetIOMemoryDescriptor();`](/documentation/AudioDriverKit/IOUserAudioStream/GetIOMemoryDescriptor)

Gets the memory descriptor the stream uses for I/O.

[`kern_return_t SetIOMemoryDescriptor(IOMemoryDescriptor *in_io_memory_descriptor);`](/documentation/AudioDriverKit/IOUserAudioStream/SetIOMemoryDescriptor)

Sets the memory descriptor the stream uses for I/O.

### Managing Stream Changes

[`virtual kern_return_t HandleChangeCurrentStreamFormat(const IOUserAudioStreamBasicDescription *in_format);`](/documentation/AudioDriverKit/IOUserAudioStream/HandleChangeCurrentStreamFormat)

Tells the stream the format is changing.

[`virtual kern_return_t HandleChangeStreamIsActive(bool in_is_active);`](/documentation/AudioDriverKit/IOUserAudioStream/HandleChangeStreamIsActive)

Tells the stream the activity state 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.

### Instance Methods

[`uint32_t GetLatency();`](/documentation/AudioDriverKit/IOUserAudioStream/GetLatency)

[`uint32_t GetStartingChannel();`](/documentation/AudioDriverKit/IOUserAudioStream/GetStartingChannel)

[`kern_return_t SetLatency(uint32_t in_latency);`](/documentation/AudioDriverKit/IOUserAudioStream/SetLatency)

[`kern_return_t SetStartingChannel(uint32_t in_starting_channel);`](/documentation/AudioDriverKit/IOUserAudioStream/SetStartingChannel)

## Relationships

### Inherits From

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

---

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)