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: 35006 $
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     };
163 
164     // For user
165     const void * bufferAddress;   //
166     s32 sampleLength;             //
167 
168     const AdpcmContext * pAdpcmContext; //
169 
170     uptr userParam;               //
171 
172     bool loopFlag;                //
173     util::SizedEnum1<Status> status;                //
174     u16 bufferId;                 //
175 
176     struct WaveBuffer * next;     //
177 }; // WaveBuffer
178 
179 /* Please see man pages for details
180 
181 */
182 enum SampleFormat
183 {
184     SAMPLE_FORMAT_PCM8  = Bcwav::ENCODING_PCM8,      //
185     SAMPLE_FORMAT_PCM16 = Bcwav::ENCODING_PCM16,     //
186     SAMPLE_FORMAT_ADPCM = Bcwav::ENCODING_DSP_ADPCM  //
187 };
188 
189 static const s32 VOICE_PRIORITY_NODROP = 0x7fff; //
190 
191 /* Please see man pages for details
192 
193 */
194 typedef struct
195 {
196     s32* frontLeft;  //
197     s32* frontRight; //
198     s32* rearLeft;   //
199     s32* rearRight;  //
200 }
201 AuxBusData;
202 
203 /* Please see man pages for details
204 
205 
206 
207 
208 
209 */
210 typedef void(*AuxCallback)( AuxBusData* data, s32 sampleLength, uptr userData );
211 
212 /* Please see man pages for details
213 
214  */
215 struct ThreadParameter
216 {
217     uptr   stackBuffer;                 //
218     uptr   stackSize;                   //
219     size_t priority;                    //
220 };
221 
222 }}} // namespace nn::snd::CTR
223 
224 #endif // __cplusplus
225 
226 // C declarations follow
227 
228 typedef struct
229 {
230     s16 n0;                             //
231     s16 d1;                             //
232 } nnsndMonoFilterCoefficients;
233 
234 /* Please see man pages for details
235 
236  */
237 typedef struct
238 {
239     s16 n0;                             //
240     s16 n1;                             //
241     s16 n2;                             //
242     s16 d1;                             //
243     s16 d2;                             //
244 } nnsndBiquadFilterCoefficients;
245 
246 typedef enum
247 {
248     NN_SND_FILTER_TYPE_NONE     = 0,    //
249     NN_SND_FILTER_TYPE_MONOPOLE = 1,    //
250     NN_SND_FILTER_TYPE_BIQUAD   = 2,    //
251     NN_SND_FILTER_TYPE_BOTH     = 3     //
252 } nnsndFilterType;
253 
254 typedef enum
255 {
256     NN_SND_AUX_BUS_A   = 0, //
257     NN_SND_AUX_BUS_B   = 1, //
258     NN_SND_AUX_BUS_NUM = 2  //
259 } nnsndAuxBusId;
260 
261 typedef enum nnsndSampleFormat
262 {
263     NN_SND_SAMPLE_FORMAT_PCM8  = NN_SND_BCWAV_ENCODING_PCM8,      //
264     NN_SND_SAMPLE_FORMAT_PCM16 = NN_SND_BCWAV_ENCODING_PCM16,     //
265     NN_SND_SAMPLE_FORMAT_ADPCM = NN_SND_BCWAV_ENCODING_DSP_ADPCM  //
266 } nnsndSampleFormat;
267 
268 typedef enum nnsndChannelIndex
269 {
270     NN_SND_CHANNEL_INDEX_FRONT_LEFT  = 0,  //
271     NN_SND_CHANNEL_INDEX_FRONT_RIGHT = 1,  //
272     NN_SND_CHANNEL_INDEX_REAR_LEFT   = 2,  //
273     NN_SND_CHANNEL_INDEX_REAR_RIGHT  = 3,  //
274     NN_SND_CHANNEL_INDEX_NUM         = 4   //
275 } nnsndChannelIndex;
276 
277 typedef enum nnsndOutputMode
278 {
279     NN_SND_OUTPUT_MODE_MONO          = 0,  //
280     NN_SND_OUTPUT_MODE_STEREO        = 1,  //
281     NN_SND_OUTPUT_MODE_3DSURROUND    = 2   //
282 } nnsndOutputMode;
283 
284 typedef enum
285 {
286     NN_SND_CLIPPING_MODE_NORMAL      = 0,  //
287     NN_SND_CLIPPING_MODE_SOFT        = 1   //
288 } nnsndClippingMode;
289 
290 typedef enum nnsndSurroundSpeakerPosition
291 {
292     NN_SND_SURROUND_SPEAKER_POSITION_SQUARE = 0,  //
293     NN_SND_SURROUND_SPEAKER_POSITION_WIDE   = 1   //
294 } nnsndSurroundSpeakerPosition;
295 
296 #endif //NN_SND_TYPES_H_
297