wessarc.h (12029B)
1 #ifndef _WESSARC_H 2 #define _WESSARC_H 3 4 #include <ultra64.h> 5 #include <libaudio.h> 6 7 //#define NOUSEWESSCODE 8 9 enum Wess_Error { 10 11 wess_NO_ERROR, 12 wess_FOPEN, 13 wess_FREAD, 14 wess_FSEEK 15 }; 16 17 //LCD FILE Structs 18 typedef struct 19 { 20 unsigned char patchmap_cnt; //r* 21 unsigned char pad1; //r*1 22 unsigned short patchmap_idx; //r*2 23 }patches_header; 24 25 typedef struct 26 { 27 unsigned char priority; //*0 28 unsigned char volume; //*1----*2 29 unsigned char pan; //*2----*3 30 unsigned char reverb; //*3----*1 31 unsigned char root_key; //*4----*4 32 unsigned char fine_adj; //*5----*5 33 unsigned char note_min; //*6----*6 34 unsigned char note_max; //*7----*7 35 unsigned char pitchstep_min; //*8----*8 36 unsigned char pitchstep_max; //*9----*9 37 unsigned short sample_id; //*10 swap 38 unsigned short attack_time; //*12 swap 39 unsigned short decay_time; //*14 swap 40 unsigned short release_time; //*16 swap 41 unsigned char attack_level; //*18 42 unsigned char decay_level; //*19 43 }patchmaps_header; 44 45 typedef struct { 46 s32 order; 47 s32 npredictors; 48 s16 book[128]; /* Actually variable size. Must be 8-byte aligned */ 49 } ALADPCMBook2; 50 51 typedef struct { 52 u32 start; 53 u32 end; 54 u32 count; 55 ADPCM_STATE state; 56 u32 pad; 57 } ALADPCMloop2; 58 59 typedef struct { 60 u32 start; 61 u32 end; 62 u32 count; 63 u32 pad; 64 } ALRawLoop2; 65 66 typedef struct { 67 ALADPCMloop2 *loop; 68 ALADPCMBook2 *book; 69 } ALADPCMWaveInfo2; 70 71 typedef struct 72 { 73 u8 *base; /* ptr to start of wave data */ //r*0 74 s32 len; /* length of data in bytes */ //r*4 75 u8 type; /* compression type */ //r*8 76 u8 flags; /* offset/address flags */ //r*9 77 void *loop; //r*12 78 void *book; //r*14 79 } ALWaveTable2; 80 81 typedef struct 82 { 83 //u8 *base; /* ptr to start of wave data */ //r*0 84 //s32 len; /* length of data in bytes */ //r*4 85 //u8 type; /* compression type */ //r*8 86 //u8 flags; /* offset/address flags */ //r*9 87 //union { 88 // ALADPCMWaveInfo2 adpcmWave;//12 89 // ALRAWWaveInfo rawWave;//12 90 //} waveInfo;//12 91 92 ALWaveTable2 wave; 93 s32 pitch;//20 94 } patchinfo_header; //ALWaveTable custom 95 96 typedef struct 97 { 98 unsigned short nsfx1; //0 sfx count (124) 99 unsigned short rawcount; //2 100 unsigned short adpcmcount; //4 loop data count (23) 101 unsigned short nsfx2; //6 sfx count again?? (124) 102 } loopinfo_header; 103 104 //******************************* 105 106 typedef struct 107 { 108 int module_id_text; //* 109 unsigned int module_version; //*4 110 unsigned int pad1; //*8 111 unsigned short pad2; //*12 112 unsigned short sequences; //*14 113 unsigned char decomp_type; //*16 114 unsigned char pad3; //*17 115 unsigned char pad4; //*18 116 unsigned char pad5; //*19 117 unsigned int compress_size; //*20 118 unsigned int data_size; //*24 119 unsigned int pad6; //*28 120 }module_header;//32 121 122 typedef struct 123 { 124 unsigned char voices_type; //* 125 unsigned char reverb; //*1 126 unsigned short initpatchnum; //*2 127 unsigned short initpitch_cntrl; //*4 128 unsigned char initvolume_cntrl; //*6 129 unsigned char initpan_cntrl; //*7 130 unsigned char substack_count; //*8 131 unsigned char mutebits; //*9 132 unsigned short initppq; //*10 133 unsigned short initqpm; //*12 134 unsigned short labellist_count; //*14 135 unsigned int data_size; //*16 136 }track_header;//size 20 bytes 137 138 typedef struct 139 { 140 track_header *trk_hdr;//* 141 unsigned long *plabellist;//*4 142 char *ptrk_data;//*8 143 }track_data; 144 145 typedef struct 146 { 147 unsigned short tracks; //* 148 unsigned short decomp_type; //*2 149 unsigned int trkinfolength; //*4 150 unsigned int fileposition; //*8 151 }seq_header; 152 153 typedef struct 154 { 155 seq_header seq_hdr; //* 156 track_data *ptrk_info; //*12 157 }sequence_data; 158 159 typedef struct 160 { 161 module_header mod_hdr; //* 162 sequence_data *pseq_info; //*32 163 }module_data; 164 165 typedef void (*callfunc_t)(char, short); 166 typedef struct 167 { 168 unsigned char active; //* 169 unsigned char type; //*1 170 unsigned short curval; //*2 171 callfunc_t callfunc; //*4 172 }callback_status; 173 174 typedef struct 175 { 176 unsigned int load_flags; //* 177 unsigned short patches; //*4 178 unsigned short patch_size; //*6 179 unsigned short patchmaps; //*8 180 unsigned short patchmap_size; //*10 181 unsigned short patchinfo; //*12 182 unsigned short patchinfo_size; //*14 183 unsigned short drummaps; //*16 184 unsigned short drummap_size; //*18 185 unsigned int extra_data_size; //*20 186 }patch_group_header; 187 188 typedef struct 189 { 190 int hardware_ID;//76 191 int flags_load;//80 192 }hardware_table_list; 193 194 typedef struct 195 { 196 patch_group_header pat_grp_hdr; //* 197 char *ppat_data; //*24 198 }patch_group_data;//size 84 bytes 199 200 #define DriverInit 0 201 #define DriverExit 1 202 #define DriverEntry1 2 203 #define DriverEntry2 3 204 #define DriverEntry3 4 205 #define TrkOff 5 206 #define TrkMute 6 207 #define PatchChg 7 208 #define PatchMod 8 209 #define PitchMod 9 210 #define ZeroMod 10 211 #define ModuMod 11 212 #define VolumeMod 12 213 #define PanMod 13 214 #define PedalMod 14 215 #define ReverbMod 15 216 #define ChorusMod 16 217 #define NoteOn 17 218 #define NoteOff 18 219 220 // Engine Only 221 #define StatusMark 19 222 #define GateJump 20 223 #define IterJump 21 224 #define ResetGates 22 225 #define ResetIters 23 226 #define WriteIterBox 24 227 #define SeqTempo 25 228 #define SeqGosub 26 229 #define SeqJump 27 230 #define SeqRet 28 231 #define SeqEnd 29 232 #define TrkTempo 30 233 #define TrkGosub 31 234 #define TrkJump 32 235 #define TrkRet 33 236 #define TrkEnd 34 237 #define NullEvent 35 238 239 #define SEQ_STATE_STOPPED 0 240 #define SEQ_STATE_PLAYING 1 241 242 //(val << 0 < 0) 128 243 //(val << 1 < 0) 64 244 //(val << 2 < 0) 32 245 //(val << 3 < 0) 16 246 //(val << 4 < 0) 8 247 //(val << 5 < 0) 4 248 //(val << 6 < 0) 2 249 //(val << 7 < 0) 1 250 251 //New track 252 #define TRK_OFF 1 253 #define TRK_SKIP 2 254 #define TRK_LOOPED 4 255 #define TRK_TIMED 8 256 #define TRK_STOPPED 16 257 #define TRK_HANDLED 32 258 #define TRK_MUTE 64 259 #define TRK_ACTIVE 128 260 261 //New seq 262 #define SEQ_STOP 8 263 #define SEQ_RESTART 16 264 #define SEQ_PAUSE 32 265 #define SEQ_HANDLE 64 266 #define SEQ_ACTIVE 128 267 268 //New voice 269 #define VOICE_DECAY 32 270 #define VOICE_RELEASE 64 271 #define VOICE_ACTIVE 128 272 273 typedef struct 274 { 275 unsigned char flags; //* 276 unsigned char playmode; //*1 277 unsigned short seq_num; //*2 278 unsigned char tracks_active; //*4 279 unsigned char tracks_playing; //*5 280 unsigned char volume; //*6 281 unsigned char pan; //*7 282 unsigned int seq_type; //*8 283 char *ptrk_indxs; //*12--- 284 char *pgates; //*16--- 285 char *piters; //*20 286 }sequence_status; 287 288 typedef struct 289 { 290 unsigned char flags; //* 291 unsigned char refindx; //*1 292 unsigned char seq_owner; //*2 293 unsigned char sndclass; //*3 294 unsigned short patchnum; //*4 295 short pitch_cntrl; //*6 296 unsigned int deltatime; //*8 297 unsigned char reverb; //*12 298 unsigned char volume_cntrl; //*13 299 unsigned char pan_cntrl; //*14 300 unsigned char mutemask; //*15 301 unsigned char patchtype; //*16 302 unsigned char voices_active; //*17 303 unsigned char voices_max; //*18 304 unsigned char priority; //*19 305 unsigned short ppq; //*20 306 unsigned short qpm; //*22 307 unsigned short labellist_count;//*24 308 unsigned short labellist_max; //*26 309 unsigned long ppi; //*28 310 unsigned long starppi; //*32 311 unsigned int accppi; //*36 312 unsigned int totppi; //*40 313 unsigned int endppi; //*44 314 unsigned char *pstart; //*48 315 unsigned char *ppos; //*52 316 unsigned long *plabellist; //*56 317 unsigned long *psubstack; //*60 318 unsigned char *psp; //*64 319 unsigned long *pstackend; //*68 320 unsigned int data_size; //*72 321 unsigned int data_space; //*76 322 }track_status; 323 324 typedef struct 325 { 326 unsigned char flags; //* 327 unsigned char patchtype; //*1 328 unsigned char refindx; //*2 329 unsigned char track; //*3 330 unsigned char priority; //*4 331 unsigned char keynum; //*5 332 unsigned char velnum; //*6 333 unsigned char sndtype; //*7 334 patchmaps_header *patchmaps; //*8 335 patchinfo_header *patchinfo; //*12 /* offset to wavetable struct */ 336 unsigned long pabstime; //*16 337 }voice_status;//size 24 bytes 338 339 typedef struct 340 { 341 unsigned long *pabstime; //*--- 342 unsigned char seqs_active; //*4 343 unsigned char trks_active; //*5 344 unsigned char voices_active; //*6 345 unsigned char voices_total; //*7 346 unsigned char patch_types_loaded; //*8 347 unsigned char callbacks_active; //*9 348 unsigned char max_trks_perseq; //*10 349 unsigned char max_substack_pertrk; //*11---- 350 module_data *pmod_info; //*12--- 351 callback_status *pcalltable; //*16--- 352 patch_group_data *ppat_info; //*20----- 353 sequence_status *pseqstattbl; //*24----- 354 track_status *ptrkstattbl; //*28----- 355 voice_status *pvoicestattbl; //*32----- 356 }master_status_structure; 357 358 typedef master_status_structure pmasterstat; 359 360 #define WESS_SSSP_TEXT 0x534E3634//'SN64' 361 #define WESS_CORE_VERSION 0x02 362 363 #define SNDFX_CLASS 0 364 #define MUSIC_CLASS 1 365 #define DRUMS_CLASS 2 366 #define SFXDRUMS_CLASS 3 367 368 #define TAG_SOUND_EFFECTS 1 369 #define TAG_MUSIC 2 370 #define TAG_DRUMS 4 371 372 #define LOAD_PATCHES 1 373 #define LOAD_PATCHMAPS 2 374 #define LOAD_PATCHINFO 4 375 #define LOAD_DRUMMAPS 8 376 #define LOAD_EXTRADATA 16 377 378 ///---------------------------------- 379 extern void (**CmdFuncArr[10])(track_status *); 380 381 extern int wess_driver_num_dma_buffers; 382 extern int wess_driver_num_dma_messages; 383 extern int wess_driver_dma_buffer_length; 384 extern int wess_driver_extra_samples; 385 extern int wess_driver_frame_lag; 386 extern int wess_driver_voices; 387 extern int wess_driver_updates; 388 extern int wess_driver_sequences; 389 extern int wess_driver_tracks; 390 extern int wess_driver_gates; 391 extern int wess_driver_iters; 392 extern int wess_driver_callbacks; 393 extern int wess_driver_max_trks_per_seq; 394 extern int wess_driver_max_subs_per_trk; 395 extern int enabledecay; 396 397 extern int SeqOn; 398 extern unsigned long millicount; 399 extern int WessTimerActive; 400 401 402 #define SEEK_SET 0 403 #define SEEK_CUR 1 404 #define SEEK_END 2 405 406 typedef struct 407 { 408 char *start; //L800B4200 409 char *src; //L800B4204 410 } N64_File_IO_Struct; 411 412 typedef N64_File_IO_Struct Wess_File_IO_Struct; 413 typedef N64_File_IO_Struct Wess_Data_IO_Struct; 414 415 extern Wess_File_IO_Struct module_fileref;//800B4200 416 extern Wess_Data_IO_Struct data_fileref;//L800B4208 417 418 extern void wess_engine_off(void);//L80035340() 419 extern void wess_engine_on(void);//L8003534C() 420 421 extern void wess_low_level_init(void);//L8003531C() 422 extern void wess_low_level_exit(void);//L80035324() 423 424 extern short GetIntsPerSec(void); 425 extern unsigned long CalcPartsPerInt(short ips,short ppq,short qpm); 426 427 extern void init_WessTimer(void); 428 extern void exit_WessTimer(void); 429 430 extern void wess_low_level_exit(void); 431 extern char *wess_malloc(char *mem); 432 extern void wess_free(char *mem); 433 434 extern Wess_File_IO_Struct *module_open(char *filename); 435 extern int module_read(void *destptr, int readbytes, Wess_File_IO_Struct *fileptr); 436 extern int module_seek(Wess_File_IO_Struct *fileptr, int seekpos, int seekmode); 437 extern unsigned long module_tell(Wess_File_IO_Struct *fileptr); 438 extern void module_close(Wess_File_IO_Struct *fileptr); 439 440 extern int wess_decomp(unsigned char decomp_type, char *fileref, unsigned long file_offset, char *ramdest, unsigned long uncompressed_size); 441 extern void wess_enable(void); 442 extern void wess_disable(void); 443 444 445 extern long WessInterruptHandler(void); 446 447 typedef void(*WessAction)(track_status *ptmp, int value); 448 449 #define QUEUE_SEQ_STOPALL 0 450 #define QUEUE_SEQ_STOP 1 451 #define QUEUE_MASTER_SFX_VOL_SET 2 452 #define QUEUE_MASTER_MUS_VOL_SET 3 453 #define QUEUE_HANDLE_PARM_MOD 4 454 #define QUEUE_HANDLE_NOTEON 5 455 #define QUEUE_SEQ_PAUSE 6 456 #define QUEUE_SEQ_RESTART 7 457 #define QUEUE_SEQ_PAUSEALL 8 458 #define QUEUE_SEQ_RESTARTALL 9 459 #define QUEUE_SEQ_STOPTYPE 10 460 #define QUEUE_SEQ_UPDATE_TYPE_SPECIAL 11 461 #define QUEUE_SEQ_STOPALL_AND_VOICERAMP 12 462 #define QUEUE_SEQ_STOP_AND_VOICERAMP 13 463 #define QUEUE_SEQ_STOPTYPE_AND_VOICERAMP 14 464 465 #endif // _WESSARC_H