/* * $Id: audio.h 1.17 1996/09/25 17:13:02 chasan released $ * * SEAL Synthetic Audio Library API Interface * * Copyright (C) 1995, 1996 Carlos Hasan. All Rights Reserved. * */ #ifndef __AUDIO_H #define __AUDIO_H #ifdef __cplusplus extern "C" { #endif #ifndef WIN32 #define AIAPI #else #define AIAPI __stdcall #endif #ifndef WINAPI /* atomic data types definitions */ typedef void VOID; typedef char CHAR; typedef int INT; typedef long LONG; typedef int BOOL; typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned int UINT; typedef unsigned long DWORD; typedef VOID* LPVOID; typedef CHAR* LPCHAR; typedef INT* LPINT; typedef LONG* LPLONG; typedef BOOL* LPBOOL; typedef BYTE* LPBYTE; typedef WORD* LPWORD; typedef UINT* LPUINT; typedef DWORD* LPDWORD; typedef CHAR* LPSTR; typedef DWORD HANDLE; /* helper macros */ #define LOBYTE(s) ((BYTE)(s)) #define HIBYTE(s) ((BYTE)((WORD)(s)>>8)) #define LOWORD(l) ((WORD)(l)) #define HIWORD(l) ((WORD)((DWORD)(l)>>16)) #define MAKEWORD(l,h) ((WORD)(((BYTE)(l))|(((WORD)((BYTE)(h)))<<8))) #define MAKELONG(l,h) ((DWORD)(((WORD)(l))|(((DWORD)((WORD)(h)))<<16))) #endif /* audio system version number */ #define AUDIO_SYSTEM_VERSION 0x0101 /* audio capabilities bit fields definitions */ #define AUDIO_FORMAT_1M08 0x00000001 #define AUDIO_FORMAT_1S08 0x00000002 #define AUDIO_FORMAT_1M16 0x00000004 #define AUDIO_FORMAT_1S16 0x00000008 #define AUDIO_FORMAT_2M08 0x00000010 #define AUDIO_FORMAT_2S08 0x00000020 #define AUDIO_FORMAT_2M16 0x00000040 #define AUDIO_FORMAT_2S16 0x00000080 #define AUDIO_FORMAT_4M08 0x00000100 #define AUDIO_FORMAT_4S08 0x00000200 #define AUDIO_FORMAT_4M16 0x00000400 #define AUDIO_FORMAT_4S16 0x00000800 /* audio format bit fields defines for devices and waveforms */ #define AUDIO_FORMAT_8BITS 0x0000 #define AUDIO_FORMAT_16BITS 0x0001 #define AUDIO_FORMAT_LOOP 0x0010 #define AUDIO_FORMAT_BIDILOOP 0x0020 #define AUDIO_FORMAT_REVERSE 0x0080 #define AUDIO_FORMAT_MONO 0x0000 #define AUDIO_FORMAT_STEREO 0x0100 #define AUDIO_FORMAT_FILTER 0x8000 /* audio resource limits defines */ #define AUDIO_MAX_VOICES 32 #define AUDIO_MAX_SAMPLES 16 #define AUDIO_MAX_PATCHES 128 #define AUDIO_MAX_PATTERNS 256 #define AUDIO_MAX_ORDERS 256 #define AUDIO_MAX_NOTES 96 #define AUDIO_MAX_POINTS 12 #define AUDIO_MIN_PERIOD 1 #define AUDIO_MAX_PERIOD 31999 #define AUDIO_MIN_VOLUME 0x00 #define AUDIO_MAX_VOLUME 0x40 #define AUDIO_MIN_PANNING 0x00 #define AUDIO_MAX_PANNING 0xFF #define AUDIO_MIN_POSITION 0x00000000L #define AUDIO_MAX_POSITION 0x00100000L #define AUDIO_MIN_FREQUENCY 0x00000200L #define AUDIO_MAX_FREQUENCY 0x00080000L /* audio error code defines */ #define AUDIO_ERROR_NONE 0x0000 #define AUDIO_ERROR_INVALHANDLE 0x0001 #define AUDIO_ERROR_INVALPARAM 0x0002 #define AUDIO_ERROR_NOTSUPPORTED 0x0003 #define AUDIO_ERROR_BADDEVICEID 0x0004 #define AUDIO_ERROR_NODEVICE 0x0005 #define AUDIO_ERROR_DEVICEBUSY 0x0006 #define AUDIO_ERROR_BADFORMAT 0x0007 #define AUDIO_ERROR_NOMEMORY 0x0008 #define AUDIO_ERROR_NODRAMMEMORY 0x0009 #define AUDIO_ERROR_FILENOTFOUND 0x000A #define AUDIO_ERROR_BADFILEFORMAT 0x000B #define AUDIO_LAST_ERROR 0x000B /* audio device identifiers */ #define AUDIO_DEVICE_NONE 0x0000 #define AUDIO_DEVICE_MAPPER 0xFFFF /* audio product identifiers */ #define AUDIO_PRODUCT_NONE 0x0000 #define AUDIO_PRODUCT_SB 0x0001 #define AUDIO_PRODUCT_SB15 0x0002 #define AUDIO_PRODUCT_SB20 0x0003 #define AUDIO_PRODUCT_SBPRO 0x0004 #define AUDIO_PRODUCT_SB16 0x0005 #define AUDIO_PRODUCT_AWE32 0x0006 #define AUDIO_PRODUCT_WSS 0x0007 #define AUDIO_PRODUCT_ESS 0x0008 #define AUDIO_PRODUCT_GUS 0x0009 #define AUDIO_PRODUCT_GUSDB 0x000A #define AUDIO_PRODUCT_GUSMAX 0x000B #define AUDIO_PRODUCT_IWAVE 0x000C #define AUDIO_PRODUCT_PAS 0x000D #define AUDIO_PRODUCT_PAS16 0x000E #define AUDIO_PRODUCT_ARIA 0x000F #define AUDIO_PRODUCT_WINDOWS 0x0100 #define AUDIO_PRODUCT_LINUX 0x0101 #define AUDIO_PRODUCT_SPARC 0x0102 #define AUDIO_PRODUCT_SGI 0x0103 #define AUDIO_PRODUCT_DSOUND 0x0104 /* audio envelope bit fields */ #define AUDIO_ENVELOPE_ON 0x0001 #define AUDIO_ENVELOPE_SUSTAIN 0x0002 #define AUDIO_ENVELOPE_LOOP 0x0004 /* audio pattern bit fields */ #define AUDIO_PATTERN_PACKED 0x0080 #define AUDIO_PATTERN_NOTE 0x0001 #define AUDIO_PATTERN_SAMPLE 0x0002 #define AUDIO_PATTERN_VOLUME 0x0004 #define AUDIO_PATTERN_COMMAND 0x0008 #define AUDIO_PATTERN_PARAMS 0x0010 /* audio module bit fields */ #define AUDIO_MODULE_AMIGA 0x0000 #define AUDIO_MODULE_LINEAR 0x0001 #define AUDIO_MODULE_PANNING 0x8000 #pragma pack(1) /* audio capabilities structure */ typedef struct { WORD wProductId; /* product identifier */ CHAR szProductName[30]; /* product name */ DWORD dwFormats; /* formats supported */ } AUDIOCAPS, *LPAUDIOCAPS; /* audio format structure */ typedef struct { UINT nDeviceId; /* device identifier */ WORD wFormat; /* playback format */ WORD nSampleRate; /* sampling frequency */ } AUDIOINFO, *LPAUDIOINFO; /* audio waveform structure */ typedef struct { LPBYTE lpData; /* data pointer */ DWORD dwHandle; /* waveform handle */ DWORD dwLength; /* waveform length */ DWORD dwLoopStart; /* loop start point */ DWORD dwLoopEnd; /* loop end point */ WORD nSampleRate; /* sampling rate */ WORD wFormat; /* format bits */ } AUDIOWAVE, *LPAUDIOWAVE; /* audio envelope point structure */ typedef struct { WORD nFrame; /* envelope frame */ WORD nValue; /* envelope value */ } AUDIOPOINT, *LPAUDIOPOINT; /* audio envelope structure */ typedef struct { AUDIOPOINT aEnvelope[AUDIO_MAX_POINTS]; /* envelope points */ BYTE nPoints; /* number of points */ BYTE nSustain; /* sustain point */ BYTE nLoopStart; /* loop start point */ BYTE nLoopEnd; /* loop end point */ WORD wFlags; /* envelope flags */ WORD nSpeed; /* envelope speed */ } AUDIOENVELOPE, *LPAUDIOENVELOPE; /* audio sample structure */ typedef struct { CHAR szSampleName[32]; /* sample name */ BYTE nVolume; /* default volume */ BYTE nPanning; /* default panning */ BYTE nRelativeNote; /* relative note */ BYTE nFinetune; /* finetune */ AUDIOWAVE Wave; /* waveform handle */ } AUDIOSAMPLE, *LPAUDIOSAMPLE; /* audio patch structure */ typedef struct { CHAR szPatchName[32]; /* patch name */ BYTE aSampleNumber[AUDIO_MAX_NOTES]; /* multi-sample table */ WORD nSamples; /* number of samples */ BYTE nVibratoType; /* vibrato type */ BYTE nVibratoSweep; /* vibrato sweep */ BYTE nVibratoDepth; /* vibrato depth */ BYTE nVibratoRate; /* vibrato rate */ WORD nVolumeFadeout; /* volume fadeout */ AUDIOENVELOPE Volume; /* volume envelope */ AUDIOENVELOPE Panning; /* panning envelope */ LPAUDIOSAMPLE aSampleTable; /* sample table */ } AUDIOPATCH, *LPAUDIOPATCH; /* audio pattern structure */ typedef struct { WORD nPacking; /* packing type */ WORD nTracks; /* number of tracks */ WORD nRows; /* number of rows */ WORD nSize; /* data size */ LPBYTE lpData; /* data pointer */ } AUDIOPATTERN, *LPAUDIOPATTERN; /* audio module structure */ typedef struct { CHAR szModuleName[32]; /* module name */ WORD wFlags; /* module flags */ WORD nOrders; /* number of orders */ WORD nRestart; /* restart position */ WORD nTracks; /* number of tracks */ WORD nPatterns; /* number of patterns */ WORD nPatches; /* number of patches */ WORD nTempo; /* initial tempo */ WORD nBPM; /* initial BPM */ BYTE aOrderTable[AUDIO_MAX_ORDERS]; /* order table */ BYTE aPanningTable[AUDIO_MAX_VOICES]; /* panning table */ LPAUDIOPATTERN aPatternTable; /* pattern table */ LPAUDIOPATCH aPatchTable; /* patch table */ } AUDIOMODULE, *LPAUDIOMODULE; /* audio callback function defines */ typedef VOID (AIAPI* LPFNAUDIOWAVE)(LPBYTE, UINT); typedef VOID (AIAPI* LPFNAUDIOTIMER)(VOID); typedef VOID (AIAPI* LPFNAUDIOCALLBACK)(BYTE, UINT, UINT); /* audio handle defines */ typedef HANDLE HAC; typedef HAC* LPHAC; #pragma pack() /* audio interface API prototypes */ UINT AIAPI AInitialize(VOID); UINT AIAPI AGetVersion(VOID); UINT AIAPI AGetAudioNumDevs(VOID); UINT AIAPI AGetAudioDevCaps(UINT nDeviceId, LPAUDIOCAPS lpCaps); UINT AIAPI AGetErrorText(UINT nErrorCode, LPSTR lpText, UINT nSize); UINT AIAPI APingAudio(LPUINT lpnDeviceId); UINT AIAPI AOpenAudio(LPAUDIOINFO lpInfo); UINT AIAPI ACloseAudio(VOID); UINT AIAPI AUpdateAudio(VOID); UINT AIAPI AOpenVoices(UINT nVoices); UINT AIAPI ACloseVoices(VOID); UINT AIAPI ASetAudioCallback(LPFNAUDIOWAVE lpfnAudioWave); UINT AIAPI ASetAudioTimerProc(LPFNAUDIOTIMER lpfnAudioTimer); UINT AIAPI ASetAudioTimerRate(UINT nTimerRate); LONG AIAPI AGetAudioDataAvail(VOID); UINT AIAPI ACreateAudioData(LPAUDIOWAVE lpWave); UINT AIAPI ADestroyAudioData(LPAUDIOWAVE lpWave); UINT AIAPI AWriteAudioData(LPAUDIOWAVE lpWave, DWORD dwOffset, UINT nCount); UINT AIAPI ACreateAudioVoice(LPHAC lphVoice); UINT AIAPI ADestroyAudioVoice(HAC hVoice); UINT AIAPI APlayVoice(HAC hVoice, LPAUDIOWAVE lpWave); UINT AIAPI APrimeVoice(HAC hVoice, LPAUDIOWAVE lpWave); UINT AIAPI AStartVoice(HAC hVoice); UINT AIAPI AStopVoice(HAC hVoice); UINT AIAPI ASetVoicePosition(HAC hVoice, LONG dwPosition); UINT AIAPI ASetVoiceFrequency(HAC hVoice, LONG dwFrequency); UINT AIAPI ASetVoiceVolume(HAC hVoice, UINT nVolume); UINT AIAPI ASetVoicePanning(HAC hVoice, UINT nPanning); UINT AIAPI AGetVoicePosition(HAC hVoice, LPLONG lpdwPosition); UINT AIAPI AGetVoiceFrequency(HAC hVoice, LPLONG lpdwFrequency); UINT AIAPI AGetVoiceVolume(HAC hVoice, LPUINT lpnVolume); UINT AIAPI AGetVoicePanning(HAC hVoice, LPUINT lpnPanning); UINT AIAPI AGetVoiceStatus(HAC hVoice, LPBOOL lpnStatus); UINT AIAPI APlayModule(LPAUDIOMODULE lpModule); UINT AIAPI AStopModule(VOID); UINT AIAPI APauseModule(VOID); UINT AIAPI AResumeModule(VOID); UINT AIAPI ASetModuleVolume(UINT nVolume); UINT AIAPI ASetModulePosition(UINT nOrder, UINT nRow); UINT AIAPI AGetModuleVolume(LPUINT lpnVolume); UINT AIAPI AGetModulePosition(LPUINT pnOrder, LPUINT lpnRow); UINT AIAPI AGetModuleStatus(LPBOOL lpnStatus); UINT AIAPI ASetModuleCallback(LPFNAUDIOCALLBACK lpfnAudioCallback); UINT AIAPI ALoadModuleFile(LPSTR lpszFileName, LPAUDIOMODULE* lplpModule, DWORD dwFileOffset); UINT AIAPI AFreeModuleFile(LPAUDIOMODULE lpModule); UINT AIAPI ALoadWaveFile(LPSTR lpszFileName, LPAUDIOWAVE* lplpWave, DWORD dwFileOffset); UINT AIAPI AFreeWaveFile(LPAUDIOWAVE lpWave); #ifdef __cplusplus }; #endif #endif