mikmod.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:24k
源码类别:

Windows CE

开发平台:

C/C++

  1. /* MikMod sound library
  2. (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS
  3. for complete list.
  4. This library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of
  7. the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. GNU Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with this library; if not, write to the Free Software
  16. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  17. 02111-1307, USA.
  18. */
  19. /*==============================================================================
  20.   $Id: mikmod.h,v 1.9 2004/02/21 02:01:55 raph Exp $
  21.   MikMod sound library include file
  22. ==============================================================================*/
  23. #ifndef _MIKMOD_H_
  24. #define _MIKMOD_H_
  25. #include <stdio.h>
  26. #include <stdlib.h>
  27. #ifdef __cplusplus
  28. extern "C" {
  29. #endif
  30. /*
  31.  * ========== Compiler magic for shared libraries
  32.  */
  33. #if defined WIN32 && defined _DLL
  34. #ifdef DLL_EXPORTS
  35. #define MIKMODAPI __declspec(dllexport)
  36. #else
  37. #define MIKMODAPI __declspec(dllimport)
  38. #endif
  39. #else
  40. #define MIKMODAPI
  41. #endif
  42. /*
  43.  * ========== Library version
  44.  */
  45. #define LIBMIKMOD_VERSION_MAJOR 3L
  46. #define LIBMIKMOD_VERSION_MINOR 2L
  47. #define LIBMIKMOD_REVISION      0L
  48. #define LIBMIKMOD_VERSION 
  49. ((LIBMIKMOD_VERSION_MAJOR<<16)| 
  50.  (LIBMIKMOD_VERSION_MINOR<< 8)| 
  51.  (LIBMIKMOD_REVISION))
  52. MIKMODAPI extern long MikMod_GetVersion(void);
  53. /*
  54.  * ========== Platform independent-type definitions
  55.  */
  56. #ifdef WIN32
  57. #define WIN32_LEAN_AND_MEAN
  58. #include <windows.h>
  59. #include <io.h>
  60. #include <mmsystem.h>
  61. #endif
  62. #if defined(__OS2__)||defined(__EMX__)
  63. #define INCL_DOSSEMAPHORES
  64. #include <os2.h>
  65. #else
  66. typedef char CHAR;
  67. #endif
  68. #if defined(__arch64__) || defined(__alpha)
  69. /* 64 bit architectures */
  70. typedef signed char     SBYTE;      /* 1 byte, signed */
  71. typedef unsigned char   UBYTE;      /* 1 byte, unsigned */
  72. typedef signed short    SWORD;      /* 2 bytes, signed */
  73. typedef unsigned short  UWORD;      /* 2 bytes, unsigned */
  74. typedef signed int      SLONG;      /* 4 bytes, signed */
  75. typedef unsigned int    ULONG;      /* 4 bytes, unsigned */
  76. typedef int             BOOL;       /* 0=false, <>0 true */
  77. #else
  78. /* 32 bit architectures */
  79. typedef signed char     SBYTE;      /* 1 byte, signed */
  80. typedef unsigned char   UBYTE;      /* 1 byte, unsigned */
  81. typedef signed short    SWORD;      /* 2 bytes, signed */
  82. typedef unsigned short  UWORD;      /* 2 bytes, unsigned */
  83. typedef signed long     SLONG;      /* 4 bytes, signed */
  84. #if !defined(__OS2__)&&!defined(__EMX__)&&!defined(WIN32)
  85. typedef unsigned long   ULONG;      /* 4 bytes, unsigned */
  86. typedef int             BOOL;       /* 0=false, <>0 true */
  87. #endif
  88. #endif
  89. /*
  90.  * ========== Error codes
  91.  */
  92. enum {
  93. MMERR_OPENING_FILE = 1,
  94. MMERR_OUT_OF_MEMORY,
  95. MMERR_DYNAMIC_LINKING,
  96. MMERR_SAMPLE_TOO_BIG,
  97. MMERR_OUT_OF_HANDLES,
  98. MMERR_UNKNOWN_WAVE_TYPE,
  99. MMERR_LOADING_PATTERN,
  100. MMERR_LOADING_TRACK,
  101. MMERR_LOADING_HEADER,
  102. MMERR_LOADING_SAMPLEINFO,
  103. MMERR_NOT_A_MODULE,
  104. MMERR_NOT_A_STREAM,
  105. MMERR_MED_SYNTHSAMPLES,
  106. MMERR_ITPACK_INVALID_DATA,
  107. MMERR_DETECTING_DEVICE,
  108. MMERR_INVALID_DEVICE,
  109. MMERR_INITIALIZING_MIXER,
  110. MMERR_OPENING_AUDIO,
  111. MMERR_8BIT_ONLY,
  112. MMERR_16BIT_ONLY,
  113. MMERR_STEREO_ONLY,
  114. MMERR_ULAW,
  115. MMERR_NON_BLOCK,
  116. MMERR_AF_AUDIO_PORT,
  117. MMERR_AIX_CONFIG_INIT,
  118. MMERR_AIX_CONFIG_CONTROL,
  119. MMERR_AIX_CONFIG_START,
  120. MMERR_GUS_SETTINGS,
  121. MMERR_GUS_RESET,
  122. MMERR_GUS_TIMER,
  123. MMERR_HP_SETSAMPLESIZE,
  124. MMERR_HP_SETSPEED,
  125. MMERR_HP_CHANNELS,
  126. MMERR_HP_AUDIO_OUTPUT,
  127. MMERR_HP_AUDIO_DESC,
  128. MMERR_HP_BUFFERSIZE,
  129. MMERR_OSS_SETFRAGMENT,
  130. MMERR_OSS_SETSAMPLESIZE,
  131. MMERR_OSS_SETSTEREO,
  132. MMERR_OSS_SETSPEED,
  133. MMERR_SGI_SPEED,
  134. MMERR_SGI_16BIT,
  135. MMERR_SGI_8BIT,
  136. MMERR_SGI_STEREO,
  137. MMERR_SGI_MONO,
  138. MMERR_SUN_INIT,
  139. MMERR_OS2_MIXSETUP,
  140. MMERR_OS2_SEMAPHORE,
  141. MMERR_OS2_TIMER,
  142. MMERR_OS2_THREAD,
  143. MMERR_DS_PRIORITY,
  144. MMERR_DS_BUFFER,
  145. MMERR_DS_FORMAT,
  146. MMERR_DS_NOTIFY,
  147. MMERR_DS_EVENT,
  148. MMERR_DS_THREAD,
  149. MMERR_DS_UPDATE,
  150. MMERR_WINMM_HANDLE,
  151. MMERR_WINMM_ALLOCATED,
  152. MMERR_WINMM_DEVICEID,
  153. MMERR_WINMM_FORMAT,
  154. MMERR_WINMM_UNKNOWN,
  155. MMERR_MAC_SPEED,
  156. MMERR_MAC_START,
  157.     MMERR_OSX_UNKNOWN_DEVICE,
  158.     MMERR_OSX_BAD_PROPERTY,
  159.     MMERR_OSX_UNSUPPORTED_FORMAT,
  160.     MMERR_OSX_SET_STEREO,
  161.     MMERR_OSX_BUFFER_ALLOC,
  162.     MMERR_OSX_ADD_IO_PROC,
  163.     MMERR_OSX_DEVICE_START,
  164. MMERR_OSX_PTHREAD,
  165. MMERR_DOSWSS_STARTDMA,
  166. MMERR_DOSSB_STARTDMA,
  167. MMERR_MAX
  168. };
  169. /*
  170.  * ========== Error handling
  171.  */
  172. typedef void (MikMod_handler)(void);
  173. typedef MikMod_handler *MikMod_handler_t;
  174. MIKMODAPI extern int  MikMod_errno;
  175. MIKMODAPI extern BOOL MikMod_critical;
  176. MIKMODAPI extern char *MikMod_strerror(int);
  177. MIKMODAPI extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t);
  178. /*
  179.  * ========== Library initialization and core functions
  180.  */
  181. struct MDRIVER;
  182. MIKMODAPI extern void   MikMod_RegisterAllDrivers(void);
  183. MIKMODAPI extern CHAR*  MikMod_InfoDriver(void);
  184. MIKMODAPI extern void   MikMod_RegisterDriver(struct MDRIVER*);
  185. MIKMODAPI extern int    MikMod_DriverFromAlias(CHAR*);
  186. MIKMODAPI extern struct MDRIVER *MikMod_DriverByOrdinal(int);
  187. MIKMODAPI extern BOOL   MikMod_Init(CHAR*);
  188. MIKMODAPI extern void   MikMod_Exit(void);
  189. MIKMODAPI extern BOOL   MikMod_Reset(CHAR*);
  190. MIKMODAPI extern BOOL   MikMod_SetNumVoices(int,int);
  191. MIKMODAPI extern BOOL   MikMod_Active(void);
  192. MIKMODAPI extern BOOL   MikMod_EnableOutput(void);
  193. MIKMODAPI extern void   MikMod_DisableOutput(void);
  194. MIKMODAPI extern void   MikMod_Update(void);
  195. MIKMODAPI extern BOOL   MikMod_InitThreads(void);
  196. MIKMODAPI extern void   MikMod_Lock(void);
  197. MIKMODAPI extern void   MikMod_Unlock(void);
  198. /*
  199.  * ========== Reader, Writer
  200.  */
  201. typedef struct MREADER {
  202. BOOL (*Seek)(struct MREADER*,long,int);
  203. long (*Tell)(struct MREADER*);
  204. BOOL (*Read)(struct MREADER*,void*,size_t);
  205. int  (*Get)(struct MREADER*);
  206. BOOL (*Eof)(struct MREADER*);
  207. } MREADER;
  208. typedef struct MWRITER {
  209. BOOL (*Seek)(struct MWRITER*,long,int);
  210. long (*Tell)(struct MWRITER*);
  211. BOOL (*Write)(struct MWRITER*,void*,size_t);
  212. BOOL (*Put)(struct MWRITER*,int);
  213. } MWRITER;
  214. /*
  215.  * ========== Samples
  216.  */
  217. /* Sample playback should not be interrupted */
  218. #define SFX_CRITICAL 1
  219. /* Sample format [loading and in-memory] flags: */
  220. #define SF_16BITS       0x0001
  221. #define SF_STEREO       0x0002
  222. #define SF_SIGNED       0x0004
  223. #define SF_BIG_ENDIAN   0x0008
  224. #define SF_DELTA        0x0010
  225. #define SF_ITPACKED 0x0020
  226. #define SF_FORMATMASK 0x003F
  227. /* General Playback flags */
  228. #define SF_LOOP         0x0100
  229. #define SF_BIDI         0x0200
  230. #define SF_REVERSE      0x0400
  231. #define SF_SUSTAIN      0x0800
  232. #define SF_PLAYBACKMASK 0x0C00
  233. /* Module-only Playback Flags */
  234. #define SF_OWNPAN 0x1000
  235. #define SF_UST_LOOP     0x2000
  236. #define SF_EXTRAPLAYBACKMASK 0x3000
  237. /* Panning constants */
  238. #define PAN_LEFT 0
  239. #define PAN_HALFLEFT  64
  240. #define PAN_CENTER 128
  241. #define PAN_HALFRIGHT 192
  242. #define PAN_RIGHT 255
  243. #define PAN_SURROUND 512 /* panning value for Dolby Surround */
  244. typedef struct SAMPLE {
  245. SWORD  panning;     /* panning (0-255 or PAN_SURROUND) */
  246. ULONG  speed;       /* Base playing speed/frequency of note */
  247. UBYTE  volume;      /* volume 0-64 */
  248. UWORD  inflags; /* sample format on disk */
  249. UWORD  flags;       /* sample format in memory */
  250. ULONG  length;      /* length of sample (in samples!) */
  251. ULONG  loopstart;   /* repeat position (relative to start, in samples) */
  252. ULONG  loopend;     /* repeat end */
  253. ULONG  susbegin;    /* sustain loop begin (in samples)   Not Supported */
  254. ULONG  susend;      /* sustain loop end                /      Yet! */
  255. /* Variables used by the module player only! (ignored for sound effects) */
  256. UBYTE  globvol;     /* global volume */
  257. UBYTE  vibflags;    /* autovibrato flag stuffs */
  258. UBYTE  vibtype;     /* Vibratos moved from INSTRUMENT to SAMPLE */
  259. UBYTE  vibsweep;
  260. UBYTE  vibdepth;
  261. UBYTE  vibrate;
  262. CHAR*  samplename;  /* name of the sample */
  263. /* Values used internally only */
  264. UWORD  avibpos;     /* autovibrato pos [player use] */
  265. UBYTE  divfactor;   /* for sample scaling, maintains proper period slides */
  266. ULONG  seekpos;     /* seek position in file */
  267. SWORD  handle;      /* sample handle used by individual drivers */
  268. } SAMPLE;
  269. /* Sample functions */
  270. MIKMODAPI extern SAMPLE *Sample_Load(CHAR*);
  271. MIKMODAPI extern SAMPLE *Sample_LoadFP(FILE*);
  272. MIKMODAPI extern SAMPLE *Sample_LoadGeneric(MREADER*);
  273. MIKMODAPI extern void   Sample_Free(SAMPLE*);
  274. MIKMODAPI extern SBYTE  Sample_Play(SAMPLE*,ULONG,UBYTE);
  275. MIKMODAPI extern void   Voice_SetVolume(SBYTE,UWORD);
  276. MIKMODAPI extern UWORD  Voice_GetVolume(SBYTE);
  277. MIKMODAPI extern void   Voice_SetFrequency(SBYTE,ULONG);
  278. MIKMODAPI extern ULONG  Voice_GetFrequency(SBYTE);
  279. MIKMODAPI extern void   Voice_SetPanning(SBYTE,ULONG);
  280. MIKMODAPI extern ULONG  Voice_GetPanning(SBYTE);
  281. MIKMODAPI extern void   Voice_Play(SBYTE,SAMPLE*,ULONG);
  282. MIKMODAPI extern void   Voice_Stop(SBYTE);
  283. MIKMODAPI extern BOOL   Voice_Stopped(SBYTE);
  284. MIKMODAPI extern SLONG  Voice_GetPosition(SBYTE);
  285. MIKMODAPI extern ULONG  Voice_RealVolume(SBYTE);
  286. /*
  287.  * ========== Internal module representation (UniMod)
  288.  */
  289. /*
  290. Instrument definition - for information only, the only field which may be
  291. of use in user programs is the name field
  292. */
  293. /* Instrument note count */
  294. #define INSTNOTES 120
  295. /* Envelope point */
  296. typedef struct ENVPT {
  297. SWORD pos;
  298. SWORD val;
  299. } ENVPT;
  300. /* Envelope point count */
  301. #define ENVPOINTS 32
  302. /* Instrument structure */
  303. typedef struct INSTRUMENT {
  304. CHAR* insname;
  305. UBYTE flags;
  306. UWORD samplenumber[INSTNOTES];
  307. UBYTE samplenote[INSTNOTES];
  308. UBYTE nnatype;
  309. UBYTE dca;              /* duplicate check action */
  310. UBYTE dct;              /* duplicate check type */
  311. UBYTE globvol;
  312. UWORD volfade;
  313. SWORD panning;          /* instrument-based panning var */
  314. UBYTE pitpansep;        /* pitch pan separation (0 to 255) */
  315. UBYTE pitpancenter;     /* pitch pan center (0 to 119) */
  316. UBYTE rvolvar;          /* random volume varations (0 - 100%) */
  317. UBYTE rpanvar;          /* random panning varations (0 - 100%) */
  318. /* volume envelope */
  319. UBYTE volflg;           /* bit 0: on 1: sustain 2: loop */
  320. UBYTE volpts;
  321. UBYTE volsusbeg;
  322. UBYTE volsusend;
  323. UBYTE volbeg;
  324. UBYTE volend;
  325. ENVPT volenv[ENVPOINTS];
  326. /* panning envelope */
  327. UBYTE panflg;           /* bit 0: on 1: sustain 2: loop */
  328. UBYTE panpts;
  329. UBYTE pansusbeg;
  330. UBYTE pansusend;
  331. UBYTE panbeg;
  332. UBYTE panend;
  333. ENVPT panenv[ENVPOINTS];
  334. /* pitch envelope */
  335. UBYTE pitflg;           /* bit 0: on 1: sustain 2: loop */
  336. UBYTE pitpts;
  337. UBYTE pitsusbeg;
  338. UBYTE pitsusend;
  339. UBYTE pitbeg;
  340. UBYTE pitend;
  341. ENVPT pitenv[ENVPOINTS];
  342. } INSTRUMENT;
  343. struct MP_CONTROL;
  344. struct MP_VOICE;
  345. /*
  346. Module definition
  347. */
  348. /* maximum master channels supported */
  349. #define UF_MAXCHAN 64
  350. /* Module flags */
  351. #define UF_XMPERIODS 0x0001 /* XM periods / finetuning */
  352. #define UF_LINEAR 0x0002 /* LINEAR periods (UF_XMPERIODS must be set) */
  353. #define UF_INST 0x0004 /* Instruments are used */
  354. #define UF_NNA 0x0008 /* IT: NNA used, set numvoices rather
  355.   than numchn */
  356. #define UF_S3MSLIDES 0x0010 /* uses old S3M volume slides */
  357. #define UF_BGSLIDES 0x0020 /* continue volume slides in the background */
  358. #define UF_HIGHBPM 0x0040 /* MED: can use >255 bpm */
  359. #define UF_NOWRAP 0x0080 /* XM-type (i.e. illogical) pattern break
  360.   semantics */
  361. #define UF_ARPMEM 0x0100 /* IT: need arpeggio memory */
  362. #define UF_FT2QUIRKS 0x0200 /* emulate some FT2 replay quirks */
  363. #define UF_PANNING 0x0400 /* module uses panning effects or have
  364.   non-tracker default initial panning */
  365. typedef struct MODULE {
  366. /* general module information */
  367. CHAR*       songname;    /* name of the song */
  368. CHAR*       modtype;     /* string type of module loaded */
  369. CHAR*       comment;     /* module comments */
  370. UWORD       flags;       /* See module flags above */
  371. UBYTE       numchn;      /* number of module channels */
  372. UBYTE       numvoices;   /* max # voices used for full NNA playback */
  373. UWORD       numpos;      /* number of positions in this song */
  374. UWORD       numpat;      /* number of patterns in this song */
  375. UWORD       numins;      /* number of instruments */
  376. UWORD       numsmp;      /* number of samples */
  377. struct  INSTRUMENT* instruments; /* all instruments */
  378. struct  SAMPLE*     samples;     /* all samples */
  379. UBYTE       realchn;     /* real number of channels used */
  380. UBYTE       totalchn;    /* total number of channels used (incl NNAs) */
  381. /* playback settings */
  382. UWORD       reppos;      /* restart position */
  383. UBYTE       initspeed;   /* initial song speed */
  384. UWORD       inittempo;   /* initial song tempo */
  385. UBYTE       initvolume;  /* initial global volume (0 - 128) */
  386. UWORD       panning[UF_MAXCHAN]; /* panning positions */
  387. UBYTE       chanvol[UF_MAXCHAN]; /* channel positions */
  388. UWORD       bpm;         /* current beats-per-minute speed */
  389. UWORD       sngspd;      /* current song speed */
  390. SWORD       volume;      /* song volume (0-128) (or user volume) */
  391. BOOL        extspd;      /* extended speed flag (default enabled) */
  392. BOOL        panflag;     /* panning flag (default enabled) */
  393. BOOL        wrap;        /* wrap module ? (default disabled) */
  394. BOOL        loop;  /* allow module to loop ? (default enabled) */
  395. BOOL        fadeout;  /* volume fade out during last pattern */
  396. UWORD       patpos;      /* current row number */
  397. SWORD       sngpos;      /* current song position */
  398. ULONG       sngtime;     /* current song time in 2^-10 seconds */
  399. SWORD       relspd;      /* relative speed factor */
  400. /* internal module representation */
  401. UWORD       numtrk;      /* number of tracks */
  402. UBYTE**     tracks;      /* array of numtrk pointers to tracks */
  403. UWORD*      patterns;    /* array of Patterns */
  404. UWORD*      pattrows;    /* array of number of rows for each pattern */
  405. UWORD*      positions;   /* all positions */
  406. BOOL        forbid;      /* if true, no player update! */
  407. UWORD       numrow;      /* number of rows on current pattern */
  408. UWORD       vbtick;      /* tick counter (counts from 0 to sngspd) */
  409. UWORD       sngremainder;/* used for song time computation */
  410. struct MP_CONTROL*  control;     /* Effects Channel info (size pf->numchn) */
  411. struct MP_VOICE*    voice;       /* Audio Voice information (size md_numchn) */
  412. UBYTE       globalslide; /* global volume slide rate */
  413. UBYTE       pat_repcrazy;/* module has just looped to position -1 */
  414. UWORD       patbrk;      /* position where to start a new pattern */
  415. UBYTE       patdly;      /* patterndelay counter (command memory) */
  416. UBYTE       patdly2;     /* patterndelay counter (real one) */
  417. SWORD       posjmp;      /* flag to indicate a jump is needed... */
  418. UWORD bpmlimit;  /* threshold to detect bpm or speed values */
  419. } MODULE;
  420. /* This structure is used to query current playing voices status */
  421. typedef struct VOICEINFO {
  422. INSTRUMENT* i;            /* Current channel instrument */
  423. SAMPLE*     s;            /* Current channel sample */
  424. SWORD       panning;      /* panning position */
  425. SBYTE       volume;       /* channel's "global" volume (0..64) */
  426. UWORD       period;       /* period to play the sample at */
  427. UBYTE       kick;         /* if true = sample has been restarted */
  428. } VOICEINFO;
  429. /*
  430.  * ========== Module loaders
  431.  */
  432. struct MLOADER;
  433. MIKMODAPI extern CHAR*   MikMod_InfoLoader(void);
  434. MIKMODAPI extern void    MikMod_RegisterAllLoaders(void);
  435. MIKMODAPI extern void    MikMod_RegisterLoader(struct MLOADER*);
  436. MIKMODAPI extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */
  437. MIKMODAPI extern struct MLOADER load_amf; /* DMP Advanced Module Format (by Otto Chrons) */
  438. MIKMODAPI extern struct MLOADER load_asy; /* ASYLUM Music Format 1.0 */
  439. MIKMODAPI extern struct MLOADER load_dsm; /* DSIK internal module format */
  440. MIKMODAPI extern struct MLOADER load_far; /* Farandole Composer (by Daniel Potter) */
  441. MIKMODAPI extern struct MLOADER load_gdm; /* General DigiMusic (by Edward Schlunder) */
  442. MIKMODAPI extern struct MLOADER load_it;  /* Impulse Tracker (by Jeffrey Lim) */
  443. MIKMODAPI extern struct MLOADER load_imf; /* Imago Orpheus (by Lutz Roeder) */
  444. MIKMODAPI extern struct MLOADER load_med; /* Amiga MED modules (by Teijo Kinnunen) */
  445. MIKMODAPI extern struct MLOADER load_m15; /* Soundtracker 15-instrument */
  446. MIKMODAPI extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */
  447. MIKMODAPI extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */
  448. MIKMODAPI extern struct MLOADER load_okt; /* Amiga Oktalyzer */
  449. MIKMODAPI extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */
  450. MIKMODAPI extern struct MLOADER load_stx; /* STMIK 0.2 (by Future Crew) */
  451. MIKMODAPI extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */
  452. MIKMODAPI extern struct MLOADER load_ult; /* UltraTracker (by MAS) */
  453. MIKMODAPI extern struct MLOADER load_uni; /* MikMod and APlayer internal module format */
  454. MIKMODAPI extern struct MLOADER load_xm;  /* FastTracker 2 (by Triton) */
  455. /*
  456.  * ========== Module player
  457.  */
  458. MIKMODAPI extern MODULE* Player_Load(CHAR*,int,BOOL);
  459. MIKMODAPI extern MODULE* Player_LoadFP(FILE*,int,BOOL);
  460. MIKMODAPI extern MODULE* Player_LoadGeneric(MREADER*,int,BOOL);
  461. MIKMODAPI extern CHAR*   Player_LoadTitle(CHAR*);
  462. MIKMODAPI extern CHAR*   Player_LoadTitleFP(FILE*);
  463. MIKMODAPI extern void    Player_Free(MODULE*);
  464. MIKMODAPI extern void    Player_Start(MODULE*);
  465. MIKMODAPI extern BOOL    Player_Active(void);
  466. MIKMODAPI extern void    Player_Stop(void);
  467. MIKMODAPI extern void    Player_TogglePause(void);
  468. MIKMODAPI extern BOOL    Player_Paused(void);
  469. MIKMODAPI extern void    Player_NextPosition(void);
  470. MIKMODAPI extern void    Player_PrevPosition(void);
  471. MIKMODAPI extern void    Player_SetPosition(UWORD);
  472. MIKMODAPI extern BOOL    Player_Muted(UBYTE);
  473. MIKMODAPI extern void    Player_SetVolume(SWORD);
  474. MIKMODAPI extern MODULE* Player_GetModule(void);
  475. MIKMODAPI extern void    Player_SetSpeed(UWORD);
  476. MIKMODAPI extern void    Player_SetTempo(UWORD);
  477. MIKMODAPI extern void    Player_Unmute(SLONG,...);
  478. MIKMODAPI extern void    Player_Mute(SLONG,...);
  479. MIKMODAPI extern void    Player_ToggleMute(SLONG,...);
  480. MIKMODAPI extern int     Player_GetChannelVoice(UBYTE);
  481. MIKMODAPI extern UWORD   Player_GetChannelPeriod(UBYTE);
  482. MIKMODAPI extern int     Player_QueryVoices(UWORD numvoices, VOICEINFO *vinfo); 
  483. typedef void (MikMod_player)(void);
  484. typedef MikMod_player *MikMod_player_t;
  485. MIKMODAPI extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t);
  486. #define MUTE_EXCLUSIVE  32000
  487. #define MUTE_INCLUSIVE  32001
  488. /*
  489.  * ========== Drivers
  490.  */
  491. enum {
  492. MD_MUSIC = 0,
  493. MD_SNDFX
  494. };
  495. enum {
  496. MD_HARDWARE = 0,
  497. MD_SOFTWARE
  498. };
  499. /* Mixing flags */
  500. /* These ones take effect only after MikMod_Init or MikMod_Reset */
  501. #define DMODE_16BITS     0x0001 /* enable 16 bit output */
  502. #define DMODE_STEREO     0x0002 /* enable stereo output */
  503. #define DMODE_SOFT_SNDFX 0x0004 /* Process sound effects via software mixer */
  504. #define DMODE_SOFT_MUSIC 0x0008 /* Process music via software mixer */
  505. #define DMODE_HQMIXER    0x0010 /* Use high-quality (slower) software mixer */
  506. #define DMODE_FLOAT      0x0020 /* enable float output */
  507. /* These take effect immediately. */
  508. #define DMODE_SURROUND   0x0100 /* enable surround sound */
  509. #define DMODE_INTERP     0x0200 /* enable interpolation */
  510. #define DMODE_REVERSE    0x0400 /* reverse stereo */
  511. struct SAMPLOAD;
  512. typedef struct MDRIVER {
  513. struct MDRIVER* next;
  514. CHAR*       Name;
  515. CHAR*       Version;
  516. UBYTE       HardVoiceLimit; /* Limit of hardware mixer voices */
  517. UBYTE       SoftVoiceLimit; /* Limit of software mixer voices */
  518. CHAR        *Alias;
  519. CHAR        *CmdLineHelp;
  520. void        (*CommandLine)      (CHAR*);
  521. BOOL        (*IsPresent)        (void);
  522. SWORD       (*SampleLoad)       (struct SAMPLOAD*,int);
  523. void        (*SampleUnload)     (SWORD);
  524. ULONG       (*FreeSampleSpace)  (int);
  525. ULONG       (*RealSampleLength) (int,struct SAMPLE*);
  526. BOOL        (*Init)             (void);
  527. void        (*Exit)             (void);
  528. BOOL        (*Reset)            (void);
  529. BOOL        (*SetNumVoices)     (void);
  530. BOOL        (*PlayStart)        (void);
  531. void        (*PlayStop)         (void);
  532. void        (*Update)           (void);
  533. void (*Pause) (void);
  534. void        (*VoiceSetVolume)   (UBYTE,UWORD);
  535. UWORD       (*VoiceGetVolume)   (UBYTE);
  536. void        (*VoiceSetFrequency)(UBYTE,ULONG);
  537. ULONG       (*VoiceGetFrequency)(UBYTE);
  538. void        (*VoiceSetPanning)  (UBYTE,ULONG);
  539. ULONG       (*VoiceGetPanning)  (UBYTE);
  540. void        (*VoicePlay)        (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD);
  541. void        (*VoiceStop)        (UBYTE);
  542. BOOL        (*VoiceStopped)     (UBYTE);
  543. SLONG       (*VoiceGetPosition) (UBYTE);
  544. ULONG       (*VoiceRealVolume)  (UBYTE);
  545. } MDRIVER;
  546. /* These variables can be changed at ANY time and results will be immediate */
  547. MIKMODAPI extern UBYTE md_volume;      /* global sound volume (0-128) */
  548. MIKMODAPI extern UBYTE md_musicvolume; /* volume of song */
  549. MIKMODAPI extern UBYTE md_sndfxvolume; /* volume of sound effects */
  550. MIKMODAPI extern UBYTE md_reverb;      /* 0 = none;  15 = chaos */
  551. MIKMODAPI extern UBYTE md_pansep;      /* 0 = mono;  128 == 100% (full left/right) */
  552. /* The variables below can be changed at any time, but changes will not be
  553.    implemented until MikMod_Reset is called. A call to MikMod_Reset may result
  554.    in a skip or pop in audio (depending on the soundcard driver and the settings
  555.    changed). */
  556. MIKMODAPI extern UWORD md_device;      /* device */
  557. MIKMODAPI extern UWORD md_mixfreq;     /* mixing frequency */
  558. MIKMODAPI extern UWORD md_mode;        /* mode. See DMODE_? flags above */
  559. /* The following variable should not be changed! */
  560. MIKMODAPI extern MDRIVER* md_driver;   /* Current driver in use. */
  561. /* Known drivers list */
  562. MIKMODAPI extern struct MDRIVER drv_nos;    /* no sound */
  563. MIKMODAPI extern struct MDRIVER drv_pipe;   /* piped output */
  564. MIKMODAPI extern struct MDRIVER drv_raw;    /* raw file disk writer [music.raw] */
  565. MIKMODAPI extern struct MDRIVER drv_stdout; /* output to stdout */
  566. MIKMODAPI extern struct MDRIVER drv_wav;    /* RIFF WAVE file disk writer [music.wav] */
  567. MIKMODAPI extern struct MDRIVER drv_ultra;  /* Linux Ultrasound driver */
  568. MIKMODAPI extern struct MDRIVER drv_sam9407; /* Linux sam9407 driver */
  569. MIKMODAPI extern struct MDRIVER drv_AF;     /* Dec Alpha AudioFile */
  570. MIKMODAPI extern struct MDRIVER drv_aix;    /* AIX audio device */
  571. MIKMODAPI extern struct MDRIVER drv_alsa;   /* Advanced Linux Sound Architecture (ALSA) */
  572. MIKMODAPI extern struct MDRIVER drv_esd;    /* Enlightened sound daemon (EsounD) */
  573. MIKMODAPI extern struct MDRIVER drv_hp;     /* HP-UX audio device */
  574. MIKMODAPI extern struct MDRIVER drv_oss;    /* OpenSound System (Linux,FreeBSD...) */
  575. MIKMODAPI extern struct MDRIVER drv_sgi;    /* SGI audio library */
  576. MIKMODAPI extern struct MDRIVER drv_sun;    /* Sun/NetBSD/OpenBSD audio device */
  577. MIKMODAPI extern struct MDRIVER drv_dart;   /* OS/2 Direct Audio RealTime */
  578. MIKMODAPI extern struct MDRIVER drv_os2;    /* OS/2 MMPM/2 */
  579. MIKMODAPI extern struct MDRIVER drv_ds;     /* Win32 DirectSound driver */
  580. MIKMODAPI extern struct MDRIVER drv_win;    /* Win32 multimedia API driver */
  581. MIKMODAPI extern struct MDRIVER drv_mac;    /* Macintosh Sound Manager driver */
  582. MIKMODAPI extern struct MDRIVER drv_osx; /* MacOS X CoreAudio Driver */
  583. /*========== Virtual channel mixer interface (for user-supplied drivers only) */
  584. MIKMODAPI extern BOOL  VC_Init(void);
  585. MIKMODAPI extern void  VC_Exit(void);
  586. MIKMODAPI extern BOOL  VC_SetNumVoices(void);
  587. MIKMODAPI extern ULONG VC_SampleSpace(int);
  588. MIKMODAPI extern ULONG VC_SampleLength(int,SAMPLE*);
  589. MIKMODAPI extern BOOL  VC_PlayStart(void);
  590. MIKMODAPI extern void  VC_PlayStop(void);
  591. MIKMODAPI extern SWORD VC_SampleLoad(struct SAMPLOAD*,int);
  592. MIKMODAPI extern void  VC_SampleUnload(SWORD);
  593. MIKMODAPI extern ULONG VC_WriteBytes(SBYTE*,ULONG);
  594. MIKMODAPI extern ULONG VC_SilenceBytes(SBYTE*,ULONG);
  595. MIKMODAPI extern void  VC_VoiceSetVolume(UBYTE,UWORD);
  596. MIKMODAPI extern UWORD VC_VoiceGetVolume(UBYTE);
  597. MIKMODAPI extern void  VC_VoiceSetFrequency(UBYTE,ULONG);
  598. MIKMODAPI extern ULONG VC_VoiceGetFrequency(UBYTE);
  599. MIKMODAPI extern void  VC_VoiceSetPanning(UBYTE,ULONG);
  600. MIKMODAPI extern ULONG VC_VoiceGetPanning(UBYTE);
  601. MIKMODAPI extern void  VC_VoicePlay(UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD);
  602. MIKMODAPI extern void  VC_VoiceStop(UBYTE);
  603. MIKMODAPI extern BOOL  VC_VoiceStopped(UBYTE);
  604. MIKMODAPI extern SLONG VC_VoiceGetPosition(UBYTE);
  605. MIKMODAPI extern ULONG VC_VoiceRealVolume(UBYTE);
  606. #ifdef __cplusplus
  607. }
  608. #endif
  609. #endif
  610. /* ex:set ts=4: */