You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1157 lines
58 KiB
1157 lines
58 KiB
/*==================================================================================================
|
|
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
|
|
µ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__
|