1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     snd_Types.h
4 
5   Copyright (C)2009-2012 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 46347 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_SND_TYPES_H_
17 #define NN_SND_TYPES_H_
18 
19 #include <nn/snd/CTR/Common/snd_Bcwav.h>
20 
21 /* Please see man pages for details
22 
23 */
24 
25 #ifdef __cplusplus
26 #include <nn/os.h>
27 namespace nn { namespace snd { namespace CTR {
28 
29 /* Please see man pages for details
30 
31  */
32 typedef struct
33 {
34     s16 n0;                             //
35     s16 d1;                             //
36 } MonoFilterCoefficients;
37 
38 /* Please see man pages for details
39 
40  */
41 typedef struct
42 {
43     s16 n0;                             //
44     s16 n1;                             //
45     s16 n2;                             //
46     s16 d1;                             //
47     s16 d2;                             //
48 } BiquadFilterCoefficients;
49 
50 /* Please see man pages for details
51 
52 */
53 typedef enum
54 {
55     CHANNEL_INDEX_FRONT_LEFT  = 0,  //
56     CHANNEL_INDEX_FRONT_RIGHT = 1,  //
57     CHANNEL_INDEX_REAR_LEFT   = 2,  //
58     CHANNEL_INDEX_REAR_RIGHT  = 3,  //
59     CHANNEL_INDEX_NUM         = 4   //
60 }
61 ChannelIndex;
62 
63 /* Please see man pages for details
64 
65  */
66 typedef enum
67 {
68     OUTPUT_MODE_MONO          = 0,  //
69     OUTPUT_MODE_STEREO        = 1,  //
70     OUTPUT_MODE_3DSURROUND    = 2   //
71 } OutputMode;
72 
73 /* Please see man pages for details
74 
75 */
76 typedef enum
77 {
78     CLIPPING_MODE_NORMAL      = 0,  //
79     CLIPPING_MODE_SOFT        = 1   //
80 } ClippingMode;
81 
82 /* Please see man pages for details
83 
84  */
85 typedef enum
86 {
87     SURROUND_SPEAKER_POSITION_SQUARE = 0,  //
88     SURROUND_SPEAKER_POSITION_WIDE   = 1,  //
89     SURROUND_SPEAKER_POSITION_NUM
90 } SurroundSpeakerPosition;
91 
92 /* Please see man pages for details
93 
94 */
95 enum InterpolationType
96 {
97     INTERPOLATION_TYPE_POLYPHASE, //
98     INTERPOLATION_TYPE_LINEAR,    //
99     INTERPOLATION_TYPE_NONE       //
100 };
101 
102 /* Please see man pages for details
103 
104 */
105 typedef enum
106 {
107     FILTER_TYPE_NONE     = 0,       //
108     FILTER_TYPE_MONOPOLE = 1,       //
109     FILTER_TYPE_BIQUAD   = 2,       //
110     FILTER_TYPE_BOTH     = 3        //
111 }
112 FilterType;
113 
114 /* Please see man pages for details
115 
116 */
117 typedef enum
118 {
119     AUX_BUS_NULL = -1,
120 
121     AUX_BUS_A    =  0, //
122     AUX_BUS_B    =  1, //
123     AUX_BUS_NUM  =  2  //
124 }
125 AuxBusId;
126 
127 /* Please see man pages for details
128 
129 */
130 struct MixParam
131 {
132     f32 mainBus[CHANNEL_INDEX_NUM];  //
133     f32 auxBusA[CHANNEL_INDEX_NUM];  //
134     f32 auxBusB[CHANNEL_INDEX_NUM];  //
135 
136     /* Please see man pages for details
137 
138      */
MixParamMixParam139     MixParam()
140     {
141         for (int i = 0; i < CHANNEL_INDEX_NUM; i++)
142         {
143             mainBus[i] = auxBusA[i] = auxBusB[i] = 0.0f;
144         }
145     }
146 }; // MixParam
147 
148 /* Please see man pages for details
149 
150 */
151 struct WaveBuffer
152 {
153     /* Please see man pages for details
154 
155     */
156     enum Status
157     {
158         STATUS_FREE, //
159         STATUS_WAIT, //
160         STATUS_PLAY, //
161         STATUS_DONE, //
162         STATUS_TO_BE_DELETED  //
163     };
164 
165     // For the user
166     const void * bufferAddress;   //
167     s32 sampleLength;             //
168 
169     const AdpcmContext * pAdpcmContext; //
170 
171     uptr userParam;               //
172 
173     bool loopFlag;                //
174     util::SizedEnum1<Status> status;                //
175     u16 bufferId;                 //
176 
177     struct WaveBuffer * next;     //
178 }; // WaveBuffer
179 
180 /* Please see man pages for details
181 
182 */
183 enum SampleFormat
184 {
185     SAMPLE_FORMAT_PCM8  = Bcwav::ENCODING_PCM8,      //
186     SAMPLE_FORMAT_PCM16 = Bcwav::ENCODING_PCM16,     //
187     SAMPLE_FORMAT_ADPCM = Bcwav::ENCODING_DSP_ADPCM  //
188 };
189 
190 static const s32 VOICE_PRIORITY_NODROP = 0x7fff; //
191 
192 /* Please see man pages for details
193 
194 */
195 typedef struct
196 {
197     s32* frontLeft;  //
198     s32* frontRight; //
199     s32* rearLeft;   //
200     s32* rearRight;  //
201 }
202 AuxBusData;
203 
204 /* Please see man pages for details
205 
206 
207 
208 
209 
210 */
211 typedef void(*AuxCallback)( AuxBusData* data, s32 sampleLength, uptr userData );
212 
213 /* Please see man pages for details
214 
215  */
216 struct ThreadParameter
217 {
218     uptr   stackBuffer;                 //
219     uptr   stackSize;                   //
220     size_t priority;                    //
221 };
222 
223 /* Please see man pages for details
224 
225  */
226 enum SyncMode
227 {
228     SYNC_MODE_STRICT = 0,
229     SYNC_MODE_LOOSE = 1,
230     SYNC_MODE_NUM = 2
231 };
232 
233 }}} // namespace nn::snd::CTR
234 
235 #endif // __cplusplus
236 
237 // Below is the C declaration
238 
239 typedef struct
240 {
241     s16 n0;                             //
242     s16 d1;                             //
243 } nnsndMonoFilterCoefficients;
244 
245 /* Please see man pages for details
246 
247  */
248 typedef struct
249 {
250     s16 n0;                             //
251     s16 n1;                             //
252     s16 n2;                             //
253     s16 d1;                             //
254     s16 d2;                             //
255 } nnsndBiquadFilterCoefficients;
256 
257 typedef enum
258 {
259     NN_SND_FILTER_TYPE_NONE     = 0,    //
260     NN_SND_FILTER_TYPE_MONOPOLE = 1,    //
261     NN_SND_FILTER_TYPE_BIQUAD   = 2,    //
262     NN_SND_FILTER_TYPE_BOTH     = 3     //
263 } nnsndFilterType;
264 
265 typedef enum
266 {
267     NN_SND_AUX_BUS_A   = 0, //
268     NN_SND_AUX_BUS_B   = 1, //
269     NN_SND_AUX_BUS_NUM = 2  //
270 } nnsndAuxBusId;
271 
272 typedef enum nnsndSampleFormat
273 {
274     NN_SND_SAMPLE_FORMAT_PCM8  = NN_SND_BCWAV_ENCODING_PCM8,      //
275     NN_SND_SAMPLE_FORMAT_PCM16 = NN_SND_BCWAV_ENCODING_PCM16,     //
276     NN_SND_SAMPLE_FORMAT_ADPCM = NN_SND_BCWAV_ENCODING_DSP_ADPCM  //
277 } nnsndSampleFormat;
278 
279 typedef enum nnsndChannelIndex
280 {
281     NN_SND_CHANNEL_INDEX_FRONT_LEFT  = 0,  //
282     NN_SND_CHANNEL_INDEX_FRONT_RIGHT = 1,  //
283     NN_SND_CHANNEL_INDEX_REAR_LEFT   = 2,  //
284     NN_SND_CHANNEL_INDEX_REAR_RIGHT  = 3,  //
285     NN_SND_CHANNEL_INDEX_NUM         = 4   //
286 } nnsndChannelIndex;
287 
288 typedef enum nnsndOutputMode
289 {
290     NN_SND_OUTPUT_MODE_MONO          = 0,  //
291     NN_SND_OUTPUT_MODE_STEREO        = 1,  //
292     NN_SND_OUTPUT_MODE_3DSURROUND    = 2   //
293 } nnsndOutputMode;
294 
295 typedef enum
296 {
297     NN_SND_CLIPPING_MODE_NORMAL      = 0,  //
298     NN_SND_CLIPPING_MODE_SOFT        = 1   //
299 } nnsndClippingMode;
300 
301 typedef enum nnsndSurroundSpeakerPosition
302 {
303     NN_SND_SURROUND_SPEAKER_POSITION_SQUARE = 0,  //
304     NN_SND_SURROUND_SPEAKER_POSITION_WIDE   = 1   //
305 } nnsndSurroundSpeakerPosition;
306 
307 typedef enum nnsndSyncMode
308 {
309     NN_SND_SYNC_MODE_STRICT = 0,
310     NN_SND_SYNC_MODE_LOOSE = 1,
311     NN_SND_SYNC_MODE_NUM = 2
312 } nnsndSyncMode;
313 
314 #endif //NN_SND_TYPES_H_
315