/* SDEVICE.H * * Sound Device definitions * * $Id: sdevice.h,v 1.9 1997/01/16 18:41:59 pekangas Exp $ * * Copyright 1996,1997 Housemarque Inc. * * This file is part of the MIDAS Sound System, and may only be * used, modified and distributed under the terms of the MIDAS * Sound System license, LICENSE.TXT. By continuing to use, * modify or distribute this file you indicate that you have * read the license and understand and accept it fully. */ #ifndef __SDEVICE_H #define __SDEVICE_H #ifdef __16__ #define SMPMAX 65519 /* max sample length (65536-16 - 1) */ #else #define SMPMAX 2147483631 /* max sample length (2^31 - 17) */ #endif #define MAXSAMPLES 256 /* maximum number of samples */ #define DMABUFLEN 25 /* mixing buffer length is a 1/25th of a second */ /****************************************************************************\ * enum sdSampleType * ----------------- * Description: Sample types \****************************************************************************/ enum sdSampleType { smpNone = 0, /* no sample */ smp8bitMono = 1, /* 8-bit mono unsigned sample */ smp8bit = smp8bitMono, /* for compatibility */ smp16bitMono = 2, /* 16-bit mono signed sample */ smp16bit = smp16bitMono, /* for compatibility */ smp8bitStereo = 3, /* 8-bit stereo unsigned sample */ smp16bitStereo = 4 /* 16-bit stereo signed sample */ }; /****************************************************************************\ * enum sdLoopMode * --------------- * Description: Sample looping modes \****************************************************************************/ enum sdLoopMode { sdLoopNone = 0, /* no looping */ sdLoop1 = 1, /* 1 loop, release ends note */ sdLoop1Rel = 2, /* 1 loop, sample data after loop is played when note is released */ sdLoop2 = 3, /* 2 loops, when note is released playing is continued looping the second loop */ sdLoopAmigaNone = 4, /* Amiga compatible looping, no loop - ALE logic enabled anyway */ sdLoopAmiga = 5 /* Amiga compatible looping - 1 loop, ALE logic enabled */ }; /****************************************************************************\ * enum sdLoopType * --------------- * Description: Sample looping type for one loop \****************************************************************************/ enum sdLoopType { loopNone = 0, /* no looping */ loopUnidir = 1, /* unidirectional loop */ loopBidir = 2 /* bidirectional loop */ }; /****************************************************************************\ * enum sdSmpPos * ------------- * Description: Sample positions in memory \****************************************************************************/ enum sdSmpPos { sdSmpNone = 0, /* no sample */ sdSmpConv, /* conventional memory */ sdSmpEMS /* EMS */ }; /****************************************************************************\ * struct sdSample * --------------- * Description: Sound Device sample information structure \****************************************************************************/ typedef struct { uchar *sample; /* sample data pointer */ int samplePos; /* sample position in memory, see enum sdSmpPos */ int sampleType; /* sample type, see enum sdSampleType */ unsigned sampleLength; /* sample length */ int loopMode; /* sample looping mode, see enum sdLoopMode */ unsigned loop1Start; /* first loop start */ unsigned loop1End; /* first loop end */ int loop1Type; /* first loop type, see enum sdLoopType */ unsigned loop2Start; /* second loop start */ unsigned loop2End; /* second loop end */ int loop2Type; /* second loop type, see enum sdLoopType */ } sdSample; /****************************************************************************\ * enum sdPanning * -------------- * Description: Sound Device panning values. Legal values range from * panLeft to panRight, in steps of 1, plus panSurround. * Surround sound is played from middle if surround is not * enabled. \****************************************************************************/ enum sdPanning { panLeft = -64, /* left speaker */ panMiddle = 0, /* middle (both speakers) */ panRight = 64, /* right speaker */ panSurround = 0x80 /* surround sound */ }; /****************************************************************************\ * enum sdMode * ----------- * Description: Possible SoundDevice output modes \****************************************************************************/ enum sdMode { sdMono = 1, /* mono */ sdStereo = 2, /* stereo */ sd8bit = 4, /* 8-bit output */ sd16bit = 8 /* 16-bit output */ }; /****************************************************************************\ * enum sdConfigBits * ----------------- * Description: Sound Device configuration information bits \****************************************************************************/ enum sdConfigBits { sdUsePort = 1, /* SD uses an I/O port */ sdUseIRQ = 2, /* SD uses an IRQ */ sdUseDMA = 4, /* SD uses a DMA channel */ sdUseMixRate = 8, /* SD uses the set mixing rate */ sdUseOutputMode = 16, /* SD uses the set output mode */ sdUseDSM = 32 /* SD uses software mixing (DSM) */ }; /****************************************************************************\ * struct SoundDevice * ------------------ * Description: SoundDevice structure. See SDEVICE.TXT for documentation \****************************************************************************/ typedef struct { unsigned tempoPoll; unsigned configBits; /* Configuration info bits. See enum sdConfigBits. */ unsigned port; /* Sound Device I/O port address */ unsigned IRQ; /* Sound Device IRQ number */ unsigned DMA; /* Sound Device DMA channel number */ unsigned cardType; /* Sound Device sound card type. Starting from 1, 0 means autodetect */ unsigned numCardTypes; /* number of different sound card types for this Sound Device */ unsigned modes; /* Possible modes for this SD, see enum sdMode. Updated by Detect() */ char *name; /* pointer to Sound Device name */ char **cardNames; /* pointer to an array of pointers to sound card name strings */ unsigned numPortAddresses; /* number of possible port addresses in table */ unsigned *portAddresses; /* pointer to an array of possible I/O port addresses */ int (CALLING *Detect)(int *result); int (CALLING *Init)(unsigned mixRate, unsigned mode); int (CALLING *Close)(void); int (CALLING *GetMixRate)(unsigned *mixRate); int (CALLING *GetMode)(unsigned *mode); int (CALLING *OpenChannels)(unsigned channels); int (CALLING *CloseChannels)(void); int (CALLING *ClearChannels)(void); int (CALLING *Mute)(int mute); int (CALLING *Pause)(int pause); int (CALLING *SetMasterVolume)(unsigned masterVolume); int (CALLING *GetMasterVolume)(unsigned *masterVolume); int (CALLING *SetAmplification)(unsigned amplification); int (CALLING *GetAmplification)(unsigned *amplification); int (CALLING *PlaySound)(unsigned channel, ulong rate); int (CALLING *ReleaseSound)(unsigned channel); int (CALLING *StopSound)(unsigned channel); int (CALLING *SetRate)(unsigned channel, ulong rate); int (CALLING *GetRate)(unsigned channel, ulong *rate); int (CALLING *SetVolume)(unsigned channel, unsigned volume); int (CALLING *GetVolume)(unsigned channel, unsigned *volume); int (CALLING *SetSample)(unsigned channel, unsigned smpHandle); int (CALLING *GetSample)(unsigned channel, unsigned *smpHandle); int (CALLING *SetPosition)(unsigned channel, unsigned pos); int (CALLING *GetPosition)(unsigned channel, unsigned *pos); int (CALLING *GetDirection)(unsigned channel, int *direction); int (CALLING *SetPanning)(unsigned channel, int panning); int (CALLING *GetPanning)(unsigned channel, int *panning); int (CALLING *MuteChannel)(unsigned channel, int mute); int (CALLING *AddSample)(sdSample *sample, int copySample, unsigned *smpHandle); int (CALLING *RemoveSample)(unsigned smpHandle); int (CALLING *SetUpdRate)(unsigned updRate); int (CALLING *StartPlay)(void); int (CALLING *Play)(int *callMP); #ifdef SUPPORTSTREAMS int (CALLING *StartStream)(unsigned channel, uchar *buffer, unsigned bufferLength, int sampleType, ulong rate); int (CALLING *StopStream)(unsigned channel); int (CALLING *SetLoopCallback)(unsigned channel, void (CALLING *callback) (unsigned channel)); int (CALLING *SetStreamWritePosition)(unsigned channel, unsigned position); #endif } SoundDevice; #endif /* * $Log: sdevice.h,v $ * Revision 1.9 1997/01/16 18:41:59 pekangas * Changed copyright messages to Housemarque * * Revision 1.8 1997/01/16 18:21:23 pekangas * Added function SetStreamWritePosition * * Revision 1.7 1996/10/09 17:59:59 pekangas * Fixed to conform to the Sound Device specification * * Revision 1.6 1996/07/13 18:01:30 pekangas * Fixed to compile with Visual C * * Revision 1.5 1996/05/28 20:28:45 pekangas * Fixed a minor but annoying typo * * Revision 1.4 1996/05/26 20:56:17 pekangas * Added rate to SoundDevice.StartStream prototype * * Revision 1.3 1996/05/24 16:20:36 jpaana * Fixed for Linux * * Revision 1.2 1996/05/23 18:24:02 pekangas * Added 8-bit stereo and 16-bit mono & stereo sample types and stream playing functions * * Revision 1.1 1996/05/22 20:49:33 pekangas * Initial revision * */