1 //------------------------------------------------------------------------
2 // Project : VST SDK
3 //
4 // Category : Interfaces
5 // Filename : pluginterfaces/vst/vstspeaker.h
6 // Created by : Steinberg, 01/2018
7 // Description : common defines
8 //
9 //-----------------------------------------------------------------------------
10 // This file is part of a Steinberg SDK. It is subject to the license terms
11 // in the LICENSE file found in the top-level directory of this distribution
12 // and at www.steinberg.net/sdklicenses.
13 // No part of the SDK, including this file, may be copied, modified, propagated,
14 // or distributed except according to the terms contained in the LICENSE file.
15 //-----------------------------------------------------------------------------
16
17 #pragma once
18 #include "vsttypes.h"
19
20 //#include "pluginterfaces/base/ftype.h"
21
22 //------------------------------------------------------------------------
23 namespace Steinberg {
24 namespace Vst {
25 //------------------------------------------------------------------------
26 /** \defgroup speakerArrangements Speaker Arrangements
27 \image html "vst3_speaker_types.jpg"
28 \n
29 A SpeakerArrangement is a bitset combination of speakers. For example:
30 \code
31 const SpeakerArrangement kStereo = kSpeakerL | kSpeakerR; // => hex: 0x03 / binary: 0011.
32 \endcode*/
33 //------------------------------------------------------------------------
34
35 //------------------------------------------------------------------------
36 /** Speaker Definitions.
37 \ingroup speakerArrangements */
38 //------------------------------------------------------------------------
39 /**@{*/
40 const Speaker kSpeakerL = 1 << 0; ///< Left (L)
41 const Speaker kSpeakerR = 1 << 1; ///< Right (R)
42 const Speaker kSpeakerC = 1 << 2; ///< Center (C)
43 const Speaker kSpeakerLfe = 1 << 3; ///< Subbass (Lfe)
44 const Speaker kSpeakerLs = 1 << 4; ///< Left Surround (Ls)
45 const Speaker kSpeakerRs = 1 << 5; ///< Right Surround (Rs)
46 const Speaker kSpeakerLc = 1 << 6; ///< Left of Center (Lc) - Front Left Center
47 const Speaker kSpeakerRc = 1 << 7; ///< Right of Center (Rc) - Front Right Center
48 const Speaker kSpeakerS = 1 << 8; ///< Surround (S)
49 const Speaker kSpeakerCs = kSpeakerS; ///< Center of Surround (Cs) - Back Center - Surround (S)
50 const Speaker kSpeakerSl = 1 << 9; ///< Side Left (Sl)
51 const Speaker kSpeakerSr = 1 << 10; ///< Side Right (Sr)
52 const Speaker kSpeakerTc = 1 << 11; ///< Top Center Over-head, Top Middle (Tc)
53 const Speaker kSpeakerTfl = 1 << 12; ///< Top Front Left (Tfl)
54 const Speaker kSpeakerTfc = 1 << 13; ///< Top Front Center (Tfc)
55 const Speaker kSpeakerTfr = 1 << 14; ///< Top Front Right (Tfr)
56 const Speaker kSpeakerTrl = 1 << 15; ///< Top Rear/Back Left (Trl)
57 const Speaker kSpeakerTrc = 1 << 16; ///< Top Rear/Back Center (Trc)
58 const Speaker kSpeakerTrr = 1 << 17; ///< Top Rear/Back Right (Trr)
59 const Speaker kSpeakerLfe2 = 1 << 18; ///< Subbass 2 (Lfe2)
60 const Speaker kSpeakerM = 1 << 19; ///< Mono (M)
61
62 const Speaker kSpeakerACN0 = (Speaker)1 << 20; ///< Ambisonic ACN 0
63 const Speaker kSpeakerACN1 = (Speaker)1 << 21; ///< Ambisonic ACN 1
64 const Speaker kSpeakerACN2 = (Speaker)1 << 22; ///< Ambisonic ACN 2
65 const Speaker kSpeakerACN3 = (Speaker)1 << 23; ///< Ambisonic ACN 3
66 const Speaker kSpeakerACN4 = (Speaker)1 << 38; ///< Ambisonic ACN 4
67 const Speaker kSpeakerACN5 = (Speaker)1 << 39; ///< Ambisonic ACN 5
68 const Speaker kSpeakerACN6 = (Speaker)1 << 40; ///< Ambisonic ACN 6
69 const Speaker kSpeakerACN7 = (Speaker)1 << 41; ///< Ambisonic ACN 7
70 const Speaker kSpeakerACN8 = (Speaker)1 << 42; ///< Ambisonic ACN 8
71 const Speaker kSpeakerACN9 = (Speaker)1 << 43; ///< Ambisonic ACN 9
72 const Speaker kSpeakerACN10 = (Speaker)1 << 44; ///< Ambisonic ACN 10
73 const Speaker kSpeakerACN11 = (Speaker)1 << 45; ///< Ambisonic ACN 11
74 const Speaker kSpeakerACN12 = (Speaker)1 << 46; ///< Ambisonic ACN 12
75 const Speaker kSpeakerACN13 = (Speaker)1 << 47; ///< Ambisonic ACN 13
76 const Speaker kSpeakerACN14 = (Speaker)1 << 48; ///< Ambisonic ACN 14
77 const Speaker kSpeakerACN15 = (Speaker)1 << 49; ///< Ambisonic ACN 15
78
79 const Speaker kSpeakerTsl = 1 << 24; ///< Top Side Left (Tsl)
80 const Speaker kSpeakerTsr = 1 << 25; ///< Top Side Right (Tsr)
81 const Speaker kSpeakerLcs = 1 << 26; ///< Left of Center Surround (Lcs) - Back Left Center
82 const Speaker kSpeakerRcs = 1 << 27; ///< Right of Center Surround (Rcs) - Back Right Center
83
84 const Speaker kSpeakerBfl = 1 << 28; ///< Bottom Front Left (Bfl)
85 const Speaker kSpeakerBfc = 1 << 29; ///< Bottom Front Center (Bfc)
86 const Speaker kSpeakerBfr = 1 << 30; ///< Bottom Front Right (Bfr)
87
88 const Speaker kSpeakerPl = (Speaker)1 << 31; ///< Proximity Left (Pl)
89 const Speaker kSpeakerPr = (Speaker)1 << 32; ///< Proximity Right (Pr)
90
91 const Speaker kSpeakerBsl = (Speaker)1 << 33; ///< Bottom Side Left (Bsl)
92 const Speaker kSpeakerBsr = (Speaker)1 << 34; ///< Bottom Side Right (Bsr)
93 const Speaker kSpeakerBrl = (Speaker)1 << 35; ///< Bottom Rear Left (Brl)
94 const Speaker kSpeakerBrc = (Speaker)1 << 36; ///< Bottom Rear Center (Brc)
95 const Speaker kSpeakerBrr = (Speaker)1 << 37; ///< Bottom Rear Right (Brr)
96 //------------------------------------------------------------------------
97 /** @}*/
98
99 //------------------------------------------------------------------------
100 /** Speaker Arrangement Definitions (SpeakerArrangement)*/
101 //------------------------------------------------------------------------
102 namespace SpeakerArr
103 {
104 //------------------------------------------------------------------------
105 /** Speaker Arrangement Definitions.
106 \ingroup speakerArrangements */
107 /*@{*/
108 const SpeakerArrangement kEmpty = 0; ///< empty arrangement
109 const SpeakerArrangement kMono = kSpeakerM; ///< M
110 const SpeakerArrangement kStereo = kSpeakerL | kSpeakerR; ///< L R
111 const SpeakerArrangement kStereoSurround = kSpeakerLs | kSpeakerRs; ///< Ls Rs
112 const SpeakerArrangement kStereoCenter = kSpeakerLc | kSpeakerRc; ///< Lc Rc
113 const SpeakerArrangement kStereoSide = kSpeakerSl | kSpeakerSr; ///< Sl Sr
114 const SpeakerArrangement kStereoCLfe = kSpeakerC | kSpeakerLfe; ///< C Lfe
115 const SpeakerArrangement kStereoTF = kSpeakerTfl | kSpeakerTfr; ///< Tfl Tfr
116 const SpeakerArrangement kStereoTS = kSpeakerTsl | kSpeakerTsr; ///< Tsl Tsr
117 const SpeakerArrangement kStereoTR = kSpeakerTrl | kSpeakerTrr; ///< Trl Trr
118 const SpeakerArrangement kStereoBF = kSpeakerBfl | kSpeakerBfr; ///< Bfl Bfr
119
120 /** L R C */
121 const SpeakerArrangement k30Cine = kSpeakerL | kSpeakerR | kSpeakerC;
122 /** L R S */
123 const SpeakerArrangement k30Music = kSpeakerL | kSpeakerR | kSpeakerS;
124 /** L R C Lfe */
125 const SpeakerArrangement k31Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe;
126 /** L R Lfe S */
127 const SpeakerArrangement k31Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerS;
128 /** L R C S (LCRS) */
129 const SpeakerArrangement k40Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerS;
130 /** L R Ls Rs (Quadro) */
131 const SpeakerArrangement k40Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs;
132 /** L R C Lfe S (LCRS+Lfe) */
133 const SpeakerArrangement k41Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerS;
134 /** L R Lfe Ls Rs (Quadro+Lfe) */
135 const SpeakerArrangement k41Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs;
136 /** L R C Ls Rs */
137 const SpeakerArrangement k50 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs;
138 /** L R C Lfe Ls Rs */
139 const SpeakerArrangement k51 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs;
140 /** L R C Ls Rs Cs */
141 const SpeakerArrangement k60Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs;
142 /** L R Ls Rs Sl Sr */
143 const SpeakerArrangement k60Music = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr;
144 /** L R C Lfe Ls Rs Cs */
145 const SpeakerArrangement k61Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs;
146 /** L R Lfe Ls Rs Sl Sr */
147 const SpeakerArrangement k61Music = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr;
148 /** L R C Ls Rs Lc Rc */
149 const SpeakerArrangement k70Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc;
150 /** L R C Ls Rs Sl Sr */
151 const SpeakerArrangement k70Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr;
152 /** L R C Lfe Ls Rs Lc Rc */
153 const SpeakerArrangement k71Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc;
154 const SpeakerArrangement k71CineFullFront= k71Cine;
155 /** L R C Lfe Ls Rs Lcs Rcs */
156 const SpeakerArrangement k71CineFullRear = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLcs | kSpeakerRcs;
157 /** L R C Lfe Ls Rs Sl Sr */
158 const SpeakerArrangement k71Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr;
159 const SpeakerArrangement k71CineSideFill = k71Music;
160 /** L R C Lfe Ls Rs Pl Pr */
161 const SpeakerArrangement k71Proximity = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerPl | kSpeakerPr;
162 /** L R C Ls Rs Lc Rc Cs */
163 const SpeakerArrangement k80Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs;
164 /** L R C Ls Rs Cs Sl Sr */
165 const SpeakerArrangement k80Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr;
166 /** L R C Lfe Ls Rs Lc Rc Cs */
167 const SpeakerArrangement k81Cine = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs;
168 /** L R C Lfe Ls Rs Cs Sl Sr */
169 const SpeakerArrangement k81Music = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerSl | kSpeakerSr;
170
171
172 /** First-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization */
173 const SpeakerArrangement kAmbi1stOrderACN = kSpeakerACN0 | kSpeakerACN1 | kSpeakerACN2 | kSpeakerACN3;
174 /** Second-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization */
175 const SpeakerArrangement kAmbi2cdOrderACN = kAmbi1stOrderACN | kSpeakerACN4 | kSpeakerACN5 | kSpeakerACN6 | kSpeakerACN7 | kSpeakerACN8;
176 /** Third-Order with Ambisonic Channel Number (ACN) ordering and SN3D normalization */
177 const SpeakerArrangement kAmbi3rdOrderACN = kAmbi2cdOrderACN | kSpeakerACN9 | kSpeakerACN10 | kSpeakerACN11 | kSpeakerACN12 | kSpeakerACN13 | kSpeakerACN14 | kSpeakerACN15;
178
179
180 /*-----------*/
181 /* 3D formats */
182 /*-----------*/
183 /** L R Ls Rs Tfl Tfr Trl Trr */
184 const SpeakerArrangement k80Cube = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerTfl| kSpeakerTfr| kSpeakerTrl | kSpeakerTrr;
185 /** L R C Lfe Ls Rs Cs Tc */
186 const SpeakerArrangement k71CineTopCenter = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerTc;
187 /** L R C Lfe Ls Rs Cs Tfc */
188 const SpeakerArrangement k71CineCenterHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerCs | kSpeakerTfc;
189 /** L R C Lfe Ls Rs Tfl Tfr */
190 const SpeakerArrangement k71CineFrontHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTfl | kSpeakerTfr;
191 const SpeakerArrangement k71MPEG3D = k71CineFrontHigh;
192 /** L R C Lfe Ls Rs Tsl Tsr */
193 const SpeakerArrangement k71CineSideHigh = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerTsl | kSpeakerTsr;
194
195 /** L R Lfe Ls Rs Tfl Tfc Tfr Bfc */
196 const SpeakerArrangement k81MPEG3D = kSpeakerL | kSpeakerR | kSpeakerLfe | kSpeakerLs | kSpeakerRs |
197 kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerBfc;
198
199 /** L R C Ls Rs Tfl Tfr Trl Trr */
200 const SpeakerArrangement k90 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs |
201 kSpeakerTfl| kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
202 const SpeakerArrangement k50_4 = k90;
203 /** L R C Lfe Ls Rs Tfl Tfr Trl Trr */
204 const SpeakerArrangement k91 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs |
205 kSpeakerTfl| kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
206 const SpeakerArrangement k51_4 = k91;
207
208 /** L R C Lfe Ls Rs Sl Sr Tsl Tsr */
209 const SpeakerArrangement k71_2 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs |
210 kSpeakerRs | kSpeakerSl | kSpeakerSr | kSpeakerTsl | kSpeakerTsr;
211 const SpeakerArrangement k91Atmos = k71_2;
212
213 /** L R C Ls Rs Tc Tfl Tfr Trl Trr */
214 const SpeakerArrangement k100 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs |
215 kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
216 /** L R C Lfe Ls Rs Tc Tfl Tfr Trl Trr */
217 const SpeakerArrangement k101 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs |
218 kSpeakerTc | kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
219 const SpeakerArrangement k101MPEG3D = k101;
220
221 /** L R C Lfe Ls Rs Tfl Tfc Tfr Trl Trr Lfe2 */
222 const SpeakerArrangement k102 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs |
223 kSpeakerTfl| kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerLfe2;
224
225 /** L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr */
226 const SpeakerArrangement k110 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs |
227 kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
228 /** L R C Lfe Ls Rs Tc Tfl Tfc Tfr Trl Trr */
229 const SpeakerArrangement k111 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs |
230 kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
231
232 /** L R C Ls Rs Sl Sr Tfl Tfr Trl Trr */
233 const SpeakerArrangement k70_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr |
234 kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
235
236 /** L R C Lfe Ls Rs Sl Sr Tfl Tfr Trl Trr */
237 const SpeakerArrangement k71_4 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr |
238 kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
239 const SpeakerArrangement k111MPEG3D = k71_4;
240
241 /** L R C Lfe Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr Lfe2 */
242 const SpeakerArrangement k122 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc |
243 kSpeakerTfl| kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr | kSpeakerLfe2;
244 /** L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr */
245 const SpeakerArrangement k130 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr |
246 kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
247 /** L R C Lfe Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr */
248 const SpeakerArrangement k131 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr |
249 kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr;
250
251 /** L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr */
252 const SpeakerArrangement k140 = kSpeakerL | kSpeakerR | kSpeakerLs | kSpeakerRs | kSpeakerSl | kSpeakerSr |
253 kSpeakerTfl | kSpeakerTfr | kSpeakerTrl | kSpeakerTrr |
254 kSpeakerBfl | kSpeakerBfr | kSpeakerBrl | kSpeakerBrr;
255
256 /** L R C Lfe Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr Lfe2 Tsl Tsr Bfl Bfc Bfr */
257 const SpeakerArrangement k222 = kSpeakerL | kSpeakerR | kSpeakerC | kSpeakerLfe | kSpeakerLs | kSpeakerRs | kSpeakerLc | kSpeakerRc | kSpeakerCs | kSpeakerSl | kSpeakerSr |
258 kSpeakerTc | kSpeakerTfl | kSpeakerTfc | kSpeakerTfr | kSpeakerTrl | kSpeakerTrc | kSpeakerTrr | kSpeakerLfe2 | kSpeakerTsl | kSpeakerTsr |
259 kSpeakerBfl| kSpeakerBfc | kSpeakerBfr;
260
261
262 //------------------------------------------------------------------------
263 /** Speaker Arrangement String Representation.
264 \ingroup speakerArrangements */
265 /*@{*/
266 const CString kStringEmpty = "";
267 const CString kStringMono = "Mono";
268 const CString kStringStereo = "Stereo";
269 const CString kStringStereoR = "Stereo (Ls Rs)";
270 const CString kStringStereoC = "Stereo (Lc Rc)";
271 const CString kStringStereoSide = "Stereo (Sl Sr)";
272 const CString kStringStereoCLfe = "Stereo (C LFE)";
273 const CString kStringStereoTF = "Stereo (Tfl Tfr)";
274 const CString kStringStereoTS = "Stereo (Tsl Tsr)";
275 const CString kStringStereoTR = "Stereo (Trl Trr)";
276 const CString kStringStereoBF = "Stereo (Bfl Bfr)";
277
278 const CString kString30Cine = "LRC";
279 const CString kString30Music = "LRS";
280 const CString kString31Cine = "LRC+LFE";
281 const CString kString31Music = "LRS+LFE";
282 const CString kString40Cine = "LRCS";
283 const CString kString40Music = "Quadro";
284 const CString kString41Cine = "LRCS+LFE";
285 const CString kString41Music = "Quadro+LFE";
286 const CString kString50 = "5.0";
287 const CString kString51 = "5.1";
288 const CString kString60Cine = "6.0 Cine";
289 const CString kString60Music = "6.0 Music";
290 const CString kString61Cine = "6.1 Cine";
291 const CString kString61Music = "6.1 Music";
292 const CString kString70Cine = "7.0 Cine (SDDS)";
293 const CString kString70Music = "7.0 Music (Dolby)";
294 const CString kString71Cine = "7.1 Cine (SDDS)";
295 const CString kString71Music = "7.1 Music (Dolby)";
296 const CString kString71CineTopCenter = "7.1 Cine Top Center";
297 const CString kString71CineCenterHigh = "7.1 Cine Center High";
298 const CString kString71CineFrontHigh = "7.1 Cine Front High";
299 const CString kString71CineSideHigh = "7.1 Cine Side High";
300 const CString kString71CineFullRear = "7.1 Cine Full Rear";
301 const CString kString71Proximity = "7.1 Proximity";
302 const CString kString80Cine = "8.0 Cine";
303 const CString kString80Music = "8.0 Music";
304 const CString kString80Cube = "8.0 Cube";
305 const CString kString81Cine = "8.1 Cine";
306 const CString kString81Music = "8.1 Music";
307 const CString kString102 = "10.2 Experimental";
308 const CString kString122 = "12.2";
309 const CString kString50_4 = "5.0.4";
310 const CString kString51_4 = "5.1.4";
311 const CString kString91Atmos = "9.1 Dolby Atmos";
312 const CString kString100 = "10.0 Auro-3D";
313 const CString kString101 = "10.1 Auro-3D";
314 const CString kString110 = "11.0 Auro-3D";
315 const CString kString111 = "11.1 Auro-3D";
316 const CString kString130 = "13.0 Auro-3D";
317 const CString kString131 = "13.1 Auro-3D";
318 const CString kString81MPEG = "8.1 MPEG";
319 const CString kString70_4 = "7.0.4";
320 const CString kString71_4 = "7.1.4";
321 const CString kString140 = "14.0";
322 const CString kString222 = "22.2";
323 const CString kStringAmbi1stOrder = "1st Order Ambisonics";
324 const CString kStringAmbi2cdOrder = "2nd Order Ambisonics";
325 const CString kStringAmbi3rdOrder = "3rd Order Ambisonics";
326
327 /*@}*/
328
329 //------------------------------------------------------------------------
330 /** Speaker Arrangement String Representation with Speakers Name.
331 \ingroup speakerArrangements */
332 /*@{*/
333 const CString kStringMonoS = "M";
334 const CString kStringStereoS = "L R";
335 const CString kStringStereoRS = "Ls Rs";
336 const CString kStringStereoCS = "Lc Rc";
337 const CString kStringStereoSS = "Sl Sr";
338 const CString kStringStereoCLfeS= "C LFE";
339 const CString kStringStereoTFS = "Tfl Tfr";
340 const CString kStringStereoTSS = "Tsl Tsr";
341 const CString kStringStereoTRS = "Trl Trr";
342 const CString kStringStereoBFS = "Bfl Bfr";
343 const CString kString30CineS = "L R C";
344 const CString kString30MusicS = "L R S";
345 const CString kString31CineS = "L R C LFE";
346 const CString kString31MusicS = "L R LFE S";
347 const CString kString40CineS = "L R C S";
348 const CString kString40MusicS = "L R Ls Rs";
349 const CString kString41CineS = "L R C LFE S";
350 const CString kString41MusicS = "L R LFE Ls Rs";
351 const CString kString50S = "L R C Ls Rs";
352 const CString kString51S = "L R C LFE Ls Rs";
353 const CString kString60CineS = "L R C Ls Rs Cs";
354 const CString kString60MusicS = "L R Ls Rs Sl Sr";
355 const CString kString61CineS = "L R C LFE Ls Rs Cs";
356 const CString kString61MusicS = "L R LFE Ls Rs Sl Sr";
357 const CString kString70CineS = "L R C Ls Rs Lc Rc";
358 const CString kString70MusicS = "L R C Ls Rs Sl Sr";
359 const CString kString71CineS = "L R C LFE Ls Rs Lc Rc";
360 const CString kString71MusicS = "L R C LFE Ls Rs Sl Sr";
361 const CString kString80CineS = "L R C Ls Rs Lc Rc Cs";
362 const CString kString80MusicS = "L R C Ls Rs Cs Sl Sr";
363 const CString kString81CineS = "L R C LFE Ls Rs Lc Rc Cs";
364 const CString kString81MusicS = "L R C LFE Ls Rs Cs Sl Sr";
365 const CString kString80CubeS = "L R Ls Rs Tfl Tfr Trl Trr";
366 const CString kString71CineTopCenterS = "L R C LFE Ls Rs Cs Tc";
367 const CString kString71CineCenterHighS = "L R C LFE Ls Rs Cs Tfc";
368 const CString kString71CineFrontHighS = "L R C LFE Ls Rs Tfl Tfl";
369 const CString kString71CineSideHighS = "L R C LFE Ls Rs Tsl Tsl";
370 const CString kString71CineFullRearS = "L R C LFE Ls Rs Lcs Rcs";
371 const CString kString71ProximityS = "L R C LFE Ls Rs Pl Pr";
372 const CString kString50_4S = "L R C Ls Rs Tfl Tfr Trl Trr";
373 const CString kString51_4S = "L R C LFE Ls Rs Tfl Tfr Trl Trr";
374 const CString kString91AtmosS = "L R C LFE Ls Rs Sl Sr Tsl Tsr";
375 const CString kString100S = "L R C Ls Rs Tc Tfl Tfr Trl Trr";
376 const CString kString101S = "L R C LFE Ls Rs Tc Tfl Tfr Trl Trr";
377 const CString kString110S = "L R C Ls Rs Tc Tfl Tfc Tfr Trl Trr";
378 const CString kString111S = "L R C LFE Ls Rs Tc Tfl Tfc Tfr Trl Trr";
379 const CString kStringk70_4S = "L R C Ls Rs Sl Sr Tfl Tfr Trl Trr";
380 const CString kStringk71_4S = "L R C LFE Ls Rs Sl Sr Tfl Tfr Trl Trr";
381 const CString kString130S = "L R C Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr";
382 const CString kString131S = "L R C LFE Ls Rs Sl Sr Tc Tfl Tfc Tfr Trl Trr";
383 const CString kString102S = "L R C LFE Ls Rs Tfl Tfc Tfr Trl Trr LFE2";
384 const CString kString122S = "L R C LFE Ls Rs Lc Rc Tfl Tfc Tfr Trl Trr LFE2";
385 const CString kString81MPEGS = "L R LFE Ls Rs Tfl Tfc Tfr Bfc";
386 const CString kString140S = "L R Ls Rs Sl Sr Tfl Tfr Trl Trr Bfl Bfr Brl Brr";
387 const CString kString222S = "L R C LFE Ls Rs Lc Rc Cs Sl Sr Tc Tfl Tfc Tfr Trl Trc Trr LFE2 Tsl Tsr Bfl Bfc Bfr";
388
389 const CString kStringAmbi1stOrderS = "0 1 2 3";
390 const CString kStringAmbi2cdOrderS = "0 1 2 3 4 5 6 7 8";
391 const CString kStringAmbi3rdOrderS = "0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15";
392 /*@}*/
393
394 //------------------------------------------------------------------------
395 /** Returns number of channels used in speaker arrangement.
396 \ingroup speakerArrangements */
397 /*@{*/
getChannelCount(SpeakerArrangement arr)398 inline int32 getChannelCount (SpeakerArrangement arr)
399 {
400 int32 count = 0;
401 while (arr)
402 {
403 if (arr & (SpeakerArrangement)1)
404 ++count;
405 arr >>= 1;
406 }
407 return count;
408 }
409
410 //------------------------------------------------------------------------
411 /** Returns the index of a given speaker in a speaker arrangement (-1 if speaker is not part of the
412 * arrangement). */
getSpeakerIndex(Speaker speaker,SpeakerArrangement arrangement)413 inline int32 getSpeakerIndex (Speaker speaker, SpeakerArrangement arrangement)
414 {
415 // check if speaker is present in arrangement
416 if ((arrangement & speaker) == 0)
417 return -1;
418
419 int32 result = 0;
420 Speaker i = 1;
421 while (i < speaker)
422 {
423 if (arrangement & i)
424 result++;
425 i <<= 1;
426 }
427
428 return result;
429 }
430
431 //------------------------------------------------------------------------
432 /** Returns the speaker for a given index in a speaker arrangement (return 0 when out of range). */
getSpeaker(const SpeakerArrangement & arr,int32 index)433 inline Speaker getSpeaker (const SpeakerArrangement& arr, int32 index)
434 {
435 SpeakerArrangement arrTmp = arr;
436
437 int32 index2 = -1;
438 int32 pos = -1;
439 while (arrTmp)
440 {
441 if (arrTmp & 0x1)
442 index2++;
443 pos++;
444 if (index2 == index)
445 return (Speaker)1 << pos;
446
447 arrTmp = arrTmp >> 1;
448 }
449 return 0;
450 }
451
452 //------------------------------------------------------------------------
453 /** Returns true if arrSubSet is a subset speaker of arr (means each speaker of arrSubSet is
454 * included in arr). */
isSubsetOf(const SpeakerArrangement & arrSubSet,const SpeakerArrangement & arr)455 inline bool isSubsetOf (const SpeakerArrangement& arrSubSet, const SpeakerArrangement& arr)
456 {
457 return (arrSubSet == (arrSubSet & arr));
458 }
459
460 //------------------------------------------------------------------------
461 /** Returns true if arrangement is a Auro configuration. */
isAuro(const SpeakerArrangement & arr)462 inline bool isAuro (const SpeakerArrangement& arr)
463 {
464 if (arr == k90 || arr == k91 || arr == k100 || arr == k101 || arr == k110 || arr == k111 ||
465 arr == k130 || arr == k131)
466 {
467 return true;
468 }
469 return false;
470 }
471
472 //------------------------------------------------------------------------
473 /** Returns true if arrangement is a Auro configuration. */
isAmbisonics(const SpeakerArrangement & arr)474 inline bool isAmbisonics (const SpeakerArrangement& arr)
475 {
476 if (arr == kAmbi1stOrderACN || arr == kAmbi2cdOrderACN || arr == kAmbi3rdOrderACN)
477 {
478 return true;
479 }
480 return false;
481 }
482
483 //------------------------------------------------------------------------
484 /** Returns the speaker arrangement associated to a string representation.
485 Returns kEmpty if no associated arrangement is known.
486 */
getSpeakerArrangementFromString(CString arrStr)487 inline SpeakerArrangement getSpeakerArrangementFromString (CString arrStr)
488 {
489 if (!strcmp8 (arrStr, kStringMono))
490 return kMono;
491 if (!strcmp8 (arrStr, kStringStereo))
492 return kStereo;
493 if (!strcmp8 (arrStr, kStringStereoR))
494 return kStereoSurround;
495 if (!strcmp8 (arrStr, kStringStereoC))
496 return kStereoCenter;
497 if (!strcmp8 (arrStr, kStringStereoSide))
498 return kStereoSide;
499 if (!strcmp8 (arrStr, kStringStereoCLfe))
500 return kStereoCLfe;
501 if (!strcmp8 (arrStr, kStringStereoTF))
502 return kStereoTF;
503 if (!strcmp8 (arrStr, kStringStereoTS))
504 return kStereoTS;
505 if (!strcmp8 (arrStr, kStringStereoTR))
506 return kStereoTR;
507 if (!strcmp8 (arrStr, kStringStereoBF))
508 return kStereoBF;
509 if (!strcmp8 (arrStr, kString30Cine))
510 return k30Cine;
511 if (!strcmp8 (arrStr, kString30Music))
512 return k30Music;
513 if (!strcmp8 (arrStr, kString31Cine))
514 return k31Cine;
515 if (!strcmp8 (arrStr, kString31Music))
516 return k31Music;
517 if (!strcmp8 (arrStr, kString40Cine))
518 return k40Cine;
519 if (!strcmp8 (arrStr, kString40Music))
520 return k40Music;
521 if (!strcmp8 (arrStr, kString41Cine))
522 return k41Cine;
523 if (!strcmp8 (arrStr, kString41Music))
524 return k41Music;
525 if (!strcmp8 (arrStr, kString50))
526 return k50;
527 if (!strcmp8 (arrStr, kString51))
528 return k51;
529 if (!strcmp8 (arrStr, kString60Cine))
530 return k60Cine;
531 if (!strcmp8 (arrStr, kString60Music))
532 return k60Music;
533 if (!strcmp8 (arrStr, kString61Cine))
534 return k61Cine;
535 if (!strcmp8 (arrStr, kString61Music))
536 return k61Music;
537 if (!strcmp8 (arrStr, kString70Cine))
538 return k70Cine;
539 if (!strcmp8 (arrStr, kString70Music))
540 return k70Music;
541 if (!strcmp8 (arrStr, kString71Cine))
542 return k71Cine;
543 if (!strcmp8 (arrStr, kString71Music))
544 return k71Music;
545 if (!strcmp8 (arrStr, kString71Proximity))
546 return k71Proximity;
547 if (!strcmp8 (arrStr, kString80Cine))
548 return k80Cine;
549 if (!strcmp8 (arrStr, kString80Music))
550 return k80Music;
551 if (!strcmp8 (arrStr, kString81Cine))
552 return k81Cine;
553 if (!strcmp8 (arrStr, kString81Music))
554 return k81Music;
555 if (!strcmp8 (arrStr, kString102))
556 return k102;
557 if (!strcmp8 (arrStr, kString122))
558 return k122;
559 if (!strcmp8 (arrStr, kString80Cube))
560 return k80Cube;
561 if (!strcmp8 (arrStr, kString71CineTopCenter))
562 return k71CineTopCenter;
563 if (!strcmp8 (arrStr, kString71CineCenterHigh))
564 return k71CineCenterHigh;
565 if (!strcmp8 (arrStr, kString71CineFrontHigh))
566 return k71CineFrontHigh;
567 if (!strcmp8 (arrStr, kString71CineSideHigh))
568 return k71CineSideHigh;
569 if (!strcmp8 (arrStr, kString71CineFullRear))
570 return k71CineFullRear;
571 if (!strcmp8 (arrStr, kString50_4))
572 return k50_4;
573 if (!strcmp8 (arrStr, kString51_4))
574 return k51_4;
575 if (!strcmp8 (arrStr, kString81MPEG))
576 return k81MPEG3D;
577 if (!strcmp8 (arrStr, kString91Atmos))
578 return k91Atmos;
579 if (!strcmp8 (arrStr, kString100))
580 return k100;
581 if (!strcmp8 (arrStr, kString101))
582 return k101;
583 if (!strcmp8 (arrStr, kString110))
584 return k110;
585 if (!strcmp8 (arrStr, kString111))
586 return k111;
587 if (!strcmp8 (arrStr, kString70_4))
588 return k70_4;
589 if (!strcmp8 (arrStr, kString71_4))
590 return k71_4;
591 if (!strcmp8 (arrStr, kString130))
592 return k130;
593 if (!strcmp8 (arrStr, kString131))
594 return k131;
595 if (!strcmp8 (arrStr, kString140))
596 return k140;
597 if (!strcmp8 (arrStr, kString222))
598 return k222;
599 if (!strcmp8 (arrStr, kStringAmbi1stOrder))
600 return kAmbi1stOrderACN;
601 if (!strcmp8 (arrStr, kStringAmbi2cdOrder))
602 return kAmbi2cdOrderACN;
603 if (!strcmp8 (arrStr, kStringAmbi3rdOrder))
604 return kAmbi3rdOrderACN;
605 return kEmpty;
606 }
607
608 //------------------------------------------------------------------------
609 /** Returns the string representation of a given speaker arrangement.
610 Returns kStringEmpty if arr is unknown.
611 */
getSpeakerArrangementString(SpeakerArrangement arr,bool withSpeakersName)612 inline CString getSpeakerArrangementString (SpeakerArrangement arr, bool withSpeakersName)
613 {
614 switch (arr)
615 {
616 case kMono: return withSpeakersName ? kStringMonoS : kStringMono;
617 case kStereo: return withSpeakersName ? kStringStereoS : kStringStereo;
618 case kStereoSurround: return withSpeakersName ? kStringStereoRS : kStringStereoR;
619 case kStereoCenter: return withSpeakersName ? kStringStereoCS : kStringStereoC;
620 case kStereoSide: return withSpeakersName ? kStringStereoSS : kStringStereoSide;
621 case kStereoCLfe: return withSpeakersName ? kStringStereoCLfeS: kStringStereoCLfe;
622 case kStereoTF: return withSpeakersName ? kStringStereoTFS : kStringStereoTF;
623 case kStereoTS: return withSpeakersName ? kStringStereoTSS : kStringStereoTS;
624 case kStereoTR: return withSpeakersName ? kStringStereoTRS : kStringStereoTR;
625 case kStereoBF: return withSpeakersName ? kStringStereoBFS : kStringStereoBF;
626 case k30Cine: return withSpeakersName ? kString30CineS : kString30Cine;
627 case k30Music: return withSpeakersName ? kString30MusicS : kString30Music;
628 case k31Cine: return withSpeakersName ? kString31CineS : kString31Cine;
629 case k31Music: return withSpeakersName ? kString31MusicS : kString31Music;
630 case k40Cine: return withSpeakersName ? kString40CineS : kString40Cine;
631 case k40Music: return withSpeakersName ? kString40MusicS : kString40Music;
632 case k41Cine: return withSpeakersName ? kString41CineS : kString41Cine;
633 case k41Music: return withSpeakersName ? kString41MusicS : kString41Music;
634 case k50: return withSpeakersName ? kString50S : kString50;
635 case k51: return withSpeakersName ? kString51S : kString51;
636 case k60Cine: return withSpeakersName ? kString60CineS : kString60Cine;
637 case k60Music: return withSpeakersName ? kString60MusicS : kString60Music;
638 case k61Cine: return withSpeakersName ? kString61CineS : kString61Cine;
639 case k61Music: return withSpeakersName ? kString61MusicS : kString61Music;
640 case k70Cine: return withSpeakersName ? kString70CineS : kString70Cine;
641 case k70Music: return withSpeakersName ? kString70MusicS : kString70Music;
642 case k71Cine: return withSpeakersName ? kString71CineS : kString71Cine;
643 case k71Music: return withSpeakersName ? kString71MusicS : kString71Music;
644 case k71Proximity: return withSpeakersName ? kString71ProximityS : kString71Proximity;
645 case k80Cine: return withSpeakersName ? kString80CineS : kString80Cine;
646 case k80Music: return withSpeakersName ? kString80MusicS : kString80Music;
647 case k81Cine: return withSpeakersName ? kString81CineS : kString81Cine;
648 case k81Music: return withSpeakersName ? kString81MusicS : kString81Music;
649 case k81MPEG3D: return withSpeakersName ? kString81MPEGS : kString81MPEG;
650 case k102: return withSpeakersName ? kString102S : kString102;
651 case k122: return withSpeakersName ? kString122S : kString122;
652 case k80Cube: return withSpeakersName ? kString80CubeS : kString80Cube;
653 case k71CineTopCenter: return withSpeakersName ? kString71CineTopCenterS : kString71CineTopCenter;
654 case k71CineCenterHigh: return withSpeakersName ? kString71CineCenterHighS : kString71CineCenterHigh;
655 case k71CineFrontHigh: return withSpeakersName ? kString71CineFrontHighS : kString71CineFrontHigh;
656 case k71CineSideHigh: return withSpeakersName ? kString71CineSideHighS : kString71CineSideHigh;
657 case k71CineFullRear: return withSpeakersName ? kString71CineFullRearS : kString71CineFullRear;
658 case k91Atmos: return withSpeakersName ? kString91AtmosS : kString91Atmos;
659 case k100: return withSpeakersName ? kString100S : kString100;
660 case k101: return withSpeakersName ? kString101S : kString101;
661 case k110: return withSpeakersName ? kString110S : kString110;
662 case k111: return withSpeakersName ? kString111S : kString111;
663
664 case k50_4: return withSpeakersName ? kString50_4S : kString50_4;
665 case k51_4: return withSpeakersName ? kString51_4S : kString51_4;
666 case k70_4: return withSpeakersName ? kStringk70_4S : kString70_4;
667 case k71_4: return withSpeakersName ? kStringk71_4S : kString71_4;
668
669 case k130: return withSpeakersName ? kString130S : kString130;
670 case k131: return withSpeakersName ? kString131S : kString131;
671 case k140: return withSpeakersName ? kString140S : kString140;
672 case k222: return withSpeakersName ? kString222S : kString222;
673 break;
674 }
675
676 if (arr == kAmbi1stOrderACN)
677 return withSpeakersName ? kStringAmbi1stOrderS : kStringAmbi1stOrder;
678 if (arr == kAmbi2cdOrderACN)
679 return withSpeakersName ? kStringAmbi2cdOrderS : kStringAmbi2cdOrder;
680 if (arr == kAmbi3rdOrderACN)
681 return withSpeakersName ? kStringAmbi3rdOrderS : kStringAmbi3rdOrder;
682
683 return kStringEmpty;
684 }
685
686 //------------------------------------------------------------------------
687 /** Returns a CString representation of a given speaker in a given arrangement
688 */
getSpeakerShortName(const SpeakerArrangement & arr,int32 index)689 inline CString getSpeakerShortName (const SpeakerArrangement& arr, int32 index)
690 {
691 SpeakerArrangement arrTmp = arr;
692
693 bool found = false;
694 int32 index2 = -1;
695 int32 pos = -1;
696 while (arrTmp)
697 {
698 if (arrTmp & 0x1)
699 index2++;
700 pos++;
701 if (index2 == index)
702 {
703 found = true;
704 break;
705 }
706 arrTmp = arrTmp >> 1;
707 }
708
709 if (!found)
710 return "";
711
712 Speaker speaker = (Speaker)1 << pos;
713 if (speaker == kSpeakerL)
714 return "L";
715 if (speaker == kSpeakerR)
716 return "R";
717 if (speaker == kSpeakerC)
718 return "C";
719 if (speaker == kSpeakerLfe)
720 return "LFE";
721 if (speaker == kSpeakerLs)
722 return "Ls";
723 if (speaker == kSpeakerRs)
724 return "Rs";
725 if (speaker == kSpeakerLc)
726 return "Lc";
727 if (speaker == kSpeakerRc)
728 return "Rc";
729 if (speaker == kSpeakerS)
730 return "S";
731 if (speaker == kSpeakerSl)
732 return "Sl";
733 if (speaker == kSpeakerSr)
734 return "Sr";
735 if (speaker == kSpeakerTc)
736 return "Tc";
737 if (speaker == kSpeakerTfl)
738 return "Tfl";
739 if (speaker == kSpeakerTfc)
740 return "Tfc";
741 if (speaker == kSpeakerTfr)
742 return "Tfr";
743 if (speaker == kSpeakerTrl)
744 return "Trl";
745 if (speaker == kSpeakerTrc)
746 return "Trc";
747 if (speaker == kSpeakerTrr)
748 return "Trr";
749 if (speaker == kSpeakerLfe2)
750 return "LFE2";
751 if (speaker == kSpeakerM)
752 return "M";
753
754 if (speaker == kSpeakerACN0)
755 return "0";
756 if (speaker == kSpeakerACN1)
757 return "1";
758 if (speaker == kSpeakerACN2)
759 return "2";
760 if (speaker == kSpeakerACN3)
761 return "3";
762 if (speaker == kSpeakerACN4)
763 return "4";
764 if (speaker == kSpeakerACN5)
765 return "5";
766 if (speaker == kSpeakerACN6)
767 return "6";
768 if (speaker == kSpeakerACN7)
769 return "7";
770 if (speaker == kSpeakerACN8)
771 return "8";
772 if (speaker == kSpeakerACN9)
773 return "9";
774 if (speaker == kSpeakerACN10)
775 return "10";
776 if (speaker == kSpeakerACN11)
777 return "11";
778 if (speaker == kSpeakerACN12)
779 return "12";
780 if (speaker == kSpeakerACN13)
781 return "13";
782 if (speaker == kSpeakerACN14)
783 return "14";
784 if (speaker == kSpeakerACN15)
785 return "15";
786
787 if (speaker == kSpeakerTsl)
788 return "Tsl";
789 if (speaker == kSpeakerTsr)
790 return "Tsr";
791 if (speaker == kSpeakerLcs)
792 return "Lcs";
793 if (speaker == kSpeakerRcs)
794 return "Rcs";
795
796 if (speaker == kSpeakerBfl)
797 return "Bfl";
798 if (speaker == kSpeakerBfc)
799 return "Bfc";
800 if (speaker == kSpeakerBfr)
801 return "Bfr";
802 if (speaker == kSpeakerPl)
803 return "Pl";
804 if (speaker == kSpeakerPr)
805 return "Pr";
806 if (speaker == kSpeakerBsl)
807 return "Bsl";
808 if (speaker == kSpeakerBsr)
809 return "Bsr";
810 if (speaker == kSpeakerBrl)
811 return "Brl";
812 if (speaker == kSpeakerBrc)
813 return "Brc";
814 if (speaker == kSpeakerBrr)
815 return "Brr";
816
817 return "";
818 }
819
820 /*@}*/
821
822 //------------------------------------------------------------------------
823 } // namespace SpeakerArr
824 } // namespace Vst
825 } // namespace Steinberg
826