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