<!--
{
  "availability" : [
    "macCatalyst: 13.1.0 - 13.1.0",
    "macOS: 10.1.0 - 10.5.0"
  ],
  "documentType" : "symbol",
  "framework" : "CoreAudio",
  "identifier" : "/documentation/CoreAudio/AudioDeviceRead",
  "metadataVersion" : "0.1.0",
  "role" : "Function",
  "symbol" : {
    "kind" : "Function",
    "modules" : [
      "Core Audio"
    ],
    "preciseIdentifier" : "c:@F@AudioDeviceRead"
  },
  "title" : "AudioDeviceRead"
}
-->

# AudioDeviceRead

```
extern OSStatus AudioDeviceRead(AudioDeviceID inDevice, const AudioTimeStamp *inStartTime, AudioBufferList *outData);
```

## Parameters

`inDevice`

The AudioDevice to read from.

`inStartTime`

An AudioTimeStamp indicating the time from which to read the data. In
general, the valid range of time (in frames) is from the current time minus
the maximum IO buffer size to the current time minus the safety offset.

`outData`

An AudioBufferList that must be the same size and shape as that returned by
kAudioDevicePropertyStreamConfiguration. Further, the AudioBufferList must
have been previously registered with the device via
kAudioDevicePropertyRegisterBufferList. On exit, the mDataSize fields will
be updated with the amount of data read.

## Return Value

An OSStatus indicating success or failure.
kAudioHardwareUnsupportedOperationError will be returned if the AudioDevice does
not support direct reading.

## Discussion

\abstract Read some data from an AudioDevice starting at the given time.
\discussion With the advent of aggregate devices, the need for AudioDeviceRead has gone
away. Consequently, this function is now deprecated.

---

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)