diff options
author | Fire_Head <Fire-Head@users.noreply.github.com> | 2020-04-23 10:50:06 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-23 10:50:06 +0200 |
commit | ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2 (patch) | |
tree | d461c5aca74e9679ec87d1e3d70a5e674a57ee21 /milessdk/include/mss.h | |
parent | fix #ifdef (diff) | |
parent | Merge pull request #482 from withmorten/master (diff) | |
download | re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.gz re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.bz2 re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.lz re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.xz re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.tar.zst re3-ff46dc1c6c5a9e8a42ba9f5ac5f1e7a5b7408cc2.zip |
Diffstat (limited to 'milessdk/include/mss.h')
-rw-r--r-- | milessdk/include/mss.h | 4883 |
1 files changed, 97 insertions, 4786 deletions
diff --git a/milessdk/include/mss.h b/milessdk/include/mss.h index fbc91c73..38371eb9 100644 --- a/milessdk/include/mss.h +++ b/milessdk/include/mss.h @@ -1,4805 +1,116 @@ -//############################################################################ -//## ## -//## Miles Sound System ## -//## ## -//## MSS.H: Miles Sound System main header file ## -//## ## -//## Version 1.00 of 15-Feb-95: Initial, derived from AIL.H V3.02 ## -//## 1.01 of 19-Jun-95: Added various functions for V3.03 release ## -//## 1.02 of 22-Nov-95: C++ typedef problem fixed, declspecs added ## -//## 1.03 of 15-Feb-96: Changes for 16 bit callbacks and multiple ## -//## 16 bit DLL loads (JKR) ## -//## 1.04 of 2-Nov-97: Changes made to handle DLS in future ## -//## versions ## -//## 1.05 of 1-Jan-98: Massive changes for version 4.0 ## -//## 1.06 of 17-Sep-98: Massive changes for version 5.0 ## -//## 1.07 of 2-Feb-99: Changes for new input API ## -//## 1.08 of 8-Feb-99: Changes for new filter helper functions ## -//## ## -//## Author: John Miles ## -//## ## -//############################################################################ -//## ## -//## Contact RAD Game Tools at 425-893-4300 for technical support. ## -//## ## -//############################################################################ +#pragma once -#ifndef MSS_VERSION +// fake mss.h header for use with re3, to make using mss32.dll possible +// gta3 uses miles 6.1a +// check https://github.com/withmorten/re3mss for more info -#define MSS_VERSION "6.1a" -#define MSS_MAJOR_VERSION 6 -#define MSS_MINOR_VERSION 1 -#define MSS_SUB_VERSION 1 -#define MSS_VERSION_DATE "06-Mar-01" +#include <stdint.h> -#define MSS_COPYRIGHT "Copyright (C) 1991-2001, RAD Game Tools, Inc." - -#endif - -#ifndef MSS_H -#define MSS_H - -// IS_DOS for DOS -// IS_WINDOWS for Windows or Win32s -// IS_WIN32 for Win32s -// IS_WIN16 for Windows -// IS_32 for 32-bit DOS or Win32s -// IS_16 for 16-bit Windows -// IS_LE for little endian (PCs) -// IS_BE for big endian (Macs) -// IS_X86 for Intel -// IS_MAC for Mac -// IS_PPC for PPC Mac -// IS_68K for 68K Mac - - -#ifdef IS_DOS -#undef IS_DOS -#endif - -#ifdef IS_WINDOWS -#undef IS_WINDOWS -#endif - -#ifdef IS_WIN32 -#undef IS_WIN32 -#endif - -#ifdef IS_WIN16 -#undef IS_WIN16 -#endif - -#ifdef IS_32 -#undef IS_32 -#endif - -#ifdef IS_16 -#undef IS_16 -#endif - -#ifdef IS_LE -#undef IS_LE -#endif - -#ifdef IS_BE -#undef IS_BE -#endif - -#ifdef IS_X86 -#undef IS_X86 -#endif - -#ifdef IS_MAC -#undef IS_MAC -#endif - -#ifdef IS_PPC -#undef IS_PPC -#endif - -#ifdef IS_68K -#undef IS_68K -#endif - -#ifdef __DOS__ - #define IS_DOS - #define IS_32 - #define IS_LE - #define IS_X86 -#else - #ifdef _WIN32 - #define IS_WINDOWS - #define IS_WIN32 - #define IS_32 - #define IS_LE - #define IS_X86 - #else - #ifdef WIN32 - #define IS_WINDOWS - #define IS_WIN32 - #define IS_32 - #define IS_LE - #define IS_X86 - #else - #ifdef __NT__ - #define IS_WINDOWS - #define IS_WIN32 - #define IS_32 - #define IS_LE - #define IS_X86 - #else - #ifdef __WIN32__ - #define IS_WINDOWS - #define IS_WIN32 - #define IS_32 - #define IS_LE - #define IS_X86 - #else - #ifdef _WINDOWS - #define IS_WINDOWS - #define IS_WIN16 - #define IS_16 - #define IS_LE - #define IS_X86 - #else - #ifdef _WINDLL - #define IS_WINDOWS - #define IS_WIN16 - #define IS_16 - #define IS_LE - #define IS_X86 - #else - #ifdef WINDOWS - #define IS_WINDOWS - #define IS_WIN16 - #define IS_16 - #define IS_LE - #define IS_X86 - #else - #ifdef __WINDOWS__ - #define IS_WINDOWS - #define IS_WIN16 - #define IS_16 - #define IS_LE - #define IS_X86 - #else - #ifdef _Windows - #define IS_WINDOWS - #define IS_WIN16 - #define IS_16 - #define IS_LE - #define IS_X86 - #else - #if defined(macintosh) || defined(__powerc) || defined(powerc) || defined(__POWERPC__) || defined(__MC68K__) - #define IS_MAC - #define IS_32 - #define IS_BE - #if defined(__powerc) || defined(powerc) || defined(__POWERPC__) - #define IS_PPC - #else - #if defined(__MC68K__) - #define IS_68K - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif - #endif -#endif - -#if (!defined(IS_LE) && !defined(IS_BE)) - #error MSS.H did not detect your platform. Define __DOS__, _WINDOWS, WIN32, or macintosh. -#endif - - -#if defined(_PUSHPOP_SUPPORTED) || PRAGMA_STRUCT_PACKPUSH - #pragma pack(push,1) -#else - #pragma pack(1) -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef IS_DOS - -#define AILCALLBACK __pascal -#define AILEXPORT cdecl -#define DXDEC extern -#define DXDEF -#define AILCALL cdecl -#define FAR -#define HIWORD(ptr) (((U32)ptr)>>16) -#define LOWORD(ptr) ((U16)((U32)ptr)) - -#define FOURCC U32 - -#define MAKEFOURCC(ch0, ch1, ch2, ch3) \ - ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \ - ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 )) - -#define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z) - -#define AILLIBCALLBACK __pascal - -#define MSS_MAIN_DEF - -#define MSS_REDIST_DIR_NAME "DOS" - -#define MSS_DIR_SEP "\\" -#define MSS_DIR_UP ".." MSS_DIR_SEP -#define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP - -#else - -#ifdef IS_WINDOWS - -#define AILLIBCALLBACK WINAPI - -#ifndef WIN32_LEAN_AND_MEAN -#define WIN32_LEAN_AND_MEAN -#endif - -#ifndef WIN32_EXTRA_LEAN -#define WIN32_EXTRA_LEAN -#endif - -#ifndef STRICT -#define STRICT -#endif - -#include <windows.h> -#include <mmsystem.h> - -#define MSS_MAIN_DEF __cdecl - -// -// If compiling MSS DLL, use __declspec(dllexport) for both -// declarations and definitions -// -// If compiling MSS16 library or application, use "extern" in declarations -// and nothing in definitions -// - -#ifdef IS_WIN32 - - #define AILEXPORT WINAPI - - #ifdef BUILD_MSS - #define DXDEC __declspec(dllexport) - #define DXDEF __declspec(dllexport) - #else - - #if 1 /*def __BORLANDC__*/ - #define DXDEC extern - #define DXDEF - #else - #define DXDEC __declspec(dllimport) - #endif - - #endif - - #define MSSDLLNAME "MSS32.DLL" - #define MSS_REDIST_DIR_NAME "WIN32" - - #define MSS_DIR_SEP "\\" - #define MSS_DIR_UP ".." MSS_DIR_SEP - #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP - -#else - - #define AILEXPORT __export WINAPI - - #define DXDEC extern - #define DXDEF - - #define MSSDLLNAME "MSS16.DLL" - #define MSS_REDIST_DIR_NAME "WIN16" - - #define MSS_DIR_SEP "\\" - #define MSS_DIR_UP ".." MSS_DIR_SEP - #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP - -#endif - -#define AILCALL WINAPI -#define AILCALLBACK AILEXPORT - -typedef LPVOID AILLPDIRECTSOUND; -typedef LPVOID AILLPDIRECTSOUNDBUFFER; - -#else - -#ifdef IS_MAC - -#include <string.h> -#include <Files.h> -#include <Sound.h> -#include <Resources.h> // needed for GetResource, ReleaseResource - -#define FAR - -#define AILLIBCALLBACK //pascal -#define AILCALL //pascal -#define AILEXPORT //pascal -#define AILCALLBACK //pascal - -#ifdef BUILD_MSS - #define DXDEC __declspec(export) - #define DXDEF -#else - #define DXDEC extern - #define DXDEF -#endif - -#define MSS_REDIST_DIR_NAME "MAC" - -#define MSS_DIR_SEP ":" -#define MSS_DIR_UP ":" MSS_DIR_SEP -#define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_SEP - -#define HIWORD(ptr) (((U32)ptr)>>16) -#define LOWORD(ptr) ((U16)((U32)ptr)) - -#define FOURCC U32 - -#ifndef MAKEFOURCC -#define MAKEFOURCC(ch0, ch1, ch2, ch3) \ - (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \ - ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) )) -#endif - -#define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z) - -#define MSS_MAIN_DEF - -#endif - -#endif - -#endif - -#ifndef NULL -#define NULL 0 -#endif - -// -// Misc. constant definitions -// - -#define MAX_DRVRS 16 // Max. # of simultaneous drivers -#define MAX_TIMERS 16 // Max. # of simultaneous timers -#define MAX_NOTES 32 // Max # of notes "on" -#define FOR_NEST 4 // # of nested XMIDI FOR loops -#define NUM_CHANS 16 // # of possible MIDI channels -#define MAX_W_VOICES 16 // Max virtual wave synth voice cnt -#define MAX_W_ENTRIES 512 // 512 wave library entries max. -#ifdef IS_MAC -#define MAX_INSTR 150 // Max # of instruments 128 + 32 -#endif - -#define MIN_CHAN ( 1-1) // Min channel recognized (0-based) -#define MAX_CHAN (16-1) // Max channel recognized -#define MIN_LOCK_CHAN ( 2-1) // Min channel available for locking -#define MAX_LOCK_CHAN ( 9-1) // Max channel available for locking -#define PERCUSS_CHAN (10-1) // Percussion channel (no locking) - -#define AIL_MAX_FILE_HEADER_SIZE 4096 // AIL_set_named_sample_file() requires at least 4K - // of data or the entire file image, whichever is less, - // to determine sample format -#define DIG_F_16BITS_MASK 1 -#define DIG_F_STEREO_MASK 2 -#define DIG_F_ADPCM_MASK 4 - -#define DIG_F_MONO_8 0 // PCM data formats -#define DIG_F_MONO_16 (DIG_F_16BITS_MASK) -#define DIG_F_STEREO_8 (DIG_F_STEREO_MASK) -#define DIG_F_STEREO_16 (DIG_F_STEREO_MASK|DIG_F_16BITS_MASK) -#define DIG_F_ADPCM_MONO_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK) -#define DIG_F_ADPCM_STEREO_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK|DIG_F_STEREO_MASK) -#define DIG_F_USING_ASI 16 - -#define DIG_PCM_SIGN 0x0001 // (obsolete) -#define DIG_PCM_ORDER 0x0002 - -#define DIG_PCM_POLARITY 0x0004 // PCM flags used by driver hardware -#define DIG_PCM_SPLIT 0x0008 -#define DIG_BUFFER_SERVICE 0x0010 -#define DIG_DUAL_DMA 0x0020 -#define DIG_RECORDING_SUPPORTED 0x8000 - -#define WAVE_FORMAT_PCM 1 -#define WAVE_FORMAT_IMA_ADPCM 0x0011 - -#ifdef IS_DOS - -#define AIL3DIG 0 // .DIG driver -#define AIL3MDI 1 // .MDI driver - -#define DIG_DETECT_8_BIT_ONLY 0x0001 // Detect 8-bit DMA only -#define DIG_DETECT_16_BIT_ONLY 0x0002 // Detect 16-bit DMA only -#define DIG_DETECT_8_AND_16_BITS 0x0003 // Detect both 8- and 16-bit DMA - -#define DRV_INIT 0x300 // Functions common to .MDI and .DIG -#define DRV_GET_INFO 0x301 // drivers -#define DRV_SERVE 0x302 -#define DRV_PARSE_ENV 0x303 -#define DRV_VERIFY_IO 0x304 -#define DRV_INIT_DEV 0x305 -#define DRV_SHUTDOWN_DEV 0x306 - -#define DIG_HW_VOLUME 0x400 // .DIG driver functions -#define DIG_START_P_CMD 0x401 -#define DIG_STOP_P_REQ 0x402 -#define DIG_START_R_CMD 0x403 -#define DIG_STOP_R_REQ 0x404 -#define DIG_VSE 0x405 - -#define MDI_HW_VOLUME 0x500 // .MDI driver functions -#define MDI_INIT_INS_MGR 0x501 -#define MDI_MIDI_XMIT 0x502 -#define MDI_INSTALL_T_SET 0x503 -#define MDI_GET_T_STATUS 0x504 -#define MDI_PROT_UNPROT_T 0x505 -#define MDI_VSE 0x506 - -#else - -// -// Pass to AIL_midiOutOpen for NULL MIDI driver -// - -#define MIDI_NULL_DRIVER ((U32)(S32)-2) - -#endif - - -// -// Non-specific XMIDI/MIDI controllers and event types -// - -#define SYSEX_BYTE 105 -#define PB_RANGE 106 -#define CHAN_MUTE 107 -#define CALLBACK_PFX 108 -#define SEQ_BRANCH 109 -#define CHAN_LOCK 110 -#define CHAN_PROTECT 111 -#define VOICE_PROTECT 112 -#define TIMBRE_PROTECT 113 -#define PATCH_BANK_SEL 114 -#define INDIRECT_C_PFX 115 -#define FOR_LOOP 116 -#define NEXT_LOOP 117 -#define CLEAR_BEAT_BAR 118 -#define CALLBACK_TRIG 119 -#define SEQ_INDEX 120 - -#define GM_BANK_MSB 0 -#define MODULATION 1 -#define DATA_MSB 6 -#define PART_VOLUME 7 -#define PANPOT 10 -#define EXPRESSION 11 -#define GM_BANK_LSB 32 -#define DATA_LSB 38 -#define SUSTAIN 64 -#define REVERB 91 -#define CHORUS 93 -#define RPN_LSB 100 -#define RPN_MSB 101 -#define RESET_ALL_CTRLS 121 -#define ALL_NOTES_OFF 123 - -#define EV_NOTE_OFF 0x80 -#define EV_NOTE_ON 0x90 -#define EV_POLY_PRESS 0xa0 -#define EV_CONTROL 0xb0 -#define EV_PROGRAM 0xc0 -#define EV_CHAN_PRESS 0xd0 -#define EV_PITCH 0xe0 -#define EV_SYSEX 0xf0 -#define EV_ESC 0xf7 -#define EV_META 0xff - -#define META_EOT 0x2f -#define META_TEMPO 0x51 -#define META_TIME_SIG 0x58 - -// -// SAMPLE.system_data[] usage -// - -#define SSD_EOD_CALLBACK 0 // Application end-of-data callback if not NULL -#define VOC_BLK_PTR 1 // Pointer to current block -#define VOC_REP_BLK 2 // Pointer to beginning of repeat loop block -#define VOC_N_REPS 3 // # of iterations left in repeat loop -#define VOC_MARKER 4 // Marker to search for, or -1 if all -#define VOC_MARKER_FOUND 5 // Desired marker found if 1, else 0 -#define SSD_RELEASE 6 // Release sample handle upon termination if >0 -#ifdef IS_WINDOWS -#define SSD_EOD_CB_WIN32S 7 // Application end-of-data callback is in Win32s -#else -#define SSD_TEMP 7 // Temporary storage location for general use -#endif - -// -// Timer status values -// - -#define AILT_FREE 0 // Timer handle is free for allocation -#define AILT_STOPPED 1 // Timer is stopped -#define AILT_RUNNING 2 // Timer is running - -// -// SAMPLE.status flag values -// - -#define SMP_FREE 0x0001 // Sample is available for allocation - -#define SMP_DONE 0x0002 // Sample has finished playing, or has - // never been started - -#define SMP_PLAYING 0x0004 // Sample is playing - -#define SMP_STOPPED 0x0008 // Sample has been stopped - -#define SMP_PLAYINGBUTRELEASED 0x0010 // Sample is playing, but digital handle - // has been temporarily released - - - -// -// SEQUENCE.status flag values -// - -#define SEQ_FREE 0x0001 // Sequence is available for allocation - -#define SEQ_DONE 0x0002 // Sequence has finished playing, or has - // never been started - -#define SEQ_PLAYING 0x0004 // Sequence is playing - -#define SEQ_STOPPED 0x0008 // Sequence has been stopped - -#define SEQ_PLAYINGBUTRELEASED 0x0010 // Sequence is playing, but MIDI handle - // has been temporarily released - -#ifdef IS_DOS - -// -// MIDI driver types -// - -#define MDIDRVRTYPE_GM 0 // General MIDI driver (Roland-compatible) -#define MDIDRVRTYPE_FM_2 1 // 2-operator FM MIDI driver (OPL2) -#define MDIDRVRTYPE_FM_4 2 // 4-operator FM MIDI driver (OPL3) -#define MDIDRVRTYPE_SPKR 3 // Tandy or PC speaker "beep" driver - -// -// .INI installation result codes -// - -#define AIL_INIT_SUCCESS 0 // Driver installed successfully -#define AIL_NO_INI_FILE 1 // No MDI.INI or DIG.INI file exists -#define AIL_INIT_FAILURE 2 // Driver could not be initialized - -#ifdef __BORLANDC__ - - #ifndef REALPTR - #define REALPTR(x) ((void *) (U32) ((((U32) (x))>>16<<4) + ((x) & 0xffff) \ - - AIL_sel_base(_DS))) - #endif - -#else - - #ifndef REALPTR - #define REALPTR(x) ((void *) (U32) ((((U32) (x))>>16<<4) + ((x) & 0xffff))) - #endif - -#endif - -#else - -#ifdef IS_WINDOWS - -// -// AIL_set_direct_buffer_control() command values -// - -#define AILDS_RELINQUISH 0 // App returns control of secondary buffer -#define AILDS_SEIZE 1 // App takes control of secondary buffer -#define AILDS_SEIZE_LOOP 2 // App wishes to loop the secondary buffer - -#endif - -#endif - -// -// General type definitions for portability -// - -#ifndef C8 -#define C8 char -#endif - -#ifndef U8 -#define U8 unsigned char -#endif - -#ifndef S8 -#define S8 signed char -#endif - -#ifndef U16 -#define U16 unsigned short -#endif - -#ifndef S16 -#define S16 signed short -#endif - -#ifndef U32 -#define U32 unsigned long -#endif - -#ifndef S32 -#define S32 signed long -#endif - -#ifndef F32 -#define F32 float -#endif - -#ifndef F64 -#define F64 double -#endif - - -#ifndef REALFAR -#define REALFAR unsigned long -#endif - -#ifndef FILE_ERRS -#define FILE_ERRS - -#define AIL_NO_ERROR 0 -#define AIL_IO_ERROR 1 -#define AIL_OUT_OF_MEMORY 2 -#define AIL_FILE_NOT_FOUND 3 -#define AIL_CANT_WRITE_FILE 4 -#define AIL_CANT_READ_FILE 5 -#define AIL_DISK_FULL 6 - -#endif - -#define MIN_VAL 0 -#define NOM_VAL 1 -#define MAX_VAL 2 - -#ifndef YES -#define YES 1 -#endif - -#ifndef NO -#define NO 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif - -#ifndef FALSE -#define FALSE 0 -#endif - -// -// Preference names and default values -// - -#define DIG_RESAMPLING_TOLERANCE 0 -#define DEFAULT_DRT 131 // Resampling triggered at +/- 0.2% - -#define DIG_MIXER_CHANNELS 1 -#define DEFAULT_DMC 64 // 64 allocatable SAMPLE structures - -#define DIG_DEFAULT_VOLUME 2 -#define DEFAULT_DDV 127 // Default sample volume = 127 (0-127) - -#define MDI_SERVICE_RATE 3 -#define DEFAULT_MSR 120 // XMIDI sequencer timing = 120 Hz - -#define MDI_SEQUENCES 4 -#define DEFAULT_MS 8 // 8 sequence handles/driver - -#define MDI_DEFAULT_VOLUME 5 -#define DEFAULT_MDV 127 // Default sequence volume = 127 (0-127) - -#define MDI_QUANT_ADVANCE 6 -#define DEFAULT_MQA 1 // Beat/bar count +1 interval - -#define MDI_ALLOW_LOOP_BRANCHING 7 -#define DEFAULT_ALB NO // Branches cancel XMIDI FOR loops - -#define MDI_DEFAULT_BEND_RANGE 8 -#define DEFAULT_MDBR 2 // Default pitch-bend range = 2 - -#ifdef IS_X86 - -#define MDI_DOUBLE_NOTE_OFF 9 -#define DEFAULT_MDNO NO // For stuck notes on SB daughterboards - -#endif - -#define DIG_ENABLE_RESAMPLE_FILTER 31 // Enable resampling filter by -#define DEFAULT_DERF YES // default - -#define DIG_DECODE_BUFFER_SIZE 32 // 2K decode buffer size by default -#define DEFAULT_DDBS 2048 - -#if defined(IS_WINDOWS) || defined(IS_MAC) - -#define MDI_SYSEX_BUFFER_SIZE 10 -#define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes - -#define DIG_OUTPUT_BUFFER_SIZE 11 -#define DEFAULT_DOBS 49152 // 48K output buffer size - -#define AIL_MM_PERIOD 12 -#define DEFAULT_AMP 5 // Default MM timer period = 5 msec. - -#endif - -#ifdef IS_WINDOWS - -#define DIG_DS_FRAGMENT_SIZE 34 -#define DEFAULT_DDFS 8 // Use 8 millisecond buffer fragments with DirectSound if MSS mixer in use - -#define DIG_DS_FRAGMENT_CNT 35 -#define DEFAULT_DDFC 96 // Use 96 buffer fragments with DirectSound if MSS mixer in use - -#define DIG_DS_MIX_FRAGMENT_CNT 42 -#define DEFAULT_DDMFC 8 // Mix ahead 8 buffer fragments - -#define DIG_DS_USE_PRIMARY 36 -#define DEFAULT_DDUP NO // Mix into secondary DirectSound buffer by default - -#define DIG_DS_DSBCAPS_CTRL3D 37 -#define DEFAULT_DDDC NO // Do not use DSBCAPS_CTRL3D by default - -#define DIG_DS_CREATION_HANDLER 38 -#define DEFAULT_DDCH NULL // Use DirectSoundCreate() by default - -#define AIL_TIMERS 13 -#define DEFAULT_AT 16 // 16 allocatable HTIMER handles - -#define DIG_MAX_CHAIN_ELEMENT_SIZE 14 -#define DEFAULT_MCES 8192 // max of 8192 bytes/waveOut buffer - -#define DIG_MIN_CHAIN_ELEMENT_TIME 45 -#define DEFAULT_MCET 100 // 100 milliseconds buffers - -#define DIG_USE_WAVEOUT 15 -#define DEFAULT_DUW NO // Use DirectSound by default - -#define DIG_DS_SECONDARY_SIZE 16 -#define DEFAULT_DDSS (32*1024L) // Must be 2^n -- use 32K by default - -#define DIG_DS_SAMPLE_CEILING 17 -#define DEFAULT_DDSC 44100 // Allow up to 44 kHz samples - -#define AIL_LOCK_PROTECTION 18 -#define DEFAULT_ALP NO // Don't suspend foreground thread by default - -#define AIL_WIN32S_CALLBACK_SIZE 19 -#define DEFAULT_WCS 4096 // Size of callback data in bytes - -#define AIL_MUTEX_PROTECTION 44 -#define DEFAULT_AMPR YES // Lock each call into Miles with a mutex - -#else - -#ifdef IS_DOS - -#define DIG_SERVICE_RATE 10 -#define DEFAULT_DSR 200 // DMA buffer-polling rate = 200 Hz - -#define DIG_HARDWARE_SAMPLE_RATE 11 -#define DEFAULT_DHSR NOM_VAL // Use nominal sample rate by default - -#define DIG_DMA_RESERVE 12 -#define DEFAULT_DDR 32768 // Reserve 32K real-mode mem for DMA - -#define DIG_LATENCY 13 -#define DEFAULT_DL 100 // Half-buffer size in ms = 100 - -#define DIG_USE_STEREO 14 -#define DEFAULT_DUS NO // Use mono output only - -#define DIG_USE_16_BITS 15 -#define DEFAULT_DU16 NO // Use 8-bit output by default - -#define DIG_ALLOW_16_BIT_DMA 16 -#define DEFAULT_DA16DMA YES // OK to use 16-bit DMA if necessary - -#define DIG_SS_LOCK 17 -#define DEFAULT_DSL NO // Don't disable IRQs while mixing - -#define AIL_SCAN_FOR_HARDWARE 18 -#define DEFAULT_ASH YES // Scan for I/O settings if necessary - -#define AIL_ALLOW_VDM_EXECUTION 19 -#define DEFAULT_AVE YES // Allow Windows "DOS box" execution - -#endif - -#endif - -// ---------------------------------- -// DLS Preference names and default values -// Unless otherwise specified, values must be established -// BEFORE calling DLSMSSOpen()! -// ---------------------------------- - -#define DLS_TIMEBASE 20 -#define DEFAULT_DTB 120 // 120 intervals/second by default - -#define DLS_VOICE_LIMIT 21 -#define DEFAULT_DVL 24 // 24 voices supported - -#define DLS_BANK_SELECT_ALIAS 22 -#define DEFAULT_DBSA NO // Do not treat controller 114 as bank - -#define DLS_STREAM_BOOTSTRAP 23 // Don't submit first stream buffer -#define DEFAULT_DSB YES // until at least 2 available - -#define DLS_VOLUME_BOOST 24 -#define DEFAULT_DVB 0 // Boost final volume by 0 dB - -#define DLS_ENABLE_FILTERING 25 // Filtering = on by default -#define DEFAULT_DEF YES // (may be changed at any time) - -#ifdef IS_X86 - -#define AIL_ENABLE_MMX_SUPPORT 27 // Enable MMX support if present -#define DEFAULT_AEMS YES // (may be changed at any time) - -#endif - -#define DLS_GM_PASSTHROUGH 28 // Pass unrecognized traffic on to -#define DEFAULT_DGP YES // default GM driver layer - // (may be changed at any time) - -#define DLS_ADPCM_TO_ASI_THRESHOLD 39 // Size in samples to switch to ASI -#define DEFAULT_DATAT 32768 - -// -// Add'l platform-independent prefs -// - -#define DIG_REVERB_BUFFER_SIZE 40 -#define DEFAULT_DRBS 0 // No reverb support by default - -#define DIG_INPUT_LATENCY 41 // Use >= 250-millisecond input buffers if -#define DEFAULT_DIL 250 // explicit size request cannot be satisfied - -#ifdef IS_WINDOWS - -#define DIG_USE_WAVEIN 43 -#define DEFAULT_DUWI YES // Use waveIn for input by default - -#endif - -#define N_PREFS 46 // # of preference types - -typedef struct _AILSOUNDINFO { - S32 format; - void const FAR* data_ptr; - U32 data_len; - U32 rate; - S32 bits; - S32 channels; - U32 samples; - U32 block_size; - void const FAR* initial_ptr; -} AILSOUNDINFO; - - -// for multi-processor machines - -#ifdef IS_WIN32 - -#ifdef BUILD_MSS - - #define MSSLockedIncrement(var) _asm { lock inc [var] } - #define MSSLockedDecrement(var) _asm { lock dec [var] } - - static void __MSSLockedIncrementAddr(void * addr) - { - _asm - { - mov eax,[addr] - lock inc dword ptr [eax] - } - } - - static void __MSSLockedDecrementAddr(void * addr) - { - _asm { - mov eax,[addr] - lock dec dword ptr [eax] - } - } - - #define MSSLockedIncrementPtr(var) __MSSLockedIncrementAddr(&(var)) - #define MSSLockedDecrementPtr(var) __MSSLockedDecrementAddr(&(var)) - -#else - - #define MSSLockedIncrement(var) (++var) - #define MSSLockedDecrement(var) (--var) - - #define MSSLockedIncrementPtr(var) (++var) - #define MSSLockedDecrementPtr(var) (--var) - -#endif - -#else - #define MSSLockedIncrement(var) (++var) - #define MSSLockedDecrement(var) (--var) - - #define MSSLockedIncrementPtr(var) (++var) - #define MSSLockedDecrementPtr(var) (--var) -#endif - -#ifndef RIB_H // RIB.H contents included if RIB.H not already included - -// #include "rib.h" - -#define RIB_H -#define ARY_CNT(x) (sizeof((x)) / sizeof((x)[0])) - -// ---------------------------------- -// RIB data types -// ---------------------------------- - -typedef S32 RIBRESULT; - -#define RIB_NOERR 0 // Success -- no error -#define RIB_NOT_ALL_AVAILABLE 1 // Some requested functions/attribs not available -#define RIB_NOT_FOUND 2 // Resource not found -#define RIB_OUT_OF_MEM 3 // Out of system RAM - -// -// Handle to interface provider -// +typedef char C8; +typedef uint8_t U8; +typedef int8_t S8; +typedef int16_t S16; +typedef uint16_t U16; +typedef int32_t S32; +typedef uint32_t U32; +typedef float F32; +typedef double F64; +typedef void *HSTREAM; typedef U32 HPROVIDER; - -// -// Handle representing token used to obtain attribute or preference -// data from RIB provider -// - -typedef U32 HATTRIB; - -// -// Handle representing an enumerated interface entry -// -// RIB_enumerate_interface() returns 1 if valid next entry found, else -// 0 if end of list reached -// - -typedef U32 HINTENUM; -#define HINTENUM_FIRST 0 - -// -// Handle representing an enumerated provider entry -// -// RIB_enumerate_providers() returns 1 if valid next entry found, else -// 0 if end of list reached -// +typedef void *H3DPOBJECT; +typedef H3DPOBJECT H3DSAMPLE; +typedef void *HSAMPLE; +typedef void *HDIGDRIVER; typedef U32 HPROENUM; #define HPROENUM_FIRST 0 -// -// Data types for RIB attributes and preferences -// - -typedef enum -{ - RIB_NONE = 0, // No type - RIB_CUSTOM, // Used for pointers to application-specific structures - RIB_DEC, // Used for 32-bit integer values to be reported in decimal - RIB_HEX, // Used for 32-bit integer values to be reported in hex - RIB_FLOAT, // Used for 32-bit single-precision FP values - RIB_PERCENT, // Used for 32-bit single-precision FP values to be reported as percentages - RIB_BOOL, // Used for Boolean-constrained integer values to be reported as TRUE or FALSE - RIB_STRING // Used for pointers to null-terminated ASCII strings -} -RIB_DATA_SUBTYPE; - -// -// RIB_ENTRY_TYPE structure, used to register an interface or request one -// - -typedef enum -{ - RIB_FUNCTION = 0, - RIB_ATTRIBUTE, // Attribute: read-only data type used for status/info communication - RIB_PREFERENCE // Preference: read/write data type used to control behavior -} -RIB_ENTRY_TYPE; - -// -// RIB_INTERFACE_ENTRY, used to represent a function or data entry in an -// interface -// - -typedef struct -{ - RIB_ENTRY_TYPE type; // See list above - C8 FAR *entry_name; // Name of desired function or attribute - U32 token; // Function pointer or attribute token - RIB_DATA_SUBTYPE subtype; // Data (attrib or preference) subtype -} -RIB_INTERFACE_ENTRY; - -// -// Standard RAD Interface Broker provider identification attributes -// - -#define PROVIDER_NAME (-100) // RIB_STRING name of decoder -#define PROVIDER_VERSION (-101) // RIB_HEX BCD version number - -// -// Standard function to obtain provider attributes (see PROVIDER_ defines -// above) -// -// Each provider of a searchable interface must export this function -// - -typedef U32 (AILCALL FAR *PROVIDER_QUERY_ATTRIBUTE) (HATTRIB index); - -// -// Macros to simplify interface registrations/requests for functions, -// attributes, and preferences -// - -#define FN(entry_name) { RIB_FUNCTION, #entry_name, (U32) &(entry_name), RIB_NONE } -#define REG_FN(entry_name) { RIB_FUNCTION, #entry_name, (U32) &(entry_name), RIB_NONE } - -#define AT(entry_name,ID) { RIB_ATTRIBUTE, (entry_name), (U32) &(ID), RIB_NONE } -#define REG_AT(entry_name,ID,subtype) { RIB_ATTRIBUTE, (entry_name), (U32) (ID), subtype } - -#define PR(entry_name,ID) { RIB_PREFERENCE, (entry_name), (U32) &(ID), RIB_NONE } -#define REG_PR(entry_name,ID,subtype) { RIB_PREFERENCE, (entry_name), (U32) (ID), subtype } - -#define RIB_register(x,y,z) RIB_register_interface (HPROVIDER(x), y, ARY_CNT(z), z) -#define RIB_unregister(x,y,z) RIB_unregister_interface(HPROVIDER(x), y, ARY_CNT(z), z) -#define RIB_unregister_all(x) RIB_unregister_interface(HPROVIDER(x), NULL, 0, NULL) -#define RIB_free_libraries() RIB_free_provider_library(HPROVIDER(NULL)); -#define RIB_request(x,y,z) RIB_request_interface (x, y, ARY_CNT(z), z) - -// ---------------------------------- -// Standard RIB API prototypes -// ---------------------------------- - -DXDEC HPROVIDER AILCALL RIB_alloc_provider_handle (U32 module); -DXDEC void AILCALL RIB_free_provider_handle (HPROVIDER provider); - -DXDEC HPROVIDER AILCALL RIB_load_provider_library (C8 const FAR *filename); -DXDEC void AILCALL RIB_free_provider_library (HPROVIDER provider); - -DXDEC HPROVIDER AILCALL RIB_provider_library_handle (void); - -DXDEC RIBRESULT AILCALL RIB_register_interface (HPROVIDER provider, - C8 const FAR *interface_name, - S32 entry_count, - RIB_INTERFACE_ENTRY const FAR *rlist); - -DXDEC RIBRESULT AILCALL RIB_unregister_interface (HPROVIDER provider, - C8 const FAR *interface_name, - S32 entry_count, - RIB_INTERFACE_ENTRY const FAR *rlist); - -DXDEC RIBRESULT AILCALL RIB_request_interface (HPROVIDER provider, - C8 const FAR *interface_name, - S32 entry_count, - RIB_INTERFACE_ENTRY FAR *rlist); - -DXDEC RIBRESULT AILCALL RIB_request_interface_entry (HPROVIDER provider, - C8 const FAR *interface_name, - RIB_ENTRY_TYPE entry_type, - C8 const FAR *entry_name, - U32 FAR *token); - -DXDEC S32 AILCALL RIB_enumerate_interface (HPROVIDER provider, - C8 FAR *interface_name, - RIB_ENTRY_TYPE type, - HINTENUM FAR *next, - RIB_INTERFACE_ENTRY FAR *dest); - -DXDEC S32 AILCALL RIB_enumerate_providers (C8 FAR *interface_name, - HPROENUM FAR *next, - HPROVIDER FAR *dest); - -DXDEC C8 FAR * AILCALL RIB_type_string (U32 data, - RIB_DATA_SUBTYPE subtype); - -DXDEC HPROVIDER AILCALL RIB_find_file_provider (C8 const FAR *interface_name, - C8 const FAR *attribute_name, - C8 const FAR *file_suffix); - -DXDEC HPROVIDER AILCALL RIB_find_provider (C8 const FAR *interface_name, - C8 const FAR *attribute_name, - C8 const FAR *attribute_value); - -DXDEC HPROVIDER AILCALL RIB_find_files_provider (C8 const FAR *interface_name, - C8 const FAR *attribute_name_1, - C8 const FAR *file_suffix_1, - C8 const FAR *attribute_name_2, - C8 const FAR *file_suffix_2); - -DXDEC HPROVIDER AILCALL RIB_find_file_dec_provider (C8 const FAR *interface_name, - C8 const FAR *attribute_name_1, - U32 attribute_value_1, - C8 const FAR *attribute_name_2, - C8 const FAR *file_suffix_2); - -DXDEC S32 AILCALL RIB_load_application_providers - (C8 const FAR *filespec); - -DXDEC void AILCALL RIB_set_provider_user_data (HPROVIDER provider, - U32 index, - S32 value); - -DXDEC S32 AILCALL RIB_provider_user_data (HPROVIDER provider, - U32 index); - -DXDEC void AILCALL RIB_set_provider_system_data - (HPROVIDER provider, - U32 index, - S32 value); - -DXDEC S32 AILCALL RIB_provider_system_data (HPROVIDER provider, - U32 index); - -DXDEC C8 FAR * AILCALL RIB_error (void); - -#endif - -#ifndef MSS_ASI_VERSION // MSSASI.H contents included if MSSASI.H not already included - -// #include "mssasi.h" - -#define AIL_ASI_VERSION 1 -#define AIL_ASI_REVISION 0 - -// -// Handle to stream being managed by ASI codec -// - -typedef S32 HASISTREAM; - -// -// ASI result codes -// - -typedef S32 ASIRESULT; - -#define ASI_NOERR 0 // Success -- no error -#define ASI_NOT_ENABLED 1 // ASI not enabled -#define ASI_ALREADY_STARTED 2 // ASI already started -#define ASI_INVALID_PARAM 3 // Invalid parameters used -#define ASI_INTERNAL_ERR 4 // Internal error in ASI driver -#define ASI_OUT_OF_MEM 5 // Out of system RAM -#define ASI_ERR_NOT_IMPLEMENTED 6 // Feature not implemented -#define ASI_NOT_FOUND 7 // ASI supported device not found -#define ASI_NOT_INIT 8 // ASI not initialized -#define ASI_CLOSE_ERR 9 // ASI not closed correctly - -// ---------------------------------- -// Application-provided ASI callbacks -// ---------------------------------- - -// -// AILASIFETCHCB: Called by ASI to obtain data from stream source -// -// offset normally will be either 0 at the first call made by the codec -// or -1 to specify a continuous stream, except when ASI_stream_seek() -// is called to restart the stream codec at a new stream offset. In this -// case, the application must execute the seek operation on the ASI codec's -// behalf. -// -// In response to this callback, the application should read the requested -// data and copy it to the specified destination buffer, returning the number -// of bytes copied (which can be less than bytes_requested if the end of -// the stream is reached). -// - -typedef S32 (AILCALLBACK FAR * AILASIFETCHCB) (U32 user, // User value passed to ASI_open_stream() - void FAR *dest, // Location to which stream data should be copied by app - S32 bytes_requested, // # of bytes requested by ASI codec - S32 offset); // If not -1, application should seek to this point in stream - -//############################################################################ -//## ## -//## Interface "ASI codec" ## -//## ## -//############################################################################ - -// -// Initialize ASI stream codec -// -// No other ASI functions may be called outside an ASI_startup() / -// ASI_shutdown() pair, except for the standard RIB function -// PROVIDER_query_attribute(). All provider attributes must be accessible -// without starting up the codec. -// - -typedef ASIRESULT (AILCALL FAR *ASI_STARTUP)(void); - -// -// Shut down ASI codec -// - -typedef ASIRESULT (AILCALL FAR * ASI_SHUTDOWN)(void); - -// -// Return codec error message, or NULL if no errors have occurred since -// last call -// -// The ASI error text state is global to all streams -// - -typedef C8 FAR * (AILCALL FAR * ASI_ERROR)(void); - -//############################################################################ -//## ## -//## Interface "ASI stream" ## -//## ## -//############################################################################ - -// -// Open a stream, returning handle to stream -// - -typedef HASISTREAM (AILCALL FAR *ASI_STREAM_OPEN) (U32 user, // User value passed to fetch callback - AILASIFETCHCB fetch_CB, // Source data fetch handler - U32 total_size); // Total size for %-done calculations (0=unknown) - -// -// Translate data in stream, returning # of bytes actually decoded or encoded -// -// Any number of bytes may be requested. Requesting more data than is -// available in the codec's internal buffer will cause the AILASIFETCHCB -// handler to be called to fetch more data from the stream. -// - -typedef S32 (AILCALL FAR *ASI_STREAM_PROCESS) (HASISTREAM stream, // Handle of stream - void FAR *buffer, // Destination for processed data - S32 buffer_size); // # of bytes to return in buffer - -// -// Restart stream decoding process at new offset -// -// Relevant for decoders only -// -// Seek destination is given as offset in bytes from beginning of stream -// -// At next ASI_stream_process() call, decoder will seek to the closest possible -// point in the stream which occurs at or after the specified position -// -// This function has no effect for decoders which do not support random -// seeks on a given stream type -// -// Warning: some decoders may need to implement seeking by reparsing -// the entire stream up to the specified offset, through multiple calls -// to the data-fetch callback. This operation may be extremely -// time-consuming on large files or slow network connections. -// -// A stream_offset value of -1 may be used to inform the decoder that the -// application has changed the input stream offset on its own, e.g. for a -// double-buffering application where the ASI decoder is not accessing the -// stream directly. ASI decoders should respond to this by flushing all -// internal buffers and resynchronizing themselves to the data stream. -// - -typedef ASIRESULT (AILCALL FAR *ASI_STREAM_SEEK) (HASISTREAM stream, - S32 stream_offset); - -// -// Retrieve an ASI stream attribute or preference value by index -// - -typedef S32 (AILCALL FAR *ASI_STREAM_ATTRIBUTE) (HASISTREAM stream, - HATTRIB attrib); - -// -// Set an ASI stream preference value by index -// - -typedef S32 (AILCALL FAR *ASI_STREAM_SET_PREFERENCE) (HASISTREAM stream, - HATTRIB preference, - void const FAR * value); - -// -// Close stream, freeing handle and all internally-allocated resources -// - -typedef ASIRESULT (AILCALL FAR *ASI_STREAM_CLOSE) (HASISTREAM stream); - -#endif - -//############################################################################ -//## ## -//## Interface "MSS 3D audio services" ## -//## ## -//############################################################################ - -// -// 3D positioning services -// - - -typedef struct h3DPOBJECT -{ - U32 junk; -} h3DPOBJECT; - -typedef h3DPOBJECT FAR * H3DPOBJECT; -typedef H3DPOBJECT H3DSAMPLE; - -// -// M3D result codes -// - typedef S32 M3DRESULT; -#define M3D_NOERR 0 // Success -- no error -#define M3D_NOT_ENABLED 1 // M3D not enabled -#define M3D_ALREADY_STARTED 2 // M3D already started -#define M3D_INVALID_PARAM 3 // Invalid parameters used -#define M3D_INTERNAL_ERR 4 // Internal error in M3D driver -#define M3D_OUT_OF_MEM 5 // Out of system RAM -#define M3D_ERR_NOT_IMPLEMENTED 6 // Feature not implemented -#define M3D_NOT_FOUND 7 // M3D supported device not found -#define M3D_NOT_INIT 8 // M3D not initialized -#define M3D_CLOSE_ERR 9 // M3D not closed correctly - - -typedef void (AILCALLBACK FAR* AIL3DSAMPLECB) (H3DSAMPLE sample); - -typedef M3DRESULT (AILCALL FAR *M3D_STARTUP)(void); - -typedef M3DRESULT (AILCALL FAR *M3D_SHUTDOWN)(void); - -typedef C8 FAR * (AILCALL FAR *M3D_ERROR)(void); - -typedef S32 (AILCALL FAR *M3D_SET_PROVIDER_PREFERENCE)(HATTRIB preference, - void const FAR * value); - -typedef M3DRESULT (AILCALL FAR * M3D_ACTIVATE)(S32 enable); - -typedef H3DSAMPLE (AILCALL FAR * M3D_ALLOCATE_3D_SAMPLE_HANDLE)(void); - - -typedef void (AILCALL FAR * M3D_RELEASE_3D_SAMPLE_HANDLE)(H3DSAMPLE samp); - - -typedef void (AILCALL FAR * M3D_START_3D_SAMPLE)(H3DSAMPLE samp); - - -typedef void (AILCALL FAR * M3D_STOP_3D_SAMPLE)(H3DSAMPLE samp); - - -typedef void (AILCALL FAR * M3D_RESUME_3D_SAMPLE)(H3DSAMPLE samp); - -typedef void (AILCALL FAR * M3D_END_3D_SAMPLE)(H3DSAMPLE samp); - -typedef S32 (AILCALL FAR * M3D_SET_3D_SAMPLE_DATA)(H3DSAMPLE samp, - AILSOUNDINFO const FAR *info); - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_VOLUME)(H3DSAMPLE samp, - S32 volume); - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_PLAYBACK_RATE)(H3DSAMPLE samp, - S32 playback_rate); - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OFFSET)(H3DSAMPLE samp, - U32 offset); - - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_LOOP_COUNT)(H3DSAMPLE samp, - U32 loops); - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_LOOP_BLOCK)(H3DSAMPLE S, - S32 loop_start_offset, - S32 loop_end_offset); - -typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_STATUS)(H3DSAMPLE samp); - -typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_ATTRIBUTE)(H3DSAMPLE samp, HATTRIB index); - -typedef S32 (AILCALL FAR * M3D_3D_SET_SAMPLE_PREFERENCE)(H3DSAMPLE samp, HATTRIB preference, void const FAR * value); - -typedef S32 (AILCALL FAR * M3D_3D_SAMPLE_VOLUME)(H3DSAMPLE samp); - -typedef S32 (AILCALL FAR * M3D_3D_SAMPLE_PLAYBACK_RATE)(H3DSAMPLE samp); - -typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_OFFSET)(H3DSAMPLE samp); - -typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_LENGTH)(H3DSAMPLE samp); - -typedef U32 (AILCALL FAR * M3D_3D_SAMPLE_LOOP_COUNT)(H3DSAMPLE samp); - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_DISTANCES)(H3DSAMPLE samp, - F32 max_dist, - F32 min_dist); - - -typedef void (AILCALL FAR * M3D_3D_SAMPLE_DISTANCES)(H3DSAMPLE samp, - F32 FAR * max_dist, - F32 FAR * min_dist); - -typedef S32 (AILCALL FAR * M3D_ACTIVE_3D_SAMPLE_COUNT)(void); - -typedef H3DPOBJECT (AILCALL FAR * M3D_3D_OPEN_LISTENER)(void); - -typedef void (AILCALL FAR * M3D_3D_CLOSE_LISTENER)(H3DPOBJECT listener); - -typedef H3DPOBJECT (AILCALL FAR * M3D_3D_OPEN_OBJECT)(void); - -typedef void (AILCALL FAR * M3D_3D_CLOSE_OBJECT)(H3DPOBJECT obj); - -typedef void (AILCALL FAR * M3D_SET_3D_POSITION)(H3DPOBJECT obj, - F32 X, - F32 Y, - F32 Z); - -typedef void (AILCALL FAR * M3D_SET_3D_VELOCITY)(H3DPOBJECT obj, - F32 dX_per_ms, - F32 dY_per_ms, - F32 dZ_per_ms, - F32 magnitude); - -typedef void (AILCALL FAR * M3D_SET_3D_VELOCITY_VECTOR)(H3DPOBJECT obj, - F32 dX_per_ms, - F32 dY_per_ms, - F32 dZ_per_ms); - -typedef void (AILCALL FAR * M3D_SET_3D_ORIENTATION)(H3DPOBJECT obj, - F32 X_face, - F32 Y_face, - F32 Z_face, - F32 X_up, - F32 Y_up, - F32 Z_up); - -typedef void (AILCALL FAR * M3D_3D_POSITION)(H3DPOBJECT obj, - F32 FAR *X, - F32 FAR *Y, - F32 FAR *Z); - -typedef void (AILCALL FAR * M3D_3D_VELOCITY)(H3DPOBJECT obj, - F32 FAR *dX_per_ms, - F32 FAR *dY_per_ms, - F32 FAR *dZ_per_ms); - -typedef void (AILCALL FAR * M3D_3D_ORIENTATION)(H3DPOBJECT obj, - F32 FAR *X_face, - F32 FAR *Y_face, - F32 FAR *Z_face, - F32 FAR *X_up, - F32 FAR *Y_up, - F32 FAR *Z_up); - -typedef void (AILCALL FAR * M3D_3D_UPDATE_POSITION)(H3DPOBJECT obj, - F32 dt_milliseconds); - -typedef void (AILCALL FAR * M3D_3D_AUTO_UPDATE_POSITION)(H3DPOBJECT obj, - S32 enable); - -typedef S32 (AILCALL FAR * M3D_3D_ROOM_TYPE)(void); -typedef void (AILCALL FAR * M3D_SET_3D_ROOM_TYPE)(S32 EAX_room_type); -typedef S32 (AILCALL FAR * M3D_3D_SPEAKER_TYPE)(void); -typedef void (AILCALL FAR * M3D_SET_3D_SPEAKER_TYPE)(S32 speaker_type); -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OBSTRUCTION)(H3DSAMPLE samp, F32 obstruction); -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_OCCLUSION)(H3DSAMPLE samp, F32 occlusion); -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_EFFECTS_LEVEL)(H3DSAMPLE samp, F32 effects_level); -typedef F32 (AILCALL FAR * M3D_3D_SAMPLE_OBSTRUCTION)(H3DSAMPLE samp); -typedef F32 (AILCALL FAR * M3D_3D_SAMPLE_OCCLUSION)(H3DSAMPLE samp); -typedef F32 (AILCALL FAR * M3D_3D_SAMPLE_EFFECTS_LEVEL)(H3DSAMPLE samp); - -typedef AIL3DSAMPLECB (AILCALL FAR * M3D_SET_3D_EOS)(H3DSAMPLE client,H3DSAMPLE samp,AIL3DSAMPLECB cb); - -typedef void (AILCALL FAR * M3D_SET_3D_SAMPLE_CONE)(H3DSAMPLE samp, F32 inner_angle, F32 outer_angle, S32 outer_volume); -typedef void (AILCALL FAR * M3D_3D_SAMPLE_CONE)(H3DSAMPLE samp, F32 FAR* inner_angle, F32 FAR* outer_angle, S32 FAR* outer_volume); - -//############################################################################ -//## ## -//## Interface "MSS mixer services" ## -//## ## -//############################################################################ - -// -// Operation flags used by mixer module -// - -#define M_DEST_STEREO 1 // Set to enable stereo mixer output -#define M_SRC_16 2 // Set to enable mixing of 16-bit samples -#define M_FILTER 4 // Set to enable filtering when resampling -#define M_SRC_STEREO 8 // Set to enable mixing of stereo input samples -#define M_VOL_SCALING 16 // Set to enable volume scalars other than 2047 -#define M_RESAMPLE 32 // Set to enable playback ratios other than 65536 -#define M_ORDER 64 // Set to reverse L/R stereo order for sample - -#ifdef IS_32 - -// -// Initialize mixer -// -// No other mixer functions may be called outside a MIXER_startup() / -// MIXER_shutdown() pair, except for the standard RIB function -// PROVIDER_query_attribute(). All provider attributes must be accessible -// without starting up the module. -// - -typedef void (AILCALL FAR *MIXER_STARTUP)(void); - -// -// Shut down mixer -// - -typedef void (AILCALL FAR *MIXER_SHUTDOWN)(void); - -// -// Flush mixer buffer -// - -typedef void (AILCALL FAR *MIXER_FLUSH) (S32 FAR *dest, - S32 len, - S32 FAR *reverb_buffer, - S32 reverb_level -#ifdef IS_X86 - ,U32 MMX_available -#endif - ); - -// -// Perform audio mixing operation -// - -typedef void (AILCALL FAR *MIXER_MERGE) (void const FAR * FAR *src, - U32 FAR *src_fract, - void const FAR *src_end, - S32 FAR * FAR *dest, - void FAR *dest_end, - S32 FAR *left_val, - S32 FAR *right_val, - S32 playback_ratio, - S32 scale_left, - S32 scale_right, - U32 operation -#ifdef IS_X86 - ,U32 MMX_available -#endif - ); - -// -// Translate mixer buffer contents to final output format -// - -#ifdef IS_MAC - -typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src, - S32 src_len, - void FAR *dest, - U32 operation, - U32 big_endian_output); -#else - -typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src, - S32 src_len, - void FAR *dest, - U32 operation, - U32 MMX_available); -#endif -#else - -// -// Initialize mixer -// -// No other mixer functions may be called outside a MIXER_startup() / -// MIXER_shutdown() pair, except for the standard RIB function -// PROVIDER_query_attribute(). All provider attributes must be accessible -// without starting up the module. -// - -typedef void (AILCALL FAR *MIXER_STARTUP)(void); - -// -// Shut down mixer -// - -typedef void (AILCALL FAR *MIXER_SHUTDOWN)(void); - -// -// Flush mixer buffer -// - -typedef void (AILCALL FAR *MIXER_FLUSH) (S32 FAR *dest, - S32 len, - S32 FAR *reverb_buffer, - S32 reverb_level, - U32 MMX_available); - -// -// Perform audio mixing operation -// - -typedef void (AILCALL FAR *MIXER_MERGE) (U32 src_sel, - U32 dest_sel, - U32 FAR *src_fract, - U32 FAR *src_offset, - U32 FAR *dest_offset, - U32 src_end_offset, - U32 dest_end_offset, - S32 FAR *left_val, - S32 FAR *right_val, - S32 playback_ratio, - S32 scale_both, - U32 operation); - -// -// Translate mixer buffer contents to final output format -// - -typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src, - S32 src_len, - void FAR *dest, - U32 operation, - U32 MMX_available); -#endif - -// -// Type definitions -// - -struct _DIG_DRIVER; - -struct _MDI_DRIVER; - -typedef struct _DIG_DRIVER FAR * HDIGDRIVER; // Handle to digital driver - -typedef struct _MDI_DRIVER FAR * HMDIDRIVER; // Handle to XMIDI driver - -typedef struct _SAMPLE FAR * HSAMPLE; // Handle to sample - -typedef struct _SEQUENCE FAR * HSEQUENCE; // Handle to sequence - -typedef S32 HTIMER; // Handle to timer - - -#ifdef IS_DOS - -// -// Type definitions -// - -typedef struct // I/O parameters structure -{ - S16 IO; - S16 IRQ; - S16 DMA_8_bit; - S16 DMA_16_bit; - S32 IO_reserved[4]; -} -IO_PARMS; - -typedef struct // Standard MSS 3.X VDI driver header -{ - S8 ID[8]; // "AIL3xxx" ID string, followed by ^Z - - U32 driver_version; - - REALFAR common_IO_configurations; - U16 num_IO_configurations; - - REALFAR environment_string; - - IO_PARMS IO; - - S16 service_rate; - - U16 busy; - - U16 driver_num; // Driver number - - U16 this_ISR; // Offset of INT 66H dispatcher - REALFAR prev_ISR; // Pointer to previous INT 66H ISR - - S8 scratch[128]; // Shared scratch workspace - - S8 dev_name[80]; // Device name (VDI version >= 1.12 only) -} -VDI_HDR; - -typedef struct -{ - U16 minimum_physical_sample_rate; - U16 nominal_physical_sample_rate; - U16 maximum_physical_sample_rate; - - U16 minimum_DMA_half_buffer_size; - U16 maximum_DMA_half_buffer_size; - - U32 flags; -} -DIG_MODE; - -typedef struct -{ - U8 format_supported[16]; - DIG_MODE format_data[16]; -} -DIG_DDT; - -typedef struct -{ - REALFAR DMA_buffer_A; - REALFAR DMA_buffer_B; - S16 active_buffer; -} -DIG_DST; - -typedef struct -{ - REALFAR library_environment; - REALFAR GTL_suffix; - - U16 num_voices; - - U16 max_melodic_channel; - U16 min_melodic_channel; - U16 percussion_channel; -} -MDI_DDT; - -typedef struct -{ - S8 library_directory[128]; - S8 GTL_filename[128]; - - S8 MIDI_data[512]; -} -MDI_DST; - -typedef struct // Initialization file structure -{ - char device_name[128]; // Device name - char driver_name[128]; // Driver filename - IO_PARMS IO; // I/O parameters for driver -} -AIL_INI; - -typedef struct // Handle to driver -{ - REALFAR seg; // Seg:off pointer to driver (off=0) - U32 sel; // Selector for driver (off=0) - void *buf; // Protected-mode pointer to driver - U32 size; // Size of driver image - VDI_HDR *VHDR; // Pointer to driver header (same as buf) - S32 type; // AIL3DIG or AIL3MDI (see below) - - S32 initialized; // 1 if hardware successfully init'd, else 0 - - S32 PM_ISR; // -1 if no PM ISR hooked, else IRQ # - - HTIMER server; // DRV_SERVE periodic timer, if requested - - // Vector to high-level destructor, if any - - void (AILCALL *destructor)(HDIGDRIVER); - - // High-level descriptor (DIG_ or MDI_DRIVER) - void *descriptor; -} -AIL_DRIVER; - -typedef struct // VDI interface register structure -{ - S16 AX; - S16 BX; - S16 CX; - S16 DX; - S16 SI; - S16 DI; -} -VDI_CALL; - -#endif - -// -// Function pointer types -// - -typedef void (AILCALLBACK FAR* AILINCB) (void const FAR *data, S32 len, U32 user_data); - -typedef void (AILCALLBACK FAR* AILTIMERCB) (U32 user); - -typedef void (AILCALLBACK FAR* AILSAMPLECB) (HSAMPLE sample); - -typedef S32 (AILCALLBACK FAR* AILEVENTCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 status,S32 data_1,S32 data_2); - -typedef S32 (AILCALLBACK FAR* AILTIMBRECB) (HMDIDRIVER hmi,S32 bank,S32 patch); - -typedef S32 (AILCALLBACK FAR* AILPREFIXCB) (HSEQUENCE seq,S32 log,S32 data); - -typedef void (AILCALLBACK FAR* AILTRIGGERCB) (HSEQUENCE seq,S32 log,S32 data); - -typedef void (AILCALLBACK FAR* AILBEATCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 beat,S32 measure); - -typedef void (AILCALLBACK FAR* AILSEQUENCECB) (HSEQUENCE seq); - -// -// Handle to sample and driver being managed by pipeline filter -// - -typedef S32 HSAMPLESTATE; -typedef S32 HDRIVERSTATE; - -// -// Digital pipeline stages -// -// These are the points at which external modules may be installed into -// a given HSAMPLE or HDIGDRIVER's processing pipeline -// - -typedef enum -{ - DP_ASI_DECODER=0, // Must be "ASI codec stream" provider - DP_FILTER, // Must be "MSS pipeline filter" provider - DP_MERGE, // Must be "MSS mixer" provider - N_SAMPLE_STAGES, // Placeholder for end of list (= # of valid stages) - SAMPLE_ALL_STAGES // Used to signify all pipeline stages, for shutdown -} -SAMPLESTAGE; - -typedef enum -{ - DP_FLUSH = 0, // Must be "MSS mixer" provider - DP_DEFAULT_FILTER, // Must be "MSS pipeline filter" provider (sets the default) - DP_DEFAULT_MERGE, // Must be "MSS mixer" provider (sets the default) - DP_COPY, // Must be "MSS mixer" provider - N_DIGDRV_STAGES, // Placeholder for end of list (= # of valid stages) - DIGDRV_ALL_STAGES // Used to signify all pipeline stages, for shutdown -} -DIGDRVSTAGE; - -typedef struct - { - ASI_STREAM_OPEN ASI_stream_open; - ASI_STREAM_PROCESS ASI_stream_process; - ASI_STREAM_SEEK ASI_stream_seek; - ASI_STREAM_CLOSE ASI_stream_close; - ASI_STREAM_ATTRIBUTE ASI_stream_attribute; - ASI_STREAM_SET_PREFERENCE ASI_stream_set_preference; - - HATTRIB INPUT_BIT_RATE; - HATTRIB INPUT_SAMPLE_RATE; - HATTRIB INPUT_BITS; - HATTRIB INPUT_CHANNELS; - HATTRIB OUTPUT_BIT_RATE; - HATTRIB OUTPUT_SAMPLE_RATE; - HATTRIB OUTPUT_BITS; - HATTRIB OUTPUT_CHANNELS; - HATTRIB POSITION; - HATTRIB PERCENT_DONE; - HATTRIB MIN_INPUT_BLOCK_SIZE; - HATTRIB RAW_RATE; - HATTRIB RAW_BITS; - HATTRIB RAW_CHANNELS; - HATTRIB REQUESTED_RATE; - HATTRIB REQUESTED_BITS; - HATTRIB REQUESTED_CHANS; - - HASISTREAM stream; - } -ASISTAGE; - -typedef struct - { - MIXER_FLUSH MSS_mixer_flush; - MIXER_MERGE MSS_mixer_merge; - MIXER_COPY MSS_mixer_copy; - } -MIXSTAGE; - -typedef struct - { - struct _FLTPROVIDER FAR *provider; - HSAMPLESTATE sample_state; - } -FLTSTAGE; - -typedef struct -{ - S32 active; // Pass-through if 0, active if 1 - HPROVIDER provider; - - union - { - ASISTAGE ASI; - MIXSTAGE MIX; - FLTSTAGE FLT; - } - TYPE; -} -DPINFO; - -// -// Other data types -// - -typedef struct _AIL_INPUT_INFO // Input descriptor type -{ - U32 device_ID; // DS LPGUID or wave device ID - U32 hardware_format; // e.g., DIG_F_STEREO_16 - U32 hardware_rate; // e.g., 22050 - AILINCB callback; // Callback function to receive incoming data - S32 buffer_size; // Maximum # of bytes to be passed to callback (-1 to use DIG_INPUT_LATENCY) - U32 user_data; // this is a user defined value -} -AIL_INPUT_INFO; - -typedef struct _AILTIMER // Timer instance -{ - U32 status; - AILTIMERCB callback; - U32 user; - - S32 elapsed; - S32 value; - S32 callingCT; // Calling EXE's task number (16 bit only) - S32 callingDS; // Calling EXE's DS (used in 16 bit only) - S32 IsWin32s; // Is this a Win32s callback -} AILTIMERSTR; - -typedef struct _ADPCMDATATAG -{ - U32 blocksize; - U32 extrasamples; - U32 blockleft; - U32 step; - U32 savesrc; - U32 sample; - U32 destend; - U32 srcend; - U32 samplesL; - U32 samplesR; - U16 moresamples[16]; -} ADPCMDATA; - -typedef struct _SAMPLE // Sample instance -{ - char tag[4]; // HSAM - - HDIGDRIVER driver; // Driver for playback - - U32 status; // SMP_ flags: _FREE, _DONE, _PLAYING - - void const FAR *start[2]; // Sample buffer address (W) - U32 len [2]; // Sample buffer size in bytes (W) - U32 pos [2]; // Index to next byte (R/W) - U32 done [2]; // Nonzero if buffer with len=0 sent by app - S32 reset_ASI [2]; // Reset the ASI decoder at the end of the buffer - - U32 src_fract; // Fractional part of source address - S32 left_val; // Mixer source value from end of last buffer - S32 right_val; // Mixer source value from end of last buffer - - S32 current_buffer; // Buffer # active (0/1) - S32 last_buffer; // Last active buffer (for double-buffering) - S32 starved; // Buffer stream has run out of data - - S32 loop_count; // # of cycles-1 (1=one-shot, 0=indefinite) - S32 loop_start; // Starting offset of loop block (0=SOF) - S32 loop_end; // End offset of loop block (-1=EOF) - - S32 format; // DIG_F format (8/16 bits, mono/stereo) - U32 flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo only) - - S32 playback_rate; // Playback rate in hertz - - S32 volume; // Sample volume 0-127 - S32 pan; // Mono panpot/stereo balance (0=L ... 127=R) - - S32 left_scale; // Left/mono volume scalar 0-2047 - S32 right_scale; // Right volume scalar 0-2047 - - S32 service_type; // 1 if single-buffered; 2 if streamed - - AILSAMPLECB SOB; // Start-of-block callback function - AILSAMPLECB EOB; // End-of-buffer callback function - AILSAMPLECB EOS; // End-of-sample callback function - - S32 user_data [8]; // Miscellaneous user data - S32 system_data[8]; // Miscellaneous system data - - ADPCMDATA adpcm; - -#ifdef IS_WINDOWS - - S32 SOB_IsWin32s; // Is this a Win32s callback - S32 EOB_IsWin32s; // Is this a Win32s callback - S32 EOS_IsWin32s; // Is this a Win32s callback - - // - // DirectSound-specific data - // - - S32 secondary_buffer; // Secondary buffer index - - S32 service_interval; // Service sample every n ms - S32 service_tick; // Current service countdown value - S32 buffer_segment_size; // Buffer segment size to fill - - S32 prev_segment; // Previous segment # (0...n) - S32 prev_cursor; // Previous play cursor location - - S32 bytes_remaining; // # of bytes left to play (if not -1) - - S32 direct_control; // 1 if app controls buffer, 0 if MSS - -#endif - - S32 doeob; // Flags to trigger callbacks - S32 dosob; - S32 doeos; - - // - // Sample pipeline stages - // - - DPINFO pipeline[N_SAMPLE_STAGES]; - - // - // Reverb parms - // - - F32 reverb_level; // Level [0.0, 1.0] - F32 reverb_reflect_time; // Reflect time in milliseconds - F32 reverb_decay_time; // Decay time [0.1, 20.0] - S32 base_scale; // Original 12-bit volume scalar -} -SAMPLE; - -#if defined(IS_WINDOWS) || defined(IS_MAC) +#define M3D_NOERR 0 -DXDEC U32 AILCALL AIL_get_timer_highest_delay (void); +enum { ENVIRONMENT_CAVE = 8 }; -DXDEC void AILCALL AIL_serve(void); +#define AIL_3D_2_SPEAKER 0 +#define AIL_3D_HEADPHONE 1 +#define AIL_3D_4_SPEAKER 3 -#ifdef IS_MAC +#define DIG_MIXER_CHANNELS 1 -typedef void * LPSTR; +#define DIG_F_MONO_16 1 +#define DIG_PCM_SIGN 1 -#define WHDR_DONE 0 +#define SMP_PLAYING 4 -typedef struct _WAVEIN +typedef struct _AILSOUNDINFO { - long temp; -} * HWAVEIN; - -typedef struct _WAVEHDR -{ - S32 dwFlags; - S32 dwBytesRecorded; - S32 dwUser; - S32 temp; - void * lpData; - S32 dwBufferLength; - S32 longdwLoops; - S32 dwLoops; - void * lpNext; - U32 * reserved; - -} WAVEHDR, * LPWAVEHDR; - -#endif - -typedef struct _DIG_INPUT_DRIVER FAR *HDIGINPUT; // Handle to digital input driver - -typedef struct _DIG_INPUT_DRIVER // Handle to digital input driver -{ - C8 tag[4]; // HDIN - - HTIMER background_timer; // Background timer handle - - AIL_INPUT_INFO info; // Input device descriptor - - S32 input_enabled; // 1 if enabled, 0 if not - -#ifndef IS_MAC - - U32 callback_user; // Callback user value - - // - // Provider-independent data - // - - U32 DMA_size; // Size of each DMA sub-buffer in bytes - void FAR *DMA[2]; // Simulated DMA buffers - - U8 silence; // Silence value for current format (0 or 128) - - S32 device_active; // 1 if buffers submittable, 0 if not - - // - // waveOut-specific data - // - - HWAVEIN hWaveIn; // Handle to wave input device - volatile WAVEHDR wavehdr[2]; // Handles to wave headers - -#else - Boolean timer_started; - Boolean locked; - Boolean enter_lock; - U32 saved_period; - - void* my_vars; - - // - // Input related - // - - U32 input_buffer_size; - char * input_buffers[2]; - - // - // Mix related - // - - char * build_buffer; - U32 build_buffer_size; - - // - // Output related - // - struct - { - S8 * buffer; - S8 * buffer_end; - - U32 size; - S8 * right_margine; - S8 * current_head; - S8 * current_tail; - } output_buffer; - - S32 mix_operation; - S32 playback_ratio; - U32 src_fract; - S8 * current_head; - S32 left_val; - S32 right_val; - - U32 stored_sample_size; - U32 stored_number_of_channels; - - U32 last_rw_delta; - U32 period; - -#endif -} -DIG_INPUT_DRIVER; - -#endif - -typedef struct _DIG_DRIVER // Handle to digital audio driver -{ - char tag[4]; // HDIG - - HTIMER backgroundtimer; // Background timer handle - - S32 quiet; // # of consecutive quiet sample periods - - S32 n_active_samples; // # of samples being processed - - S32 master_volume; // Master sample volume 0-127 - - S32 DMA_rate; // Hardware sample rate - S32 hw_format; // DIG_F code in use - U32 hw_mode_flags; // DIG_PCM_ flags for mode in use - - S32 channels_per_sample; // # of channels per sample (1 or 2) - S32 bytes_per_channel; // # of bytes per channel (1 or 2) - S32 channels_per_buffer; // # of channels per half-buffer - S32 samples_per_buffer; // # of samples per half-buffer - - S32 playing; // Playback active if non-zero - -#ifdef IS_MAC - U32 n_samples_allocated; - U32 n_samples_used; - U32 n_samples_played; - SAMPLE *samples; // Pointer to SAMPLEs - - HDIGDRIVER next; // Pointer to next HDIGDRIVER in use - U32 reset_works; // TRUE if OK to do waveOutReset - U32 request_reset; // If nonzero, do waveOutReset ASAP - S32 released; // has the sound manager been released? - - ExtSoundHeader sound_header; - SndChannelPtr sound_channel; - SndCallBackUPP global_callback; - Ptr buffers[2]; - Boolean loaded[2]; - U32 work_buffer; - U32 play_buffer; - U32 load_pos; - U32 load_size; - Boolean load; - U32 start_time; - void* background_processor; - -#else - HSAMPLE samples; // Pointer to list of SAMPLEs -#endif - - S32 n_samples; // # of SAMPLEs - - S32 build_size; // # of bytes in build buffer - S32 FAR *build_buffer; // Build buffer (4 * samples_per_buffer) - - S32 system_data[8]; // Miscellaneous system data - - S32 buffer_size; // Size of each output buffer - -#ifdef IS_WINDOWS - - // - // waveOut-specific interface data - // - - HWAVEOUT hWaveOut; // Wave output driver - - U32 reset_works; // TRUE if OK to do waveOutReset - U32 request_reset; // If nonzero, do waveOutReset ASAP - - LPWAVEHDR first; // Pointer to first WAVEHDR in chain - S32 n_buffers; // # of output WAVEHDRs in chain - - LPWAVEHDR volatile FAR *return_list; // Circular list of returned WAVEHDRs - S32 volatile return_head; // Head of WAVEHDR list (insertion point) - S32 volatile return_tail; // Tail of WAVEHDR list (retrieval point) - - - U32 deviceid; // id from waveout open - PCMWAVEFORMAT wformat; // format from waveout open - - // - // DirectSound-specific interface data - // - - U32 guid; // The guid id of the ds driver - AILLPDIRECTSOUND pDS; // DirectSound output driver (don't - // use with Smacker directly anymore!) - - U32 ds_priority; // priority opened with - - S32 emulated_ds; // is ds emulated or not? - AILLPDIRECTSOUNDBUFFER lppdsb; // primary buffer or null - - U32 dsHwnd; // HWND used with DirectSound - - AILLPDIRECTSOUNDBUFFER FAR * lpbufflist; // List of pointers to secondary buffers - HSAMPLE FAR *samp_list; // HSAMPLE associated with each buffer - S32 FAR *sec_format; // DIG_F_ format for secondary buffer - S32 max_buffs; // Max. allowable # of secondary buffers - - // - // Misc. data - // - - S32 released; // has the sound manager been released? - - U32 foreground_timer; // Foreground timer handle - - HDIGDRIVER next; // Pointer to next HDIGDRIVER in use - S32 callingCT; // Calling EXE's task number (16 bit only) - S32 callingDS; // Calling EXE's DS (used in 16 bit only) - - // - // Vars for waveOut emulation - // - - S32 DS_initialized; - - AILLPDIRECTSOUNDBUFFER DS_sec_buff; // Secondary buffer (or NULL if none) - AILLPDIRECTSOUNDBUFFER DS_out_buff; // Output buffer (may be sec or prim) - S32 DS_buffer_size; // Size of entire output buffer - - S32 DS_frag_cnt; // Total fragment count and size, and - S32 DS_frag_size; // last fragment occupied by play cursor - S32 DS_last_frag; - S32 DS_last_write; - S32 DS_last_timer; - S32 DS_skip_time; - - S32 DS_use_default_format; // 1 to force use of default DS primary buffer format - -#else - - #ifdef IS_DOS - - // must be first in the DOS section - void *DMA[2]; // Protected-mode pointers to half-buffers - // (note that DMA[0] may != DMA_buf) - - - REALFAR DMA_seg; // Seg:off pointer to DMA buffers (off=0) - U32 DMA_sel; // Selector for DMA buffers (off=0) - void *DMA_buf; // Protected-mode pointer to DMA buffers - - S16 *buffer_flag; // Protected-mode pointer to buffer flag - S32 last_buffer; // Last active buffer flag value in driver - - AIL_DRIVER *drvr; // Base driver descriptor - - DIG_DDT *DDT; // Protected-mode pointer to DDT - DIG_DST *DST; // Protected-mode pointer to DST - - #endif - -#endif - -#ifdef IS_X86 - S32 use_MMX; // Use MMX with this driver if TRUE -#endif - - void FAR *decode_buffer; // Buffer used by optional ASI pipeline decoder - S32 decode_buffer_size; // # of bytes in decode buffer - - U32 us_count; - U32 ms_count; - U32 last_ms_polled; - U32 last_percent; - - // - // Digital driver pipeline stages - // - - DPINFO pipeline[N_DIGDRV_STAGES]; - - // - // Reverb buffer - // - - S32 FAR *reverb_buffer; - S32 reverb_buffer_size; - S32 reverb_buffer_position; - -#ifdef IS_WINDOWS - S32 no_wom_done; // don't process WOM_DONEs on this driver - U32 wom_done_buffers; -#endif -} -DIG_DRIVER; - -typedef struct // MIDI status log structure - { - S32 program [NUM_CHANS]; // Program Change - S32 pitch_l [NUM_CHANS]; // Pitch Bend LSB - S32 pitch_h [NUM_CHANS]; // Pitch Bend MSB - - S32 c_lock [NUM_CHANS]; // Channel Lock - S32 c_prot [NUM_CHANS]; // Channel Lock Protection - S32 c_mute [NUM_CHANS]; // Channel Mute - S32 c_v_prot [NUM_CHANS]; // Voice Protection - S32 bank [NUM_CHANS]; // Patch Bank Select - S32 gm_bank_l [NUM_CHANS]; // GM Bank Select - S32 gm_bank_m [NUM_CHANS]; // GM Bank Select - S32 indirect [NUM_CHANS]; // ICA indirect controller value - S32 callback [NUM_CHANS]; // Callback Trigger - - S32 mod [NUM_CHANS]; // Modulation - S32 vol [NUM_CHANS]; // Volume - S32 pan [NUM_CHANS]; // Panpot - S32 exp [NUM_CHANS]; // Expression - S32 sus [NUM_CHANS]; // Sustain - S32 reverb [NUM_CHANS]; // Reverb - S32 chorus [NUM_CHANS]; // Chorus - - S32 bend_range[NUM_CHANS]; // Bender Range (data MSB, RPN 0 assumed) - - S32 RPN_L [NUM_CHANS]; // RPN # LSB - S32 RPN_M [NUM_CHANS]; // RPN # MSB - } -CTRL_LOG; - -typedef struct _SEQUENCE // XMIDI sequence state table -{ - char tag[4]; // HSEQ - - HMDIDRIVER driver; // Driver for playback - - U32 status; // SEQ_ flags - - void const FAR *TIMB; // XMIDI IFF chunk pointers - void const FAR *RBRN; - void const FAR *EVNT; - - U8 const FAR *EVNT_ptr; // Current event pointer - - U8 FAR *ICA; // Indirect Controller Array - - AILPREFIXCB prefix_callback; // XMIDI Callback Prefix handler - AILTRIGGERCB trigger_callback; // XMIDI Callback Trigger handler - AILBEATCB beat_callback; // XMIDI beat/bar change handler - AILSEQUENCECB EOS; // End-of-sequence callback function - - S32 loop_count; // 0=one-shot, -1=indefinite, ... - - S32 interval_count; // # of intervals until next event - S32 interval_num; // # of intervals since start - - S32 volume; // Sequence volume 0-127 - S32 volume_target; // Target sequence volume 0-127 - S32 volume_accum; // Accumulated volume period - S32 volume_period; // Period for volume stepping - - S32 tempo_percent; // Relative tempo percentage 0-100 - S32 tempo_target; // Target tempo 0-100 - S32 tempo_accum; // Accumulated tempo period - S32 tempo_period; // Period for tempo stepping - S32 tempo_error; // Error counter for tempo DDA - - S32 beat_count; // Sequence playback position - S32 measure_count; - - S32 time_numerator; // Sequence timing data - S32 time_fraction; - S32 beat_fraction; - S32 time_per_beat; - - void const FAR *FOR_ptrs[FOR_NEST]; // Loop stack - S32 FOR_loop_count [FOR_NEST]; - - S32 chan_map [NUM_CHANS]; // Physical channel map for sequence - - CTRL_LOG shadow; // Controller values for sequence - - S32 note_count; // # of notes "on" - - S32 note_chan [MAX_NOTES]; // Channel for queued note (-1=free) - S32 note_num [MAX_NOTES]; // Note # for queued note - S32 note_time [MAX_NOTES]; // Remaining duration in intervals - - S32 user_data [8]; // Miscellaneous user data - S32 system_data[8]; // Miscellaneous system data - -#ifdef IS_WINDOWS - S32 PREFIX_IsWin32s; // Is this a Win32s callback - S32 TRIGGER_IsWin32s; // Is this a Win32s callback - S32 BEAT_IsWin32s; // Is this a Win32s callback - S32 EOS_IsWin32s; // Is this a Win32s callback -#endif -} SEQUENCE; - -#ifdef IS_MAC - -struct MIDIHDR; -struct MIDIOUT; -typedef struct MIDIOUT* HMIDIOUT; - -#endif - -typedef struct _MDI_DRIVER // Handle to XMIDI driver -{ - char tag[4]; // HMDI - - HTIMER timer; // XMIDI quantization timer - S32 interval_time; // XMIDI quantization timer interval in uS - - S32 disable; // > 0 to disable XMIDI service - - HSEQUENCE sequences; // Pointer to list of SEQUENCEs - S32 n_sequences; // # of SEQUENCEs - - S32 lock [NUM_CHANS]; // 1 if locked, 2 if protected, else 0 - HSEQUENCE locker[NUM_CHANS]; // HSEQUENCE which locked channel - HSEQUENCE owner [NUM_CHANS]; // HSEQUENCE which owned locked channel - HSEQUENCE user [NUM_CHANS]; // Last sequence to use channel - S32 state [NUM_CHANS]; // Lock state prior to being locked - - S32 notes [NUM_CHANS]; // # of active notes in channel - - AILEVENTCB event_trap; // MIDI event trap callback function - AILTIMBRECB timbre_trap; // Timbre request callback function - - S32 master_volume; // Master XMIDI note volume 0-127 - - S32 system_data[8]; // Miscellaneous system data - -#if defined(IS_WINDOWS) || defined(IS_MAC) - - S32 released; // has the hmidiout handle been released - U32 deviceid; // ID of the MIDI device - U8 FAR *sysdata; // SysEx buffer - -#endif - -#ifdef IS_WINDOWS - - S32 EVENT_IsWin32s; // Is this a Win32s callback - S32 TIMBRE_IsWin32s; // Is this a Win32s callback - - MIDIHDR FAR *mhdr; // SysEx header - - HMDIDRIVER next; // Pointer to next HMDIDRIVER in use - S32 callingCT; // Calling EXE's task number (16 bit only) - S32 callingDS; // Calling EXE's DS (used in 16 bit only) - - HMIDIOUT hMidiOut; // MIDI output driver - -#else - - #ifdef IS_DOS - - S32 message_count; // MIDI message count - S32 offset; // MIDI buffer offset - - AIL_DRIVER *drvr; // Base driver descriptor - - MDI_DDT *DDT; // Protected-mode pointer to DDT - MDI_DST *DST; // Protected-mode pointer to DST - #else - #ifdef IS_MAC - struct MIDIHDR FAR *mhdr; // SysEx header - HMDIDRIVER next; // Pointer to next HMDIDRIVER in use - HMIDIOUT hMidiOut; // MIDI output driver - U32 last_us_time; - long period_counter; - long current_period_sum; - #endif - #endif - -#endif - -} -MDI_DRIVER; - -typedef struct // XMIDI TIMB IFF chunk - { - S8 name[4]; - - U8 msb; - U8 lsb; - U8 lsb2; - U8 lsb3; - - U16 n_entries; - - U16 timbre[1]; - } -TIMB_chunk; - -typedef struct // XMIDI RBRN IFF entry - { - S16 bnum; - U32 offset; - } -RBRN_entry; - -typedef struct // Wave library entry -{ - S32 bank; // XMIDI bank, MIDI patch for sample - S32 patch; - - S32 root_key; // Root MIDI note # for sample (or -1) - - U32 file_offset; // Offset of wave data from start-of-file - U32 size; // Size of wave sample in bytes - - S32 format; // DIG_F format (8/16 bits, mono/stereo) - U32 flags; // DIG_PCM_SIGN / DIG_PCM_ORDER (stereo) - S32 playback_rate; // Playback rate in hertz -} -WAVE_ENTRY; - -typedef struct // Virtual "wave synthesizer" descriptor -{ - HMDIDRIVER mdi; // MIDI driver for use with synthesizer - HDIGDRIVER dig; // Digital driver for use with synthesizer - - WAVE_ENTRY FAR *library; // Pointer to wave library - - AILEVENTCB prev_event_fn; // Previous MIDI event trap function - AILTIMBRECB prev_timb_fn; // Previous timbre request trap function - - CTRL_LOG controls; // MIDI controller states - - WAVE_ENTRY FAR *wave [NUM_CHANS];// Pointer to WAVE_ENTRY for each channel - - HSAMPLE S [MAX_W_VOICES]; // List of HSAMPLE voices - S32 n_voices; // Actual # of voices allocated to synth - - S32 chan [MAX_W_VOICES]; // MIDI channel for each voice, or -1 - S32 note [MAX_W_VOICES]; // MIDI note number for voice - S32 root [MAX_W_VOICES]; // MIDI root note for voice - S32 rate [MAX_W_VOICES]; // Playback rate for voice - S32 vel [MAX_W_VOICES]; // MIDI note velocity for voice - U32 time [MAX_W_VOICES]; // Timestamp for voice - - U32 event; // Event counter for LRU timestamps -} -WAVE_SYNTH; - -typedef WAVE_SYNTH FAR * HWAVESYNTH;// Handle to virtual wave synthesizer - -// -// Handle to thread which called AIL_startup() -// -// This thread is suspended by MSS callback threads, to simulate DOS-style -// interrupt handler behavior -// - -#ifdef IS_WIN32 - -extern HANDLE hAppThread; - -#endif - -// -// Background flag for timers -// - -extern volatile S32 AIL_bkgnd_flag; - -// -// Global preference array -// - -extern S32 AIL_preference [N_PREFS]; - -// -// DIG_DRIVER list -// - -extern HDIGDRIVER DIG_first; - -// -// MDI_DRIVER list -// - -extern HMDIDRIVER MDI_first; - -// -// Miscellaneous system services -// - -#define FILE_READ_WITH_SIZE ((void FAR*)(S32)-1) - -#ifndef NO_OLD_SYS_FUNCTIONS - -#define MEM_alloc_lock AIL_mem_alloc_lock -#define MEM_free_lock AIL_mem_free_lock -#define FILE_error AIL_file_error -#define FILE_size AIL_file_size -#define FILE_read AIL_file_read -#define FILE_write AIL_file_write - -#ifdef IS_DOS - -#define MEM_alloc AIL_mem_alloc -#define MEM_free AIL_mem_free -#define MEM_use_malloc AIL_mem_use_malloc -#define MEM_use_free AIL_mem_use_free -#define MEM_alloc_DOS AIL_mem_alloc_DOS -#define MEM_free_DOS AIL_mem_free_DOS -#define VMM_lock_range AIL_vmm_lock_range -#define VMM_unlock_range AIL_vmm_unlock_range -#define VMM_lock AIL_vmm_lock -#define VMM_unlock AIL_vmm_unlock - -#endif - -#endif - -extern S32 AILCALLBACK DP_ASI_DECODER_callback(U32 user, - void FAR *dest, - S32 bytes_requested, - S32 offset); - -DXDEC void FAR * AILCALL AIL_mem_alloc_lock(U32 size); -DXDEC void AILCALL AIL_mem_free_lock (void FAR *ptr); - -DXDEC S32 AILCALL AIL_file_error (void); - -DXDEC S32 AILCALL AIL_file_size (char const FAR *filename); - -DXDEC void FAR * AILCALL AIL_file_read (char const FAR *filename, - void FAR *dest); - -DXDEC S32 AILCALL AIL_file_write (char const FAR *filename, - void const FAR *buf, - U32 len); - -DXDEC S32 AILCALL AIL_WAV_file_write - (char const FAR *filename, - void const FAR *buf, - U32 len, - S32 rate, - S32 format); - -DXDEC S32 AILCALL AIL_file_append (char const FAR *filename, - void const FAR *buf, U32 len); - -#ifdef IS_MAC - - -DXDEC S32 AILCALL AIL_file_fss_size(FSSpec const FAR *filename); - -DXDEC void FAR * AILCALL AIL_file_fss_read(FSSpec const FAR *filename, - void FAR *dest); - -DXDEC S32 AILCALL AIL_file_fss_write(FSSpec const FAR *filename, - void const FAR *buf, - U32 len); - -DXDEC S32 AILCALL AIL_file_fss_attrib_write - (FSSpec const FAR *filename, - void const FAR *buf, - U32 len, - U32 type, - U32 creator ); - -DXDEC S32 AILCALL AIL_WAV_file_fss_write - (FSSpec const FAR *filename, - void const FAR *buf, - U32 len, - S32 rate, - S32 format); - -DXDEC void * AILCALL AIL_mem_use_malloc(void * AILCALLBACK (*fn)(U32)); -DXDEC void * AILCALL AIL_mem_use_free (void AILCALLBACK (*fn)(void *)); - -#endif - -#ifdef IS_DOS - -extern void * AILCALLBACK (*AIL_mem_alloc) (U32); -extern void AILCALLBACK (*AIL_mem_free) (void *); - -void * cdecl AIL_mem_use_malloc(void * AILCALLBACK (*fn)(U32)); -void * cdecl AIL_mem_use_free (void AILCALLBACK (*fn)(void *)); - -// -// Other memory-management functions -// - -DXDEC S32 AILCALL AIL_mem_alloc_DOS (U32 n_paras, - void **protected_ptr, - U32 *segment_far_ptr, - U32 *selector); - -DXDEC void AILCALL AIL_mem_free_DOS (void *protected_ptr, - U32 segment_far_ptr, - U32 selector); - -DXDEC S32 AILCALL AIL_vmm_lock_range (void *p1, void *p2); -DXDEC S32 AILCALL AIL_vmm_unlock_range (void *p1, void *p2); - -DXDEC S32 AILCALL AIL_vmm_lock (void *start, U32 size); -DXDEC S32 AILCALL AIL_vmm_unlock (void *start, U32 size); - -DXDEC U32 AILCALL AIL_sel_base (U32 sel); - -DXDEC void AILCALL AIL_sel_set_limit (U32 sel, - U32 limit); -// -// Last IO_PARMS structure used to attempt device detection -// - -extern IO_PARMS AIL_last_IO_attempt; - -// -// Low-level support services -// - -DXDEC REALFAR AILCALL AIL_get_real_vect (U32 vectnum); - -DXDEC void AILCALL AIL_set_real_vect (U32 vectnum, - REALFAR real_ptr); - -DXDEC void AILCALL AIL_set_USE16_ISR (S32 IRQ, - REALFAR real_base, - U32 ISR_offset); - -DXDEC void AILCALL AIL_restore_USE16_ISR (S32 IRQ); - -DXDEC U32 AILCALL AIL_disable_interrupts (void); -DXDEC void AILCALL AIL_restore_interrupts (U32 FD_register); - -DXDEC void AILCALL AIL_switch_stack (void *stack, - U32 size, - U32 *SS, - void **ESP, - void **EBP); - -DXDEC void AILCALL AIL_restore_stack (U32 SS, - void *ESP, - void *EBP); - -DXDEC S32 AILCALL AIL_call_driver (AIL_DRIVER *drvr, - S32 fn, - VDI_CALL *in, - VDI_CALL *out); - -DXDEC S32 AILCALL AIL_read_INI (AIL_INI *INI, - char *filename); - -DXDEC U32 AILCALL AIL_interrupt_divisor (void); - -#endif - - -#ifdef __WATCOMC__ - -void MSSBreakPoint(); -#pragma aux MSSBreakPoint = "int 3"; - -#else - -#define MSSBreakPoint() __asm {int 3} - -#endif - - -// -// High-level support services -// - -#ifdef IS_MAC - -#if !defined(max) -#define max(a,b) (((a) > (b)) ? (a) : (b)) -#endif -#if !defined(min) -#define min(a,b) (((a) < (b)) ? (a) : (b)) -#endif - -#endif - -#ifdef IS_DOS - -#ifdef IS_WATCOM - -#if !defined(max) // Watcom stdlib.h doesn't define these for C++ -#define max(a,b) (((a) > (b)) ? (a) : (b)) -#endif -#if !defined(min) -#define min(a,b) (((a) < (b)) ? (a) : (b)) -#endif - -#endif - -#ifdef __SW_3R -extern S32 AILCALL AIL_startup_reg (void); -#define AIL_startup AIL_startup_reg -#else -extern S32 AILCALL AIL_startup_stack (void); -#define AIL_startup AIL_startup_stack -#endif - -#define AIL_quick_startup(ud,um,opr,opb,ops) AIL_quick_startup_with_start(&AIL_startup,ud,um,opr,opb,ops) - -#define AIL_get_preference(number) (AIL_preference[number]) - -#else - -DXDEC S32 AILCALL AIL_startup (void); - -DXDEC S32 AILCALL AIL_get_preference (U32 number); - -#endif - -DXDEC void AILCALL AIL_shutdown (void); - -DXDEC S32 AILCALL AIL_set_preference (U32 number, - S32 value); - -DXDEC char FAR *AILCALL AIL_last_error (void); - -DXDEC void AILCALL AIL_set_error (char const FAR * error_msg); - -// -// Low-level support services -// - -DXDEC void -#ifndef IS_MAC -__cdecl -#endif -AIL_debug_printf (C8 const FAR *fmt, ...); - -#ifdef IS_X86 - -DXDEC U32 AILCALL AIL_MMX_available (void); - -#endif - -DXDEC void AILCALL AIL_lock (void); -DXDEC void AILCALL AIL_unlock (void); - -#ifdef IS_WIN32 - -DXDEC void AILCALL AIL_lock_mutex (void); -DXDEC void AILCALL AIL_unlock_mutex (void); - -#endif - -DXDEC void AILCALL AIL_delay (S32 intervals); - -DXDEC S32 AILCALL AIL_background (void); - -// -// Process services -// - -DXDEC HTIMER AILCALL AIL_register_timer (AILTIMERCB fn); - -DXDEC U32 AILCALL AIL_set_timer_user (HTIMER timer, - U32 user); - -DXDEC void AILCALL AIL_set_timer_period (HTIMER timer, - U32 microseconds); - -DXDEC void AILCALL AIL_set_timer_frequency (HTIMER timer, - U32 hertz); - -DXDEC void AILCALL AIL_set_timer_divisor (HTIMER timer, - U32 PIT_divisor); - -DXDEC void AILCALL AIL_start_timer (HTIMER timer); -DXDEC void AILCALL AIL_start_all_timers (void); - -DXDEC void AILCALL AIL_stop_timer (HTIMER timer); -DXDEC void AILCALL AIL_stop_all_timers (void); - -DXDEC void AILCALL AIL_release_timer_handle (HTIMER timer); -DXDEC void AILCALL AIL_release_all_timers (void); - -#ifdef IS_WIN32 - -#ifndef BUILD_MSS - -// static function that handles shutdown -int __cdecl MSS_auto_cleanup(void); - -#ifdef _MSC_VER -// on MSVC, automatically register a cleanup function -//ODCODENOTE Remove -//#define AIL_startup() (MSS_auto_cleanup(),AIL_startup()) -#endif - -#endif - -DXDEC HWND AILCALL AIL_HWND (void); - -#else - #ifdef IS_MAC - DXDEC ProcessSerialNumber AIL_Process(void); - #endif -#endif - -// -// high-level digital services -// - -DXDEC HDIGDRIVER AILCALL AIL_open_digital_driver( U32 frequency, - S32 bits, - S32 channel, - U32 flags ); - -#define AIL_OPEN_DIGITAL_FORCE_PREFERENCE 1 - -DXDEC void AILCALL AIL_close_digital_driver( HDIGDRIVER dig ); - -#ifdef IS_WINDOWS - -#define AIL_MSS_version(str,len) \ -{ \ - HINSTANCE l=LoadLibrary(MSSDLLNAME); \ - if ((U32)l<=32) \ - *(str)=0; \ - else { \ - LoadString(l,1,str,len); \ - FreeLibrary(l); \ - } \ -} - -DXDEC S32 AILCALL AIL_waveOutOpen (HDIGDRIVER FAR *drvr, - LPHWAVEOUT FAR *lphWaveOut, - S32 wDeviceID, - LPWAVEFORMAT lpFormat); - -DXDEC void AILCALL AIL_waveOutClose (HDIGDRIVER drvr); - -DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr); - -DXDEC S32 AILCALL AIL_digital_handle_reacquire - (HDIGDRIVER drvr); - -#else - -#ifdef IS_MAC - -typedef struct MSS_VersionType_ -{ - Str255 version_name; -} MSS_VersionType; - -#define AIL_MSS_version(str,len) \ -{ \ - long _res = OpenResFile("\pMiles Shared Library"); \ - if (_res==-1) \ - { \ - str[0]=0; \ - } \ - else \ - { \ - Handle _H; \ - short _Err; \ - long _cur= CurResFile(); \ - UseResFile(_res); \ - _H = GetResource('vers', 2); \ - _Err = ResError(); \ - if((_Err != noErr) || (_H==0)) \ - { \ - str[0]=0; \ - UseResFile(_cur); \ - CloseResFile(_res); \ - } \ - else \ - { \ - if (GetHandleSize(_H)==0) \ - { \ - str[0]=0; \ - UseResFile(_cur); \ - CloseResFile(_res); \ - } \ - else \ - { \ - MSS_VersionType * _vt = (MSS_VersionType*)*_H; \ - if ((U32)_vt->version_name[6]>4) \ - _vt->version_name[6]-=4; \ - else \ - _vt->version_name[6]=0; \ - if (((U32)len) <= ((U32)_vt->version_name[6])) \ - _vt->version_name[6] = (U8)len-1; \ - memcpy( str, _vt->version_name+11, _vt->version_name[6] ); \ - str[_vt->version_name[6]]=0; \ - UseResFile(_cur); \ - CloseResFile(_res); \ - } \ - ReleaseResource(_H); \ - } \ - } \ -} - -DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr); - -DXDEC S32 AILCALL AIL_digital_handle_reacquire - (HDIGDRIVER drvr); - -#else - -// -// DOS installation services -// - -DXDEC IO_PARMS * AILCALL AIL_get_IO_environment (AIL_DRIVER *drvr); - -DXDEC AIL_DRIVER* AILCALL AIL_install_driver (U8 const *driver_image, - U32 n_bytes); - -DXDEC void AILCALL AIL_uninstall_driver (AIL_DRIVER *drvr); - -DXDEC S32 AILCALL AIL_install_DIG_INI (HDIGDRIVER *dig); - -DXDEC HDIGDRIVER AILCALL AIL_install_DIG_driver_file - (char const *filename, - IO_PARMS *IO); - -DXDEC void AILCALL AIL_uninstall_DIG_driver (HDIGDRIVER dig); - - -DXDEC HDIGDRIVER AILCALL AIL_install_DIG_driver_image - (void const *driver_image, - U32 size, - IO_PARMS *IO); -#endif -#endif - -DXDEC char FAR* AILCALL AIL_set_redist_directory(char const FAR*dir); - -DXDEC S32 AILCALL AIL_digital_CPU_percent (HDIGDRIVER dig); - -DXDEC S32 AILCALL AIL_digital_latency (HDIGDRIVER dig); - -DXDEC HSAMPLE AILCALL AIL_allocate_sample_handle - (HDIGDRIVER dig); - -DXDEC HSAMPLE AILCALL AIL_allocate_file_sample (HDIGDRIVER dig, - void const FAR *file_image, - S32 block); - -DXDEC void AILCALL AIL_release_sample_handle (HSAMPLE S); - -DXDEC void AILCALL AIL_init_sample (HSAMPLE S); - -DXDEC S32 AILCALL AIL_set_sample_file (HSAMPLE S, - void const FAR *file_image, - S32 block); - -DXDEC S32 AILCALL AIL_set_named_sample_file (HSAMPLE S, - C8 const FAR *file_type_suffix, - void const FAR *file_image, - S32 file_size, - S32 block); - -DXDEC HPROVIDER AILCALL AIL_set_sample_processor (HSAMPLE S, - SAMPLESTAGE pipeline_stage, - HPROVIDER provider); - -DXDEC HPROVIDER AILCALL AIL_set_digital_driver_processor - (HDIGDRIVER dig, - DIGDRVSTAGE pipeline_stage, - HPROVIDER provider); - -DXDEC void AILCALL AIL_set_sample_adpcm_block_size - (HSAMPLE S, - U32 blocksize); - -DXDEC void AILCALL AIL_set_sample_address (HSAMPLE S, - void const FAR *start, - U32 len); - -DXDEC void AILCALL AIL_set_sample_type (HSAMPLE S, - S32 format, - U32 flags); - -DXDEC void AILCALL AIL_start_sample (HSAMPLE S); - -DXDEC void AILCALL AIL_stop_sample (HSAMPLE S); - -DXDEC void AILCALL AIL_resume_sample (HSAMPLE S); - -DXDEC void AILCALL AIL_end_sample (HSAMPLE S); - -DXDEC void AILCALL AIL_set_sample_playback_rate - (HSAMPLE S, - S32 playback_rate); - -DXDEC void AILCALL AIL_set_sample_volume (HSAMPLE S, - S32 volume); - -DXDEC void AILCALL AIL_set_sample_pan (HSAMPLE S, - S32 pan); - -DXDEC void AILCALL AIL_set_sample_loop_count (HSAMPLE S, - S32 loop_count); - -DXDEC void AILCALL AIL_set_sample_loop_block (HSAMPLE S, - S32 loop_start_offset, - S32 loop_end_offset); - -DXDEC U32 AILCALL AIL_sample_status (HSAMPLE S); - -DXDEC S32 AILCALL AIL_sample_playback_rate (HSAMPLE S); - -DXDEC S32 AILCALL AIL_sample_volume (HSAMPLE S); - -DXDEC S32 AILCALL AIL_sample_pan (HSAMPLE S); - -DXDEC S32 AILCALL AIL_sample_loop_count (HSAMPLE S); - -DXDEC void AILCALL AIL_set_digital_master_volume - (HDIGDRIVER dig, - S32 master_volume); - -DXDEC S32 AILCALL AIL_digital_master_volume (HDIGDRIVER dig); - -DXDEC void AILCALL AIL_set_sample_reverb(HSAMPLE S, - F32 reverb_level, - F32 reverb_reflect_time, - F32 reverb_decay_time); - -DXDEC void AILCALL AIL_sample_reverb (HSAMPLE S, - F32 FAR *reverb_level, - F32 FAR *reverb_reflect_time, - F32 FAR *reverb_decay_time); - -// -// low-level digital services -// - -DXDEC S32 AILCALL AIL_minimum_sample_buffer_size(HDIGDRIVER dig, - S32 playback_rate, - S32 format); - -DXDEC S32 AILCALL AIL_sample_buffer_ready (HSAMPLE S); - -DXDEC void AILCALL AIL_load_sample_buffer (HSAMPLE S, - U32 buff_num, - void const FAR *buffer, - U32 len); - -DXDEC void AILCALL AIL_request_EOB_ASI_reset (HSAMPLE S, - U32 buff_num); - -DXDEC S32 AILCALL AIL_sample_buffer_info (HSAMPLE S, //) - U32 FAR *pos0, - U32 FAR *len0, - U32 FAR *pos1, - U32 FAR *len1); - -DXDEC U32 AILCALL AIL_sample_granularity (HSAMPLE S); - -DXDEC void AILCALL AIL_set_sample_position (HSAMPLE S, - U32 pos); - -DXDEC U32 AILCALL AIL_sample_position (HSAMPLE S); - -DXDEC AILSAMPLECB AILCALL AIL_register_SOB_callback - (HSAMPLE S, - AILSAMPLECB SOB); - -DXDEC AILSAMPLECB AILCALL AIL_register_EOB_callback - (HSAMPLE S, - AILSAMPLECB EOB); - -DXDEC AILSAMPLECB AILCALL AIL_register_EOS_callback - (HSAMPLE S, - AILSAMPLECB EOS); - -DXDEC AILSAMPLECB AILCALL AIL_register_EOF_callback - (HSAMPLE S, - AILSAMPLECB EOFILE); - -DXDEC void AILCALL AIL_set_sample_user_data (HSAMPLE S, - U32 index, - S32 value); - -DXDEC S32 AILCALL AIL_sample_user_data (HSAMPLE S, - U32 index); - -DXDEC S32 AILCALL AIL_active_sample_count (HDIGDRIVER dig); - -DXDEC void AILCALL AIL_digital_configuration (HDIGDRIVER dig, - S32 FAR *rate, - S32 FAR *format, - char FAR *string); -#ifdef IS_WIN32 - -DXDEC S32 AILCALL AIL_set_direct_buffer_control (HSAMPLE S, - U32 command); - -DXDEC void AILCALL AIL_get_DirectSound_info (HSAMPLE S, - AILLPDIRECTSOUND *lplpDS, - AILLPDIRECTSOUNDBUFFER *lplpDSB); - -DXDEC S32 AILCALL AIL_set_DirectSound_HWND(HDIGDRIVER dig, HWND wnd); - -#endif - -DXDEC void AILCALL AIL_set_sample_ms_position (HSAMPLE S, //) - S32 milliseconds); - -DXDEC void AILCALL AIL_sample_ms_position (HSAMPLE S, //) - S32 FAR * total_milliseconds, - S32 FAR * current_milliseconds); - - -// -// Digital input services -// - -#if defined(IS_WINDOWS) || defined (IS_MAC) - -DXDEC HDIGINPUT AILCALL AIL_open_input (AIL_INPUT_INFO FAR *info); - -DXDEC void AILCALL AIL_close_input (HDIGINPUT dig); - -DXDEC AIL_INPUT_INFO FAR * - AILCALL AIL_get_input_info (HDIGINPUT dig); - -DXDEC S32 AILCALL AIL_set_input_state (HDIGINPUT dig, - S32 enable); -#endif - - -// -// High-level XMIDI services -// - -DXDEC HMDIDRIVER AILCALL AIL_open_XMIDI_driver( U32 flags ); - -#define AIL_OPEN_XMIDI_NULL_DRIVER 1 - -DXDEC void AILCALL AIL_close_XMIDI_driver( HMDIDRIVER mdi ); - -#ifdef IS_MAC - -DXDEC S32 AILCALL AIL_MIDI_handle_release - (HMDIDRIVER mdi); - -DXDEC S32 AILCALL AIL_MIDI_handle_reacquire - (HMDIDRIVER mdi); - -#else - -#ifdef IS_WINDOWS - -DXDEC S32 AILCALL AIL_midiOutOpen(HMDIDRIVER FAR *drvr, - LPHMIDIOUT FAR *lphMidiOut, - S32 dwDeviceID); - -DXDEC void AILCALL AIL_midiOutClose (HMDIDRIVER mdi); - -DXDEC S32 AILCALL AIL_MIDI_handle_release - (HMDIDRIVER mdi); - -DXDEC S32 AILCALL AIL_MIDI_handle_reacquire - (HMDIDRIVER mdi); - -#else - -#ifdef IS_DOS - -DXDEC S32 AILCALL AIL_install_MDI_INI (HMDIDRIVER *mdi); - -DXDEC HMDIDRIVER AILCALL AIL_install_MDI_driver_file - (char const *filename, - IO_PARMS *IO); - -DXDEC void AILCALL AIL_uninstall_MDI_driver (HMDIDRIVER mdi); - - -DXDEC HMDIDRIVER AILCALL AIL_install_MDI_driver_image - (void const *driver_image, - U32 size, - IO_PARMS *IO); - -DXDEC S32 AILCALL AIL_MDI_driver_type (HMDIDRIVER mdi); - -DXDEC void AILCALL AIL_set_GTL_filename_prefix (char const*prefix); - -DXDEC S32 AILCALL AIL_timbre_status (HMDIDRIVER mdi, - S32 bank, - S32 patch); - -DXDEC S32 AILCALL AIL_install_timbre (HMDIDRIVER mdi, - S32 bank, - S32 patch); - -DXDEC void AILCALL AIL_protect_timbre (HMDIDRIVER mdi, - S32 bank, - S32 patch); - -DXDEC void AILCALL AIL_unprotect_timbre (HMDIDRIVER mdi, - S32 bank, - S32 patch); - -#endif - -#endif - -#endif - -DXDEC HSEQUENCE AILCALL AIL_allocate_sequence_handle - (HMDIDRIVER mdi); - -DXDEC void AILCALL AIL_release_sequence_handle - (HSEQUENCE S); - -DXDEC S32 AILCALL AIL_init_sequence (HSEQUENCE S, - void const FAR *start, - S32 sequence_num); - -DXDEC void AILCALL AIL_start_sequence (HSEQUENCE S); - -DXDEC void AILCALL AIL_stop_sequence (HSEQUENCE S); - -DXDEC void AILCALL AIL_resume_sequence (HSEQUENCE S); - -DXDEC void AILCALL AIL_end_sequence (HSEQUENCE S); - -DXDEC void AILCALL AIL_set_sequence_tempo (HSEQUENCE S, - S32 tempo, - S32 milliseconds); - -DXDEC void AILCALL AIL_set_sequence_volume (HSEQUENCE S, - S32 volume, - S32 milliseconds); - -DXDEC void AILCALL AIL_set_sequence_loop_count - (HSEQUENCE S, - S32 loop_count); - -DXDEC U32 AILCALL AIL_sequence_status (HSEQUENCE S); - -DXDEC S32 AILCALL AIL_sequence_tempo (HSEQUENCE S); - -DXDEC S32 AILCALL AIL_sequence_volume (HSEQUENCE S); - -DXDEC S32 AILCALL AIL_sequence_loop_count (HSEQUENCE S); - -DXDEC void AILCALL AIL_set_XMIDI_master_volume - (HMDIDRIVER mdi, - S32 master_volume); - -DXDEC S32 AILCALL AIL_XMIDI_master_volume (HMDIDRIVER mdi); - - -// -// Low-level XMIDI services -// - -DXDEC S32 AILCALL AIL_active_sequence_count (HMDIDRIVER mdi); - -DXDEC S32 AILCALL AIL_controller_value (HSEQUENCE S, - S32 channel, - S32 controller_num); - -DXDEC S32 AILCALL AIL_channel_notes (HSEQUENCE S, - S32 channel); - -DXDEC void AILCALL AIL_sequence_position (HSEQUENCE S, - S32 FAR *beat, - S32 FAR *measure); - -DXDEC void AILCALL AIL_branch_index (HSEQUENCE S, - U32 marker); - -DXDEC AILPREFIXCB AILCALL AIL_register_prefix_callback - (HSEQUENCE S, - AILPREFIXCB callback); - -DXDEC AILTRIGGERCB AILCALL AIL_register_trigger_callback - (HSEQUENCE S, - AILTRIGGERCB callback); - -DXDEC AILSEQUENCECB AILCALL AIL_register_sequence_callback - (HSEQUENCE S, - AILSEQUENCECB callback); - -DXDEC AILBEATCB AILCALL AIL_register_beat_callback (HSEQUENCE S, - AILBEATCB callback); - -DXDEC AILEVENTCB AILCALL AIL_register_event_callback (HMDIDRIVER mdi, - AILEVENTCB callback); - -DXDEC AILTIMBRECB AILCALL AIL_register_timbre_callback - (HMDIDRIVER mdi, - AILTIMBRECB callback); - -DXDEC void AILCALL AIL_set_sequence_user_data (HSEQUENCE S, - U32 index, - S32 value); - -DXDEC S32 AILCALL AIL_sequence_user_data (HSEQUENCE S, - U32 index); - -DXDEC void AILCALL AIL_register_ICA_array (HSEQUENCE S, - U8 FAR *array); - -DXDEC S32 AILCALL AIL_lock_channel (HMDIDRIVER mdi); - -DXDEC void AILCALL AIL_release_channel (HMDIDRIVER mdi, - S32 channel); - -DXDEC void AILCALL AIL_map_sequence_channel (HSEQUENCE S, - S32 seq_channel, - S32 new_channel); - -DXDEC S32 AILCALL AIL_true_sequence_channel (HSEQUENCE S, - S32 seq_channel); - -DXDEC void AILCALL AIL_send_channel_voice_message - (HMDIDRIVER mdi, - HSEQUENCE S, - S32 status, - S32 data_1, - S32 data_2); - -DXDEC void AILCALL AIL_send_sysex_message (HMDIDRIVER mdi, - void const FAR *buffer); - -DXDEC HWAVESYNTH - AILCALL AIL_create_wave_synthesizer (HDIGDRIVER dig, - HMDIDRIVER mdi, - void const FAR *wave_lib, - S32 polyphony); - -DXDEC void AILCALL AIL_destroy_wave_synthesizer (HWAVESYNTH W); - -DXDEC void AILCALL AIL_set_sequence_ms_position (HSEQUENCE S, //) - S32 milliseconds); - -DXDEC void AILCALL AIL_sequence_ms_position(HSEQUENCE S, //) - S32 FAR *total_milliseconds, - S32 FAR *current_milliseconds); - - - -// -// red book functions -// - -#ifdef IS_DOS -typedef struct _REDBOOKTRACKINFO { - U32 tracks; - U32 trackstarts[100]; -} REDBOOKTRACKINFO; -#endif - -typedef struct _REDBOOK { - U32 DeviceID; - U32 paused; - U32 pausedsec; - U32 lastendsec; -#ifdef IS_DOS - U32 readcontents; - REDBOOKTRACKINFO info; -#endif -#ifdef IS_MAC - short vDRefNum; -#endif -} REDBOOK; - -typedef struct _REDBOOK FAR* HREDBOOK; - -#define REDBOOK_ERROR 0 -#define REDBOOK_PLAYING 1 -#define REDBOOK_PAUSED 2 -#define REDBOOK_STOPPED 3 - - -DXDEC HREDBOOK AILCALL AIL_redbook_open(U32 which); - -#ifdef IS_MAC -DXDEC HREDBOOK AILCALL AIL_redbook_open_volume(char const * drive); -#else -DXDEC HREDBOOK AILCALL AIL_redbook_open_drive(S32 drive); -#endif - -DXDEC void AILCALL AIL_redbook_close(HREDBOOK hand); - -DXDEC void AILCALL AIL_redbook_eject(HREDBOOK hand); - -DXDEC void AILCALL AIL_redbook_retract(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_status(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_tracks(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_track(HREDBOOK hand); - -DXDEC void AILCALL AIL_redbook_track_info(HREDBOOK hand,U32 tracknum, - U32 FAR* startmsec,U32 FAR* endmsec); - -DXDEC U32 AILCALL AIL_redbook_id(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_position(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_play(HREDBOOK hand,U32 startmsec, U32 endmsec); - -DXDEC U32 AILCALL AIL_redbook_stop(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_pause(HREDBOOK hand); - -DXDEC U32 AILCALL AIL_redbook_resume(HREDBOOK hand); - -DXDEC S32 AILCALL AIL_redbook_volume(HREDBOOK hand); - -DXDEC S32 AILCALL AIL_redbook_set_volume(HREDBOOK hand, S32 volume); - -#ifdef IS_WIN16 - #define AIL_ms_count timeGetTime - DXDEC U32 AILCALL AIL_us_count(void); -#else - DXDEC U32 AILCALL AIL_ms_count(void); - DXDEC U32 AILCALL AIL_us_count(void); -#endif - - -typedef struct _STREAM FAR* HSTREAM; // Handle to stream - -typedef void (AILCALLBACK FAR* AILSTREAMCB) (HSTREAM stream); - -typedef struct _STREAM { - - S32 block_oriented; // 1 if this is an ADPCM or ASI-compressed stream - S32 using_ASI; // 1 if using ASI decoder to uncompress stream data - ASISTAGE FAR *ASI; // handy pointer to our ASI coded - - HSAMPLE samp; // the sample handle - - U32 fileh; // the open file handle - - U8 FAR* bufs[3]; // the data buffers - U32 bufsizes[3]; // the size of each buffer - S32 reset_ASI[3]; // should we reset the ASI at the end of the buffer? - S32 bufstart[3]; // offset of where this buffer started - void FAR* asyncs[3];// async read structures - - S32 loadedbufstart[2]; // offset of where the loaded buffer started - S32 loadedorder[2]; // order of the buffers as they were loaded - S32 loadorder; // incremented as each buffer is loaded - - S32 bufsize; // size of each buffer - S32 readsize; // size of each read block - - U32 buf1; // 0,1,2 (current buffer that we are reading into) - S32 size1; // holds the current amount of data read - - U32 buf2; // 0,1,2 (the next buffer that we are reading into) - S32 size2; // next buffer loaded up to - - U32 buf3; // 0,1,2 (the next buffer that we are reading into) - S32 size3; // next buffer loaded up to - - U32 datarate; // datarate in bytes per second - S32 filerate; // original datarate of the file - S32 filetype; // file format type - U32 fileflags; // file format flags (signed or unsigned) - S32 totallen; // total length of the sound data - - S32 substart; // subblock loop start - S32 sublen; // subblock loop len - S32 subpadding; // amount to pad the final block - - U32 blocksize; // ADPCM block size - S32 padding; // padding to be done - S32 padded; // padding done - - S32 loadedsome; // have we done any loads? - - U32 startpos; // point that the sound data begins - U32 totalread; // total bytes read from the disk - - U32 loopsleft; // how many loops are left - - U32 error; // read error has occurred - - S32 preload; // preload the file into the first buffer - U32 preloadpos; // position to use in preload - S32 noback; // no background processing - S32 alldone; // alldone - S32 primeamount; // amount to load after a seek - S32 readatleast; // forced amount to read on next service - - S32 playcontrol; // control: 0=stopped, 1=started, |8=paused, |16=sample paused - - AILSTREAMCB callback; // end of stream callback - - S32 user_data[8]; // Miscellaneous user data - void FAR* next; // pointer to next stream - -#if defined(IS_WINDOWS) || defined(IS_MAC) - S32 autostreaming; // are we autostreaming this stream -#endif - -#ifdef IS_WINDOWS - S32 cb_IsWin32s; // Is the callback win32s? -#endif - - S32 docallback; // set when it time to poll for a callback - -#ifdef IS_MAC - IOParam stream_param; - S32 donext; - S32 donext1; - U32 fillup; - U32 session; - U32 tamt; - U32 buf; - S32* size; - S32* done; - S32 done1; - S32 done2; - S32 done3; - Boolean force_quit; -#endif - -} MSTREAM_TYPE; - - -DXDEC HSTREAM AILCALL AIL_open_stream(HDIGDRIVER dig, char const FAR * filename, S32 stream_mem); - -DXDEC void AILCALL AIL_close_stream(HSTREAM stream); - -DXDEC S32 AILCALL AIL_service_stream(HSTREAM stream, S32 fillup); - -DXDEC void AILCALL AIL_start_stream(HSTREAM stream); - -DXDEC void AILCALL AIL_pause_stream(HSTREAM stream, S32 onoff); - -DXDEC void AILCALL AIL_set_stream_volume(HSTREAM stream,S32 volume); - -DXDEC void AILCALL AIL_set_stream_pan(HSTREAM stream,S32 pan); - -DXDEC S32 AILCALL AIL_stream_volume(HSTREAM stream); - -DXDEC S32 AILCALL AIL_stream_pan(HSTREAM stream); - -DXDEC void AILCALL AIL_set_stream_playback_rate(HSTREAM stream, S32 rate); - -DXDEC S32 AILCALL AIL_stream_playback_rate(HSTREAM stream); - -DXDEC S32 AILCALL AIL_stream_loop_count(HSTREAM stream); - -DXDEC void AILCALL AIL_set_stream_loop_count(HSTREAM stream, S32 count); - -DXDEC void AILCALL AIL_set_stream_loop_block (HSTREAM S, - S32 loop_start_offset, - S32 loop_end_offset); - -DXDEC S32 AILCALL AIL_stream_status(HSTREAM stream); - -DXDEC void AILCALL AIL_set_stream_position(HSTREAM stream,S32 offset); - -DXDEC S32 AILCALL AIL_stream_position(HSTREAM stream); - -DXDEC void AILCALL AIL_stream_info(HSTREAM stream, S32 FAR* datarate, S32 FAR* sndtype, S32 FAR* length, S32 FAR* memory); - -DXDEC AILSTREAMCB AILCALL AIL_register_stream_callback(HSTREAM stream, AILSTREAMCB callback); - -DXDEC void AILCALL AIL_auto_service_stream(HSTREAM stream, S32 onoff); - -DXDEC void AILCALL AIL_set_stream_user_data (HSTREAM S, - U32 index, - S32 value); - -DXDEC S32 AILCALL AIL_stream_user_data (HSTREAM S, - U32 index); - -DXDEC void AILCALL AIL_set_stream_ms_position (HSTREAM S, - S32 milliseconds); - -DXDEC void AILCALL AIL_stream_ms_position (HSTREAM S, //) - S32 FAR * total_milliseconds, - S32 FAR * current_milliseconds); - -DXDEC void AILCALL AIL_set_stream_reverb(HSTREAM S, - F32 reverb_level, - F32 reverb_reflect_time, - F32 reverb_decay_time); - -DXDEC void AILCALL AIL_stream_reverb (HSTREAM S, - F32 FAR *reverb_level, - F32 FAR *reverb_reflect_time, - F32 FAR *reverb_decay_time); - -DXDEC HPROVIDER AILCALL AIL_set_stream_processor (HSTREAM S, - SAMPLESTAGE pipeline_stage, - HPROVIDER provider); - -#ifdef IS_MAC -typedef struct MSS_FILE -{ - S32 file_type; // 0 = char*, 1 = FSSpec* - void const FAR* file; -} MSS_FILE; -#else -typedef char MSS_FILE; -#endif - -typedef U32 (AILCALLBACK FAR*AIL_file_open_callback) (MSS_FILE const FAR* Filename, - U32 FAR* FileHandle); - -typedef void (AILCALLBACK FAR*AIL_file_close_callback) (U32 FileHandle); - -#define AIL_FILE_SEEK_BEGIN 0 -#define AIL_FILE_SEEK_CURRENT 1 -#define AIL_FILE_SEEK_END 2 - -typedef S32 (AILCALLBACK FAR*AIL_file_seek_callback) (U32 FileHandle, - S32 Offset, - U32 Type); - -typedef U32 (AILCALLBACK FAR*AIL_file_read_callback) (U32 FileHandle, - void FAR* Buffer, - U32 Bytes); - -DXDEC void AILCALL AIL_set_file_callbacks (AIL_file_open_callback opencb, - AIL_file_close_callback closecb, - AIL_file_seek_callback seekcb, - AIL_file_read_callback readcb); - -#ifdef IS_32 - -typedef void FAR* (AILCALLBACK FAR*AIL_file_async_read_callback) (U32 FileHandle, - void FAR* Buffer, - U32 Bytes); - -typedef S32 (AILCALLBACK FAR*AIL_file_async_status_callback) (void FAR* async, - S32 wait, - U32 FAR* BytesRead); - -DXDEC void AILCALL AIL_set_file_async_callbacks (AIL_file_open_callback opencb, - AIL_file_close_callback closecb, - AIL_file_seek_callback seekcb, - AIL_file_async_read_callback areadcb, - AIL_file_async_status_callback statuscb); - -#endif - -// -// High-level DLS functions -// - -typedef struct _DLSFILEID { - S32 id; - struct _DLSFILEID FAR* next; -} DLSFILEID; - -typedef struct _DLSFILEID FAR* HDLSFILEID; - -typedef struct _DLSDEVICE { - void FAR* pGetPref; - void FAR* pSetPref; - void FAR* pMSSOpen; - void FAR* pOpen; - void FAR* pClose; - void FAR* pLoadFile; - void FAR* pLoadMem; - void FAR* pUnloadFile; - void FAR* pUnloadAll; - void FAR* pGetInfo; - void FAR* pCompact; - void FAR* pSetAttr; - S32 DLSHandle; - U32 format; - U32 buffer_size; - void FAR* buffer[2]; - HSAMPLE sample; - HMDIDRIVER mdi; - HDIGDRIVER dig; - HDLSFILEID first; -#ifdef IS_WINDOWS - HMODULE lib; -#else - #ifdef IS_DOS - char FAR* DOSname; - #endif -#endif -} DLSDEVICE; - -typedef struct _DLSDEVICE FAR* HDLSDEVICE; - -typedef struct _AILDLSINFO { - char Description[128]; - S32 MaxDLSMemory; - S32 CurrentDLSMemory; - S32 LargestSize; - S32 GMAvailable; - S32 GMBankSize; -} AILDLSINFO; - -#ifdef IS_DOS - -typedef struct _AILDOSDLS { - char FAR* description; - void FAR* pDLSOpen; - void FAR* pMSSOpen; - void FAR* pOpen; - void FAR* pClose; - void FAR* pLoadFile; - void FAR* pLoadMem; - void FAR* pUnloadFile; - void FAR* pUnloadAll; - void FAR* pGetInfo; - void FAR* pCompact; - void FAR* pSetAttr; -} AILDOSDLS; - -#endif - - -DXDEC HDLSDEVICE AILCALL AIL_DLS_open(HMDIDRIVER mdi, HDIGDRIVER dig, -#if defined(IS_WINDOWS) || defined(IS_MAC) - char const FAR * libname, -#else - AILDOSDLS const FAR * dosdls, -#endif - U32 flags, U32 rate, S32 bits, S32 channels); - -// -// Parameters for the dwFlag used in DLSClose() and flags in AIL_DLS_close -// - -#define RETAIN_DLS_COLLECTION 0x00000001 -#define RETURN_TO_BOOTUP_STATE 0x00000002 -#define RETURN_TO_GM_ONLY_STATE 0x00000004 -#define DLS_COMPACT_MEMORY 0x00000008 - -DXDEC void AILCALL AIL_DLS_close(HDLSDEVICE dls, U32 flags); - -DXDEC HDLSFILEID AILCALL AIL_DLS_load_file(HDLSDEVICE dls, char const FAR* filename, U32 flags); - -DXDEC HDLSFILEID AILCALL AIL_DLS_load_memory(HDLSDEVICE dls, void const FAR* memfile, U32 flags); - -// -// other parameters for AIL_DLS_unload -// - -#define AIL_DLS_UNLOAD_MINE 0 -#define AIL_DLS_UNLOAD_ALL ((HDLSFILEID)(U32)(S32)-1) - -DXDEC void AILCALL AIL_DLS_unload(HDLSDEVICE dls, HDLSFILEID dlsid); - -DXDEC void AILCALL AIL_DLS_compact(HDLSDEVICE dls); - -DXDEC void AILCALL AIL_DLS_get_info(HDLSDEVICE dls, AILDLSINFO FAR* info, S32 FAR* PercentCPU); - -DXDEC void AILCALL AIL_DLS_set_reverb(HDLSDEVICE dls, - F32 reverb_level, - F32 reverb_reflect_time, - F32 reverb_decay_time); - -DXDEC void AILCALL AIL_DLS_get_reverb(HDLSDEVICE dls, - F32 FAR* reverb_level, - F32 FAR* reverb_reflect_time, - F32 FAR* reverb_decay_time); - -DXDEC HPROVIDER AILCALL AIL_set_DLS_processor (HDLSDEVICE dev, - SAMPLESTAGE pipeline_stage, - HPROVIDER provider); - - -// -// Quick-integration service functions and data types -// - -typedef struct -{ - U32 const FAR *data; - S32 size; - S32 type; - void FAR *handle; - S32 status; - void FAR* next; - S32 speed; - S32 volume; - S32 extravol; - F32 rlevel; - F32 rrtime; - F32 rdtime; - HDLSFILEID dlsid; - void FAR* dlsmem; - void FAR* dlsmemunc; - S32 milliseconds; - S32 length; - S32 userdata; -} -AUDIO_TYPE; - - -#define QSTAT_DONE 1 // Data has finished playing -#define QSTAT_LOADED 2 // Data has been loaded, but not yet played -#define QSTAT_PLAYING 3 // Data is currently playing - -typedef AUDIO_TYPE FAR * HAUDIO; // Generic handle to any audio data type - -#define AIL_QUICK_USE_WAVEOUT 2 -#define AIL_QUICK_MIDI_AND_DLS 2 -#define AIL_QUICK_DLS_ONLY 3 -#define AIL_QUICK_MIDI_AND_VORTEX_DLS 4 -#define AIL_QUICK_MIDI_AND_SONICVIBES_DLS 5 - -DXDEC S32 AILCALL -#if defined(IS_WINDOWS) || defined(IS_MAC) - AIL_quick_startup ( -#else - AIL_quick_startup_with_start(void* startup, -#endif - S32 use_digital, - S32 use_MIDI, - U32 output_rate, - S32 output_bits, - S32 output_channels); - -DXDEC void AILCALL AIL_quick_shutdown (void); - -DXDEC void AILCALL AIL_quick_handles (HDIGDRIVER FAR* pdig, - HMDIDRIVER FAR* pmdi, - HDLSDEVICE FAR* pdls ); - -DXDEC HAUDIO AILCALL AIL_quick_load (char const FAR *filename); - -#ifdef IS_MAC -DXDEC HAUDIO AILCALL AIL_quick_fss_load (FSSpec const FAR *filename); -#endif - -DXDEC HAUDIO AILCALL AIL_quick_load_mem (void const FAR *mem, - U32 size); - -DXDEC HAUDIO AILCALL AIL_quick_copy (HAUDIO audio); - -DXDEC void AILCALL AIL_quick_unload (HAUDIO audio); - -DXDEC S32 AILCALL AIL_quick_play (HAUDIO audio, - U32 loop_count); - -DXDEC void AILCALL AIL_quick_halt (HAUDIO audio); - -DXDEC S32 AILCALL AIL_quick_status (HAUDIO audio); - -DXDEC HAUDIO AILCALL AIL_quick_load_and_play (char const FAR *filename, - U32 loop_count, - S32 wait_request); - -#ifdef IS_MAC -DXDEC HAUDIO AILCALL AIL_quick_fss_load_and_play (FSSpec const FAR *filename, - U32 loop_count, - S32 wait_request); -#endif - -DXDEC void AILCALL AIL_quick_set_speed (HAUDIO audio, S32 speed); - -DXDEC void AILCALL AIL_quick_set_volume (HAUDIO audio, S32 volume, S32 extravol); - -DXDEC void AILCALL AIL_quick_set_reverb (HAUDIO audio, - F32 reverb_level, - F32 reverb_reflect_time, - F32 reverb_decay_time); - -DXDEC void AILCALL AIL_quick_set_ms_position(HAUDIO audio,S32 milliseconds); - -DXDEC S32 AILCALL AIL_quick_ms_position(HAUDIO audio); - -DXDEC S32 AILCALL AIL_quick_ms_length(HAUDIO audio); - - -#define AIL_QUICK_XMIDI_TYPE 1 -#define AIL_QUICK_DIGITAL_TYPE 2 -#define AIL_QUICK_DLS_XMIDI_TYPE 3 -#define AIL_QUICK_MPEG_DIGITAL_TYPE 4 - -DXDEC S32 AILCALL AIL_quick_type(HAUDIO audio); - -// -// used for AIL_process -// - -typedef struct _AILMIXINFO { - AILSOUNDINFO Info; - ADPCMDATA mss_adpcm; - U32 src_fract; - S32 left_val; - S32 right_val; -} AILMIXINFO; - - - -DXDEC S32 AILCALL AIL_WAV_info(void const FAR* data, AILSOUNDINFO FAR* info); - -DXDEC S32 AILCALL AIL_size_processed_digital_audio( - U32 dest_rate, - U32 dest_format, - S32 num_srcs, - AILMIXINFO const FAR* src); - -DXDEC S32 AILCALL AIL_process_digital_audio( - void FAR *dest_buffer, - S32 dest_buffer_size, - U32 dest_rate, - U32 dest_format, - S32 num_srcs, - AILMIXINFO FAR* src); - -#define AIL_LENGTHY_INIT 0 -#define AIL_LENGTHY_SET_PREFERENCE 1 -#define AIL_LENGTHY_UPDATE 2 -#define AIL_LENGTHY_DONE 3 - -typedef S32 (AILCALLBACK FAR* AILLENGTHYCB)(U32 state,U32 user); - -typedef S32 (AILCALLBACK FAR* AILCODECSETPREF)(char const FAR* preference,U32 value); - -DXDEC S32 AILCALL AIL_compress_ASI(AILSOUNDINFO const FAR * info, //) - char const FAR* filename_ext, - void FAR* FAR* outdata, - U32 FAR* outsize, - AILLENGTHYCB callback); - -DXDEC S32 AILCALL AIL_decompress_ASI(void const FAR* indata, //) - U32 insize, - char const FAR* filename_ext, - void FAR* FAR* wav, - U32 FAR* wavsize, - AILLENGTHYCB callback); - -DXDEC S32 AILCALL AIL_compress_ADPCM(AILSOUNDINFO const FAR * info, - void FAR* FAR* outdata, U32 FAR* outsize); - -DXDEC S32 AILCALL AIL_decompress_ADPCM(AILSOUNDINFO const FAR * info, - void FAR* FAR* outdata, U32 FAR* outsize); - -DXDEC S32 AILCALL AIL_compress_DLS(void const FAR* dls, - char const FAR* compression_extension, - void FAR* FAR* mls, U32 FAR* mlssize, - AILLENGTHYCB callback); - -DXDEC S32 AILCALL AIL_merge_DLS_with_XMI(void const FAR* xmi, void const FAR* dls, - void FAR* FAR* mss, U32 FAR* msssize); - -DXDEC S32 AILCALL AIL_extract_DLS( void const FAR *source_image, //) - U32 source_size, - void FAR * FAR *XMI_output_data, - U32 FAR *XMI_output_size, - void FAR * FAR *DLS_output_data, - U32 FAR *DLS_output_size, - AILLENGTHYCB callback); - -#define AILFILTERDLS_USINGLIST 1 - -DXDEC S32 AILCALL AIL_filter_DLS_with_XMI(void const FAR* xmi, void const FAR* dls, - void FAR* FAR* dlsout, U32 FAR* dlssize, - S32 flags, AILLENGTHYCB callback); - -#define AILMIDITOXMI_USINGLIST 1 -#define AILMIDITOXMI_TOLERANT 2 - -DXDEC S32 AILCALL AIL_MIDI_to_XMI (void const FAR* MIDI, - U32 MIDI_size, - void FAR* FAR*XMIDI, - U32 FAR* XMIDI_size, - S32 flags); - -#define AILMIDILIST_ROLANDSYSEX 1 -#define AILMIDILIST_ROLANDUN 2 -#define AILMIDILIST_ROLANDAB 4 - -DXDEC S32 AILCALL AIL_list_MIDI (void const FAR* MIDI, - U32 MIDI_size, - char FAR* FAR* lst, - U32 FAR* lst_size, - S32 flags); -#define AILDLSLIST_ARTICULATION 1 -#define AILDLSLIST_DUMP_WAVS 2 - -DXDEC S32 AILCALL AIL_list_DLS (void const FAR* DLS, - char FAR* FAR* lst, - U32 FAR* lst_size, - S32 flags, - C8 FAR* title); - -#define AILFILETYPE_UNKNOWN 0 -#define AILFILETYPE_PCM_WAV 1 -#define AILFILETYPE_ADPCM_WAV 2 -#define AILFILETYPE_OTHER_WAV 3 -#define AILFILETYPE_VOC 4 -#define AILFILETYPE_MIDI 5 -#define AILFILETYPE_XMIDI 6 -#define AILFILETYPE_XMIDI_DLS 7 -#define AILFILETYPE_XMIDI_MLS 8 -#define AILFILETYPE_DLS 9 -#define AILFILETYPE_MLS 10 -#define AILFILETYPE_MPEG_L1_AUDIO 11 -#define AILFILETYPE_MPEG_L2_AUDIO 12 -#define AILFILETYPE_MPEG_L3_AUDIO 13 -#define AILFILETYPE_OTHER_ASI_WAV 14 - - -DXDEC S32 AILCALL AIL_file_type(void const FAR* data, U32 size); - -DXDEC S32 AILCALL AIL_find_DLS (void const FAR* data, U32 size, - void FAR* FAR* xmi, U32 FAR* xmisize, - void FAR* FAR* dls, U32 FAR* dlssize); - -#if defined(IS_WIN32) || defined(IS_MAC) - -// -// Auxiliary 2D interface calls -// - -DXDEC HDIGDRIVER AILCALL AIL_primary_digital_driver (HDIGDRIVER new_primary); - -// -// Filter result codes -// - -typedef S32 FLTRESULT; - -#define FLT_NOERR 0 // Success -- no error -#define FLT_NOT_ENABLED 1 // FLT not enabled -#define FLT_ALREADY_STARTED 2 // FLT already started -#define FLT_INVALID_PARAM 3 // Invalid parameters used -#define FLT_INTERNAL_ERR 4 // Internal error in FLT driver -#define FLT_OUT_OF_MEM 5 // Out of system RAM -#define FLT_ERR_NOT_IMPLEMENTED 6 // Feature not implemented -#define FLT_NOT_FOUND 7 // FLT supported device not found -#define FLT_NOT_INIT 8 // FLT not initialized -#define FLT_CLOSE_ERR 9 // FLT not closed correctly - -//############################################################################ -//## ## -//## Interface "MSS pipeline filter" ## -//## ## -//############################################################################ - -typedef FLTRESULT (AILCALL FAR *FLT_STARTUP)(void); - -typedef FLTRESULT (AILCALL FAR *FLT_SHUTDOWN)(void); - -typedef C8 FAR * (AILCALL FAR *FLT_ERROR)(void); - -typedef S32 (AILCALL FAR *FLT_SET_PROVIDER_PREFERENCE)(HATTRIB preference, - void const FAR* value); - -typedef HDRIVERSTATE (AILCALL FAR *FLT_OPEN_DRIVER) (HDIGDRIVER dig, - S32 FAR *build_buffer, - S32 build_buffer_size); - -typedef FLTRESULT (AILCALL FAR *FLT_CLOSE_DRIVER) (HDRIVERSTATE state); - -typedef void (AILCALL FAR *FLT_PREMIX_PROCESS) (HDRIVERSTATE driver -#ifdef IS_MAC - ,U32 buffer_size -#endif -); - -typedef void (AILCALL FAR *FLT_POSTMIX_PROCESS) (HDRIVERSTATE driver -#ifdef IS_MAC - ,U32 buffer_size -#endif -); - -//############################################################################ -//## ## -//## Interface "Pipeline filter sample services" ## -//## ## -//############################################################################ - -typedef HSAMPLESTATE (AILCALL FAR * FLTSMP_OPEN_SAMPLE) (HDRIVERSTATE driver, - HSAMPLE S); - -typedef FLTRESULT (AILCALL FAR * FLTSMP_CLOSE_SAMPLE) (HSAMPLESTATE state); - -typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_PROCESS) (HSAMPLESTATE state, - void const FAR * FAR *orig_src, - U32 FAR * orig_src_fract, - void FAR * orig_src_end, - S32 FAR * FAR *build_dest, - void FAR * build_dest_end, - S32 FAR * left_val, - S32 FAR * right_val, - S32 playback_ratio, - S32 left_scale, - S32 right_scale, - S32 base_scale, - MIXSTAGE FAR * mixer_provider, - U32 mixer_operation); - -typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_ATTRIBUTE) (HSAMPLESTATE state, - HATTRIB attribute); - -typedef S32 (AILCALL FAR * FLTSMP_SET_SAMPLE_PREFERENCE) (HSAMPLESTATE state, - HATTRIB preference, - void const FAR* value); - -// -// Pipeline filter calls -// - -DXDEC S32 AILCALL AIL_enumerate_filters (HPROENUM FAR *next, - HPROVIDER FAR *dest, - C8 FAR * FAR *name); - -DXDEC HDRIVERSTATE - AILCALL AIL_open_filter (HPROVIDER lib, - HDIGDRIVER dig); - -DXDEC void AILCALL AIL_close_filter (HDRIVERSTATE filter); - -DXDEC S32 AILCALL AIL_enumerate_filter_attributes - (HPROVIDER lib, - HINTENUM FAR * next, - RIB_INTERFACE_ENTRY FAR * dest); - -DXDEC void AILCALL AIL_filter_attribute (HPROVIDER lib, - C8 const FAR* name, - void FAR * val); - -DXDEC void AILCALL AIL_set_filter_preference - (HPROVIDER lib, - C8 const FAR* name, - void const FAR* val); - -DXDEC S32 AILCALL AIL_enumerate_filter_sample_attributes - (HPROVIDER lib, - HINTENUM FAR * next, - RIB_INTERFACE_ENTRY FAR * dest); - -DXDEC void AILCALL AIL_filter_sample_attribute - (HSAMPLE S, - C8 const FAR* name, - void FAR * val); - -DXDEC void AILCALL AIL_filter_stream_attribute - (HSTREAM S, - C8 const FAR* name, - void FAR* val); - -DXDEC void AILCALL AIL_filter_DLS_attribute - (HDLSDEVICE dls, - C8 const FAR* name, - void FAR * val); - -DXDEC void AILCALL AIL_set_filter_sample_preference - (HSAMPLE S, - C8 const FAR * name, - void const FAR * val); - -DXDEC void AILCALL AIL_set_filter_stream_preference - (HSTREAM S, - C8 const FAR * name, - void const FAR * val); - -DXDEC void AILCALL AIL_set_filter_DLS_preference - (HDLSDEVICE dls, - C8 const FAR * name, - void const FAR * val); - -typedef struct _FLTPROVIDER -{ - PROVIDER_QUERY_ATTRIBUTE PROVIDER_query_attribute; - - FLT_STARTUP startup; - FLT_ERROR error; - FLT_SHUTDOWN shutdown; - FLT_SET_PROVIDER_PREFERENCE set_provider_preference; - FLT_OPEN_DRIVER open_driver; - FLT_CLOSE_DRIVER close_driver; - FLT_PREMIX_PROCESS premix_process; - FLT_POSTMIX_PROCESS postmix_process; - - FLTSMP_OPEN_SAMPLE open_sample; - FLTSMP_CLOSE_SAMPLE close_sample; - FLTSMP_SAMPLE_PROCESS sample_process; - FLTSMP_SAMPLE_ATTRIBUTE sample_attribute; - FLTSMP_SET_SAMPLE_PREFERENCE set_sample_preference; - - HDIGDRIVER dig; - HPROVIDER provider; - HDRIVERSTATE driver_state; - - struct _FLTPROVIDER FAR *next; -} -FLTPROVIDER; - -// -// 3D provider calls -// - -DXDEC S32 AILCALL AIL_enumerate_3D_providers (HPROENUM FAR *next, - HPROVIDER FAR *dest, - C8 FAR * FAR *name); - -DXDEC M3DRESULT AILCALL AIL_open_3D_provider (HPROVIDER lib); - -DXDEC void AILCALL AIL_close_3D_provider (HPROVIDER lib); - -DXDEC S32 AILCALL AIL_enumerate_3D_provider_attributes - (HPROVIDER lib, - HINTENUM FAR * next, - RIB_INTERFACE_ENTRY FAR * dest); - -DXDEC void AILCALL AIL_3D_provider_attribute (HPROVIDER lib, - C8 const FAR* name, - void FAR * val); - -DXDEC void AILCALL AIL_set_3D_provider_preference(HPROVIDER lib, - C8 const FAR* name, - void const FAR* val); - -struct H3D -{ - H3DPOBJECT actual; - HPROVIDER owner; - S32 user_data[8]; -}; - -typedef struct _M3DPROVIDER -{ - PROVIDER_QUERY_ATTRIBUTE PROVIDER_query_attribute; - M3D_STARTUP startup; - M3D_ERROR error; - M3D_SHUTDOWN shutdown; - M3D_SET_PROVIDER_PREFERENCE set_provider_preference; - M3D_ACTIVATE activate; - M3D_ALLOCATE_3D_SAMPLE_HANDLE allocate_3D_sample_handle; - M3D_RELEASE_3D_SAMPLE_HANDLE release_3D_sample_handle; - M3D_START_3D_SAMPLE start_3D_sample; - M3D_STOP_3D_SAMPLE stop_3D_sample; - M3D_RESUME_3D_SAMPLE resume_3D_sample; - M3D_END_3D_SAMPLE end_3D_sample; - M3D_SET_3D_SAMPLE_DATA set_3D_sample_data; - M3D_SET_3D_SAMPLE_VOLUME set_3D_sample_volume; - M3D_SET_3D_SAMPLE_PLAYBACK_RATE set_3D_sample_playback_rate; - M3D_SET_3D_SAMPLE_OFFSET set_3D_sample_offset; - M3D_SET_3D_SAMPLE_LOOP_COUNT set_3D_sample_loop_count; - M3D_SET_3D_SAMPLE_LOOP_BLOCK set_3D_sample_loop_block; - M3D_3D_SAMPLE_STATUS sample_status; - M3D_3D_SAMPLE_VOLUME sample_volume; - M3D_3D_SAMPLE_PLAYBACK_RATE sample_playback_rate; - M3D_3D_SAMPLE_OFFSET sample_offset; - M3D_3D_SAMPLE_LENGTH sample_length; - M3D_3D_SAMPLE_LOOP_COUNT sample_loop_count; - M3D_SET_3D_SAMPLE_DISTANCES set_3D_sample_distances; - M3D_3D_SAMPLE_DISTANCES sample_distances; - M3D_ACTIVE_3D_SAMPLE_COUNT active_3D_sample_count; - M3D_3D_OPEN_LISTENER open_listener; - M3D_3D_CLOSE_LISTENER close_listener; - M3D_3D_OPEN_OBJECT open_object; - M3D_3D_CLOSE_OBJECT close_object; - M3D_SET_3D_POSITION set_3D_position; - M3D_SET_3D_VELOCITY set_3D_velocity; - M3D_SET_3D_VELOCITY_VECTOR set_3D_velocity_vector; - M3D_SET_3D_ORIENTATION set_3D_orientation; - M3D_3D_POSITION position; - M3D_3D_VELOCITY velocity; - M3D_3D_ORIENTATION orientation; - M3D_3D_UPDATE_POSITION update_position; - M3D_3D_AUTO_UPDATE_POSITION auto_update_position; - M3D_3D_SAMPLE_ATTRIBUTE sample_query_attribute; - M3D_3D_SET_SAMPLE_PREFERENCE set_sample_preference; - M3D_3D_ROOM_TYPE room_type; - M3D_SET_3D_ROOM_TYPE set_3D_room_type; - M3D_3D_SPEAKER_TYPE speaker_type; - M3D_SET_3D_SPEAKER_TYPE set_3D_speaker_type; - M3D_SET_3D_SAMPLE_OBSTRUCTION set_3D_sample_obstruction; - M3D_SET_3D_SAMPLE_OCCLUSION set_3D_sample_occlusion; - M3D_SET_3D_SAMPLE_CONE set_3D_sample_cone; - M3D_SET_3D_SAMPLE_EFFECTS_LEVEL set_3D_sample_effects_level; - M3D_3D_SAMPLE_OBSTRUCTION sample_obstruction; - M3D_3D_SAMPLE_OCCLUSION sample_occlusion; - M3D_3D_SAMPLE_CONE sample_cone; - M3D_3D_SAMPLE_EFFECTS_LEVEL sample_effects_level; - M3D_SET_3D_EOS set_3D_EOS; -} M3DPROVIDER; - -// -// Sample calls -// - -DXDEC H3DSAMPLE AILCALL AIL_allocate_3D_sample_handle - (HPROVIDER lib); - - -DXDEC void AILCALL AIL_release_3D_sample_handle - (H3DSAMPLE S); - - -DXDEC void AILCALL AIL_start_3D_sample (H3DSAMPLE S); - - -DXDEC void AILCALL AIL_stop_3D_sample (H3DSAMPLE S); - - -DXDEC void AILCALL AIL_resume_3D_sample (H3DSAMPLE S); - -DXDEC void AILCALL AIL_end_3D_sample (H3DSAMPLE S); - -DXDEC S32 AILCALL AIL_set_3D_sample_file (H3DSAMPLE S, - void const FAR*file_image); - -DXDEC S32 AILCALL AIL_set_3D_sample_info (H3DSAMPLE S, - AILSOUNDINFO const FAR*info); - -DXDEC void AILCALL AIL_set_3D_sample_volume (H3DSAMPLE S, - S32 volume); - -DXDEC void AILCALL AIL_set_3D_sample_offset (H3DSAMPLE S, - U32 offset); - -DXDEC void AILCALL AIL_set_3D_sample_playback_rate - (H3DSAMPLE S, - S32 playback_rate); - -DXDEC void AILCALL AIL_set_3D_sample_loop_count(H3DSAMPLE S, - U32 loops); - -DXDEC void AILCALL AIL_set_3D_sample_loop_block(H3DSAMPLE S, - S32 loop_start_offset, - S32 loop_end_offset); - -DXDEC U32 AILCALL AIL_3D_sample_status (H3DSAMPLE S); - -DXDEC S32 AILCALL AIL_3D_sample_volume (H3DSAMPLE S); - -DXDEC U32 AILCALL AIL_3D_sample_offset (H3DSAMPLE S); - -DXDEC S32 AILCALL AIL_3D_sample_playback_rate (H3DSAMPLE S); - -DXDEC U32 AILCALL AIL_3D_sample_length (H3DSAMPLE S); - -DXDEC U32 AILCALL AIL_3D_sample_loop_count (H3DSAMPLE S); - - -DXDEC S32 AILCALL AIL_3D_room_type (HPROVIDER lib); - -DXDEC void AILCALL AIL_set_3D_room_type (HPROVIDER lib, - S32 room_type); - -#define AIL_3D_2_SPEAKER 0 -#define AIL_3D_HEADPHONE 1 -#define AIL_3D_SURROUND 2 -#define AIL_3D_4_SPEAKER 3 - - -DXDEC S32 AILCALL AIL_3D_speaker_type (HPROVIDER lib); - -DXDEC void AILCALL AIL_set_3D_speaker_type (HPROVIDER lib, - S32 speaker_type); - - -// -// Changed the definition of distances to only be max and min, vs. front -// min/max and back min/max. Only RSX supported the concept of different -// front and distances, so we changed the API to make it more orthogonal -// to most of the 3D providers. Sorry in advance. -// - -DXDEC void AILCALL AIL_set_3D_sample_distances (H3DSAMPLE S, - F32 max_dist, - F32 min_dist); - - -DXDEC void AILCALL AIL_3D_sample_distances (H3DSAMPLE S, - F32 FAR * max_dist, - F32 FAR * min_dist); - -DXDEC S32 AILCALL AIL_active_3D_sample_count (HPROVIDER lib); - -DXDEC S32 AILCALL AIL_enumerate_3D_sample_attributes - (HPROVIDER lib, - HINTENUM FAR * next, - RIB_INTERFACE_ENTRY FAR * dest); - -DXDEC void AILCALL AIL_3D_sample_attribute (H3DSAMPLE samp, - C8 const FAR* name, - void FAR * val); - - -DXDEC void AILCALL AIL_set_3D_sample_preference (H3DSAMPLE samp, - C8 const FAR* name, - void const FAR* val); - -DXDEC void AILCALL AIL_set_3D_sample_obstruction (H3DSAMPLE S, - F32 obstruction); - -DXDEC void AILCALL AIL_set_3D_sample_occlusion (H3DSAMPLE S, - F32 occlusion); - -DXDEC void AILCALL AIL_set_3D_sample_cone (H3DSAMPLE S, - F32 inner_angle, - F32 outer_angle, - S32 outer_volume); - -DXDEC void AILCALL AIL_set_3D_sample_effects_level - (H3DSAMPLE S, - F32 effects_level); - -DXDEC F32 AILCALL AIL_3D_sample_obstruction (H3DSAMPLE S); - -DXDEC F32 AILCALL AIL_3D_sample_occlusion (H3DSAMPLE S); - -DXDEC void AILCALL AIL_3D_sample_cone (H3DSAMPLE S, - F32 FAR* inner_angle, - F32 FAR* outer_angle, - S32 FAR* outer_volume); - -DXDEC F32 AILCALL AIL_3D_sample_effects_level (H3DSAMPLE S); - - -DXDEC AIL3DSAMPLECB AILCALL AIL_register_3D_EOS_callback - (H3DSAMPLE S, - AIL3DSAMPLECB EOS); - - -// -// Positioning-object allocation calls -// - -DXDEC H3DPOBJECT AILCALL AIL_open_3D_listener (HPROVIDER lib); - -DXDEC void AILCALL AIL_close_3D_listener (H3DPOBJECT listener); - -DXDEC H3DPOBJECT AILCALL AIL_open_3D_object (HPROVIDER lib); - -DXDEC void AILCALL AIL_close_3D_object (H3DPOBJECT obj); - -// -// 3D object calls -// - -DXDEC void AILCALL AIL_set_3D_position (H3DPOBJECT obj, - F32 X, - F32 Y, - F32 Z); - -DXDEC void AILCALL AIL_set_3D_velocity (H3DPOBJECT obj, - F32 dX_per_ms, - F32 dY_per_ms, - F32 dZ_per_ms, - F32 magnitude); - -DXDEC void AILCALL AIL_set_3D_velocity_vector (H3DPOBJECT obj, - F32 dX_per_ms, - F32 dY_per_ms, - F32 dZ_per_ms); - -DXDEC void AILCALL AIL_set_3D_orientation (H3DPOBJECT obj, - F32 X_face, - F32 Y_face, - F32 Z_face, - F32 X_up, - F32 Y_up, - F32 Z_up); - -DXDEC void AILCALL AIL_3D_position (H3DPOBJECT obj, - F32 FAR *X, - F32 FAR *Y, - F32 FAR *Z); - -DXDEC void AILCALL AIL_3D_velocity (H3DPOBJECT obj, - F32 FAR *dX_per_ms, - F32 FAR *dY_per_ms, - F32 FAR *dZ_per_ms); - -DXDEC void AILCALL AIL_3D_orientation (H3DPOBJECT obj, - F32 FAR *X_face, - F32 FAR *Y_face, - F32 FAR *Z_face, - F32 FAR *X_up, - F32 FAR *Y_up, - F32 FAR *Z_up); - -DXDEC void AILCALL AIL_update_3D_position (H3DPOBJECT obj, - F32 dt_milliseconds); - -DXDEC void AILCALL AIL_auto_update_3D_position (H3DPOBJECT obj, - S32 enable); - -DXDEC void AILCALL AIL_set_3D_user_data (H3DPOBJECT obj, - U32 index, - S32 value); - -DXDEC S32 AILCALL AIL_3D_user_data (H3DPOBJECT obj, - U32 index); - -// Obsolete 3D function names: -#define AIL_set_3D_object_user_data AIL_set_3D_user_data -#define AIL_3D_object_user_data AIL_3D_user_data -#define AIL_3D_open_listener AIL_open_3D_listener -#define AIL_3D_close_listener AIL_close_3D_listener -#define AIL_3D_open_object AIL_open_3D_object -#define AIL_3D_close_object AIL_close_3D_object - -// -// RAD room types - currently the same as EAX -// - -enum -{ - ENVIRONMENT_GENERIC, // factory default - ENVIRONMENT_PADDEDCELL, - ENVIRONMENT_ROOM, // standard environments - ENVIRONMENT_BATHROOM, - ENVIRONMENT_LIVINGROOM, - ENVIRONMENT_STONEROOM, - ENVIRONMENT_AUDITORIUM, - ENVIRONMENT_CONCERTHALL, - ENVIRONMENT_CAVE, - ENVIRONMENT_ARENA, - ENVIRONMENT_HANGAR, - ENVIRONMENT_CARPETEDHALLWAY, - ENVIRONMENT_HALLWAY, - ENVIRONMENT_STONECORRIDOR, - ENVIRONMENT_ALLEY, - ENVIRONMENT_FOREST, - ENVIRONMENT_CITY, - ENVIRONMENT_MOUNTAINS, - ENVIRONMENT_QUARRY, - ENVIRONMENT_PLAIN, - ENVIRONMENT_PARKINGLOT, - ENVIRONMENT_SEWERPIPE, - ENVIRONMENT_UNDERWATER, - ENVIRONMENT_DRUGGED, - ENVIRONMENT_DIZZY, - ENVIRONMENT_PSYCHOTIC, - - ENVIRONMENT_COUNT // total number of environments -}; - -// -// enumerated values for EAX -// - -#ifndef EAX_H_INCLUDED - -enum -{ - EAX_ENVIRONMENT_GENERIC, // factory default - EAX_ENVIRONMENT_PADDEDCELL, - EAX_ENVIRONMENT_ROOM, // standard environments - EAX_ENVIRONMENT_BATHROOM, - EAX_ENVIRONMENT_LIVINGROOM, - EAX_ENVIRONMENT_STONEROOM, - EAX_ENVIRONMENT_AUDITORIUM, - EAX_ENVIRONMENT_CONCERTHALL, - EAX_ENVIRONMENT_CAVE, - EAX_ENVIRONMENT_ARENA, - EAX_ENVIRONMENT_HANGAR, - EAX_ENVIRONMENT_CARPETEDHALLWAY, - EAX_ENVIRONMENT_HALLWAY, - EAX_ENVIRONMENT_STONECORRIDOR, - EAX_ENVIRONMENT_ALLEY, - EAX_ENVIRONMENT_FOREST, - EAX_ENVIRONMENT_CITY, - EAX_ENVIRONMENT_MOUNTAINS, - EAX_ENVIRONMENT_QUARRY, - EAX_ENVIRONMENT_PLAIN, - EAX_ENVIRONMENT_PARKINGLOT, - EAX_ENVIRONMENT_SEWERPIPE, - EAX_ENVIRONMENT_UNDERWATER, - EAX_ENVIRONMENT_DRUGGED, - EAX_ENVIRONMENT_DIZZY, - EAX_ENVIRONMENT_PSYCHOTIC, - - EAX_ENVIRONMENT_COUNT // total number of environments -}; - -#define EAX_REVERBMIX_USEDISTANCE (-1.0F) - -#endif - -#else - -typedef struct _FLTPROVIDER -{ - U32 junk; -} FLTPROVIDER; - -#endif - -#ifdef __cplusplus -} -#endif - - -#if defined(_PUSHPOP_SUPPORTED) || PRAGMA_STRUCT_PACKPUSH - #pragma pack(pop) -#else - #pragma pack() -#endif - + S32 format; + void const *data_ptr; + U32 data_len; + U32 rate; + S32 bits; + S32 channels; + U32 samples; + U32 block_size; + void const *initial_ptr; +} AILSOUNDINFO; -#endif +#define DLLEXPORT extern "C" __declspec(dllexport) + +DLLEXPORT S32 WINAPI AIL_enumerate_3D_providers(HPROENUM *next, HPROVIDER *dest, C8 **name); +DLLEXPORT void WINAPI AIL_release_3D_sample_handle(H3DSAMPLE S); +DLLEXPORT void WINAPI AIL_close_3D_provider(HPROVIDER lib); +DLLEXPORT void WINAPI AIL_set_3D_provider_preference(HPROVIDER lib, C8 const *name, void const *val); +DLLEXPORT M3DRESULT WINAPI AIL_open_3D_provider(HPROVIDER lib); +DLLEXPORT C8 *WINAPI AIL_last_error(void); +DLLEXPORT S32 WINAPI AIL_3D_room_type(HPROVIDER lib); +DLLEXPORT void WINAPI AIL_set_3D_room_type(HPROVIDER lib, S32 room_type); +DLLEXPORT void WINAPI AIL_3D_provider_attribute(HPROVIDER lib, C8 const *name, void *val); +DLLEXPORT H3DSAMPLE WINAPI AIL_allocate_3D_sample_handle(HPROVIDER lib); +DLLEXPORT void WINAPI AIL_set_3D_sample_effects_level(H3DSAMPLE S, F32 effects_level); +DLLEXPORT void WINAPI AIL_set_3D_speaker_type(HPROVIDER lib, S32 speaker_type); +DLLEXPORT HSTREAM WINAPI AIL_open_stream(HDIGDRIVER dig, C8 const *filename, S32 stream_mem); +DLLEXPORT void WINAPI AIL_stream_ms_position(HSTREAM S, S32 *total_milliseconds, S32 *current_milliseconds); +DLLEXPORT void WINAPI AIL_close_stream(HSTREAM stream); +DLLEXPORT S32 WINAPI AIL_digital_handle_release(HDIGDRIVER drvr); +DLLEXPORT S32 WINAPI AIL_digital_handle_reacquire(HDIGDRIVER drvr); +DLLEXPORT C8 *WINAPI AIL_set_redist_directory(C8 const *dir); +DLLEXPORT S32 WINAPI AIL_startup(void); +DLLEXPORT S32 WINAPI AIL_set_preference(U32 number, S32 value); +DLLEXPORT HDIGDRIVER WINAPI AIL_open_digital_driver(U32 frequency, S32 bits, S32 channel, U32 flags); +DLLEXPORT void *WINAPI AIL_mem_alloc_lock(U32 size); +DLLEXPORT HSAMPLE WINAPI AIL_allocate_sample_handle(HDIGDRIVER dig); +DLLEXPORT void WINAPI AIL_init_sample(HSAMPLE S); +DLLEXPORT void WINAPI AIL_set_sample_type(HSAMPLE S, S32 format, U32 flags); +DLLEXPORT void WINAPI AIL_pause_stream(HSTREAM stream, S32 onoff); +DLLEXPORT void WINAPI AIL_release_sample_handle(HSAMPLE S); +DLLEXPORT void WINAPI AIL_mem_free_lock(void *ptr); +DLLEXPORT void WINAPI AIL_close_digital_driver(HDIGDRIVER dig); +DLLEXPORT void WINAPI AIL_shutdown(void); +DLLEXPORT void WINAPI AIL_set_3D_sample_volume(H3DSAMPLE S, S32 volume); +DLLEXPORT void WINAPI AIL_set_sample_volume(HSAMPLE S, S32 volume); +DLLEXPORT void WINAPI AIL_set_sample_address(HSAMPLE S, void const *start, U32 len); +DLLEXPORT S32 WINAPI AIL_set_3D_sample_info(H3DSAMPLE S, AILSOUNDINFO const *info); +DLLEXPORT void WINAPI AIL_set_3D_position(H3DPOBJECT obj, F32 X, F32 Y, F32 Z); +DLLEXPORT void WINAPI AIL_set_3D_sample_distances(H3DSAMPLE S, F32 max_dist, F32 min_dist); +DLLEXPORT void WINAPI AIL_set_sample_pan(HSAMPLE S, S32 pan); +DLLEXPORT void WINAPI AIL_set_sample_playback_rate(HSAMPLE S, S32 playback_rate); +DLLEXPORT void WINAPI AIL_set_3D_sample_playback_rate(H3DSAMPLE S, S32 playback_rate); +DLLEXPORT void WINAPI AIL_set_sample_loop_block(HSAMPLE S, S32 loop_start_offset, S32 loop_end_offset); +DLLEXPORT void WINAPI AIL_set_3D_sample_loop_block(H3DSAMPLE S, S32 loop_start_offset, S32 loop_end_offset); +DLLEXPORT void WINAPI AIL_set_sample_loop_count(HSAMPLE S, S32 loop_count); +DLLEXPORT void WINAPI AIL_set_3D_sample_loop_count(H3DSAMPLE S, S32 loops); +DLLEXPORT U32 WINAPI AIL_sample_status(HSAMPLE S); +DLLEXPORT U32 WINAPI AIL_3D_sample_status(H3DSAMPLE S); +DLLEXPORT void WINAPI AIL_start_sample(HSAMPLE S); +DLLEXPORT void WINAPI AIL_start_3D_sample(H3DSAMPLE S); +DLLEXPORT void WINAPI AIL_end_sample(HSAMPLE S); +DLLEXPORT void WINAPI AIL_end_3D_sample(H3DSAMPLE S); +DLLEXPORT void WINAPI AIL_set_stream_loop_count(HSTREAM stream, S32 count); +DLLEXPORT S32 WINAPI AIL_service_stream(HSTREAM stream, S32 fillup); +DLLEXPORT void WINAPI AIL_start_stream(HSTREAM stream); +DLLEXPORT void WINAPI AIL_set_stream_ms_position(HSTREAM S, S32 milliseconds); +DLLEXPORT void WINAPI AIL_set_stream_volume(HSTREAM stream, S32 volume); +DLLEXPORT void WINAPI AIL_set_stream_pan(HSTREAM stream, S32 pan); +DLLEXPORT S32 WINAPI AIL_stream_status(HSTREAM stream); |