]>
Commit | Line | Data |
---|---|---|
1 | #if !defined(__CoreAudioTypes_h__) | |
2 | #define __CoreAudioTypes_h__ | |
3 | ||
4 | enum { kVariableLengthArray = 1 }; | |
5 | ||
6 | typedef uint32_t AudioChannelLabel; | |
7 | typedef uint32_t AudioChannelLayoutTag; | |
8 | ||
9 | struct AudioChannelDescription | |
10 | { | |
11 | AudioChannelLabel mChannelLabel; | |
12 | uint32_t mChannelFlags; | |
13 | float mCoordinates[3]; | |
14 | }; | |
15 | typedef struct AudioChannelDescription AudioChannelDescription; | |
16 | ||
17 | struct AudioChannelLayout | |
18 | { | |
19 | AudioChannelLayoutTag mChannelLayoutTag; | |
20 | uint32_t mChannelBitmap; | |
21 | uint32_t mNumberChannelDescriptions; | |
22 | AudioChannelDescription mChannelDescriptions[kVariableLengthArray]; | |
23 | }; | |
24 | typedef struct AudioChannelLayout AudioChannelLayout; | |
25 | ||
26 | enum | |
27 | { | |
28 | kAudioChannelLabel_Unknown = 0xFFFFFFFF, // unknown or unspecified other use | |
29 | kAudioChannelLabel_Unused = 0, // channel is present, but has no intended use or destination | |
30 | kAudioChannelLabel_UseCoordinates = 100, // channel is described by the mCoordinates fields. | |
31 | ||
32 | kAudioChannelLabel_Left = 1, | |
33 | kAudioChannelLabel_Right = 2, | |
34 | kAudioChannelLabel_Center = 3, | |
35 | kAudioChannelLabel_LFEScreen = 4, | |
36 | kAudioChannelLabel_LeftSurround = 5, // WAVE: "Back Left" | |
37 | kAudioChannelLabel_RightSurround = 6, // WAVE: "Back Right" | |
38 | kAudioChannelLabel_LeftCenter = 7, | |
39 | kAudioChannelLabel_RightCenter = 8, | |
40 | kAudioChannelLabel_CenterSurround = 9, // WAVE: "Back Center" or plain "Rear Surround" | |
41 | kAudioChannelLabel_LeftSurroundDirect = 10, // WAVE: "Side Left" | |
42 | kAudioChannelLabel_RightSurroundDirect = 11, // WAVE: "Side Right" | |
43 | kAudioChannelLabel_TopCenterSurround = 12, | |
44 | kAudioChannelLabel_VerticalHeightLeft = 13, // WAVE: "Top Front Left" | |
45 | kAudioChannelLabel_VerticalHeightCenter = 14, // WAVE: "Top Front Center" | |
46 | kAudioChannelLabel_VerticalHeightRight = 15, // WAVE: "Top Front Right" | |
47 | ||
48 | kAudioChannelLabel_TopBackLeft = 16, | |
49 | kAudioChannelLabel_TopBackCenter = 17, | |
50 | kAudioChannelLabel_TopBackRight = 18, | |
51 | ||
52 | kAudioChannelLabel_RearSurroundLeft = 33, | |
53 | kAudioChannelLabel_RearSurroundRight = 34, | |
54 | kAudioChannelLabel_LeftWide = 35, | |
55 | kAudioChannelLabel_RightWide = 36, | |
56 | kAudioChannelLabel_LFE2 = 37, | |
57 | kAudioChannelLabel_LeftTotal = 38, // matrix encoded 4 channels | |
58 | kAudioChannelLabel_RightTotal = 39, // matrix encoded 4 channels | |
59 | kAudioChannelLabel_HearingImpaired = 40, | |
60 | kAudioChannelLabel_Narration = 41, | |
61 | kAudioChannelLabel_Mono = 42, | |
62 | kAudioChannelLabel_DialogCentricMix = 43, | |
63 | ||
64 | kAudioChannelLabel_CenterSurroundDirect = 44, // back center, non diffuse | |
65 | ||
66 | kAudioChannelLabel_Haptic = 45, | |
67 | ||
68 | // first order ambisonic channels | |
69 | kAudioChannelLabel_Ambisonic_W = 200, | |
70 | kAudioChannelLabel_Ambisonic_X = 201, | |
71 | kAudioChannelLabel_Ambisonic_Y = 202, | |
72 | kAudioChannelLabel_Ambisonic_Z = 203, | |
73 | ||
74 | // Mid/Side Recording | |
75 | kAudioChannelLabel_MS_Mid = 204, | |
76 | kAudioChannelLabel_MS_Side = 205, | |
77 | ||
78 | // X-Y Recording | |
79 | kAudioChannelLabel_XY_X = 206, | |
80 | kAudioChannelLabel_XY_Y = 207, | |
81 | ||
82 | // other | |
83 | kAudioChannelLabel_HeadphonesLeft = 301, | |
84 | kAudioChannelLabel_HeadphonesRight = 302, | |
85 | kAudioChannelLabel_ClickTrack = 304, | |
86 | kAudioChannelLabel_ForeignLanguage = 305, | |
87 | ||
88 | // generic discrete channel | |
89 | kAudioChannelLabel_Discrete = 400, | |
90 | ||
91 | // numbered discrete channel | |
92 | kAudioChannelLabel_Discrete_0 = (1L<<16) | 0, | |
93 | kAudioChannelLabel_Discrete_1 = (1L<<16) | 1, | |
94 | kAudioChannelLabel_Discrete_2 = (1L<<16) | 2, | |
95 | kAudioChannelLabel_Discrete_3 = (1L<<16) | 3, | |
96 | kAudioChannelLabel_Discrete_4 = (1L<<16) | 4, | |
97 | kAudioChannelLabel_Discrete_5 = (1L<<16) | 5, | |
98 | kAudioChannelLabel_Discrete_6 = (1L<<16) | 6, | |
99 | kAudioChannelLabel_Discrete_7 = (1L<<16) | 7, | |
100 | kAudioChannelLabel_Discrete_8 = (1L<<16) | 8, | |
101 | kAudioChannelLabel_Discrete_9 = (1L<<16) | 9, | |
102 | kAudioChannelLabel_Discrete_10 = (1L<<16) | 10, | |
103 | kAudioChannelLabel_Discrete_11 = (1L<<16) | 11, | |
104 | kAudioChannelLabel_Discrete_12 = (1L<<16) | 12, | |
105 | kAudioChannelLabel_Discrete_13 = (1L<<16) | 13, | |
106 | kAudioChannelLabel_Discrete_14 = (1L<<16) | 14, | |
107 | kAudioChannelLabel_Discrete_15 = (1L<<16) | 15, | |
108 | kAudioChannelLabel_Discrete_65535 = (1L<<16) | 65535 | |
109 | }; | |
110 | ||
111 | #define AudioChannelLayoutTag_GetNumberOfChannels(layoutTag) \ | |
112 | ((uint32_t)((layoutTag) & 0x0000FFFF)) | |
113 | ||
114 | enum | |
115 | { | |
116 | kAudioChannelLayoutTag_UseChannelDescriptions = (0L<<16) | 0, // use the array of AudioChannelDescriptions to define the mapping. | |
117 | kAudioChannelLayoutTag_UseChannelBitmap = (1L<<16) | 0, // use the bitmap to define the mapping. | |
118 | ||
119 | kAudioChannelLayoutTag_Mono = (100L<<16) | 1, // a standard mono stream | |
120 | kAudioChannelLayoutTag_Stereo = (101L<<16) | 2, // a standard stereo stream (L R) - implied playback | |
121 | kAudioChannelLayoutTag_StereoHeadphones = (102L<<16) | 2, // a standard stereo stream (L R) - implied headphone playbac | |
122 | kAudioChannelLayoutTag_MatrixStereo = (103L<<16) | 2, // a matrix encoded stereo stream (Lt, Rt) | |
123 | kAudioChannelLayoutTag_MidSide = (104L<<16) | 2, // mid/side recording | |
124 | kAudioChannelLayoutTag_XY = (105L<<16) | 2, // coincident mic pair (often 2 figure 8's) | |
125 | kAudioChannelLayoutTag_Binaural = (106L<<16) | 2, // binaural stereo (left, right) | |
126 | kAudioChannelLayoutTag_Ambisonic_B_Format = (107L<<16) | 4, // W, X, Y, Z | |
127 | ||
128 | kAudioChannelLayoutTag_Quadraphonic = (108L<<16) | 4, // front left, front right, back left, back right | |
129 | ||
130 | kAudioChannelLayoutTag_Pentagonal = (109L<<16) | 5, // left, right, rear left, rear right, center | |
131 | ||
132 | kAudioChannelLayoutTag_Hexagonal = (110L<<16) | 6, // left, right, rear left, rear right, center, rear | |
133 | ||
134 | kAudioChannelLayoutTag_Octagonal = (111L<<16) | 8, // front left, front right, rear left, rear right, | |
135 | // front center, rear center, side left, side right | |
136 | ||
137 | kAudioChannelLayoutTag_Cube = (112L<<16) | 8, // left, right, rear left, rear right | |
138 | // top left, top right, top rear left, top rear right | |
139 | ||
140 | // MPEG defined layouts | |
141 | kAudioChannelLayoutTag_MPEG_1_0 = kAudioChannelLayoutTag_Mono, // C | |
142 | kAudioChannelLayoutTag_MPEG_2_0 = kAudioChannelLayoutTag_Stereo, // L R | |
143 | kAudioChannelLayoutTag_MPEG_3_0_A = (113L<<16) | 3, // L R C | |
144 | kAudioChannelLayoutTag_MPEG_3_0_B = (114L<<16) | 3, // C L R | |
145 | kAudioChannelLayoutTag_MPEG_4_0_A = (115L<<16) | 4, // L R C Cs | |
146 | kAudioChannelLayoutTag_MPEG_4_0_B = (116L<<16) | 4, // C L R Cs | |
147 | kAudioChannelLayoutTag_MPEG_5_0_A = (117L<<16) | 5, // L R C Ls Rs | |
148 | kAudioChannelLayoutTag_MPEG_5_0_B = (118L<<16) | 5, // L R Ls Rs C | |
149 | kAudioChannelLayoutTag_MPEG_5_0_C = (119L<<16) | 5, // L C R Ls Rs | |
150 | kAudioChannelLayoutTag_MPEG_5_0_D = (120L<<16) | 5, // C L R Ls Rs | |
151 | kAudioChannelLayoutTag_MPEG_5_1_A = (121L<<16) | 6, // L R C LFE Ls Rs | |
152 | kAudioChannelLayoutTag_MPEG_5_1_B = (122L<<16) | 6, // L R Ls Rs C LFE | |
153 | kAudioChannelLayoutTag_MPEG_5_1_C = (123L<<16) | 6, // L C R Ls Rs LFE | |
154 | kAudioChannelLayoutTag_MPEG_5_1_D = (124L<<16) | 6, // C L R Ls Rs LFE | |
155 | kAudioChannelLayoutTag_MPEG_6_1_A = (125L<<16) | 7, // L R C LFE Ls Rs Cs | |
156 | kAudioChannelLayoutTag_MPEG_7_1_A = (126L<<16) | 8, // L R C LFE Ls Rs Lc Rc | |
157 | 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) | |
158 | kAudioChannelLayoutTag_MPEG_7_1_C = (128L<<16) | 8, // L R C LFE Ls Rs Rls Rrs | |
159 | kAudioChannelLayoutTag_Emagic_Default_7_1 = (129L<<16) | 8, // L R Ls Rs C LFE Lc Rc | |
160 | kAudioChannelLayoutTag_SMPTE_DTV = (130L<<16) | 8, // L R C LFE Ls Rs Lt Rt | |
161 | // (kAudioChannelLayoutTag_ITU_5_1 plus a matrix encoded stereo mix) | |
162 | ||
163 | // ITU defined layouts | |
164 | kAudioChannelLayoutTag_ITU_1_0 = kAudioChannelLayoutTag_Mono, // C | |
165 | kAudioChannelLayoutTag_ITU_2_0 = kAudioChannelLayoutTag_Stereo, // L R | |
166 | ||
167 | kAudioChannelLayoutTag_ITU_2_1 = (131L<<16) | 3, // L R Cs | |
168 | kAudioChannelLayoutTag_ITU_2_2 = (132L<<16) | 4, // L R Ls Rs | |
169 | kAudioChannelLayoutTag_ITU_3_0 = kAudioChannelLayoutTag_MPEG_3_0_A, // L R C | |
170 | kAudioChannelLayoutTag_ITU_3_1 = kAudioChannelLayoutTag_MPEG_4_0_A, // L R C Cs | |
171 | ||
172 | kAudioChannelLayoutTag_ITU_3_2 = kAudioChannelLayoutTag_MPEG_5_0_A, // L R C Ls Rs | |
173 | kAudioChannelLayoutTag_ITU_3_2_1 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs | |
174 | kAudioChannelLayoutTag_ITU_3_4_1 = kAudioChannelLayoutTag_MPEG_7_1_C, // L R C LFE Ls Rs Rls Rrs | |
175 | ||
176 | // DVD defined layouts | |
177 | kAudioChannelLayoutTag_DVD_0 = kAudioChannelLayoutTag_Mono, // C (mono) | |
178 | kAudioChannelLayoutTag_DVD_1 = kAudioChannelLayoutTag_Stereo, // L R | |
179 | kAudioChannelLayoutTag_DVD_2 = kAudioChannelLayoutTag_ITU_2_1, // L R Cs | |
180 | kAudioChannelLayoutTag_DVD_3 = kAudioChannelLayoutTag_ITU_2_2, // L R Ls Rs | |
181 | kAudioChannelLayoutTag_DVD_4 = (133L<<16) | 3, // L R LFE | |
182 | kAudioChannelLayoutTag_DVD_5 = (134L<<16) | 4, // L R LFE Cs | |
183 | kAudioChannelLayoutTag_DVD_6 = (135L<<16) | 5, // L R LFE Ls Rs | |
184 | kAudioChannelLayoutTag_DVD_7 = kAudioChannelLayoutTag_MPEG_3_0_A, // L R C | |
185 | kAudioChannelLayoutTag_DVD_8 = kAudioChannelLayoutTag_MPEG_4_0_A, // L R C Cs | |
186 | kAudioChannelLayoutTag_DVD_9 = kAudioChannelLayoutTag_MPEG_5_0_A, // L R C Ls Rs | |
187 | kAudioChannelLayoutTag_DVD_10 = (136L<<16) | 4, // L R C LFE | |
188 | kAudioChannelLayoutTag_DVD_11 = (137L<<16) | 5, // L R C LFE Cs | |
189 | kAudioChannelLayoutTag_DVD_12 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs | |
190 | // 13 through 17 are duplicates of 8 through 12. | |
191 | kAudioChannelLayoutTag_DVD_13 = kAudioChannelLayoutTag_DVD_8, // L R C Cs | |
192 | kAudioChannelLayoutTag_DVD_14 = kAudioChannelLayoutTag_DVD_9, // L R C Ls Rs | |
193 | kAudioChannelLayoutTag_DVD_15 = kAudioChannelLayoutTag_DVD_10, // L R C LFE | |
194 | kAudioChannelLayoutTag_DVD_16 = kAudioChannelLayoutTag_DVD_11, // L R C LFE Cs | |
195 | kAudioChannelLayoutTag_DVD_17 = kAudioChannelLayoutTag_DVD_12, // L R C LFE Ls Rs | |
196 | kAudioChannelLayoutTag_DVD_18 = (138L<<16) | 5, // L R Ls Rs LFE | |
197 | kAudioChannelLayoutTag_DVD_19 = kAudioChannelLayoutTag_MPEG_5_0_B, // L R Ls Rs C | |
198 | kAudioChannelLayoutTag_DVD_20 = kAudioChannelLayoutTag_MPEG_5_1_B, // L R Ls Rs C LFE | |
199 | ||
200 | // These layouts are recommended for AudioUnit usage | |
201 | // These are the symmetrical layouts | |
202 | kAudioChannelLayoutTag_AudioUnit_4 = kAudioChannelLayoutTag_Quadraphonic, | |
203 | kAudioChannelLayoutTag_AudioUnit_5 = kAudioChannelLayoutTag_Pentagonal, | |
204 | kAudioChannelLayoutTag_AudioUnit_6 = kAudioChannelLayoutTag_Hexagonal, | |
205 | kAudioChannelLayoutTag_AudioUnit_8 = kAudioChannelLayoutTag_Octagonal, | |
206 | // These are the surround-based layouts | |
207 | kAudioChannelLayoutTag_AudioUnit_5_0 = kAudioChannelLayoutTag_MPEG_5_0_B, // L R Ls Rs C | |
208 | kAudioChannelLayoutTag_AudioUnit_6_0 = (139L<<16) | 6, // L R Ls Rs C Cs | |
209 | kAudioChannelLayoutTag_AudioUnit_7_0 = (140L<<16) | 7, // L R Ls Rs C Rls Rrs | |
210 | kAudioChannelLayoutTag_AudioUnit_7_0_Front = (148L<<16) | 7, // L R Ls Rs C Lc Rc | |
211 | kAudioChannelLayoutTag_AudioUnit_5_1 = kAudioChannelLayoutTag_MPEG_5_1_A, // L R C LFE Ls Rs | |
212 | kAudioChannelLayoutTag_AudioUnit_6_1 = kAudioChannelLayoutTag_MPEG_6_1_A, // L R C LFE Ls Rs Cs | |
213 | kAudioChannelLayoutTag_AudioUnit_7_1 = kAudioChannelLayoutTag_MPEG_7_1_C, // L R C LFE Ls Rs Rls Rrs | |
214 | kAudioChannelLayoutTag_AudioUnit_7_1_Front = kAudioChannelLayoutTag_MPEG_7_1_A, // L R C LFE Ls Rs Lc Rc | |
215 | ||
216 | kAudioChannelLayoutTag_AAC_3_0 = kAudioChannelLayoutTag_MPEG_3_0_B, // C L R | |
217 | kAudioChannelLayoutTag_AAC_Quadraphonic = kAudioChannelLayoutTag_Quadraphonic, // L R Ls Rs | |
218 | kAudioChannelLayoutTag_AAC_4_0 = kAudioChannelLayoutTag_MPEG_4_0_B, // C L R Cs | |
219 | kAudioChannelLayoutTag_AAC_5_0 = kAudioChannelLayoutTag_MPEG_5_0_D, // C L R Ls Rs | |
220 | kAudioChannelLayoutTag_AAC_5_1 = kAudioChannelLayoutTag_MPEG_5_1_D, // C L R Ls Rs Lfe | |
221 | kAudioChannelLayoutTag_AAC_6_0 = (141L<<16) | 6, // C L R Ls Rs Cs | |
222 | kAudioChannelLayoutTag_AAC_6_1 = (142L<<16) | 7, // C L R Ls Rs Cs Lfe | |
223 | kAudioChannelLayoutTag_AAC_7_0 = (143L<<16) | 7, // C L R Ls Rs Rls Rrs | |
224 | kAudioChannelLayoutTag_AAC_7_1 = kAudioChannelLayoutTag_MPEG_7_1_B, // C Lc Rc L R Ls Rs Lfe | |
225 | kAudioChannelLayoutTag_AAC_Octagonal = (144L<<16) | 8, // C L R Ls Rs Rls Rrs Cs | |
226 | ||
227 | kAudioChannelLayoutTag_TMH_10_2_std = (145L<<16) | 16, // L R C Vhc Lsd Rsd Ls Rs Vhl Vhr Lw Rw Csd Cs LFE1 LFE2 | |
228 | kAudioChannelLayoutTag_TMH_10_2_full = (146L<<16) | 21, // TMH_10_2_std plus: Lc Rc HI VI Haptic | |
229 | ||
230 | kAudioChannelLayoutTag_AC3_1_0_1 = (149L<<16) | 2, // C LFE | |
231 | kAudioChannelLayoutTag_AC3_3_0 = (150L<<16) | 3, // L C R | |
232 | kAudioChannelLayoutTag_AC3_3_1 = (151L<<16) | 4, // L C R Cs | |
233 | kAudioChannelLayoutTag_AC3_3_0_1 = (152L<<16) | 4, // L C R LFE | |
234 | kAudioChannelLayoutTag_AC3_2_1_1 = (153L<<16) | 4, // L R Cs LFE | |
235 | kAudioChannelLayoutTag_AC3_3_1_1 = (154L<<16) | 5, // L C R Cs LFE | |
236 | ||
237 | kAudioChannelLayoutTag_DiscreteInOrder = (147L<<16) | 0, // needs to be ORed with the actual number of channels | |
238 | kAudioChannelLayoutTag_Unknown = 0xFFFF0000 // needs to be ORed with the actual number of channels | |
239 | }; | |
240 | ||
241 | #endif |