home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 February / PCO_0299.ISO / filesbbs / linux / mikmod-3.000 / mikmod-3 / mikmod-3.1.2 / include / mikmod.h < prev   
Encoding:
C/C++ Source or Header  |  1998-12-07  |  17.4 KB  |  560 lines

  1.  
  2. /*    MikMod sound library
  3.     (c) 1998 Miodrag Vallat and others - see file AUTHORS 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., 675 Mass Ave, Cambridge, MA 02139, USA.
  18. */
  19.  
  20. /*==============================================================================
  21.  
  22.   $Id: mikmod.h,v 1.22 1998/12/07 06:00:32 miod Exp $
  23.  
  24.   MikMod sound library include file
  25.  
  26. ==============================================================================*/
  27.  
  28. #ifndef _MIKMOD_H_
  29. #define _MIKMOD_H_
  30.  
  31. #include <stdio.h>
  32. #include <stdlib.h>
  33.  
  34. #ifdef __cplusplus
  35. extern "C" {
  36. #endif
  37.  
  38. /*
  39.  *    ========== Library version
  40.  */
  41.  
  42. #define LIBMIKMOD_VERSION_MAJOR 3L
  43. #define LIBMIKMOD_VERSION_MINOR 1L
  44. #define LIBMIKMOD_REVISION      0L
  45.  
  46. #define LIBMIKMOD_VERSION \
  47.     ((LIBMIKMOD_VERSION_MAJOR<<16)| \
  48.      (LIBMIKMOD_VERSION_MINOR<< 8)| \
  49.      (LIBMIKMOD_REVISION))
  50.  
  51. extern long MikMod_GetVersion(void);
  52.  
  53. /*
  54.  *    ========== Platform independent-type definitions
  55.  */
  56.  
  57. #if defined(__OS2__)||defined(__EMX__)
  58. #include <os2.h>
  59. #else
  60. typedef char CHAR;
  61. #endif
  62.  
  63. #if defined(__alpha)
  64. /* 64 bit architectures */
  65.  
  66. typedef signed char     SBYTE;      /* 1 byte, signed */
  67. typedef unsigned char   UBYTE;      /* 1 byte, unsigned */
  68. typedef signed short    SWORD;      /* 2 bytes, signed */
  69. typedef unsigned short  UWORD;      /* 2 bytes, unsigned */
  70. typedef signed int      SLONG;      /* 4 bytes, signed */
  71. typedef unsigned int    ULONG;      /* 4 bytes, unsigned */
  72. typedef int             BOOL;       /* 0=false, <>0 true */
  73.  
  74. #else
  75. /* 32 bit architectures */
  76.  
  77. typedef signed char     SBYTE;      /* 1 byte, signed */
  78. typedef unsigned char   UBYTE;      /* 1 byte, unsigned */
  79. typedef signed short    SWORD;      /* 2 bytes, signed */
  80. typedef unsigned short  UWORD;      /* 2 bytes, unsigned */
  81. typedef signed long     SLONG;      /* 4 bytes, signed */
  82. #if !defined(__OS2__)&&!defined(__EMX__)
  83. typedef unsigned long   ULONG;      /* 4 bytes, unsigned */
  84. typedef int             BOOL;       /* 0=false, <>0 true */
  85. #endif
  86. #endif
  87.  
  88. /*
  89.  *    ========== Error codes
  90.  */
  91.  
  92. enum {
  93.     MMERR_OPENING_FILE = 1,
  94.     MMERR_OUT_OF_MEMORY,
  95.  
  96.     MMERR_SAMPLE_TOO_BIG,
  97.     MMERR_OUT_OF_HANDLES,
  98.     MMERR_UNKNOWN_WAVE_TYPE,
  99.  
  100.     MMERR_LOADING_PATTERN,
  101.     MMERR_LOADING_TRACK,
  102.     MMERR_LOADING_HEADER,
  103.     MMERR_LOADING_SAMPLEINFO,
  104.     MMERR_NOT_A_MODULE,
  105.     MMERR_NOT_A_STREAM,
  106.     MMERR_MED_SYNTHSAMPLES,
  107.     MMERR_ITPACK_INVALID_DATA,
  108.  
  109.     MMERR_DETECTING_DEVICE,
  110.     MMERR_INVALID_DEVICE,
  111.     MMERR_INITIALIZING_MIXER,
  112.     MMERR_OPENING_AUDIO,
  113.     MMERR_16BIT_ONLY,
  114.     MMERR_NON_BLOCK,
  115.  
  116.     MMERR_AF_AUDIO_PORT,
  117.  
  118.     MMERR_AIX_CONFIG_INIT,
  119.     MMERR_AIX_CONFIG_CONTROL,
  120.     MMERR_AIX_CONFIG_START,
  121.  
  122.     MMERR_HP_SETSAMPLESIZE,
  123.     MMERR_HP_SETSPEED,
  124.     MMERR_HP_CHANNELS,
  125.     MMERR_HP_AUDIO_OUTPUT,
  126.     MMERR_HP_AUDIO_DESC,
  127.     MMERR_HP_GETGAINS,
  128.     MMERR_HP_SETGAINS,
  129.     MMERR_HP_BUFFERSIZE,
  130.  
  131.     MMERR_OSS_SETFRAGMENT,
  132.     MMERR_OSS_SETSAMPLESIZE,
  133.     MMERR_OSS_SETSTEREO,
  134.     MMERR_OSS_SETSPEED,
  135.  
  136.     MMERR_SGI_SPEED,
  137.     MMERR_SGI_16BIT,
  138.     MMERR_SGI_8BIT,
  139.     MMERR_SGI_STEREO,
  140.     MMERR_SGI_MONO,
  141.  
  142.     MMERR_SUN_INIT,
  143.     MMERR_SUN_16BIT_ULAW,
  144.  
  145.     MMERR_OS2_MIXSETUP,
  146.     MMERR_OS2_SEMAPHORE,
  147.     MMERR_OS2_TIMER,
  148.     MMERR_OS2_THREAD,
  149.  
  150.     MMERR_MAX
  151. };
  152.  
  153. /*
  154.  *    ========== Error handling
  155.  */
  156.  
  157. typedef void (MikMod_handler)(void);
  158. typedef MikMod_handler *MikMod_handler_t;
  159.  
  160. extern int  MikMod_errno;
  161. extern BOOL MikMod_critical;
  162. extern char *MikMod_strerror(int);
  163.  
  164. extern MikMod_handler_t MikMod_RegisterErrorHandler(MikMod_handler_t);
  165.  
  166. /*
  167.  *    ========== Library initialization and core functions
  168.  */
  169.  
  170. struct MDRIVER;
  171.  
  172. extern void   MikMod_RegisterAllDrivers(void);
  173.  
  174. extern CHAR*  MikMod_InfoDriver(void);
  175. extern void   MikMod_RegisterDriver(struct MDRIVER*);
  176.  
  177. extern BOOL   MikMod_Init(void);
  178. extern void   MikMod_Exit(void);
  179. extern BOOL   MikMod_Reset(void);
  180. extern BOOL   MikMod_SetNumVoices(int,int);
  181. extern BOOL   MikMod_Active(void);
  182. extern BOOL   MikMod_EnableOutput(void);
  183. extern void   MikMod_DisableOutput(void);
  184. extern void   MikMod_Update(void);
  185.  
  186. /*
  187.  *    ========== Samples
  188.  */
  189.  
  190. /* Sample playback should not be interrupted */
  191. #define SFX_CRITICAL 1
  192.  
  193. /* Sample format [loading and in-memory] flags: */
  194. #define SF_16BITS       0x0001
  195. #define SF_STEREO       0x0002
  196. #define SF_SIGNED       0x0004
  197. #define SF_BIG_ENDIAN   0x0008
  198. #define SF_DELTA        0x0010
  199. #define SF_ITPACKED        0x0020
  200.  
  201. #define    SF_FORMATMASK    0x003F
  202.  
  203. /* General Playback flags */
  204.  
  205. #define SF_LOOP         0x0040
  206. #define SF_BIDI         0x0080
  207. #define SF_REVERSE      0x0100
  208. #define SF_SUSTAIN      0x0200
  209.  
  210. #define SF_PLAYBACKMASK    0x03C0
  211.  
  212. /* Module-only Playback Flags */
  213.  
  214. #define SF_OWNPAN        0x0400
  215. #define SF_UST_LOOP     0x0800
  216.  
  217. #define SF_EXTRAPLAYBACKMASK    0x0C00
  218.  
  219. /* Panning constants */
  220. #define PAN_LEFT       0
  221. #define PAN_CENTER   128
  222. #define PAN_RIGHT    255
  223. #define PAN_SURROUND 512 /* panning value for Dolby Surround */
  224.  
  225. typedef struct SAMPLE {
  226.     SWORD  panning;     /* panning (0-255 or PAN_SURROUND) */
  227.     ULONG  speed;       /* Base playing speed/frequency of note */
  228.     UBYTE  volume;      /* volume 0-64 */
  229.     UWORD  flags;       /* sample format in memory */
  230.     ULONG  length;      /* length of sample (in samples!) */
  231.     ULONG  loopstart;   /* repeat position (relative to start, in samples) */
  232.     ULONG  loopend;     /* repeat end */
  233.     ULONG  susbegin;    /* sustain loop begin (in samples) \  Not Supported */
  234.     ULONG  susend;      /* sustain loop end                /      Yet! */
  235.  
  236.     /* Variables used by the module player only! (ignored for sound effects) */
  237.     UBYTE  globvol;     /* global volume */
  238.     UBYTE  vibflags;    /* autovibrato flag stuffs */
  239.     UBYTE  vibtype;     /* Vibratos moved from INSTRUMENT to SAMPLE */
  240.     UBYTE  vibsweep;
  241.     UBYTE  vibdepth;
  242.     UBYTE  vibrate;
  243.     CHAR*  samplename;  /* name of the sample */
  244.  
  245.     /* Values used internally only */
  246.     UWORD  avibpos;     /* autovibrato pos [player use] */
  247.     UBYTE  divfactor;   /* for sample scaling, maintains proper period slides */
  248.     ULONG  seekpos;     /* seek position in file */
  249.     SWORD  handle;      /* sample handle used by individual drivers */
  250. } SAMPLE;
  251.  
  252. /* Sample functions */
  253.  
  254. extern SAMPLE *Sample_Load(CHAR*);
  255. extern SAMPLE *Sample_LoadFP(FILE*);
  256. extern void   Sample_Free(SAMPLE*);
  257. extern SBYTE  Sample_Play(SAMPLE*,ULONG,UBYTE);
  258.  
  259. extern void   Voice_SetVolume(SBYTE,UWORD);
  260. extern void   Voice_SetFrequency(SBYTE,ULONG);
  261. extern void   Voice_SetPanning(SBYTE,ULONG);
  262. extern void   Voice_Play(SBYTE,SAMPLE*,ULONG);
  263. extern void   Voice_Stop(SBYTE);
  264. extern BOOL   Voice_Stopped(SBYTE);
  265. extern SLONG  Voice_GetPosition(SBYTE);
  266. extern ULONG  Voice_RealVolume(SBYTE);
  267.  
  268. /*
  269.  *    ========== Internal module representation (UniMod)
  270.  */
  271.  
  272. /*
  273.     Instrument definition - for information only, the only field which may be
  274.     of use in user programs is the name field
  275. */
  276.  
  277. /* Instrument note count */
  278. #define INSTNOTES     120
  279.  
  280. /* Envelope point */
  281. typedef struct ENVPT {
  282.     SWORD pos;
  283.     SWORD val;
  284. } ENVPT;
  285.  
  286. /* Instrument structure */
  287. typedef struct INSTRUMENT {
  288.     CHAR* insname;
  289.  
  290.     UBYTE flags;
  291.     UBYTE samplenumber[INSTNOTES];
  292.     UBYTE samplenote[INSTNOTES];
  293.  
  294.     UBYTE nnatype;
  295.     UBYTE dca;              /* duplicate check action */
  296.     UBYTE dct;              /* duplicate check type */
  297.     UBYTE globvol;
  298.     UWORD volfade;
  299.     SWORD panning;          /* instrument-based panning var */
  300.  
  301.     UBYTE pitpansep;        /* pitch pan separation (0 to 255) */
  302.     UBYTE pitpancenter;     /* pitch pan center (0 to 119) */
  303.     UBYTE rvolvar;          /* random volume varations (0 - 100%) */
  304.     UBYTE rpanvar;          /* random panning varations (0 - 100%) */
  305.  
  306.     /* volume envelope */
  307.     UBYTE volflg;           /* bit 0: on 1: sustain 2: loop */
  308.     UBYTE volpts;
  309.     UBYTE volsusbeg;
  310.     UBYTE volsusend;
  311.     UBYTE volbeg;
  312.     UBYTE volend;
  313.     ENVPT volenv[32];
  314.     /* panning envelope */
  315.     UBYTE panflg;           /* bit 0: on 1: sustain 2: loop */
  316.     UBYTE panpts;
  317.     UBYTE pansusbeg;
  318.     UBYTE pansusend;
  319.     UBYTE panbeg;
  320.     UBYTE panend;
  321.     ENVPT panenv[32];
  322.     /* pitch envelope */
  323.     UBYTE pitflg;           /* bit 0: on 1: sustain 2: loop */
  324.     UBYTE pitpts;
  325.     UBYTE pitsusbeg;
  326.     UBYTE pitsusend;
  327.     UBYTE pitbeg;
  328.     UBYTE pitend;
  329.     ENVPT pitenv[32];
  330. } INSTRUMENT;
  331.  
  332. struct MP_CONTROL;
  333. struct MP_VOICE;
  334.  
  335. /* Module flags */
  336. #define UF_XMPERIODS 0x01 /* XM periods / finetuning */
  337. #define UF_LINEAR    0x02 /* LINEAR periods (UF_XMPERIODS must be set) */
  338. #define UF_INST      0x04 /* Instruments are used */
  339. #define UF_NNA       0x08 /* New Note Actions used (set numvoices rather than
  340.                              numchn) */
  341. #define UF_S3MSLIDES 0x10 /* Uses old S3M volume slides */
  342.  
  343. typedef struct MODULE {
  344.     /* general module information */
  345.         CHAR*       songname;    /* name of the song */
  346.         CHAR*       modtype;     /* string type of module loaded */
  347.         CHAR*       comment;     /* module comments */
  348.  
  349.         UWORD       flags;       /* See UniMod Flags above */
  350.         UBYTE       numchn;      /* number of module channels */
  351.         UBYTE       numvoices;   /* max # voices used for full NNA playback */
  352.         UWORD       numpos;      /* number of positions in this song */
  353.         UWORD       numpat;      /* number of patterns in this song */
  354.         UWORD       numins;      /* number of instruments */
  355.         UWORD       numsmp;      /* number of samples */
  356. struct  INSTRUMENT* instruments; /* all instruments */
  357. struct  SAMPLE*     samples;     /* all samples */
  358.  
  359.     /* playback settings */
  360.         UWORD       reppos;      /* restart position */
  361.         UBYTE       initspeed;   /* initial song speed */
  362.         UBYTE       inittempo;   /* initial song tempo */
  363.         UBYTE       initvolume;  /* initial global volume (0 - 128) */
  364.         UWORD       panning[64]; /* 64 panning positions */
  365.         UBYTE       chanvol[64]; /* 64 channel positions */
  366.         UBYTE       bpm;         /* current beats-per-minute speed */
  367.         UWORD       sngspd;      /* current song speed */
  368.         SWORD       volume;      /* song volume (0-128) (or user volume) */
  369.  
  370.         BOOL        extspd;      /* extended speed flag (default enabled) */
  371.         BOOL        panflag;     /* panning flag (default enabled) */
  372.         BOOL        wrap;        /* wrap module ? (default disabled) */
  373.         BOOL        loop;         /* allow module to loop ? (default enabled) */
  374.         BOOL        fadeout;     /* volume fade out during last pattern */
  375.  
  376.         UWORD       patpos;      /* current row number */
  377.         SWORD       sngpos;      /* current song position */
  378.         ULONG       sngtime;     /* current song time in 2^-10 seconds */
  379.  
  380.     /* internal module representation */
  381.         UWORD       numtrk;      /* number of tracks */
  382.         UBYTE**     tracks;      /* array of numtrk pointers to tracks */
  383.         UWORD*      patterns;    /* array of Patterns */
  384.         UWORD*      pattrows;    /* array of number of rows for each pattern */
  385.         UWORD*      positions;   /* all positions */
  386.  
  387.         BOOL        forbid;      /* if true, no player update! */
  388.         UWORD       numrow;      /* number of rows on current pattern */
  389.         UWORD       vbtick;      /* tick counter (counts from 0 to sngspd) */
  390.         UWORD       sngremainder;/* used for song time computation */
  391.  
  392. struct MP_CONTROL*  control;     /* Effects Channel info (size pf->numchn) */
  393. struct MP_VOICE*    voice;       /* Audio Voice information (size md_numchn) */
  394.  
  395.         UBYTE       globalslide; /* global volume slide rate */
  396.         UBYTE       pat_repcrazy;/* module has just looped to position -1 */
  397.         UWORD       patbrk;      /* position where to start a new pattern */
  398.         UBYTE       patdly;      /* patterndelay counter (command memory) */
  399.         UBYTE       patdly2;     /* patterndelay counter (real one) */
  400.         SWORD       posjmp;      /* flag to indicate a jump is needed... */
  401. } MODULE;
  402.  
  403. /*
  404.  *    ========== Module loaders
  405.  */
  406.  
  407. struct MLOADER;
  408.  
  409. extern CHAR*   MikMod_InfoLoader(void);
  410. extern void    MikMod_RegisterAllLoaders(void);
  411. extern void    MikMod_RegisterLoader(struct MLOADER*);
  412.  
  413. extern struct MLOADER load_669; /* 669 and Extended-669 (by Tran/Renaissance) */
  414. extern struct MLOADER load_amf; /* DMP Advanced Module Format */
  415. extern struct MLOADER load_dsm; /* DSIK internal module format */
  416. extern struct MLOADER load_far; /* Farandole Composer Module */
  417. extern struct MLOADER load_it;  /* Impulse Tracker (by Jeffrey Lim) */
  418. extern struct MLOADER load_med; /* Amiga MED modules (by OctaMED) */
  419. extern struct MLOADER load_m15; /* 15-instrument */
  420. extern struct MLOADER load_mod; /* Standard 31-instrument Module loader */
  421. extern struct MLOADER load_mtm; /* Multi-Tracker Module (by Renaissance) */
  422. extern struct MLOADER load_stm; /* ScreamTracker 2 (by Future Crew) */
  423. extern struct MLOADER load_s3m; /* ScreamTracker 3 (by Future Crew) */
  424. extern struct MLOADER load_ult; /* UltraTracker  */
  425. extern struct MLOADER load_xm;  /* FastTracker 2 (by Triton) */
  426.  
  427. /*
  428.  *    ========== Module player
  429.  */
  430.  
  431. extern MODULE* Player_LoadFP(FILE*,int,BOOL);
  432. extern MODULE* Player_Load(CHAR*,int,BOOL);
  433. extern CHAR*   Player_LoadTitle(CHAR*);
  434. extern void    Player_Free(MODULE*);
  435. extern void    Player_Start(MODULE*);
  436. extern BOOL    Player_Active(void);
  437. extern void    Player_Stop(void);
  438. extern void    Player_TogglePause(void);
  439. extern BOOL    Player_Paused(void);
  440. extern void    Player_NextPosition(void);
  441. extern void    Player_PrevPosition(void);
  442. extern void    Player_SetPosition(UWORD);
  443. extern BOOL    Player_Muted(UBYTE);
  444. extern void    Player_SetVolume(SWORD);
  445. extern MODULE* Player_GetModule(void);
  446. extern void    Player_SetSpeed(UWORD);
  447. extern void    Player_SetTempo(UWORD);
  448. extern void    Player_Unmute(SLONG,...);
  449. extern void    Player_Mute(SLONG,...);
  450. extern void    Player_ToggleMute(SLONG,...);
  451. extern int     Player_GetChannelVoice(int);
  452.  
  453. typedef void (MikMod_player)(void);
  454. typedef MikMod_player *MikMod_player_t;
  455.  
  456. extern MikMod_player_t MikMod_RegisterPlayer(MikMod_player_t);
  457.  
  458. #define MUTE_EXCLUSIVE  32000
  459. #define MUTE_INCLUSIVE  32001
  460.  
  461. /*
  462.  *    ========== Drivers
  463.  */
  464.  
  465. enum {
  466.     MD_MUSIC = 0,
  467.     MD_SNDFX
  468. };
  469.  
  470. enum {
  471.     MD_HARDWARE = 0,
  472.     MD_SOFTWARE
  473. };
  474.  
  475. /* Mixing flags */
  476.  
  477. /* These ones take effect only after MikMod_Init or MikMod_Reset */
  478. #define DMODE_16BITS       1 /* enable 16 bit output */
  479. #define DMODE_STEREO       2 /* enable stereo output */
  480. #define DMODE_SOFT_SNDFX   4 /* Process sound effects via software mixer */
  481. #define DMODE_SOFT_MUSIC   8 /* Process music via software mixer */
  482. /* These take effect immediately. */
  483. #define DMODE_SURROUND    16 /* enable surround sound */
  484. #define DMODE_INTERP      32 /* enable interpolation */
  485. #define DMODE_REVERSE     64 /* reverse stereo */
  486.  
  487. struct SAMPLOAD;
  488. typedef struct MDRIVER {
  489. struct MDRIVER* next;
  490.     CHAR*       Name;
  491.     CHAR*       Version;
  492.     UBYTE       HardVoiceLimit; /* Limit of hardware mixer voices */
  493.     UBYTE       SoftVoiceLimit; /* Limit of software mixer voices */
  494.  
  495.     BOOL        (*IsPresent)        (void);
  496.     SWORD       (*SampleLoad)       (struct SAMPLOAD*,int);
  497.     void        (*SampleUnload)     (SWORD);
  498.     ULONG       (*FreeSampleSpace)  (int);
  499.     ULONG       (*RealSampleLength) (int,struct SAMPLE*);
  500.     BOOL        (*Init)             (void);
  501.     void        (*Exit)             (void);
  502.     BOOL        (*Reset)            (void);
  503.     BOOL        (*SetNumVoices)     (void);
  504.     BOOL        (*PlayStart)        (void);
  505.     void        (*PlayStop)         (void);
  506.     void        (*Update)           (void);
  507.     void        (*VoiceSetVolume)   (UBYTE,UWORD);
  508.     void        (*VoiceSetFrequency)(UBYTE,ULONG);
  509.     void        (*VoiceSetPanning)  (UBYTE,ULONG);
  510.     void        (*VoicePlay)        (UBYTE,SWORD,ULONG,ULONG,ULONG,ULONG,UWORD);
  511.     void        (*VoiceStop)        (UBYTE);
  512.     BOOL        (*VoiceStopped)     (UBYTE);
  513.     SLONG       (*VoiceGetPosition) (UBYTE);
  514.     ULONG       (*VoiceRealVolume)  (UBYTE);
  515. } MDRIVER;
  516.  
  517. /* These variables can be changed at ANY time and results will be immediate */
  518. extern UBYTE md_volume;      /* Global sound volume (0-128) */
  519. extern UBYTE md_musicvolume; /* volume of song */
  520. extern UBYTE md_sndfxvolume; /* volume of sound effects */
  521. extern UBYTE md_reverb;      /* 0 = none;  15 = chaos */
  522. extern UBYTE md_pansep;      /* 0 = mono;  128 == 100% (full left/right) */
  523.  
  524. /* The variables below can be changed at any time, but changes will not be
  525.    implemented until MikMod_Reset is called. A call to MikMod_Reset may result
  526.    in a skip or pop in audio (depending on the soundcard driver and the settings
  527.    changed). */
  528. extern UWORD md_device;      /* Device */
  529. extern UWORD md_mixfreq;     /* mixing frequency.  Valid 5000 -> 44100 */
  530. extern UWORD md_mode;        /* Mode.  See DMODE_? flags above */
  531.  
  532. /* The following variable should not be changed! */
  533. extern MDRIVER* md_driver;   /* Current driver in use. */
  534.  
  535. /* Known drivers list */
  536.  
  537. extern struct MDRIVER drv_nos;    /* no sound */
  538. extern struct MDRIVER drv_raw;    /* raw file disk writer [music.raw] */
  539. extern struct MDRIVER drv_stdout;
  540. extern struct MDRIVER drv_wav;    /* RIFF WAVE file disk writer [music.wav] */
  541.  
  542. extern struct MDRIVER drv_AF;     /* Dec Alpha AudioFile */
  543. extern struct MDRIVER drv_aix;    /* AIX audio device */
  544. extern struct MDRIVER drv_alsa;   /* Advanced Linux Sound Architecture (ALSA) */
  545. extern struct MDRIVER drv_esd;    /* Enlightened sound daemon (EsounD) */
  546. extern struct MDRIVER drv_hp;     /* HP-UX audio device */
  547. extern struct MDRIVER drv_oss;    /* OpenSound System (Linux,FreeBSD...) */
  548. extern struct MDRIVER drv_sgi;    /* SGI audio library */
  549. extern struct MDRIVER drv_sun;    /* Sun/NetBSD/OpenBSD audio device */
  550.  
  551. extern struct MDRIVER drv_dart;   /* OS/2 Direct Audio RealTime */
  552. extern struct MDRIVER drv_os2s;   /* OS/2 MMPM/2 small buffers */
  553. extern struct MDRIVER drv_os2l;   /* OS/2 MMPM/2 large buffers */
  554.  
  555. #ifdef __cplusplus
  556. }
  557. #endif
  558.  
  559. #endif
  560.