/********************************************************* libmus.h : Nintendo 64 Music Tools Programmers Library (c) Copyright 1997/1998, Software Creations (Holdings) Ltd. Version 3.11 Music library header file. **********************************************************/ #ifndef _LIBMUS_H_ #define _LIBMUS_H_ #include <ultra64.h> #ifdef _LANGUAGE_C_PLUS_PLUS extern "C" { #endif /* --------- MUSIC PLAYER API TYPEDEFS --------- */ /* configuration */ typedef struct { unsigned long control_flag; int channels; void *sched; int thread_priority; unsigned char *heap; int heap_length; unsigned char *ptr; unsigned char *wbk; void *default_fxbank; int fifo_length; int syn_updates; int syn_output_rate; int syn_rsp_cmds; int syn_retraceCount; int syn_num_dma_bufs; int syn_dma_buf_size; // Special Addition OSPiHandle *diskrom_handle; } musConfig; /* enabled/disable flag */ typedef enum { MUSBOOL_OFF, MUSBOOL_ON } musBool; /* task descriptor */ typedef struct { u64 *data; /* address of Acmd list */ int data_size; /* size of Acmd list */ u64 *ucode; /* address of microcode code */ u64 *ucode_data; /* address of microcode data */ } musTask; /* handle type */ typedef unsigned long musHandle; /* marker callback function */ typedef void (*LIBMUScb_marker) (musHandle, int); /* scheduler support callback functions */ typedef void (*LIBMUScb_install) (void); typedef void (*LIBMUScb_waitframe) (void); typedef void (*LIBMUScb_dotask) (musTask *); /* scheduler support callback list */ typedef struct { LIBMUScb_install install; /* called when thread starts */ LIBMUScb_waitframe waitframe; /* called to wait for vsync message */ LIBMUScb_dotask dotask; /* called to process RSP task */ } musSched; /* --------- MUSIC PLAYER API MACROS --------- */ /* control flags */ #define MUSCONTROL_RAM (1<<0) /* channel types flags */ #define MUSFLAG_EFFECTS 1 #define MUSFLAG_SONGS 2 /* --------- MUSIC PLAYER API FUNCTION PROTOTYPES --------- */ /* initialise */ extern int MusInitialize (musConfig *config); /* audio configuration */ extern int MusSetFxType (int fxtype); extern int MusSetSongFxChange (musBool onoff); /* set master volume levels */ extern void MusSetMasterVolume (unsigned long flags, int volume); /* start songs and sound effects */ extern musHandle MusStartSong (void *addr); extern musHandle MusStartSongFromMarker (void *addr, int marker); extern musHandle MusStartEffect (int number); extern musHandle MusStartEffect2 (int number, int volume, int pan , int restartflag, int priority); /* stop and query sound types */ extern void MusStop (unsigned long flags, int speed); extern int MusAsk (unsigned long flags); /* handle based processing */ extern int MusHandleAsk (musHandle handle); extern int MusHandleStop (musHandle handle, int speed); extern int MusHandleSetVolume (musHandle handle, int volume); extern int MusHandleSetPan (musHandle handle, int pan); extern int MusHandleSetFreqOffset (musHandle handle, float offset); extern int MusHandleSetTempo (musHandle handle, int tempo); extern int MusHandleSetReverb (musHandle handle, int reverb); extern int MusHandlePause (musHandle handle); extern int MusHandleUnPause (musHandle handle); extern void *MusHandleGetPtrBank (musHandle handle); /* sample bank support */ extern void MusPtrBankInitialize (void *pbank, void *wbank); extern void *MusPtrBankSetSingle (void *ipbank); extern void MusPtrBankSetCurrent (void *ipbank); extern void *MusPtrBankGetCurrent (void); /* sound effect bank support */ extern void MusFxBankInitialize (void *fxbank); extern void MusFxBankSetSingle (void *ifxbank); extern void MusFxBankSetCurrent (void *ifxbank); extern void *MusFxBankGetCurrent (void); extern int MusFxBankNumberOfEffects (void *ifxbank); extern void MusFxBankSetPtrBank (void *ifxbank, void *ipbank); extern void *MusFxBankGetPtrBank (void *ifxbank); extern void MusFxBankSetSingle (void *ifxbank); /* scheduler support */ extern void MusSetScheduler (musSched *sched_list); /* marker callback support */ extern void MusSetMarkerCallback (void *callback); /* wave list lookup in song header */ extern int MusHandleWaveCount (musHandle handle); extern unsigned short *MusHandleWaveAddress(musHandle handle); /* macros to support previous sample bank functions - use is not recommended! */ #define MusBankInitialize(pbank,wbank) \ MusPtrBankInitialize(pbank,wbank) #define MusBankStartSong(ipbank, addr) \ MusStartSong((addr)==(void *)MusPtrBankSetSingle(ipbank) ? (addr):(addr)) #define MusBankStartEffect(ipbank, number) \ MusStartEffect((number)==(int)MusPtrBankSetSingle(ipbank) ? (number):(number)) #define MusBankStartEffect2(ipbank, number, volume, pan, restartflag, priority) \ MusStartEffect2((number)==(int)MusPtrBankSetSingle(ipbank) ? (number):(number), \ volume, pan, restartflag, priority) /* --- DEVELOPEMENT API FUNCTION PROTOTYPES --- */ #ifdef _LANGUAGE_C_PLUS_PLUS } #endif #endif /* _LIBMUS_H_ */