1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     snd_Types.h
4 
5   Copyright (C)2009 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: 38509 $
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 }}} // namespace nn::snd::CTR
224 
225 #endif // __cplusplus
226 
227 // Below is the C declaration
228 
229 typedef struct
230 {
231     s16 n0;                             //
232     s16 d1;                             //
233 } nnsndMonoFilterCoefficients;
234 
235 /* Please see man pages for details
236 
237  */
238 typedef struct
239 {
240     s16 n0;                             //
241     s16 n1;                             //
242     s16 n2;                             //
243     s16 d1;                             //
244     s16 d2;                             //
245 } nnsndBiquadFilterCoefficients;
246 
247 typedef enum
248 {
249     NN_SND_FILTER_TYPE_NONE     = 0,    //
250     NN_SND_FILTER_TYPE_MONOPOLE = 1,    //
251     NN_SND_FILTER_TYPE_BIQUAD   = 2,    //
252     NN_SND_FILTER_TYPE_BOTH     = 3     //
253 } nnsndFilterType;
254 
255 typedef enum
256 {
257     NN_SND_AUX_BUS_A   = 0, //
258     NN_SND_AUX_BUS_B   = 1, //
259     NN_SND_AUX_BUS_NUM = 2  //
260 } nnsndAuxBusId;
261 
262 typedef enum nnsndSampleFormat
263 {
264     NN_SND_SAMPLE_FORMAT_PCM8  = NN_SND_BCWAV_ENCODING_PCM8,      //
265     NN_SND_SAMPLE_FORMAT_PCM16 = NN_SND_BCWAV_ENCODING_PCM16,     //
266     NN_SND_SAMPLE_FORMAT_ADPCM = NN_SND_BCWAV_ENCODING_DSP_ADPCM  //
267 } nnsndSampleFormat;
268 
269 typedef enum nnsndChannelIndex
270 {
271     NN_SND_CHANNEL_INDEX_FRONT_LEFT  = 0,  //
272     NN_SND_CHANNEL_INDEX_FRONT_RIGHT = 1,  //
273     NN_SND_CHANNEL_INDEX_REAR_LEFT   = 2,  //
274     NN_SND_CHANNEL_INDEX_REAR_RIGHT  = 3,  //
275     NN_SND_CHANNEL_INDEX_NUM         = 4   //
276 } nnsndChannelIndex;
277 
278 typedef enum nnsndOutputMode
279 {
280     NN_SND_OUTPUT_MODE_MONO          = 0,  //
281     NN_SND_OUTPUT_MODE_STEREO        = 1,  //
282     NN_SND_OUTPUT_MODE_3DSURROUND    = 2   //
283 } nnsndOutputMode;
284 
285 typedef enum
286 {
287     NN_SND_CLIPPING_MODE_NORMAL      = 0,  //
288     NN_SND_CLIPPING_MODE_SOFT        = 1   //
289 } nnsndClippingMode;
290 
291 typedef enum nnsndSurroundSpeakerPosition
292 {
293     NN_SND_SURROUND_SPEAKER_POSITION_SQUARE = 0,  //
294     NN_SND_SURROUND_SPEAKER_POSITION_WIDE   = 1   //
295 } nnsndSurroundSpeakerPosition;
296 
297 #endif //NN_SND_TYPES_H_
298