/*********************************************************
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_ */