<!--
{
  "documentType" : "article",
  "framework" : "AudioToolbox",
  "identifier" : "/documentation/AudioToolbox/audio-file-stream-services",
  "metadataVersion" : "0.1.0",
  "role" : "collectionGroup",
  "title" : "Audio File Stream Services"
}
-->

# Audio File Stream Services

Parse streamed audio files as the data arrives on the user’s computer.

## Discussion

Audio File Stream Services provides the interface for parsing streamed audio files—in which only a limited window of data is available at a time.

Audio file streams, by nature, are not random access. When you request data from a stream, earlier data might no longer be accessible and later data might not yet be available. In addition, the data you obtain (and then provide to a parser) might include partial packets. To parse streamed audio data, then, a parser must remember data from partially satisfied requests, and must be able to wait for the remainder of that data. In other words, a parser must be able to suspend parsing as needed and then resume where it left off.

To use a parser, you pass data from a streamed audio file, as you acquire it, to the parser. When the parser has a complete packet of audio data or a complete property, it invokes a callback function. Your callbacks then process the parsed data—such as by playing it or writing it to disk.

Here, in outline form, is a typical usage pattern for an audio file stream parser:

1. Create a new audio file stream parser by calling the [`AudioFileStreamOpen(_:_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamOpen(_:_:_:_:_:)) function. Pass pointers to your callback functions for audio data and metadata ([`AudioFileStream_PacketsProc`](/documentation/AudioToolbox/AudioFileStream_PacketsProc) and [`AudioFileStream_PropertyListenerProc`](/documentation/AudioToolbox/AudioFileStream_PropertyListenerProc)). The [`AudioFileStreamOpen(_:_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamOpen(_:_:_:_:_:)) function gives you a reference to the new parser.
2. Acquire some streamed data. Call the [`AudioFileStreamParseBytes(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamParseBytes(_:_:_:_:)) function when you have data to pass to the parser. Send the data to the parser sequentially and, if possible, without gaps.
3. When the parser acquires a usable buffer of audio data, it invokes your audio data callback. Your callback can then play the data, write it to a file, or otherwise process it.
4. When the parser acquires metadata, it invokes your property callback—which in turn can obtain the property value by calling the [`AudioFileStreamGetPropertyInfo(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamGetPropertyInfo(_:_:_:_:)) and [`AudioFileStreamGetProperty(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamGetProperty(_:_:_:_:)) functions.
5. When finished parsing a stream, call the [`AudioFileStreamClose(_:)`](/documentation/AudioToolbox/AudioFileStreamClose(_:)) function to close and deallocate the parser.

Audio File Stream Services supports the following audio data types:

- AIFF
- AIFC
- WAVE
- CAF
- NeXT
- ADTS
- MPEG Audio Layer 3
- AAC

## Topics

### Opening Audio File Streams

[`AudioFileStreamOpen(_:_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamOpen(_:_:_:_:_:))

Creates and opens a new audio file stream parser.

### Supplying Data to the Parser

[`AudioFileStreamParseBytes(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamParseBytes(_:_:_:_:))

Passes audio file stream data to the parser.

### Seeking Packets in the Data Stream

[`AudioFileStreamSeek(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamSeek(_:_:_:_:))

Provides a byte offset for a specified packet in the data stream.

### Working with Data Stream Property Information

[`AudioFileStreamGetPropertyInfo(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamGetPropertyInfo(_:_:_:_:))

Retrieves information about a property value.

[`AudioFileStreamGetProperty(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamGetProperty(_:_:_:_:))

Retrieves the value of the specified property.

[`AudioFileStreamSetProperty(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamSetProperty(_:_:_:_:))

Sets the value of the specified property.

### Closing an Audio File Stream

[`AudioFileStreamClose(_:)`](/documentation/AudioToolbox/AudioFileStreamClose(_:))

Closes and deallocates the specified audio file stream parser.

### Callbacks

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

Invoked by an audio file stream parser when it finds a property value in the audio file stream.

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

Invoked by an audio file stream parser when it finds audio data in the audio file stream.

### Data Types

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

Uniquely identifies an audio file stream property.

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

Defines an opaque data type that represents an audio file stream parser.

### Enumerations

[Audio File Stream Errors](/documentation/AudioToolbox/1391572-audio-file-stream-errors)

[Audio File Types](/documentation/AudioToolbox/1576497-audio-file-types)

### Constants

[Audio File Stream Flags](/documentation/AudioToolbox/audio-file-stream-flags)

Flags set by the property listener callback and the [`AudioFileStreamParseBytes(_:_:_:_:)`](/documentation/AudioToolbox/AudioFileStreamParseBytes(_:_:_:_:)) function.

[Audio File Stream Properties](/documentation/AudioToolbox/1391506-audio-file-stream-properties)

Audio file stream properties contain information that you can use to help interpret the audio data in a stream.

### Result Codes

This table lists the result codes defined for Audio File Stream Services.

[Audio File Errors](/documentation/AudioToolbox/1576500-audio-file-errors)

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

The specified file type is not supported.

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

The data format is not supported by the specified file type.

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

The property is not supported.

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

The size of the buffer you provided for property data was not correct.

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

It is not possible to produce output packets because the streamed audio file’s packet table or other defining information is not present or appears after the audio data.

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

A packet offset was less than `0`, or past the end of the file, or a corrupt packet size was read when building the packet table.

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

The file is malformed, not a valid instance of an audio file of its type, or not recognized as an audio file.

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

The property value is not present in this file before the audio data.

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

The amount of data provided to the parser was insufficient to produce any result.

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

An illegal operation was attempted.

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

An unspecified error has occurred.

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

A discontinuity has occurred in the audio data, and Audio File Stream Services cannot recover.



---

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)