home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ Games Programming
/
CPPGAMES.ISO
/
digmid
/
real
/
digplay.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-01-03
|
9KB
|
156 lines
/*****************************************************************************/
/* DIGPLAY.H C prototype header for the DIGPAK API link layer */
/* DIGPLAY.ASM. Because sound cards playback sound via DMA */
/* addresses passed must be in the first 1mb of address space. */
/* */
/* See DIGPKAPI.DOC for complete DIGPAK documentation. */
/* */
/* */
/* Written by John W. Ratcliff (c) 1994 */
/* Compuserve: 70253,3237 */
/* Genie: J.RATCLIFF3 */
/* BBS: 1-314-939-0200 */
/* Addresss: */
/* 747 Napa Lane */
/* St. Charles, MO 63304 */
/* */
/* A $500 per product license fee applies to all commercial software */
/* products distributed with ANY DIGPAK drivers. */
/* */
/* To pay a license, simply write a check for $500 payable to */
/* The Audio Solution, 747 Napa Lane, St. Charles, MO 63304 */
/* with a copy of your commerical product. You will receive a signed */
/* license agreement from The Audio Solution shortly thereafter. */
/* This license fee applies specifically to the inclusion with your */
/* distribution disk any of the DIGPAK drivers from The Audio Solution*/
/* These drivers are copyrighted works, created by me, to enhance the */
/* use of sound and music in DOS based commercial software. The */
/* license fees collected are used to maintain the drivers and keep */
/* the BBS running. There is a seperate license fee for the use */
/* and distribution of MIDPAK drivers. */
/* */
/* See accompaning documentation regarding license fees for MIDPAK */
/* distribution. You would be ill-advised to distribute a commercial */
/* product containing either DIGPAK and/or MIDPAK drivers without */
/* having paid the distribution license fee. Since your product would*/
/* contain unlicensed copyrighted software from The Audio Solution, */
/* your product could be required to be immediately removed from retail*/
/* distribution. I doubt this is going to be a problem. Clearly if */
/* your product is enhanced by the use of these drivers, your company */
/* can easily afford a nominal license fee of $500 in exchange for */
/* getting the use of several man-years of software engineering */
/* resources. */
/*****************************************************************************/
/* Bit flags to denote audio driver capabilities. */
/* returned by the AudioCapabilities call. */
#define PLAYBACK 1 // Bit zero true if can play audio in the background.
#define MASSAGE 2 // Bit one is true if data is massaged.
#define FIXEDFREQ 4 // Bit two is true if driver plays at fixed frequency.
#define USESTIMER 8 // Bit three is true, if driver uses timer.
#define SHARESTIMER 16 // Bit 4, timer can be shared
#define STEREOPAN 64 // Bit 6, supports stereo panning.
#define STEREOPLAY 128 // Bit 7, supports 8 bit PCM stereo playback.
#define AUDIORECORD 256 // Bit 8, supports audio recording!
#define DMABACKFILL 512 // Bit 9, support DMA backfilling.
#define PCM16 1024 // Bit 10, supports 16 bit digital audio.
#define PCM16STEREO 2048 // Bit 11, driver support 16 bit digital sound
// All digpak drivers which support 16 bit digital sound ASSUME 16 bit
// SIGNED data, whereas all 8 bit data is assumed UNSIGNED. This correlates
// exactly to the hardware specifcations for most all DMA driven PC sound
// cards, including SB16, Gravis UltraSound and ProAudio Spectrum 16 sound cards.
typedef struct
{
char far *sound; // address of audio data. IMPORANT SEE NOTE BELOW!!!!!!!!!!
unsigned short sndlen; // Length of audio sample.
short far *IsPlaying; // Address of play status flag.
short frequency; // Playback frequency. recommended 11khz.
} SNDSTRUC;
/** !!! IMPORTANT NOT REGARDING THE SOUND ENTRY IN THE SOUND STRUCTURE !!! **/
/** Since this sound structure is in the identical format as that used in **/
/** real-mode, this entry is NOT a flat-model 32 bit address but in real **/
/** mode offset:segment format, in the first 1mb of address space. The **/
/** sound effect cannot be greater than 64k in length! **/
/** Use the DOSCALLS function call RealPtr to convert the 32 bit flat **/
/** address into offset:segment format. Example: snd->sound = RealPtr(data)*/
/** which will convert the low 1mb flat addres 'data' into offset:segment */
/** format and store it into the 'sound' entry of the SNDSTRUC structure */
/** pointed to by 'snd'. 'snd' MUST be in the first 1mb of address space as*/
/** well. 'snd' is passed as a flat-model address, and DIGPAK 3.4 drivers */
/** will treat it as such so long as the SetDMPIMode has been set on. This */
/** is done automatically by LOADER.C during the InitDigPak call. */
extern short cdecl far DigPlay(SNDSTRUC far *sndplay); // 688h -> Play 8 bit digitized sound.
extern short cdecl far SoundStatus(void); // 689h -> Report sound driver status.
extern void cdecl far MassageAudio(SNDSTRUC far *sndplay); // 68Ah -> Preformat 8 bit digitized sound.
extern void cdecl far DigPlay2(SNDSTRUC far *sndplay); // 68Bh -> Play preformatted data.
extern short cdecl far AudioCapabilities(void); // 68Ch -> Report audio driver capabilities.
extern void cdecl far StopSound(void); // 68Fh -> Stop current sound from playing.
extern short cdecl far PostAudioPending(SNDSTRUC far *sndplay);
#define NOTPLAYING 0 // No sound is playing.
#define PLAYINGNOTPENDING 1 // Playing a sound, but no sound is pending.
#define PENDINGSOUND 2 // Playing, and a sound is pending.
extern short cdecl far AudioPendingStatus(void);
#define FULLRIGHT 0
#define FULLLEFT 127
#define FRONTANDCENTER 64
extern short cdecl far SetStereoPan(short panvalue); // 0-127, 0 full right.
// 64 full volume both.
// 127 full volume left.
#define PCM_8_MONO 0
#define PCM_8_STEREO 1
#define PCM_16_MONO 2
#define PCM_16_STEREO 3
extern short cdecl far SetPlayMode(short playmode);
// Return 0 if mode not available, 1 if mode set.
extern short cdecl far SetRecordMode(short mode); // Set audio recording mode.
extern short far * cdecl far PendingAddress(void); // Reports the far address of the pending
// flag. If this memory location pointed to by this address is 1 that means
// a pending sound effect is still pending. When this becomes zero, then your
// application software can post the next piece of audio to play. It is
// preferable to use this semaphore to know when to post the next buffer
// rather than to use the AudioPendingStatus call.
extern short far * cdecl far ReportSemaphoreAddress(void); // Reports the far address of the DigPak
// semaphore. If this semaphore is true, then DigPak is currently active
// and you shouldn't post any DigPak calls. This is EXTREMELY important if
// you are trying to invoke DigPak functions via a hardware interrupt, where
// you could potentially have interrupted DigPak itself.
extern short cdecl far ReportVersionNumber(void); // Report the DigPak version number.
// Return code is times 100, meaning that version 3.1 would be returned
// as the decimal number 310. This function wasn't supported prior to
// version 3.1 release, so it will be returned as 0, for versions prior
// to 3.1.
extern short cdecl far SetBackFillMode(short mode); // Turn DMA backfill mode on/off, return code
// of 1 means mode was set. Return code of 0 means driver doesn't support
// DMA backfill.
extern unsigned short cdecl far ReportDMAC(void); // Report current DMA counter.
extern short cdecl far VerifyDMA(char far *data,short length); // Verify this buffer block
// doesn't cross a 64k boundary. Return code of 1 means the block is OK.
// return code of 0 means the block can't be used, try another.
extern void cdecl far NullSound(char far *sound,short sndlen,short null);
/* Support routines */
extern void cdecl far WaitSound(void); // Wait until sound playback completed.
extern short cdecl far CheckIn(void); // Is sound driver available? 0 no, 1 yes.
extern void cdecl far SetDPMIMode(short mode); // Set DPMI addressing mode for DIGPAK
extern void cdecl far DigPakIdentityString(char *str);
extern short cdecl far InitDP(short segment); // Bootstrap hardware.
extern void cdecl far DeInitDP(short segment); // Uninitialize DIGPAK