hl2_src-leak-2017/src/common/quicktime_win32/CoreAudioTypes.h

1158 lines
58 KiB
C
Raw Permalink Blame History

/*==================================================================================================
File: CoreAudio/CoreAudioTypes.h
Contains: Definitions types common to the Core Audio APIs
Version: Technology: Mac OS X
Release: Mac OS X
Copyright: (c) 1985-2007 by Apple Inc., all rights reserved.
Bugs?: For bug reports, consult the following page on
the World Wide Web:
http://developer.apple.com/bugreporter/
==================================================================================================*/
#if !defined(__CoreAudioTypes_h__)
#define __CoreAudioTypes_h__
/*!
@header CoreAudioTypes
This header defines the types and constants that all the CoreAudio APIs have in common.
*/
//==================================================================================================
#define COREAUDIOTYPES_VERSION 1050
#include <TargetConditionals.h>
#if !defined(__COREAUDIO_USE_FLAT_INCLUDES__)
#include <CoreServices/../Frameworks/CarbonCore.framework/Headers/MacTypes.h>
#else
#include <MacTypes.h>
#endif
#if defined(__cplusplus)
#include <string.h>
#endif
//==================================================================================================
#if PRAGMA_ENUM_ALWAYSINT
#pragma enumsalwaysint off
#endif
#if defined(__cplusplus)
extern "C"
{
#endif
//==================================================================================================
/*!
@struct AudioValueRange
@abstract This structure holds a pair of numbers that represent a continuous range of
values.
@field mMinimum
The minimum value.
@field mMaximum
The maximum value.
*/
struct AudioValueRange
{
Float64 mMinimum;
Float64 mMaximum;
};
typedef struct AudioValueRange AudioValueRange;
/*!
@struct AudioValueTranslation
@abstract This stucture holds the buffers necessary for translation operations.
@field mInputData
The buffer containing the data to be translated.
@field mInputDataSize
The number of bytes in the buffer pointed at by mInputData.
@field mOutputData
The buffer to hold the result of the translation.
@field mOutputDataSize
The number of bytes in the buffer pointed at by mOutputData.
*/
struct AudioValueTranslation
{
void* mInputData;
UInt32 mInputDataSize;
void* mOutputData;
UInt32 mOutputDataSize;
};
typedef struct AudioValueTranslation AudioValueTranslation;
/*!
@struct AudioBuffer
@abstract A structure to hold a buffer of audio data.
@field mNumberChannels
The number of interleaved channels in the buffer.
@field mDataByteSize
The number of bytes in the buffer pointed at by mData.
@field mData
A pointer to the buffer of audio data.
*/
struct AudioBuffer
{
UInt32 mNumberChannels;
UInt32 mDataByteSize;
void* mData;
};
typedef struct AudioBuffer AudioBuffer;
/*!
@struct AudioBufferList
@abstract A variable length array of AudioBuffer structures.
@field mNumberBuffers
The number of AudioBuffers in the mBuffers array.
@field mBuffers
A variable length array of AudioBuffers.
*/
struct AudioBufferList
{
UInt32 mNumberBuffers;
AudioBuffer mBuffers[kVariableLengthArray];
};
typedef struct AudioBufferList AudioBufferList;
/*!
@typedef AudioSampleType
@abstract The canonical audio sample type used by the various CoreAudio APIs
*/
typedef Float32 AudioSampleType;
/*!
@struct AudioStreamBasicDescription
@abstract This structure encapsulates all the information for describing the basic
format properties of a stream of audio data.
@discussion This structure is sufficient to describe any constant bit rate format that has
channels that are the same size. Extensions are required for variable bit rate
data and for constant bit rate data where the channels have unequal sizes.
However, where applicable, the appropriate fields will be filled out correctly
for these kinds of formats (the extra data is provided via separate properties).
In all fields, a value of 0 indicates that the field is either unknown, not
applicable or otherwise is inapproprate for the format and should be ignored.
Note that 0 is still a valid value for most formats in the mFormatFlags field.
In audio data a frame is one sample across all channels. In non-interleaved
audio, the per frame fields identify one channel. In interleaved audio, the per
frame fields identify the set of n channels. In uncompressed audio, a Packet is
one frame, (mFramesPerPacket == 1). In compressed audio, a Packet is an
indivisible chunk of compressed data, for example an AAC packet will contain
1024 sample frames.
@field mSampleRate
The number of sample frames per second of the data in the stream.
@field mFormatID
A four char code indicating the general kind of data in the stream.
@field mFormatFlags
Flags specific to each format.
@field mBytesPerPacket
The number of bytes in a packet of data.
@field mFramesPerPacket
The number of sample frames in each packet of data.
@field mBytesPerFrame
The number of bytes in a single sample frame of data.
@field mChannelsPerFrame
The number of channels in each frame of data.
@field mBitsPerChannel
The number of bits of sample data for each channel in a frame of data.
@field mReserved
Pads the structure out to force an even 8 byte alignment.
*/
struct AudioStreamBasicDescription
{
Float64 mSampleRate;
UInt32 mFormatID;
UInt32 mFormatFlags;
UInt32 mBytesPerPacket;
UInt32 mFramesPerPacket;
UInt32 mBytesPerFrame;
UInt32 mChannelsPerFrame;
UInt32 mBitsPerChannel;
UInt32 mReserved;
};
typedef struct AudioStreamBasicDescription AudioStreamBasicDescription;
/*!
@enum AudioStreamBasicDescription Constants
@abstract Constants for use with AudioStreamBasicDescription
@constant kAudioStreamAnyRate
The format can use any sample rate. Note that this constant can only appear
in listings of supported formats. It will never appear in a current format.
*/
enum
{
kAudioStreamAnyRate = 0
};
/*!
@enum Format IDs
@abstract The four char code IDs used to identify individual formats of audio data.
@constant kAudioFormatLinearPCM
Linear PCM, uses the standard flags.
@constant kAudioFormatAC3
AC-3, has no flags.
@constant kAudioFormat60958AC3
AC-3 packaged for transport over an IEC 60958 compliant digital audio
interface. Uses the standard flags.
@constant kAudioFormatAppleIMA4
Apples implementation of IMA 4:1 ADPCM, has no flags.
@constant kAudioFormatMPEG4AAC
MPEG-4 Low Complexity AAC audio object, has no flags.
@constant kAudioFormatMPEG4CELP
MPEG-4 CELP audio object, has no flags.
@constant kAudioFormatMPEG4HVXC
MPEG-4 HVXC audio object, has no flags.
@constant kAudioFormatMPEG4TwinVQ
MPEG-4 TwinVQ audio object type, has no flags.
@constant kAudioFormatMACE3
MACE 3:1, has no flags.
@constant kAudioFormatMACE6
MACE 6:1, has no flags.
@constant kAudioFormatULaw
<20>Law 2:1, has no flags.
@constant kAudioFormatALaw
aLaw 2:1, has no flags.
@constant kAudioFormatQDesign
QDesign music, has no flags
@constant kAudioFormatQDesign2
QDesign2 music, has no flags
@constant kAudioFormatQUALCOMM
QUALCOMM PureVoice, has no flags
@constant kAudioFormatMPEGLayer1
MPEG-1/2, Layer 1 audio, has no flags
@constant kAudioFormatMPEGLayer2
MPEG-1/2, Layer 2 audio, has no flags
@constant kAudioFormatMPEGLayer3
MPEG-1/2, Layer 3 audio, has no flags
@constant kAudioFormatTimeCode
A stream of IOAudioTimeStamps, uses the IOAudioTimeStamp flags (see
IOKit/audio/IOAudioTypes.h).
@constant kAudioFormatMIDIStream
A stream of MIDIPacketLists where the time stamps in the MIDIPacketList are
sample offsets in the stream. The mSampleRate field is used to describe how
time is passed in this kind of stream and an AudioUnit that receives or
generates this stream can use this sample rate, the number of frames it is
rendering and the sample offsets within the MIDIPacketList to define the
time for any MIDI event within this list. It has no flags.
@constant kAudioFormatParameterValueStream
A "side-chain" of Float32 data that can be fed or generated by an AudioUnit
and is used to send a high density of parameter value control information.
An AU will typically run a ParameterValueStream at either the sample rate of
the AudioUnit's audio data, or some integer divisor of this (say a half or a
third of the sample rate of the audio). The Sample Rate of the ASBD
describes this relationship. It has no flags.
@constant kAudioFormatAppleLossless
Apple Lossless, the flags indicate the bit depth of the source material.
@constant kAudioFormatMPEG4AAC_HE
MPEG-4 High Efficiency AAC audio object, has no flags.
@constant kAudioFormatMPEG4AAC_LD
MPEG-4 AAC Low Delay audio object, has no flags.
@constant kAudioFormatMPEG4AAC_HE_V2
MPEG-4 High Efficiency AAC Version 2 audio object, has no flags.
@constant kAudioFormatMPEG4AAC_Spatial
MPEG-4 Spatial Audio audio object, has no flags.
@constant kAudioFormatAMR
The AMR Narrow Band speech codec.
*/
enum
{
kAudioFormatLinearPCM = 'lpcm',
kAudioFormatAC3 = 'ac-3',
kAudioFormat60958AC3 = 'cac3',
kAudioFormatAppleIMA4 = 'ima4',
kAudioFormatMPEG4AAC = 'aac ',
kAudioFormatMPEG4CELP = 'celp',
kAudioFormatMPEG4HVXC = 'hvxc',
kAudioFormatMPEG4TwinVQ = 'twvq',
kAudioFormatMACE3 = 'MAC3',
kAudioFormatMACE6 = 'MAC6',
kAudioFormatULaw = 'ulaw',
kAudioFormatALaw = 'alaw',
kAudioFormatQDesign = 'QDMC',
kAudioFormatQDesign2 = 'QDM2',
kAudioFormatQUALCOMM = 'Qclp',
kAudioFormatMPEGLayer1 = '.mp1',
kAudioFormatMPEGLayer2 = '.mp2',
kAudioFormatMPEGLayer3 = '.mp3',
kAudioFormatTimeCode = 'time',
kAudioFormatMIDIStream = 'midi',
kAudioFormatParameterValueStream = 'apvs',
kAudioFormatAppleLossless = 'alac',
kAudioFormatMPEG4AAC_HE = 'aach',
kAudioFormatMPEG4AAC_LD = 'aacl',
kAudioFormatMPEG4AAC_HE_V2 = 'aacp',
kAudioFormatMPEG4AAC_Spatial = 'aacs',
kAudioFormatAMR = 'samr'
};
/*!
@enum Standard Flag Values for AudioStreamBasicDescription
@abstract These are the standard flags for use in the mFormatFlags field of the
AudioStreamBasicDescription structure.
@discussion Typically, when an ASBD is being used, the fields describe the complete layout
of the sample data in the buffers that are represented by this description -
where typically those buffers are represented by an AudioBuffer that is
contained in an AudioBufferList.
However, when an ASBD has the kAudioFormatFlagIsNonInterleaved flag, the
AudioBufferList has a different structure and semantic. In this case, the ASBD
fields will describe the format of ONE of the AudioBuffers that are contained in
the list, AND each AudioBuffer in the list is determined to have a single (mono)
channel of audio data. Then, the ASBD's mChannelsPerFrame will indicate the
total number of AudioBuffers that are contained within the AudioBufferList -
where each buffer contains one channel. This is used primarily with the
AudioUnit (and AudioConverter) representation of this list - and won't be found
in the AudioHardware usage of this structure.
@constant kAudioFormatFlagIsFloat
Set for floating point, clear for integer.
@constant kAudioFormatFlagIsBigEndian
Set for big endian, clear for little endian.
@constant kAudioFormatFlagIsSignedInteger
Set for signed integer, clear for unsigned integer. This is only valid if
kAudioFormatFlagIsFloat is clear.
@constant kAudioFormatFlagIsPacked
Set if the sample bits occupy the entire available bits for the channel,
clear if they are high or low aligned within the channel.
@constant kAudioFormatFlagIsAlignedHigh
Set if the sample bits are placed into the high bits of the channel, clear
for low bit placement. This is only valid if kAudioFormatFlagIsPacked is
clear.
@constant kAudioFormatFlagIsNonInterleaved
Set if the samples for each channel are located contiguously and the
channels are layed out end to end, clear if the samples for each frame are
layed out contiguously and the frames layed out end to end.
@constant kAudioFormatFlagIsNonMixable
Set to indicate when a format is non-mixable. Note that this flag is only
used when interacting with the HAL's stream format information. It is not a
valid flag for any other uses.
@constant kAudioFormatFlagsAreAllClear
Set if all the flags would be clear in order to preserve 0 as the wild card
value.
@constant kLinearPCMFormatFlagIsFloat
Synonym for kAudioFormatFlagIsFloat.
@constant kLinearPCMFormatFlagIsBigEndian
Synonym for kAudioFormatFlagIsBigEndian.
@constant kLinearPCMFormatFlagIsSignedInteger
Synonym for kAudioFormatFlagIsSignedInteger.
@constant kLinearPCMFormatFlagIsPacked
Synonym for kAudioFormatFlagIsPacked.
@constant kLinearPCMFormatFlagIsAlignedHigh
Synonym for kAudioFormatFlagIsAlignedHigh.
@constant kLinearPCMFormatFlagIsNonInterleaved
Synonym for kAudioFormatFlagIsNonInterleaved.
@constant kLinearPCMFormatFlagIsNonMixable
Synonym for kAudioFormatFlagIsNonMixable.
@constant kLinearPCMFormatFlagsAreAllClear
Synonym for kAudioFormatFlagsAreAllClear.
@constant kAppleLosslessFormatFlag_16BitSourceData
This flag is set for Apple Lossless data that was sourced from 16 bit native
endian signed integer data.
@constant kAppleLosslessFormatFlag_20BitSourceData
This flag is set for Apple Lossless data that was sourced from 20 bit native
endian signed integer data aligned high in 24 bits.
@constant kAppleLosslessFormatFlag_24BitSourceData
This flag is set for Apple Lossless data that was sourced from 24 bit native
endian signed integer data.
@constant kAppleLosslessFormatFlag_32BitSourceData
This flag is set for Apple Lossless data that was sourced from 32 bit native
endian signed integer data.
*/
enum
{
kAudioFormatFlagIsFloat = (1L << 0),
kAudioFormatFlagIsBigEndian = (1L << 1),
kAudioFormatFlagIsSignedInteger = (1L << 2),
kAudioFormatFlagIsPacked = (1L << 3),
kAudioFormatFlagIsAlignedHigh = (1L << 4),
kAudioFormatFlagIsNonInterleaved = (1L << 5),
kAudioFormatFlagIsNonMixable = (1L << 6),
kAudioFormatFlagsAreAllClear = (1L << 31),
kLinearPCMFormatFlagIsFloat = kAudioFormatFlagIsFloat,
kLinearPCMFormatFlagIsBigEndian = kAudioFormatFlagIsBigEndian,
kLinearPCMFormatFlagIsSignedInteger = kAudioFormatFlagIsSignedInteger,
kLinearPCMFormatFlagIsPacked = kAudioFormatFlagIsPacked,
kLinearPCMFormatFlagIsAlignedHigh = kAudioFormatFlagIsAlignedHigh,
kLinearPCMFormatFlagIsNonInterleaved = kAudioFormatFlagIsNonInterleaved,
kLinearPCMFormatFlagIsNonMixable = kAudioFormatFlagIsNonMixable,
kLinearPCMFormatFlagsAreAllClear = kAudioFormatFlagsAreAllClear,
kAppleLosslessFormatFlag_16BitSourceData = 1,
kAppleLosslessFormatFlag_20BitSourceData = 2,
kAppleLosslessFormatFlag_24BitSourceData = 3,
kAppleLosslessFormatFlag_32BitSourceData = 4
};
/*!
@enum Commonly Used Combinations of ASBD Flags
@abstract Some commonly used combinations of flags for AudioStreamBasicDescriptions.
@constant kAudioFormatFlagsNativeEndian
Defined to set or clear kAudioFormatFlagIsBigEndian depending on the
endianness of the processor at build time.
@constant kAudioFormatFlagsCanonical
The flags for the canonical audio sample type
@constant kAudioFormatFlagsNativeFloatPacked
The flags for fully packed, native endian floating point data.
*/
enum
{
#if TARGET_RT_BIG_ENDIAN
kAudioFormatFlagsNativeEndian = kAudioFormatFlagIsBigEndian,
#else
kAudioFormatFlagsNativeEndian = 0,
#endif
kAudioFormatFlagsCanonical = kAudioFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked,
kAudioFormatFlagsNativeFloatPacked = kAudioFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked
};
/*!
@defined TestAudioFormatNativeEndian
@abstract A macro for checking if an ASBD indicates native endian linear PCM data.
*/
#define TestAudioFormatNativeEndian(f) ((f.mFormatID == kAudioFormatLinearPCM) && ((f.mFormatFlags & kAudioFormatFlagIsBigEndian) == kAudioFormatFlagsNativeEndian))
/*!
@function IsAudioFormatNativeEndian
@abstract A C++ inline function for checking if an ASBD indicates native endian linear PCM
data.
@param f
The AudioStreamBasicDescription to examine.
@result Whether or not the ASBD indicates native endian linear PCM data.
*/
#if defined(__cplusplus)
inline bool IsAudioFormatNativeEndian(const AudioStreamBasicDescription& f) { return (f.mFormatID == kAudioFormatLinearPCM) && ((f.mFormatFlags & kAudioFormatFlagIsBigEndian) == kAudioFormatFlagsNativeEndian); }
#endif
/*!
@function CalculateLPCMFlags
@abstract A C++ inline function for calculating the mFormatFlags for linear PCM data. Note
that this function does not support specifying sample formats that are either
unsigned integer or low-aligned.
@param inSampleRate
@param inValidBitsPerChannel
The number of valid bits in each sample.
@param inTotalBitsPerChannel
The total number of bits in each sample.
@param inIsFloat
Whether or not the samples are represented with floating point numbers.
@param isIsBigEndian
Whether the samples are big endian or little endian.
@result A UInt32 containing the format flags.
*/
#if defined(__cplusplus)
inline UInt32 CalculateLPCMFlags(UInt32 inValidBitsPerChannel, UInt32 inTotalBitsPerChannel, bool inIsFloat, bool inIsBigEndian, bool inIsNonInterleaved = false) { return (inIsFloat ? kAudioFormatFlagIsFloat : kAudioFormatFlagIsSignedInteger) | (inIsBigEndian ? ((UInt32)kAudioFormatFlagIsBigEndian) : 0) | ((!inIsFloat && (inValidBitsPerChannel == inTotalBitsPerChannel)) ? kAudioFormatFlagIsPacked : kAudioFormatFlagIsAlignedHigh) | (inIsNonInterleaved ? ((UInt32)kAudioFormatFlagIsNonInterleaved) : 0); }
#endif
/*!
@function FillOutASBDForLPCM
@abstract A C++ inline function for filling out an AudioStreamBasicDescription to describe
linear PCM data. Note that this function does not support specifying sample formats
that are either unsigned integer or low-aligned.
@param outASBD
The AudioStreamBasicDescription to fill out.
@param inSampleRate
The number of sample frames per second of the data in the stream.
@param inChannelsPerFrame
The number of channels in each frame of data.
@param inValidBitsPerChannel
The number of valid bits in each sample.
@param inTotalBitsPerChannel
The total number of bits in each sample.
@param inIsFloat
Whether or not the samples are represented with floating point numbers.
@param isIsBigEndian
Whether the samples are big endian or little endian.
*/
#if defined(__cplusplus)
inline void FillOutASBDForLPCM(AudioStreamBasicDescription& outASBD, Float64 inSampleRate, UInt32 inChannelsPerFrame, UInt32 inValidBitsPerChannel, UInt32 inTotalBitsPerChannel, bool inIsFloat, bool inIsBigEndian, bool inIsNonInterleaved = false) { outASBD.mSampleRate = inSampleRate; outASBD.mFormatID = kAudioFormatLinearPCM; outASBD.mFormatFlags = CalculateLPCMFlags(inValidBitsPerChannel, inTotalBitsPerChannel, inIsFloat, inIsBigEndian, inIsNonInterleaved); outASBD.mBytesPerPacket = inChannelsPerFrame * (inTotalBitsPerChannel / 8); outASBD.mFramesPerPacket = 1; outASBD.mBytesPerFrame = inChannelsPerFrame * (inTotalBitsPerChannel / 8); outASBD.mChannelsPerFrame = inChannelsPerFrame; outASBD.mBitsPerChannel = inValidBitsPerChannel; }
#endif
/*!
@struct AudioStreamPacketDescription
@abstract This structure describes the packet layout of a buffer of data where the size of
each packet may not be the same or where there is extraneous data between
packets.
@field mStartOffset
The number of bytes from the start of the buffer to the beginning of the
packet.
@field mVariableFramesInPacket
The number of sample frames of data in the packet. For formats with a
constant number of frames per packet, this field is set to 0.
@field mDataByteSize
The number of bytes in the packet.
*/
struct AudioStreamPacketDescription
{
SInt64 mStartOffset;
UInt32 mVariableFramesInPacket;
UInt32 mDataByteSize;
};
typedef struct AudioStreamPacketDescription AudioStreamPacketDescription;
// SMPTETime is also defined in the CoreVideo headers.
#if !defined(__SMPTETime__)
#define __SMPTETime__
/*!
@struct SMPTETime
@abstract A structure for holding a SMPTE time.
@field mSubframes
The number of subframes in the full message.
@field mSubframeDivisor
The number of subframes per frame (typically 80).
@field mCounter
The total number of messages received.
@field mType
The kind of SMPTE time using the SMPTE time type constants.
@field mFlags
A set of flags that indicate the SMPTE state.
@field mHours
The number of hourse in the full message.
@field mMinutes
The number of minutes in the full message.
@field mSeconds
The number of seconds in the full message.
@field mFrames
The number of frames in the full message.
*/
struct SMPTETime
{
SInt16 mSubframes;
SInt16 mSubframeDivisor;
UInt32 mCounter;
UInt32 mType;
UInt32 mFlags;
SInt16 mHours;
SInt16 mMinutes;
SInt16 mSeconds;
SInt16 mFrames;
};
typedef struct SMPTETime SMPTETime;
/*!
@enum SMPTE Time Types
@abstract Constants that describe the type of SMPTE time.
@constant kSMPTETimeType24
24 Frame
@constant kSMPTETimeType25
25 Frame
@constant kSMPTETimeType30Drop
30 Drop Frame
@constant kSMPTETimeType30
30 Frame
@constant kSMPTETimeType2997
29.97 Frame
@constant kSMPTETimeType2997Drop
29.97 Drop Frame
@constant kSMPTETimeType60
60 Frame
@constant kSMPTETimeType5994
59.94 Frame
@constant kSMPTETimeType60Drop
60 Drop Frame
@constant kSMPTETimeType5994Drop
59.94 Drop Frame
@constant kSMPTETimeType50
50 Frame
@constant kSMPTETimeType2398
23.98 Frame
*/
enum
{
kSMPTETimeType24 = 0,
kSMPTETimeType25 = 1,
kSMPTETimeType30Drop = 2,
kSMPTETimeType30 = 3,
kSMPTETimeType2997 = 4,
kSMPTETimeType2997Drop = 5,
kSMPTETimeType60 = 6,
kSMPTETimeType5994 = 7,
kSMPTETimeType60Drop = 8,
kSMPTETimeType5994Drop = 9,
kSMPTETimeType50 = 10,
kSMPTETimeType2398 = 11
};
/*!
@enum SMPTE State Flags
@abstract Flags that describe the SMPTE time state.
@constant kSMPTETimeValid
The full time is valid.
@constant kSMPTETimeRunning
Time is running.
*/
enum
{
kSMPTETimeValid = (1L << 0),
kSMPTETimeRunning = (1L << 1)
};
#endif
/*!
@struct AudioTimeStamp
@abstract A strucutre that holds different representations of the same point in time.
@field mSampleTime
The absolute sample frame time.
@field mHostTime
The host machine's time base (see <CoreAudio/HostTime.h>).
@field mRateScalar
The ratio of actual host ticks per sample frame to the nominal host ticks
per sample frame.
@field mWordClockTime
The word clock time.
@field mSMPTETime
The SMPTE time.
@field mFlags
A set of flags indicating which representations of the time are valid.
@field mReserved
Pads the structure out to force an even 8 byte alignment.
*/
struct AudioTimeStamp
{
Float64 mSampleTime;
UInt64 mHostTime;
Float64 mRateScalar;
UInt64 mWordClockTime;
SMPTETime mSMPTETime;
UInt32 mFlags;
UInt32 mReserved;
};
typedef struct AudioTimeStamp AudioTimeStamp;
/*!
@enum AudioTimeStamp Flags
@abstract The flags that indicate which fields in an AudioTimeStamp structure are valid.
@constant kAudioTimeStampSampleTimeValid
The sample frame time is valid.
@constant kAudioTimeStampHostTimeValid
The host time is valid.
@constant kAudioTimeStampRateScalarValid
The rate scalar is valid.
@constant kAudioTimeStampWordClockTimeValid
The word clock time is valid.
@constant kAudioTimeStampSMPTETimeValid
The SMPTE time is valid.
*/
enum
{
kAudioTimeStampSampleTimeValid = (1L << 0),
kAudioTimeStampHostTimeValid = (1L << 1),
kAudioTimeStampRateScalarValid = (1L << 2),
kAudioTimeStampWordClockTimeValid = (1L << 3),
kAudioTimeStampSMPTETimeValid = (1L << 4)
};
/*!
@enum Commonly Used Combinations of AudioTimeStamp Flags
@abstract Some commonly used combinations of AudioTimeStamp flags.
@constant kAudioTimeStampSampleHostTimeValid
The sample frame time and the host time are valid.
*/
enum
{
kAudioTimeStampSampleHostTimeValid = (kAudioTimeStampSampleTimeValid | kAudioTimeStampHostTimeValid)
};
/*!
@function FillOutAudioTimeStampWithSampleTime
@abstract A C++ inline function for filling out an AudioTimeStamp with a sample time
@param outATS
The AudioTimeStamp to fill out.
@param inSampleTime
The sample time to put in the AudioTimeStamp.
*/
#if defined(__cplusplus)
inline void FillOutAudioTimeStampWithSampleTime(AudioTimeStamp& outATS, Float64 inSampleTime) { outATS.mSampleTime = inSampleTime; outATS.mHostTime = 0; outATS.mRateScalar = 0; outATS.mWordClockTime = 0; memset(&outATS.mSMPTETime, 0, sizeof(SMPTETime)); outATS.mFlags = kAudioTimeStampSampleTimeValid; }
#endif
/*!
@function FillOutAudioTimeStampWithHostTime
@abstract A C++ inline function for filling out an AudioTimeStamp with a host time
@param outATS
The AudioTimeStamp to fill out.
@param inHostTime
The host time to put in the AudioTimeStamp.
*/
#if defined(__cplusplus)
inline void FillOutAudioTimeStampWithHostTime(AudioTimeStamp& outATS, UInt64 inHostTime) { outATS.mSampleTime = 0; outATS.mHostTime = inHostTime; outATS.mRateScalar = 0; outATS.mWordClockTime = 0; memset(&outATS.mSMPTETime, 0, sizeof(SMPTETime)); outATS.mFlags = kAudioTimeStampHostTimeValid; }
#endif
/*!
@function FillOutAudioTimeStampWithSampleAndHostTime
@abstract A C++ inline function for filling out an AudioTimeStamp with a sample time and a
host time
@param outATS
The AudioTimeStamp to fill out.
@param inSampleTime
The sample time to put in the AudioTimeStamp.
@param inHostTime
The host time to put in the AudioTimeStamp.
*/
#if defined(__cplusplus)
inline void FillOutAudioTimeStampWithSampleAndHostTime(AudioTimeStamp& outATS, Float64 inSampleTime, UInt64 inHostTime) { outATS.mSampleTime = inSampleTime; outATS.mHostTime = inHostTime; outATS.mRateScalar = 0; outATS.mWordClockTime = 0; memset(&outATS.mSMPTETime, 0, sizeof(SMPTETime)); outATS.mFlags = kAudioTimeStampSampleTimeValid | kAudioTimeStampHostTimeValid; }
#endif
/*!
@struct AudioClassDescription
@abstract This structure is used to describe codecs installed on the system.
@field mType
The four char code codec type.
@field mSubType
The four char code codec subtype.
@field mManufacturer
The four char code codec manufacturer.
*/
struct AudioClassDescription {
OSType mType;
OSType mSubType;
OSType mManufacturer;
};
typedef struct AudioClassDescription AudioClassDescription;
/*!
@typedef AudioChannelLabel
@abstract A tag idenitfying how the channel is to be used.
*/
typedef UInt32 AudioChannelLabel;
/*!
@typedef AudioChannelLayoutTag
@abstract A tag identifying a particular pre-defined channel layout.
*/
typedef UInt32 AudioChannelLayoutTag;
/*!
@struct AudioChannelDescription
@abstract This structure describes a single channel.
@field mChannelLabel
The AudioChannelLabel that describes the channel.
@field mChannelFlags
Flags that control the interpretation of mCoordinates.
@field mCoordinates
An ordered triple that specifies a precise speaker location.
*/
struct AudioChannelDescription
{
AudioChannelLabel mChannelLabel;
UInt32 mChannelFlags;
Float32 mCoordinates[3];
};
typedef struct AudioChannelDescription AudioChannelDescription;
/*!
@struct AudioChannelLayout
@abstract This structure is used to specify channel layouts in files and hardware.
@field mChannelLayoutTag
The AudioChannelLayoutTag that indicates the layout.
@field mChannelBitmap
If mChannelLayoutTag is set to kAudioChannelLayoutTag_UseChannelBitmap, this
field is the channel usage bitmap.
@field mNumberChannelDescriptions
The number of items in the mChannelDescriptions array.
@field mChannelDescriptions
A variable length array of AudioChannelDescriptions that describe the
layout.
*/
struct AudioChannelLayout
{
AudioChannelLayoutTag mChannelLayoutTag;
UInt32 mChannelBitmap;
UInt32 mNumberChannelDescriptions;
AudioChannelDescription mChannelDescriptions[kVariableLengthArray];
};
typedef struct AudioChannelLayout AudioChannelLayout;
/*!
@enum AudioChannelLabel Constants
@abstract These constants are for use in the mChannelLabel field of an
AudioChannelDescription structure.
@discussion These channel labels attempt to list all labels in common use. Due to the
ambiguities in channel labeling by various groups, there may be some overlap or
duplication in the labels below. Use the label which most clearly describes what
you mean.
WAVE files seem to follow the USB spec for the channel flags. A channel map lets
you put these channels in any order, however a WAVE file only supports labels
1-18 and if present, they must be in the order given below. The integer values
for the labels below match the bit position of the label in the USB bitmap and
thus also the WAVE file bitmap.
*/
enum
{
kAudioChannelLabel_Unknown = 0xFFFFFFFF, // unknown or unspecified other use
kAudioChannelLabel_Unused = 0, // channel is present, but has no intended use or destination
kAudioChannelLabel_UseCoordinates = 100, // channel is described by the mCoordinates fields.
kAudioChannelLabel_Left = 1,
kAudioChannelLabel_Right = 2,
kAudioChannelLabel_Center = 3,
kAudioChannelLabel_LFEScreen = 4,
kAudioChannelLabel_LeftSurround = 5, // WAVE: "Back Left"
kAudioChannelLabel_RightSurround = 6, // WAVE: "Back Right"
kAudioChannelLabel_LeftCenter = 7,
kAudioChannelLabel_RightCenter = 8,
kAudioChannelLabel_CenterSurround = 9, // WAVE: "Back Center" or plain "Rear Surround"
kAudioChannelLabel_LeftSurroundDirect = 10, // WAVE: "Side Left"
kAudioChannelLabel_RightSurroundDirect = 11, // WAVE: "Side Right"
kAudioChannelLabel_TopCenterSurround = 12,
kAudioChannelLabel_VerticalHeightLeft = 13, // WAVE: "Top Front Left"
kAudioChannelLabel_VerticalHeightCenter = 14, // WAVE: "Top Front Center"
kAudioChannelLabel_VerticalHeightRight = 15, // WAVE: "Top Front Right"
kAudioChannelLabel_TopBackLeft = 16,
kAudioChannelLabel_TopBackCenter = 17,
kAudioChannelLabel_TopBackRight = 18,
kAudioChannelLabel_RearSurroundLeft = 33,
kAudioChannelLabel_RearSurroundRight = 34,
kAudioChannelLabel_LeftWide = 35,
kAudioChannelLabel_RightWide = 36,
kAudioChannelLabel_LFE2 = 37,
kAudioChannelLabel_LeftTotal = 38, // matrix encoded 4 channels
kAudioChannelLabel_RightTotal = 39, // matrix encoded 4 channels
kAudioChannelLabel_HearingImpaired = 40,
kAudioChannelLabel_Narration = 41,
kAudioChannelLabel_Mono = 42,
kAudioChannelLabel_DialogCentricMix = 43,
kAudioChannelLabel_CenterSurroundDirect = 44, // back center, non diffuse
kAudioChannelLabel_Haptic = 45,
// first order ambisonic channels
kAudioChannelLabel_Ambisonic_W = 200,
kAudioChannelLabel_Ambisonic_X = 201,
kAudioChannelLabel_Ambisonic_Y = 202,
kAudioChannelLabel_Ambisonic_Z = 203,
// Mid/Side Recording
kAudioChannelLabel_MS_Mid = 204,
kAudioChannelLabel_MS_Side = 205,
// X-Y Recording
kAudioChannelLabel_XY_X = 206,
kAudioChannelLabel_XY_Y = 207,
// other
kAudioChannelLabel_HeadphonesLeft = 301,
kAudioChannelLabel_HeadphonesRight = 302,
kAudioChannelLabel_ClickTrack = 304,
kAudioChannelLabel_ForeignLanguage = 305,
// generic discrete channel
kAudioChannelLabel_Discrete = 400,
// numbered discrete channel
kAudioChannelLabel_Discrete_0 = (1L<<16) | 0,
kAudioChannelLabel_Discrete_1 = (1L<<16) | 1,
kAudioChannelLabel_Discrete_2 = (1L<<16) | 2,
kAudioChannelLabel_Discrete_3 = (1L<<16) | 3,
kAudioChannelLabel_Discrete_4 = (1L<<16) | 4,
kAudioChannelLabel_Discrete_5 = (1L<<16) | 5,
kAudioChannelLabel_Discrete_6 = (1L<<16) | 6,
kAudioChannelLabel_Discrete_7 = (1L<<16) | 7,
kAudioChannelLabel_Discrete_8 = (1L<<16) | 8,
kAudioChannelLabel_Discrete_9 = (1L<<16) | 9,
kAudioChannelLabel_Discrete_10 = (1L<<16) | 10,
kAudioChannelLabel_Discrete_11 = (1L<<16) | 11,
kAudioChannelLabel_Discrete_12 = (1L<<16) | 12,
kAudioChannelLabel_Discrete_13 = (1L<<16) | 13,
kAudioChannelLabel_Discrete_14 = (1L<<16) | 14,
kAudioChannelLabel_Discrete_15 = (1L<<16) | 15,
kAudioChannelLabel_Discrete_65535 = (1L<<16) | 65535
};
/*!
@enum Channel Bitmap Constants
@abstract These constants are for use in the mChannelBitmap field of an
AudioChannelLayout structure.
*/
enum
{
kAudioChannelBit_Left = (1L<<0),
kAudioChannelBit_Right = (1L<<1),
kAudioChannelBit_Center = (1L<<2),
kAudioChannelBit_LFEScreen = (1L<<3),
kAudioChannelBit_LeftSurround = (1L<<4), // WAVE: "Back Left"
kAudioChannelBit_RightSurround = (1L<<5), // WAVE: "Back Right"
kAudioChannelBit_LeftCenter = (1L<<6),
kAudioChannelBit_RightCenter = (1L<<7),
kAudioChannelBit_CenterSurround = (1L<<8), // WAVE: "Back Center"
kAudioChannelBit_LeftSurroundDirect = (1L<<9), // WAVE: "Side Left"
kAudioChannelBit_RightSurroundDirect = (1L<<10), // WAVE: "Side Right"
kAudioChannelBit_TopCenterSurround = (1L<<11),
kAudioChannelBit_VerticalHeightLeft = (1L<<12), // WAVE: "Top Front Left"
kAudioChannelBit_VerticalHeightCenter = (1L<<13), // WAVE: "Top Front Center"
kAudioChannelBit_VerticalHeightRight = (1L<<14), // WAVE: "Top Front Right"
kAudioChannelBit_TopBackLeft = (1L<<15),
kAudioChannelBit_TopBackCenter = (1L<<16),
kAudioChannelBit_TopBackRight = (1L<<17)
};
/*!
@enum Channel Coordinate Flags
@abstract These constants are used in the mChannelFlags field of an
AudioChannelDescription structure.
@constant kAudioChannelFlags_RectangularCoordinates
The channel is specified by the cartesioan coordinates of the speaker
position. This flag is mutally exclusive with
kAudioChannelFlags_SphericalCoordinates.
@constant kAudioChannelFlags_SphericalCoordinates
The channel is specified by the spherical coordinates of the speaker
position. This flag is mutally exclusive with
kAudioChannelFlags_RectangularCoordinates.
@constant kAudioChannelFlags_Meters
Set to indicate the units are in meters, clear to indicate the units are
relative to the unit cube or unit sphere.
*/
enum
{
kAudioChannelFlags_AllOff = 0,
kAudioChannelFlags_RectangularCoordinates = (1L<<0),
kAudioChannelFlags_SphericalCoordinates = (1L<<1),
kAudioChannelFlags_Meters = (1L<<2)
};
// these are indices for acessing the mCoordinates array in struct AudioChannelDescription
/*!
@enum Channel Coordinate Index Constants
@abstract Constants for indexing the mCoordinates array in an AudioChannelDescription
structure.
@constant kAudioChannelCoordinates_LeftRight
For rectangulare coordinates, negative is left and positive is right.
@constant kAudioChannelCoordinates_BackFront
For rectangulare coordinates, negative is back and positive is front.
@constant kAudioChannelCoordinates_DownUp
For rectangulare coordinates, negative is below ground level, 0 is ground
level, and positive is above ground level.
@constant kAudioChannelCoordinates_Azimuth
For spherical coordinates, 0 is front center, positive is right, negative is
left. This is measured in degrees.
@constant kAudioChannelCoordinates_Elevation
For spherical coordinates, +90 is zenith, 0 is horizontal, -90 is nadir.
This is measured in degrees.
@constant kAudioChannelCoordinates_Distance
For spherical coordinates, the units are described by flags.
*/
enum
{
kAudioChannelCoordinates_LeftRight = 0,
kAudioChannelCoordinates_BackFront = 1,
kAudioChannelCoordinates_DownUp = 2,
kAudioChannelCoordinates_Azimuth = 0,
kAudioChannelCoordinates_Elevation = 1,
kAudioChannelCoordinates_Distance = 2
};
/*!
@function AudioChannelLayoutTag_GetNumberOfChannels
@abstract A macro to get the number of channels out of an AudioChannelLayoutTag
@discussion The low 16 bits of an AudioChannelLayoutTag gives the number of channels except
for kAudioChannelLayoutTag_UseChannelDescriptions and
kAudioChannelLayoutTag_UseChannelBitmap.
@param layoutTag
The AudioChannelLayoutTag to examine.
@result The number of channels the tag indicates.
*/
#define AudioChannelLayoutTag_GetNumberOfChannels(layoutTag) ((UInt32)((layoutTag) & 0x0000FFFF))
/*!
@enum AudioChannelLayoutTag Constants
@abstract These constants are used in the mChannelLayoutTag field of an AudioChannelLayout
structure.
*/
enum
{
// Some channel abbreviations used below:
// L - left
// R - right
// C - center
// Ls - left surround
// Rs - right surround
// Cs - center surround
// Rls - rear left surround
// Rrs - rear right surround
// Lw - left wide
// Rw - right wide
// Lsd - left surround direct
// Rsd - right surround direct
// Lc - left center
// Rc - right center
// Ts - top surround
// Vhl - vertical height left
// Vhc - vertical height center
// Vhr - vertical height right
// Lt - left matrix total. for matrix encoded stereo.
// Rt - right matrix total. for matrix encoded stereo.
// General layouts
kAudioChannelLayoutTag_UseChannelDescriptions = (0L<<16) | 0, // use the array of AudioChannelDescriptions to define the mapping.
kAudioChannelLayoutTag_UseChannelBitmap = (1L<<16) | 0, // use the bitmap to define the mapping.
kAudioChannelLayoutTag_Mono = (100L<<16) | 1, // a standard mono stream
kAudioChannelLayoutTag_Stereo = (101L<<16) | 2, // a standard stereo stream (L R) - implied playback
kAudioChannelLayoutTag_StereoHeadphones = (102L<<16) | 2, // a standard stereo stream (L R) - implied headphone playbac
kAudioChannelLayoutTag_MatrixStereo = (103L<<16) | 2, // a matrix encoded stereo stream (Lt, Rt)
kAudioChannelLayoutTag_MidSide = (104L<<16) | 2, // mid/side recording
kAudioChannelLayoutTag_XY = (105L<<16) | 2, // coincident mic pair (often 2 figure 8's)
kAudioChannelLayoutTag_Binaural = (106L<<16) | 2, // binaural stereo (left, right)
kAudioChannelLayoutTag_Ambisonic_B_Format = (107L<<16) | 4, // W, X, Y, Z
kAudioChannelLayoutTag_Quadraphonic = (108L<<16) | 4, // front left, front right, back left, back right
kAudioChannelLayoutTag_Pentagonal = (109L<<16) | 5, // left, right, rear left, rear right, center
kAudioChannelLayoutTag_Hexagonal = (110L<<16) | 6, // left, right, rear left, rear right, center, rear
kAudioChannelLayoutTag_Octagonal = (111L<<16) | 8, // front left, front right, rear left, rear right,
// front center, rear center, side left, side right
kAudioChannelLayoutTag_Cube = (112L<<16) | 8, // left, right, rear left, rear right
// top left, top right, top rear left, top rear right
// MPEG defined layouts
kAudioChannelLayoutTag_MPEG_1_0 = kAudioChannelLayoutTag_Mono, // C
kAudioChannelLayoutTag_MPEG_2_0 = kAudioChannelLayoutTag_Stereo, // L R
kAudioChannelLayoutTag_MPEG_3_0_A = (113L<<16) | 3, // L R C
kAudioChannelLayoutTag_MPEG_3_0_B = (114L<<16) | 3, // C L R
kAudioChannelLayoutTag_MPEG_4_0_A = (115L<<16) | 4, // L R C Cs
kAudioChannelLayoutTag_MPEG_4_0_B = (116L<<16) | 4, // C L R Cs
kAudioChannelLayoutTag_MPEG_5_0_A = (117L<<16) | 5, // L R C Ls Rs
kAudioChannelLayoutTag_MPEG_5_0_B = (118L<<16) | 5, // L R Ls Rs C
kAudioChannelLayoutTag_MPEG_5_0_C = (119L<<16) | 5, // L C R Ls Rs
kAudioChannelLayoutTag_MPEG_5_0_D = (120L<<16) | 5, // C L R Ls Rs
kAudioChannelLayoutTag_MPEG_5_1_A = (121L<<16) | 6, // L R C LFE Ls Rs
kAudioChannelLayoutTag_MPEG_5_1_B = (122L<<16) | 6, // L R Ls Rs C LFE
kAudioChannelLayoutTag_MPEG_5_1_C = (123L<<16) | 6, // L C R Ls Rs LFE
kAudioChannelLayoutTag_MPEG_5_1_D = (124L<<16) | 6, // C L R Ls Rs LFE
kAudioChannelLayoutTag_MPEG_6_1_A = (125L<<16) | 7, // L R C LFE Ls Rs Cs
kAudioChannelLayoutTag_MPEG_7_1_A = (126L<<16) | 8, // L R C LFE Ls Rs Lc Rc
kAudioChannelLayoutTag_MPEG_7_1_B = (127L<<16) | 8, // C Lc Rc L R Ls Rs LFE (doc: IS-13818-7 MPEG2-AAC Table 3.1)
kAudioChannelLayoutTag_MPEG_7_1_C = (128L<<16) | 8, // L R C LFE Ls Rs Rls Rrs
kAudioChannelLayoutTag_Emagic_Default_7_1 = (129L<<16) | 8, // L R Ls Rs C LFE Lc Rc
kAudioChannelLayoutTag_SMPTE_DTV = (130L<<16) | 8, // L R C LFE Ls Rs Lt Rt
// (kAudioChannelLayoutTag_ITU_5_1 plus a matrix encoded stereo mix)
// ITU defined layouts
kAudioChannelLayoutTag_ITU_1_0 = kAudioChannelLayoutTag_Mono, // C
kAudioChannelLayoutTag_ITU_2_0 = kAudioChannelLayoutTag_Stereo, // L R
kAudioChannelLayoutTag_ITU_2_1 = (131L<<16) | 3, // L R Cs
kAudioChannelLayoutTag_ITU_2_2 = (132L<<16) | 4, // L R Ls Rs
kAudioChannelLayoutTag_ITU_3_0 = kAudioChannelLayoutTag_MPEG_3_0_A, // L R C
kAudioChannelLayoutTag_ITU_3_1 = kAudioChannelLayoutTag_MPEG_4_0_A, // L R C Cs
kAudioChannelLayoutTag_ITU_3_2 = kAudioChannelLayoutTag_MPEG_5_0_A, // L R C Ls Rs
kAudioChannelLayoutTag_ITU_3_2_1 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs
kAudioChannelLayoutTag_ITU_3_4_1 = kAudioChannelLayoutTag_MPEG_7_1_C, // L R C LFE Ls Rs Rls Rrs
// DVD defined layouts
kAudioChannelLayoutTag_DVD_0 = kAudioChannelLayoutTag_Mono, // C (mono)
kAudioChannelLayoutTag_DVD_1 = kAudioChannelLayoutTag_Stereo, // L R
kAudioChannelLayoutTag_DVD_2 = kAudioChannelLayoutTag_ITU_2_1, // L R Cs
kAudioChannelLayoutTag_DVD_3 = kAudioChannelLayoutTag_ITU_2_2, // L R Ls Rs
kAudioChannelLayoutTag_DVD_4 = (133L<<16) | 3, // L R LFE
kAudioChannelLayoutTag_DVD_5 = (134L<<16) | 4, // L R LFE Cs
kAudioChannelLayoutTag_DVD_6 = (135L<<16) | 5, // L R LFE Ls Rs
kAudioChannelLayoutTag_DVD_7 = kAudioChannelLayoutTag_MPEG_3_0_A, // L R C
kAudioChannelLayoutTag_DVD_8 = kAudioChannelLayoutTag_MPEG_4_0_A, // L R C Cs
kAudioChannelLayoutTag_DVD_9 = kAudioChannelLayoutTag_MPEG_5_0_A, // L R C Ls Rs
kAudioChannelLayoutTag_DVD_10 = (136L<<16) | 4, // L R C LFE
kAudioChannelLayoutTag_DVD_11 = (137L<<16) | 5, // L R C LFE Cs
kAudioChannelLayoutTag_DVD_12 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs
// 13 through 17 are duplicates of 8 through 12.
kAudioChannelLayoutTag_DVD_13 = kAudioChannelLayoutTag_DVD_8, // L R C Cs
kAudioChannelLayoutTag_DVD_14 = kAudioChannelLayoutTag_DVD_9, // L R C Ls Rs
kAudioChannelLayoutTag_DVD_15 = kAudioChannelLayoutTag_DVD_10, // L R C LFE
kAudioChannelLayoutTag_DVD_16 = kAudioChannelLayoutTag_DVD_11, // L R C LFE Cs
kAudioChannelLayoutTag_DVD_17 = kAudioChannelLayoutTag_DVD_12, // L R C LFE Ls Rs
kAudioChannelLayoutTag_DVD_18 = (138L<<16) | 5, // L R Ls Rs LFE
kAudioChannelLayoutTag_DVD_19 = kAudioChannelLayoutTag_MPEG_5_0_B, // L R Ls Rs C
kAudioChannelLayoutTag_DVD_20 = kAudioChannelLayoutTag_MPEG_5_1_B, // L R Ls Rs C LFE
// These layouts are recommended for AudioUnit usage
// These are the symmetrical layouts
kAudioChannelLayoutTag_AudioUnit_4 = kAudioChannelLayoutTag_Quadraphonic,
kAudioChannelLayoutTag_AudioUnit_5 = kAudioChannelLayoutTag_Pentagonal,
kAudioChannelLayoutTag_AudioUnit_6 = kAudioChannelLayoutTag_Hexagonal,
kAudioChannelLayoutTag_AudioUnit_8 = kAudioChannelLayoutTag_Octagonal,
// These are the surround-based layouts
kAudioChannelLayoutTag_AudioUnit_5_0 = kAudioChannelLayoutTag_MPEG_5_0_B, // L R Ls Rs C
kAudioChannelLayoutTag_AudioUnit_6_0 = (139L<<16) | 6, // L R Ls Rs C Cs
kAudioChannelLayoutTag_AudioUnit_7_0 = (140L<<16) | 7, // L R Ls Rs C Rls Rrs
kAudioChannelLayoutTag_AudioUnit_7_0_Front = (148L<<16) | 7, // L R Ls Rs C Lc Rc
kAudioChannelLayoutTag_AudioUnit_5_1 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs
kAudioChannelLayoutTag_AudioUnit_6_1 = kAudioChannelLayoutTag_MPEG_6_1_A, // L R C LFE Ls Rs Cs
kAudioChannelLayoutTag_AudioUnit_7_1 = kAudioChannelLayoutTag_MPEG_7_1_C, // L R C LFE Ls Rs Rls Rrs
kAudioChannelLayoutTag_AudioUnit_7_1_Front = kAudioChannelLayoutTag_MPEG_7_1_A, // L R C LFE Ls Rs Lc Rc
kAudioChannelLayoutTag_AAC_3_0 = kAudioChannelLayoutTag_MPEG_3_0_B, // C L R
kAudioChannelLayoutTag_AAC_Quadraphonic = kAudioChannelLayoutTag_Quadraphonic, // L R Ls Rs
kAudioChannelLayoutTag_AAC_4_0 = kAudioChannelLayoutTag_MPEG_4_0_B, // C L R Cs
kAudioChannelLayoutTag_AAC_5_0 = kAudioChannelLayoutTag_MPEG_5_0_D, // C L R Ls Rs
kAudioChannelLayoutTag_AAC_5_1 = kAudioChannelLayoutTag_MPEG_5_1_D, // C L R Ls Rs Lfe
kAudioChannelLayoutTag_AAC_6_0 = (141L<<16) | 6, // C L R Ls Rs Cs
kAudioChannelLayoutTag_AAC_6_1 = (142L<<16) | 7, // C L R Ls Rs Cs Lfe
kAudioChannelLayoutTag_AAC_7_0 = (143L<<16) | 7, // C L R Ls Rs Rls Rrs
kAudioChannelLayoutTag_AAC_7_1 = kAudioChannelLayoutTag_MPEG_7_1_B, // C Lc Rc L R Ls Rs Lfe
kAudioChannelLayoutTag_AAC_Octagonal = (144L<<16) | 8, // C L R Ls Rs Rls Rrs Cs
kAudioChannelLayoutTag_TMH_10_2_std = (145L<<16) | 16, // L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2
kAudioChannelLayoutTag_TMH_10_2_full = (146L<<16) | 21, // TMH_10_2_std plus: Lc Rc HI VI Haptic
kAudioChannelLayoutTag_AC3_1_0_1 = (149L<<16) | 2, // C LFE
kAudioChannelLayoutTag_AC3_3_0 = (150L<<16) | 3, // L C R
kAudioChannelLayoutTag_AC3_3_1 = (151L<<16) | 4, // L C R Cs
kAudioChannelLayoutTag_AC3_3_0_1 = (152L<<16) | 4, // L C R LFE
kAudioChannelLayoutTag_AC3_2_1_1 = (153L<<16) | 4, // L R Cs LFE
kAudioChannelLayoutTag_AC3_3_1_1 = (154L<<16) | 5, // L C R Cs LFE
kAudioChannelLayoutTag_DiscreteInOrder = (147L<<16) | 0, // needs to be ORed with the actual number of channels
kAudioChannelLayoutTag_Unknown = 0xFFFF0000 // needs to be ORed with the actual number of channels
};
// Deprecated constants
/*! @enum MPEG-4 Audio Object IDs
@deprecated in version 10.5
@abstract Constants that describe the various kinds of MPEG-4 audio data.
@discussion These constants are used in the flags field of an AudioStreamBasicDescription
that describes an MPEG-4 audio stream.
*/
enum
{
kMPEG4Object_AAC_Main = 1,
kMPEG4Object_AAC_LC = 2,
kMPEG4Object_AAC_SSR = 3,
kMPEG4Object_AAC_LTP = 4,
kMPEG4Object_AAC_SBR = 5,
kMPEG4Object_AAC_Scalable = 6,
kMPEG4Object_TwinVQ = 7,
kMPEG4Object_CELP = 8,
kMPEG4Object_HVXC = 9
};
//==================================================================================================
#if defined(__cplusplus)
}
#endif
#if PRAGMA_ENUM_ALWAYSINT
#pragma enumsalwaysint reset
#endif
#endif // __CoreAudioTypes_h__