135 lines
3.9 KiB
C
135 lines
3.9 KiB
C
|
|
#ifndef _LIBMUS_H_
|
|
#define _LIBMUS_H_
|
|
|
|
#include <ultra64.h>
|
|
|
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
|
extern "C" {
|
|
#endif
|
|
|
|
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;
|
|
|
|
OSPiHandle *diskrom_handle;
|
|
} musConfig;
|
|
|
|
typedef enum {
|
|
MUSBOOL_OFF,
|
|
MUSBOOL_ON
|
|
} musBool;
|
|
|
|
typedef struct {
|
|
u64 *data;
|
|
int data_size;
|
|
u64 *ucode;
|
|
u64 *ucode_data;
|
|
} musTask;
|
|
|
|
typedef unsigned long musHandle;
|
|
|
|
typedef void (*LIBMUScb_marker)(musHandle, int);
|
|
typedef void (*LIBMUScb_install)(void);
|
|
typedef void (*LIBMUScb_waitframe)(void);
|
|
typedef void (*LIBMUScb_dotask)(musTask *);
|
|
|
|
typedef struct {
|
|
LIBMUScb_install install;
|
|
LIBMUScb_waitframe waitframe;
|
|
LIBMUScb_dotask dotask;
|
|
} musSched;
|
|
|
|
#define MUSCONTROL_RAM (1 << 0)
|
|
|
|
#define MUSFLAG_EFFECTS 1
|
|
#define MUSFLAG_SONGS 2
|
|
|
|
extern int MusInitialize(musConfig *config);
|
|
|
|
extern int MusSetFxType(int fxtype);
|
|
extern int MusSetSongFxChange(musBool onoff);
|
|
|
|
extern void MusSetMasterVolume(unsigned long flags, int volume);
|
|
|
|
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);
|
|
|
|
extern void MusStop(unsigned long flags, int speed);
|
|
extern int MusAsk(unsigned long flags);
|
|
|
|
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);
|
|
|
|
extern void MusPtrBankInitialize(void *pbank, void *wbank);
|
|
extern void* MusPtrBankSetSingle(void *ipbank);
|
|
extern void MusPtrBankSetCurrent(void *ipbank);
|
|
extern void* MusPtrBankGetCurrent(void);
|
|
|
|
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);
|
|
|
|
extern void MusSetScheduler(musSched *sched_list);
|
|
|
|
extern void MusSetMarkerCallback(void *callback);
|
|
|
|
extern int MusHandleWaveCount(musHandle handle);
|
|
extern unsigned short *MusHandleWaveAddress(musHandle handle);
|
|
|
|
#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)
|
|
|
|
#ifdef _LANGUAGE_C_PLUS_PLUS
|
|
}
|
|
#endif
|
|
|
|
#endif /* _LIBMUS_H_ */
|