Edit

Share via


AudioQueue Class

Definition

Base class for Input and Output audio queues.

public abstract class AudioQueue : IDisposable
type AudioQueue = class
    interface IDisposable
Inheritance
AudioQueue
Derived
Implements

Remarks

AudioQueues can be used to record audio from the system input devices into a stream, and to play back audio. They are responsible for encoding your audio when recording or decoding your compressed audio when playing back and interact directly with the audio hardware and decoding hardware where appropriate.

AudioQueue is a base class for both the InputAudioQueue which is used to record audio and the OutputAudioQueue which is used to playback audio. This class provides services to start, prime, stop, pause the queues as well as volume control, resource management and event notifications.

When you use AudioQueues, you must allocate buffers for playback or recording. You use the AllocateBuffer(Int32, AudioQueueBuffer*) method or the AllocateBufferWithPacketDescriptors(Int32, Int32, IntPtr) to allocate them and you use the FreeBuffer(IntPtr) to release them. You keep a collection of buffers around that the underlying hardware can use to either playback audio, or record into. As the buffers are used, a notification callback is invoked. In the OutputAudioQueue case, you connect to the OutputCompleted event to be notified when a buffer has been fully played back, and in the InputAudioQueue you use the InputCompleted event to be notified when a recording has fully utilized a buffer.

Unless otherwise specified, the callbacks for processing a filled audio buffer, or filling out an audio buffer are invoked on an AudioQueue thread. You can change this by providing an instance of the CFRunLoop that you want to use for processing the events in your queue.

When processing an input or output queue, you might want to listen to a few property changes raised by the queues during their processing (See the E:AudioToolBox.AudioQueueProperty for a list of events that you can listen to). To do this, use the AddListener(AudioQueueProperty, AudioQueue+AudioQueuePropertyChanged) method to add a listener and use the RemoveListener(AudioQueueProperty, AudioQueue+AudioQueuePropertyChanged) method to remove the listener.

You can see the StreamingAudio to see how to use AudioBuffers.

The various AudioQueue properties are exposed as high-level C# properties. In addition to the high-level properties, a low-level interface to the AudioQueue property system is exposed in case Apple introduces a new property that was not previously bound or if you need finer grained control. The low-level interface is provided by the GetProperty and SetProperty family of methods.

Fields

gch
handle

Properties

AudioStreamDescription
AudioStreamPacketDescription
Obsolete.

The audio queue's AudioStreamBasicDescription.

ChannelLayout

The audio queue channel layout.

ConverterError

Contains the most recent error generated in the audio queue's encoding or decoding process.

CurrentDevice

Unique identifier for the device associated with this Audio Queue.

CurrentLevelMeter

Current Level meters, one per channel in the range zero (minimum) to one (maximum).

CurrentLevelMeterDB

Current Level meters, one per channel in decibels.

CurrentTime

Returns the current time for the hardware device.

DecodeBufferSizeFrames
DeviceChannels
EnableLevelMetering

Enables level metering on the audio queue.

Handle

Handle (pointer) to the unmanaged object representation.

HardwareCodecPolicy
IsRunning
MagicCookie

Audio metadata required by certain formats.

MaximumOutputPacketSize
Pan
SampleRate
Volume

The volume

VolumeRampTime

Methods

AddListener(AudioQueueProperty, AudioQueue+AudioQueuePropertyChanged)

Use this method to track changes to the audio queue properties.

AllocateBuffer(Int32, AudioQueueBuffer*)

Allocates an audio buffer associated with this AudioQueue

AllocateBuffer(Int32, IntPtr)

Allocates an audio buffer associated with this AudioQueue, used for fixed bit rate buffers.

AllocateBufferWithPacketDescriptors(Int32, Int32, IntPtr)

Allocates an audio queue object for variable-bit-rate buffers.

CreateProcessingTap(AudioQueueProcessingTapDelegate, AudioQueueProcessingTapFlags, AudioQueueStatus)

Creates a processing tap in the AudioQueue.

CreateTimeline()

Creates a timeline object that can be used to track discontinuities in the audio queue's audio.

Dispose()

Releases the resources used by the AudioQueue object.

Dispose(Boolean)

Releases the resources used by the AudioQueue object.

EnqueueBuffer(AudioQueueBuffer*, AudioStreamPacketDescription[])

Adds a buffer to the buffer queue of an audio queue.

EnqueueBuffer(AudioQueueBuffer*, Int32, AudioStreamPacketDescription[], Int32, Int32, AudioQueueParameterEvent[], AudioTimeStamp, AudioTimeStamp)

Adds a buffer to the buffer queue of a playback audio queue, specifying start time and parameters.

EnqueueBuffer(AudioQueueBuffer*, Int32, AudioStreamPacketDescription[], Int32, Int32, AudioQueueParameterEvent[], AudioTimeStamp)

Adds a buffer that should play as soon as possible to the buffer queue of a playback audio queue.

EnqueueBuffer(IntPtr, AudioStreamPacketDescription[])
EnqueueBuffer(IntPtr, Int32, AudioStreamPacketDescription[], Int32, Int32, AudioQueueParameterEvent[], AudioTimeStamp, AudioTimeStamp)

Adds a buffer to the buffer queue of a playback audio queue, specifying start time and parameters.

EnqueueBuffer(IntPtr, Int32, AudioStreamPacketDescription[], Int32, Int32, AudioQueueParameterEvent[], AudioTimeStamp)

Adds a buffer that should play as soon as possible to the buffer queue of a playback audio queue.

EnqueueBuffer(IntPtr, Int32, AudioStreamPacketDescription[])

Adds a buffer to the buffer queue of an audio queue.

FillAudioData(IntPtr, Int32, IntPtr, Int32, nint)

Copies raw audio data contained at the location pointed to by source+sourceOffset at the specified offset into the AudioQueueBuffer.

Finalize()

Finalizer for the AudioQueue object

Flush()
FreeBuffer(IntPtr)

Releases an AudioQueue buffer.

GetCurrentTime(AudioQueueTimeline, AudioTimeStamp, Boolean)

Returns the current time for the audio queue.

GetNearestStartTime(AudioTimeStamp)
GetProperty(AudioQueueProperty, Int32, IntPtr)

Low-level API to fetch AudioQueue properties.

GetProperty(AudioQueueProperty, Int32)

Low-level API to fetch AudioQueue properties.

GetProperty<T>(AudioQueueProperty)

Low-level API to fetch AudioQueue properties.

Pause()
Prime(Int32, Int32)

Used to prepare the audio buffers to play back and ensure that there is data ready to be played by the audio hardware.

QueueDispose()
RemoveListener(AudioQueueProperty, AudioQueue+AudioQueuePropertyChanged)
Reset()
SetChannelAssignments(AudioQueueChannelAssignment[])
SetProperty(AudioQueueProperty, Int32, IntPtr)
Start()

Starts the audio queue.

Start(AudioTimeStamp)
Stop(Boolean)

Stops the AudioQueue.

TranslateTime(AudioTimeStamp)

Applies to

See also