Subversion Repositories Games.Descent

Rev

Blame | Last modification | View Log | Download | RSS feed

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