📄 mikmod.h.in
字号:
} ENVPT;/* Envelope point count */#define ENVPOINTS 32/* Instrument structure */typedef struct INSTRUMENT { CHAR* insname; UBYTE flags; UWORD samplenumber[INSTNOTES]; UBYTE samplenote[INSTNOTES]; UBYTE nnatype; UBYTE dca; /* duplicate check action */ UBYTE dct; /* duplicate check type */ UBYTE globvol; UWORD volfade; SWORD panning; /* instrument-based panning var */ UBYTE pitpansep; /* pitch pan separation (0 to 255) */ UBYTE pitpancenter; /* pitch pan center (0 to 119) */ UBYTE rvolvar; /* random volume varations (0 - 100%) */ UBYTE rpanvar; /* random panning varations (0 - 100%) */ /* volume envelope */ UBYTE volflg; /* bit 0: on 1: sustain 2: loop */ UBYTE volpts; UBYTE volsusbeg; UBYTE volsusend; UBYTE volbeg; UBYTE volend; ENVPT volenv[ENVPOINTS]; /* panning envelope */ UBYTE panflg; /* bit 0: on 1: sustain 2: loop */ UBYTE panpts; UBYTE pansusbeg; UBYTE pansusend; UBYTE panbeg; UBYTE panend; ENVPT panenv[ENVPOINTS]; /* pitch envelope */ UBYTE pitflg; /* bit 0: on 1: sustain 2: loop */ UBYTE pitpts; UBYTE pitsusbeg; UBYTE pitsusend; UBYTE pitbeg; UBYTE pitend; ENVPT pitenv[ENVPOINTS];} INSTRUMENT;struct MP_CONTROL;struct MP_VOICE;/* Module definition*//* maximum master channels supported */#define UF_MAXCHAN 64/* Module flags */#define UF_XMPERIODS 0x0001 /* XM periods / finetuning */#define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */#define UF_INST 0x0004 /* Instruments are used */#define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather than numchn */#define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */#define UF_BGSLIDES 0x0020 /* continue volume slides in the background */#define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */#define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break semantics */#define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */#define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */#define UF_PANNING 0x0400 /* module uses panning effects or have non-tracker default initial panning */typedef struct MODULE { /* general module information */ CHAR* songname; /* name of the song */ CHAR* modtype; /* string type of module loaded */ CHAR* comment; /* module comments */ UWORD flags; /* See module flags above */ UBYTE numchn; /* number of module channels */ UBYTE numvoices; /* max # voices used for full NNA playback */ UWORD numpos; /* number of positions in this song */ UWORD numpat; /* number of patterns in this song */ UWORD numins; /* number of instruments */ UWORD numsmp; /* number of samples */struct INSTRUMENT* instruments; /* all instruments */struct SAMPLE* samples; /* all samples */ UBYTE realchn; /* real number of channels used */ UBYTE totalchn; /* total number of channels used (incl NNAs) */ /* playback settings */ UWORD reppos; /* restart position */ UBYTE initspeed; /* initial song speed */ UWORD inittempo; /* initial song tempo */ UBYTE initvolume; /* initial global volume (0 - 128) */ UWORD panning[UF_MAXCHAN]; /* panning positions */ UBYTE chanvol[UF_MAXCHAN]; /* channel positions */ UWORD bpm; /* current beats-per-minute speed */ UWORD sngspd; /* current song speed */ SWORD volume; /* song volume (0-128) (or user volume) */ BOOL extspd; /* extended speed flag (default enabled) */ BOOL panflag; /* panning flag (default enabled) */ BOOL wrap; /* wrap module ? (default disabled) */ BOOL loop; /* allow module to loop ? (default enabled) */ BOOL fadeout; /* volume fade out during last pattern */ UWORD patpos; /* current row number */ SWORD sngpos; /* current song position */ ULONG sngtime; /* current song time in 2^-10 seconds */ SWORD relspd; /* relative speed factor */ /* internal module representation */ UWORD numtrk; /* number of tracks */ UBYTE** tracks; /* array of numtrk pointers to tracks */ UWORD* patterns; /* array of Patterns */ UWORD* pattrows; /* array of number of rows for each pattern */ UWORD* positions; /* all positions */ BOOL forbid; /* if true, no player update! */ UWORD numrow; /* number of rows on current pattern */ UWORD vbtick; /* tick counter (counts from 0 to sngspd) */ UWORD sngremainder;/* used for song time computation */struct MP_CONTROL* control; /* Effects Channel info (size pf->numchn) */struct MP_VOICE* voice; /* Audio Voice information (size md_numchn) */ UBYTE globalslide; /* global volume slide rate */ UBYTE pat_repcrazy;/* module has just looped to position -1 */ UWORD patbrk; /* position where to start a new pattern */ UBYTE patdly; /* patterndelay counter (command memory) */ UBYTE patdly2; /* patterndelay counter (real one) */ SWORD posjmp; /* flag to indicate a jump is needed... */ UWORD bpmlimit; /* threshold to detect bpm or speed values */} MODULE;/* This structure is used to query current playing voices status */typedef struct VOICEINFO { INSTRUMENT* i; /* Current channel instrument */ SAMPLE* s; /* Current channel sample */ SWORD panning; /* panning position */ SBYTE volume; /* channel's "global" volume (0..64) */ UWORD period; /* period to play the sample at */ UBYTE kick; /* if true = sample has been restarted */} VOICEINFO;/* * ========== Module loaders */struct MLOADER;MIKMODAPI extern CHAR* MikMod_InfoLoader(void);MIKMODAPI extern void MikMod_RegisterAllLoaders(void);MIKMODAPI extern void MikMod_RegisterLoader(struct MLOADER*);MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */MIKMODAPI extern struct MLOADER load_asy; /* ASYLUM Music Format 1.0 */MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */MIKMODAPI extern struct MLOADER load_it; /* Impulse Tracker (by Jeffrey Lim) */MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */MIKMODAPI extern struct MLOADER load_xm; /* FastTracker 2 (by Triton) *//* * ========== Module player */MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL);MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL);MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL);MIKMODAPI extern CHAR* Player_LoadTitle(CHAR*);MIKMODAPI extern CHAR* Player_LoadTitleFP(FILE*);MIKMODAPI extern void Player_Free(MODULE*);MIKMODAPI extern void Player_Start(MODULE*);MIKMODAPI extern BOOL Player_Active(void);MIKMODAPI extern void Player_Stop(void);MIKMODAPI extern void Player_TogglePause(void);MIKMODAPI extern BOOL Player_Paused(void);MIKMODAPI extern void Player_NextPosition(void);MIKMODAPI extern void Player_PrevPosition(void);MIKMODAPI extern void Player_SetPosition(UWORD);MIKMODAPI extern BOOL Player_Muted(UBYTE);MIKMODAPI extern void Player_SetVolume(SWORD);MIKMODAPI extern MODULE* Player_GetModule(void);MIKMODAPI extern void Player_SetSpeed(UWORD);MIKMODAPI extern void Player_SetTempo(UWORD);MIKMODAPI extern void Player_Unmute(SLONG,...);MIKMODAPI extern void Player_Mute(SLONG,...);MIKMODAPI extern void Player_ToggleMute(SLONG,...);MIKMODAPI extern int Player_GetChannelVoice(UBYTE);MIKMODAPI extern UWORD Player_GetChannelPeriod(UBYTE);MIKMODAPI extern int Player_QueryVoices(UWORD numvoices, VOICEINFO *vinfo); typedef void (MikMod_player)(void);typedef MikMod_player *MikMod_player_t;MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t);#define MUTE_EXCLUSIVE 32000#define MUTE_INCLUSIVE 32001/* * ========== Drivers */enum { MD_MUSIC = 0, MD_SNDFX};enum { MD_HARDWARE = 0, MD_SOFTWARE};/* Mixing flags *//* These ones take effect only after MikMod_Init or MikMod_Reset */#define DMODE_16BITS 0x0001 /* enable 16 bit output */#define DMODE_STEREO 0x0002 /* enable stereo output */#define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */#define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */#define DMODE_HQMIXER 0x0010 /* Use high-quality (slower) software mixer */#define DMODE_FLOAT 0x0020 /* enable float output *//* These take effect immediately. */#define DMODE_SURROUND 0x0100 /* enable surround sound */#define DMODE_INTERP 0x0200 /* enable interpolation */#define DMODE_REVERSE 0x0400 /* reverse stereo */struct SAMPLOAD;typedef struct MDRIVER {struct MDRIVER* next; CHAR* Name; CHAR* Version; UBYTE HardVoiceLimit; /* Limit of hardware mixer voices */ UBYTE SoftVoiceLimit; /* Limit of software mixer voices */ CHAR *Alias; CHAR *CmdLineHelp; void (*CommandLine) (CHAR*); BOOL (*IsPresent) (void); SWORD (*SampleLoad) (struct SAMPLOAD*,int); void (*SampleUnload) (SWORD); ULONG (*FreeSampleSpace) (int); ULONG (*RealSampleLength) (int,struct SAMPLE*); BOOL (*Init) (void); void (*Exit) (void); BOOL (*Reset) (void); BOOL (*SetNumVoices) (void); BOOL (*PlayStart) (void); void (*PlayStop) (void); void (*Update) (void); void (*Pause) (void); void (*VoiceSetVolume) (UBYTE,UWORD); UWORD (*VoiceGetVolume) (UBYTE); void (*VoiceSetFrequency)(UBYTE,ULONG); ULONG (*VoiceGetFrequency)(UBYTE); void (*VoiceSetPanning) (UBYTE,ULONG); ULONG (*VoiceGetPanning) (UBYTE); void (*VoicePlay) (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD); void (*VoiceStop) (UBYTE); BOOL (*VoiceStopped) (UBYTE); SLONG (*VoiceGetPosition) (UBYTE); ULONG (*VoiceRealVolume) (UBYTE);} MDRIVER;/* These variables can be changed at ANY time and results will be immediate */MIKMODAPI extern UBYTE md_volume; /* global sound volume (0-128) */MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */MIKMODAPI extern UBYTE md_reverb; /* 0 = none; 15 = chaos */MIKMODAPI extern UBYTE md_pansep; /* 0 = mono; 128 == 100% (full left/right) *//* The variables below can be changed at any time, but changes will not be implemented until MikMod_Reset is called. A call to MikMod_Reset may result in a skip or pop in audio (depending on the soundcard driver and the settings changed). */MIKMODAPI extern UWORD md_device; /* device */MIKMODAPI extern UWORD md_mixfreq; /* mixing frequency */MIKMODAPI extern UWORD md_mode; /* mode. See DMODE_? flags above *//* The following variable should not be changed! */MIKMODAPI extern MDRIVER* md_driver; /* Current driver in use. *//* Known drivers list */MIKMODAPI extern struct MDRIVER drv_nos; /* no sound */MIKMODAPI extern struct MDRIVER drv_pipe; /* piped output */MIKMODAPI extern struct MDRIVER drv_raw; /* raw file disk writer [music.raw] */MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */MIKMODAPI extern struct MDRIVER drv_wav; /* RIFF WAVE file disk writer [music.wav] */MIKMODAPI extern struct MDRIVER drv_ultra; /* Linux Ultrasound driver */MIKMODAPI extern struct MDRIVER drv_sam9407; /* Linux sam9407 driver */MIKMODAPI extern struct MDRIVER drv_AF; /* Dec Alpha AudioFile */MIKMODAPI extern struct MDRIVER drv_aix; /* AIX audio device */MIKMODAPI extern struct MDRIVER drv_alsa; /* Advanced Linux Sound Architecture (ALSA) */MIKMODAPI extern struct MDRIVER drv_esd; /* Enlightened sound daemon (EsounD) */MIKMODAPI extern struct MDRIVER drv_hp; /* HP-UX audio device */MIKMODAPI extern struct MDRIVER drv_oss; /* OpenSound System (Linux,FreeBSD...) */MIKMODAPI extern struct MDRIVER drv_sgi; /* SGI audio library */MIKMODAPI extern struct MDRIVER drv_sun; /* Sun/NetBSD/OpenBSD audio device */MIKMODAPI extern struct MDRIVER drv_dart; /* OS/2 Direct Audio RealTime */MIKMODAPI extern struct MDRIVER drv_os2; /* OS/2 MMPM/2 */MIKMODAPI extern struct MDRIVER drv_ds; /* Win32 DirectSound driver */MIKMODAPI extern struct MDRIVER drv_win; /* Win32 multimedia API driver */MIKMODAPI extern struct MDRIVER drv_mac; /* Macintosh Sound Manager driver */MIKMODAPI extern struct MDRIVER drv_osx; /* MacOS X CoreAudio Driver *//*========== Virtual channel mixer interface (for user-supplied drivers only) */MIKMODAPI extern BOOL VC_Init(void);MIKMODAPI extern void VC_Exit(void);MIKMODAPI extern BOOL VC_SetNumVoices(void);MIKMODAPI extern ULONG VC_SampleSpace(int);MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*);MIKMODAPI extern BOOL VC_PlayStart(void);MIKMODAPI extern void VC_PlayStop(void);MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int);MIKMODAPI extern void VC_SampleUnload(SWORD);MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG);MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG);MIKMODAPI extern void VC_VoiceSetVolume(UBYTE,UWORD);MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE);MIKMODAPI extern void VC_VoiceSetFrequency(UBYTE,ULONG);MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE);MIKMODAPI extern void VC_VoiceSetPanning(UBYTE,ULONG);MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE);MIKMODAPI extern void VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD);MIKMODAPI extern void VC_VoiceStop(UBYTE);MIKMODAPI extern BOOL VC_VoiceStopped(UBYTE);MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE);MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE);#ifdef __cplusplus}#endif#endif/* ex:set ts=4: */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -