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