/Common/MilesWin/include/mss.h
https://bitbucket.org/Ryfon/mux · C Header · 6379 lines · 4279 code · 1550 blank · 550 comment · 123 complexity · beeb601d135f81abfdc395e0aa95d25e MD5 · raw file
- //############################################################################
- //## ##
- //## 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 ##
- //## 1.09 of 8-Feb-03: Changes for xbox and linux ##
- //## 1.10 of 15-May-05: Massive changes for version 7.0 ##
- //## ##
- //## Author: John Miles ##
- //## ##
- //############################################################################
- //## ##
- //## Contact RAD Game Tools at 425-893-4300 for technical support. ##
- //## ##
- //############################################################################
- #ifndef MSS_VERSION
- #define MSS_VERSION "7.1a" // Version string needs to be 4 characters long for benefit of MIDIECHW and SETSOUND
- #define MSS_MAJOR_VERSION 7
- #define MSS_MINOR_VERSION 1
- #define MSS_SUB_VERSION 0
- #define MSS_VERSION_DATE "25-Jun-07"
- #define MSS_COPYRIGHT "Copyright (C) 1991-2007, RAD Game Tools, Inc."
- #endif
- #ifndef MSS_H
- #define MSS_H
- // IS_DOS for DOS
- // IS_WINDOWS for Windows or Win32
- // IS_WIN64 for Win64
- // IS_WIN32 for Win32
- // IS_WIN16 for Windows
- // IS_WIN32API for Windows, Xbox and Xenon
- // IS_64REG when CPU registers are 64-bit - Xenon, PS3, Win64 and PS2
- // IS_32 for 32-bit DOS or Win32
- // IS_16 for 16-bit Windows
- // IS_LE for little endian (PCs)
- // IS_BE for big endian (Macs, x360, ps3)
- // IS_X86 for Intel
- // IS_MAC for Mac
- // IS_MACHO for Macho Mac
- // IS_PPC for PPC Mac
- // IS_68K for 68K Mac
- // IS_LINUX for Linux
- // IS_XBOX for Xbox
- // IS_XENON for Xbox 360
- // IS_PS2 for PS/2
- // IS_PS3 for PS/3
- // IS_WII for Wii
- // IS_STATIC for static versions (DOS, Xbox, Xbox 360, GameCube, PS2, PS3, Wii)
- #ifdef IS_DOS
- #undef IS_DOS
- #endif
- #ifdef IS_WINDOWS
- #undef IS_WINDOWS
- #endif
- #ifdef IS_WIN32
- #undef IS_WIN32
- #endif
- #ifdef IS_WIN64
- #undef IS_WIN64
- #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 IS_LINUX
- #undef IS_LINUX
- #endif
- #ifdef IS_STATIC
- #undef IS_STATIC
- #endif
- #ifdef IS_XBOX
- #undef IS_XBOX
- #endif
- #ifdef IS_XENON
- #undef IS_XENON
- #endif
- #undef MSSRESTRICT
- #define MSSRESTRICT
- #if defined(R5900)
- #define IS_PS2
- #define IS_32
- #define IS_64REGS
- #define IS_STATIC
- #define IS_LE
- #undef MSSRESTRICT
- #define MSSRESTRICT __restrict
- #elif defined(__CELLOS_LV2__)
- #define IS_PS3
- #define IS_32
- #define IS_64REGS
- #define IS_STATIC
- #define IS_BE
- #define IS_PPC
- #ifndef __LP32__
- #error "PS3 32bit ABI support only"
- #endif
- #undef MSSRESTRICT
- #define MSSRESTRICT __restrict__
-
- #elif defined(HOLLYWOOD_REV) || defined(REVOLUTION)
- #define IS_WII
- #define IS_32
- #define IS_STATIC
- #define IS_BE
- #define IS_PPC
- #undef MSSRESTRICT
- #define MSSRESTRICT
-
- #elif defined( __DOS__ )
- #define IS_DOS
- #define IS_32
- #define IS_LE
- #define IS_X86
- #define IS_STATIC
- #else
- #if defined(_XENON) || (_XBOX_VER == 200)
- #undef MSSRESTRICT
- #define MSSRESTRICT __restrict
- // Remember that Xenon also defines _XBOX
- #define IS_WIN32API
- #define IS_32
- #define IS_64REGS
- #define IS_BE
- #define IS_XENON
- #define IS_STATIC
- #define IS_PPC
- #else
- #ifdef _XBOX
- #define IS_WIN32API
- #define IS_32
- #define IS_LE
- #define IS_X86
- #define IS_XBOX
- #define IS_STATIC
- #else
- #if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(__NT__) || defined(__WIN32__)
- #define IS_WIN32API
- #define IS_WINDOWS
- #define IS_WIN32
- #define IS_32
- #define IS_LE
- #define IS_X86
- #if defined(_WIN64) // We consider Win64 to be a superset of Win32!
- #define IS_WIN64
- #define IS_64REGS
- #endif
- #if _MSC_VER >= 1400
- #undef MSSRESTRICT
- #define MSSRESTRICT __restrict
- #endif
- #else
- #ifdef _WINDOWS
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #if defined(_WINDLL) || defined(WINDOWS) || defined(__WINDOWS__) || defined(_Windows)
- #define IS_WINDOWS
- #define IS_WIN16
- #define IS_16
- #define IS_LE
- #define IS_X86
- #else
- #if (defined(__MWERKS__) && !defined(__INTEL__)) || defined(__MRC__) || defined(THINK_C) || defined(powerc) || defined(macintosh) || defined(__powerc) || defined(__APPLE__) || defined(__MACH__)
- #define IS_MAC
- #if TARGET_API_MAC_CARBON
- #define IS_CARBON
- #endif
- #define IS_32
- #if defined(__MACHO__) || defined(__MACH__)
- #define IS_MACHO
- #elif defined(__GNUC__) || defined(__GNUG__)
- #define IS_MACHO
- #endif
- #if defined(__powerc) || defined(powerc) || defined(__POWERPC__)
- #define IS_PPC
- #define IS_BE
- #elif defined(__i386__)
- #define IS_X86
- #define IS_LE
- #else
- #if defined(__MC68K__)
- #define IS_68K
- #define IS_BE
- #endif
- #endif
- #ifndef IS_MACHO
- #define ON_MAC_USE_FSS
- #endif
-
- #else
- #ifdef linux
- #define IS_LINUX
- #define IS_32
- #define IS_LE
- #ifdef i386
- #define IS_X86
- #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, WIN64, or macintosh.
- #endif
- #ifndef IS_PS2
- #if defined(_PUSHPOP_SUPPORTED) || PRAGMA_STRUCT_PACKPUSH
- #pragma pack(push,1)
- #else
- #pragma pack(1)
- #endif
- #endif
- //
- // Pipeline filters supported on following platforms
- //
- #if defined(IS_WIN32API) || defined(IS_MAC) || defined(IS_LINUX) || defined(IS_DOS) || defined(IS_PS2) || defined(IS_XENON) || defined(IS_PS3) || defined(IS_WII)
- #define MSS_FLT_SUPPORTED 1
- #define EXTRA_BUILD_BUFFERS 1
- #define FLT_A (MAX_SPEAKERS)
- #if defined(IS_WIN32API)
- #define MSS_VFLT_SUPPORTED 1
- #endif
- #else
- #define EXTRA_BUILD_BUFFERS 0
- #endif
- #if defined(IS_WIN32) || defined(IS_MAC) || defined(IS_LINUX) || defined(IS_PS2) || defined(IS_XENON) || defined(IS_PS3) || defined(IS_WII)
- #define MSS_REVERB_SUPPORTED 1
- #endif
- #ifdef __cplusplus
- extern "C" {
- #define RADDEFSTART extern "C" {
- #define RADDEFEND }
- #else
- #define RADDEFSTART
- #define RADDEFEND
- #endif
- #undef MSS_STRUCT
- #define MSS_STRUCT struct
- #ifdef IS_PS2
- #if !defined(__MWERKS__)
- #undef MSS_STRUCT
- #define MSS_STRUCT struct __attribute__((__packed__))
- #endif
- #define AILCALLBACK //$ __attribute__((cdecl))
- #define AILEXPORT //$ __attribute__((cdecl))
- #define DXDEC extern
- #define DXDEF
- #define AILCALL //$__attribute__((cdecl))
- #define FAR
- #define HIWORD(ptr) (((U32)ptr)>>16)
- #define LOWORD(ptr) ((U16)((U32)ptr))
- #define WINAPI
- #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 //__attribute__((cdecl))
- #define MSS_MAIN_DEF
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- #elif defined( 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 "redist"
- #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
- #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
- typedef char CHAR;
- typedef short SHORT;
- typedef int BOOL;
- typedef long LONG;
- typedef CHAR *LPSTR, *PSTR;
- #ifdef IS_WIN64
- typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
- #else
- #ifdef _Wp64
- #if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
- typedef __w64 unsigned long ULONG_PTR, *PULONG_PTR;
- #else
- typedef unsigned long ULONG_PTR, *PULONG_PTR;
- #endif
- #else
- typedef unsigned long ULONG_PTR, *PULONG_PTR;
- #endif
- #endif
- typedef ULONG_PTR DWORD_PTR, *PDWORD_PTR;
- typedef unsigned long DWORD;
- typedef unsigned short WORD;
- typedef unsigned int UINT;
- typedef struct HWAVE__ *HWAVE;
- typedef struct HWAVEIN__ *HWAVEIN;
- typedef struct HWAVEOUT__ *HWAVEOUT;
- typedef HWAVEIN *LPHWAVEIN;
- typedef HWAVEOUT *LPHWAVEOUT;
- typedef struct Mwavehdr_tag {
- LPSTR lpData;
- DWORD dwBufferLength;
- DWORD dwBytesRecorded;
- DWORD_PTR dwUser;
- DWORD dwFlags;
- DWORD dwLoops;
- struct Mwavehdr_tag *lpNext;
- DWORD_PTR reserved;
- } MWAVEHDR;
- typedef struct Mwaveformat_tag {
- WORD wFormatTag;
- WORD nChannels;
- DWORD nSamplesPerSec;
- DWORD nAvgBytesPerSec;
- WORD nBlockAlign;
- } MWAVEFORMAT;
- typedef struct Mpcmwaveformat_tag {
- MWAVEFORMAT wf;
- WORD wBitsPerSample;
- } MPCMWAVEFORMAT;
- #ifndef WAVE_MAPPER
- #define WAVE_MAPPER ((UINT)-1)
- #endif
- typedef struct waveformat_tag *LPWAVEFORMAT;
- typedef struct HMIDIOUT__ *HMIDIOUT;
- typedef HMIDIOUT *LPHMIDIOUT;
- typedef struct HWND__ *HWND;
- typedef struct HINSTANCE__ *HINSTANCE;
- typedef HINSTANCE HMODULE;
- typedef struct wavehdr_tag *LPWAVEHDR;
- typedef DWORD FOURCC; /* a four character code */
- #ifndef MAKEFOURCC
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
- #endif
- #ifndef mmioFOURCC
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #endif
- #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
- #undef FAR
- #define FAR
- #ifndef FORNONWIN
- #define AILLIBCALLBACK __stdcall
- #define AILCALL __stdcall
- #define AILCALLBACK __stdcall
- #define AILEXPORT __stdcall
- #else
- #define AILLIBCALLBACK __cdecl
- #define AILCALL __cdecl
- #define AILCALLBACK __cdecl
- #define AILEXPORT __cdecl
- #endif
-
- #ifdef __RADINDLL__
- #define DXDEC __declspec(dllexport)
- #define DXDEF __declspec(dllexport)
- #else
- #ifdef __BORLANDC__
- #define DXDEC extern
- #else
- #define DXDEC __declspec(dllimport)
- #endif
- #endif
- #ifdef IS_WIN64
- #define MSSDLLNAME "MSS64.DLL"
- #define MSS_REDIST_DIR_NAME "redist64"
- #else
- #define MSSDLLNAME "MSS32.DLL"
- #define MSS_REDIST_DIR_NAME "redist"
- #endif
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- #else
- #define AILCALL WINAPI
- #define AILEXPORT __export WINAPI
- #define AILCALLBACK AILEXPORT
- #define AILLIBCALLBACK WINAPI
- #define DXDEC extern
- #define DXDEF
- #define MSSDLLNAME "MSS16.DLL"
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- #endif
- typedef void * LPVOID;
- typedef LPVOID AILLPDIRECTSOUND;
- typedef LPVOID AILLPDIRECTSOUNDBUFFER;
- #else
- #ifdef IS_MAC
- #if !defined(__FILES__) && defined( ON_MAC_USE_FSS )
- #define FSSpec void
- #endif
- #define FAR
- #ifdef IS_X86
- #define AILLIBCALLBACK __attribute__((cdecl))
- #define AILCALL __attribute__((cdecl))
- #define AILCALLBACK __attribute__((cdecl))
- #define AILEXPORT __attribute__((cdecl)) __attribute__((visibility("default")))
- #ifdef __RADINDLL__
- #define DXDEC __attribute__((visibility("default")))
- #define DXDEF
- #else
- #define DXDEC extern
- #define DXDEF
- #endif
- #else
- #define AILLIBCALLBACK
- #define AILCALL
- #define AILEXPORT
- #define AILCALLBACK
- #ifdef __RADINDLL__
- #define DXDEC __declspec(export)
- #define DXDEF
- #else
- #define DXDEC extern
- #define DXDEF
- #endif
- #endif
- #ifdef IS_MACHO
- #ifdef IS_X86
- #define MSS_REDIST_DIR_NAME "redist/macx86"
- #else
- #define MSS_REDIST_DIR_NAME "redist/macho"
- #endif
-
- #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_CARBON
- #define MSS_REDIST_DIR_NAME "redist:carbon"
- #define MSSDLLNAME "Miles Carbon Library"
- #else
- #define MSS_REDIST_DIR_NAME "redist:classic"
- #define MSSDLLNAME "Miles Shared Library"
- #endif
- #define MSS_DIR_SEP ":"
- #define MSS_DIR_UP ":" MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_SEP
- #endif
- #define HIWORD(ptr) (((U32)ptr)>>16)
- #define LOWORD(ptr) ((U16)((U32)ptr))
- #define FOURCC U32
- #ifndef MAKEFOURCC
- #ifdef IS_X86
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
- #else
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \
- ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) ))
- #endif
- #endif
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #define MSS_MAIN_DEF
- #else
- #ifdef IS_LINUX
- #define FAR
- #ifdef IS_X86
- #define AILLIBCALLBACK __attribute__((cdecl))
- #define AILCALL __attribute__((cdecl))
- #define AILCALLBACK __attribute__((cdecl))
- #define AILEXPORT __attribute__((cdecl))
- #else
- #define AILLIBCALLBACK
- #define AILCALL
- #define AILEXPORT
- #define AILCALLBACK
- #endif
- #define DXDEC extern
- #define DXDEF
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSSDLLNAME "Miles Shared Library"
- #define MSS_DIR_SEP "/"
- #define MSS_DIR_UP "../"
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- #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) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
- #endif
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #define MSS_MAIN_DEF
- #else
- #ifdef IS_XBOX
- #define FOURCC U32
- #ifndef MAKEFOURCC
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
- #endif
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #undef FAR
- #define FAR
- #define AILLIBCALLBACK __stdcall
- #define AILCALL __stdcall
- #define AILEXPORT __stdcall
- #define AILCALLBACK __stdcall
- #define DXDEC extern
- #define DXDEF
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- typedef void * LPVOID;
- typedef LPVOID AILLPDIRECTSOUND;
- typedef LPVOID AILLPDIRECTSOUNDBUFFER;
- #else
- #ifdef IS_XENON
- #define FOURCC U32
- #undef MAKEFOURCC // refine it - the xtl makes a bad one
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \
- ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) ))
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #undef FAR
- #define FAR
- #define AILLIBCALLBACK __stdcall
- #define AILCALL __stdcall
- #define AILEXPORT __stdcall
- #define AILCALLBACK __stdcall
- #define DXDEC extern
- #define DXDEF
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSS_DIR_SEP "\\"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- typedef void * AILLPDIRECTSOUND;
- typedef void * AILLPDIRECTSOUNDBUFFER;
- #else
- #ifdef IS_PS3
- #define FOURCC U32
- #undef MAKEFOURCC // refine it - the xtl makes a bad one
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \
- ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) ))
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #undef FAR
- #define FAR
- #define AILLIBCALLBACK
- #define AILCALL
- #define AILEXPORT
- #define AILCALLBACK
- #define DXDEC extern
- #define DXDEF
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSS_DIR_SEP "/"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- #elif defined( IS_WII)
- #define FOURCC U32
- #undef MAKEFOURCC // refine it - the xtl makes a bad one
- #define MAKEFOURCC(ch0, ch1, ch2, ch3) \
- (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \
- ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) ))
- #define mmioFOURCC(w,x,y,z) MAKEFOURCC(w,x,y,z)
- #undef FAR
- #define FAR
- #define AILLIBCALLBACK
- #define AILCALL
- #define AILEXPORT
- #define AILCALLBACK
- #define DXDEC extern
- #define DXDEF
- #define MSS_REDIST_DIR_NAME "redist"
- #define MSS_DIR_SEP "/"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
- #endif
- #endif
- #endif
- #endif
- #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_WIN32
- #define MAX_SPEAKERS 18 // Up to 18 hardware output channels supported
- #elif defined(IS_PS3) || defined(IS_PS2) || defined(IS_WII)
- #define MAX_SPEAKERS 8 // Up to 8 hardware output channels on PS3, PS2, Wii
- #else
- #define MAX_SPEAKERS 6 // Up to 6 hardware output channels supported on other platforms
- #endif
- #define MAX_RECEIVER_SPECS 32 // Up to 32 receiver point specifications
- #define MAX_SAVED_FILTER_PROPERTIES 48 // Up to 48 filter attributes can be stored in an HSATTRIBS structure
- #define MIN_CHAN ( 1-1) // Min channel recognized (0-based)
- #define MAX_CHAN (16-1) // Max channel recognized
- #define MIN_LOCK_CHAN ( 1-1) // Min channel available for locking
- #define MAX_LOCK_CHAN (16-1) // Max channel available for locking
- #define PERCUSS_CHAN (10-1) // Percussion channel (no locking)
- #define AIL_MAX_FILE_HEADER_SIZE 8192 // AIL_set_named_sample_file() requires at least 8K
- // 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_XBOX_ADPCM_MASK 8
- #define DIG_F_MULTICHANNEL_MASK 16
- #define DIG_F_OUTPUT_FILTER_IN_USE 32
- #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_MULTICHANNEL_8 (DIG_F_MULTICHANNEL_MASK)
- #define DIG_F_STEREO_16 (DIG_F_STEREO_MASK|DIG_F_16BITS_MASK)
- #define DIG_F_MULTICHANNEL_16 (DIG_F_MULTICHANNEL_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_ADPCM_MULTICHANNEL_16 (DIG_F_ADPCM_MASK |DIG_F_16BITS_MASK|DIG_F_STEREO_MASK)
- #define DIG_F_XBOX_ADPCM_MONO_16 (DIG_F_XBOX_ADPCM_MASK |DIG_F_16BITS_MASK)
- #define DIG_F_XBOX_ADPCM_STEREO_16 (DIG_F_XBOX_ADPCM_MASK |DIG_F_16BITS_MASK|DIG_F_STEREO_MASK)
- #define DIG_F_XBOX_ADPCM_MULTICHANNEL_16 (DIG_F_XBOX_ADPCM_MASK |DIG_F_16BITS_MASK|DIG_F_MULTICHANNEL_MASK)
- #define DIG_F_NOT_8_BITS (DIG_F_16BITS_MASK | DIG_F_ADPCM_MASK | DIG_F_XBOX_ADPCM_MASK | DIG_F_MULTICHANNEL_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
- #define WAVE_FORMAT_XBOX_ADPCM 0x0069
- #define MSS_SPEAKER_INDEX_FRONT_LEFT 0 // Speaker order indexes correspond to
- #define MSS_SPEAKER_INDEX_FRONT_RIGHT 1 // bitmasks in PSDK's ksmedia.h
- #define MSS_SPEAKER_INDEX_FRONT_CENTER 2 // Also see microsoft.com/whdc/device/audio/multichaud.mspx
- #define MSS_SPEAKER_INDEX_LOW_FREQUENCY 3
- #define MSS_SPEAKER_INDEX_BACK_LEFT 4
- #define MSS_SPEAKER_INDEX_BACK_RIGHT 5
- #define MSS_SPEAKER_INDEX_FRONT_LEFT_OF_CENTER 6
- #define MSS_SPEAKER_INDEX_FRONT_RIGHT_OF_CENTER 7
- #define MSS_SPEAKER_INDEX_BACK_CENTER 8
- #define MSS_SPEAKER_INDEX_SIDE_LEFT 9
- #define MSS_SPEAKER_INDEX_SIDE_RIGHT 10
- #define MSS_SPEAKER_INDEX_TOP_CENTER 11
- #define MSS_SPEAKER_INDEX_TOP_FRONT_LEFT 12
- #define MSS_SPEAKER_INDEX_TOP_FRONT_CENTER 13
- #define MSS_SPEAKER_INDEX_TOP_FRONT_RIGHT 14
- #define MSS_SPEAKER_INDEX_TOP_BACK_LEFT 15
- #define MSS_SPEAKER_INDEX_TOP_BACK_CENTER 16
- #define MSS_SPEAKER_INDEX_TOP_BACK_RIGHT 17
- #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 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 STR_HSTREAM 6 // Stream, if any, that owns the HSAMPLE
- #define SSD_TEMP 7 // Temporary storage location for general use
- //
- // 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
- typedef void VOIDFUNC(void);
- #ifdef IS_PS2
- #ifndef U128
- #define U128 u_long128
- #endif
- #ifndef U64
- #define U64 unsigned long
- #endif
- #ifndef S64
- #define S64 signed long
- #endif
- #ifndef U32
- #define U32 unsigned int
- #endif
- #ifndef S32
- #define S32 signed int
- #endif
- #ifndef UINTa
- #define UINTa unsigned int
- #endif
- #ifndef SINTa
- #define SINTa signed int
- #endif
- #else
- #ifdef IS_PS3
- #ifndef U64
- #define U64 unsigned long long
- #endif
- #ifndef S64
- #define S64 signed long long
- #endif
- #ifndef U32
- #define U32 unsigned int
- #endif
- #ifndef S32
- #define S32 signed int
- #endif
- #ifndef UINTa
- #define UINTa unsigned int
- #endif
- #ifndef SINTa
- #define SINTa signed int
- #endif
- #else
- #ifdef IS_16
- #ifndef U32
- #define U32 unsigned long
- #endif
- #ifndef S32
- #define S32 signed long
- #endif
- #ifndef UINTa
- #define UINTa unsigned long
- #endif
- #ifndef SINTa
- #define SINTa signed long
- #endif
- #else
- #if defined(IS_MAC) || defined(IS_WII)
- #ifndef U64
- #define U64 unsigned long long
- #endif
- #ifndef S64
- #define S64 signed long long
- #endif
- #else
- #ifndef U64
- #define U64 unsigned __int64
- #endif
- #ifndef S64
- #define S64 signed __int64
- #endif
- #endif
- #ifndef U32
- #define U32 unsigned int
- #endif
- #ifndef S32
- #define S32 signed int
- #endif
- #ifdef _WIN64
- #ifndef UINTa
- #define UINTa unsigned __int64
- #endif
- #ifndef SINTa
- #define SINTa signed __int64
- #endif
- #else
- #ifdef _Wp64
- #if !defined(__midl) && (defined(_X86_) || defined(_M_IX86)) && _MSC_VER >= 1300
- #ifndef UINTa
- typedef __w64 unsigned long UINTa;
- #define UINTa UINTa
- #endif
- #ifndef SINTa
- typedef __w64 signed long SINTa;
- #define SINTa SINTa
- #endif
- #else
- #ifndef UINTa
- #define UINTa unsigned long
- #endif
- #ifndef SINTa
- #define SINTa signed long
- #endif
- #endif
- #else
- #ifndef UINTa
- #define UINTa unsigned int
- #endif
- #ifndef SINTa
- #define SINTa signed int
- #endif
- #endif
- #endif
- #endif
- #endif
- #endif
- #ifndef F32
- #define F32 float
- #endif
- #ifndef F64
- #define F64 double
- #endif
- #ifndef REALFAR
- #define REALFAR unsigned int
- #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
- //
- // 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_MAX_PREDELAY_MS 2
- #define DEFAULT_MPDMS 500 // Max predelay reverb time in ms
- #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
- #define DIG_3D_MUTE_AT_MAX 46
- #define DEFAULT_D3MAM NO // off by default
- #if defined(IS_WINDOWS) || defined(IS_DOS)
- #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
- #if defined(IS_WINDOWS) || defined(IS_MAC) || defined(IS_LINUX)
- #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
- #if defined(IS_WINDOWS)
- #define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
- #else
- #define DEFAULT_AMP 15 // Default MM timer period = 15 msec (mac and linux)
- #endif
- #endif
- #ifdef IS_PS2
- #define MDI_SYSEX_BUFFER_SIZE 10
- #define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
- #define AIL_MM_PERIOD 12
- #define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #define AIL_MUTEX_PROTECTION 44
- #define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
- #define DIG_DS_FRAGMENT_SIZE 34
- #define DEFAULT_DDFS 12 // Use 12 millisecond buffer fragments with PS2
- #define DIG_DS_FRAGMENT_CNT 35
- #define DEFAULT_DDFC 32 // Use 32 buffers with PS2
- #define AIL_LOCK_PROTECTION 18
- #define DEFAULT_ALP NO // Don't suspend foreground thread by default
- #endif
- #ifdef IS_PS3
- #define MDI_SYSEX_BUFFER_SIZE 10
- #define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
- #define DIG_DS_FRAGMENT_SIZE 34
- #define DEFAULT_DDFS 5 // Use 5 millisecond buffer fragments
- #define DIG_DS_FRAGMENT_CNT 35
- #define DEFAULT_DDFC 32 // Use 32 buffer fragments
- #define DIG_DS_MIX_FRAGMENT_CNT 42
- #define DEFAULT_DDMFC 8 // Mix ahead 8 buffer fragments
- #define AIL_MM_PERIOD 12
- #define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #define AIL_MUTEX_PROTECTION 44
- #define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
- #define AIL_LOCK_PROTECTION 18
- #define DEFAULT_ALP NO // Don't suspend foreground thread by default
- #endif
- #ifdef IS_WII
- #define MDI_SYSEX_BUFFER_SIZE 10
- #define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
- #define DIG_DS_FRAGMENT_SIZE 34
- #define DEFAULT_DDFS 8 // Use 8 millisecond buffer fragments
- #define DIG_DS_FRAGMENT_CNT 35
- #define DEFAULT_DDFC 16 // Use 16 buffer fragments
- #define DIG_DS_MIX_FRAGMENT_CNT 42
- #define DEFAULT_DDMFC 4 // Mix ahead 4 buffer fragments
- #define AIL_MM_PERIOD 12
- #define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #endif
- #ifdef IS_XBOX
- #define MDI_SYSEX_BUFFER_SIZE 10
- #define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
- #define AIL_MM_PERIOD 12
- #define DEFAULT_AMP 5 // Default MM timer period = 5 msec.
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #define AIL_MUTEX_PROTECTION 44
- #define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
- #define DIG_DS_FRAGMENT_SIZE 34
- #define DEFAULT_DDFS 12 // Use 12 millisecond buffer fragments with DirectSound
- #define DIG_DS_FRAGMENT_CNT 35
- #define DEFAULT_DDFC 32 // Use 32 buffers with DirectSound
- #define AIL_LOCK_PROTECTION 18
- #define DEFAULT_ALP NO // Don't suspend foreground thread by default
- #endif
- #ifdef IS_XENON
- #define MDI_SYSEX_BUFFER_SIZE 10
- #define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
- #define DIG_DS_FRAGMENT_SIZE 34
- #define DEFAULT_DDFS 16 // Use 16 millisecond buffer fragments
- #define DIG_DS_FRAGMENT_CNT 35
- #define DEFAULT_DDFC 48 // Use 48 buffer fragments
- #define DIG_DS_MIX_FRAGMENT_CNT 42
- #define DEFAULT_DDMFC 4 // Mix ahead 4 buffer fragments
- #define AIL_MM_PERIOD 12
- #define DEFAULT_AMP 7 // Default MM timer period = 7 msec.
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #define AIL_MUTEX_PROTECTION 44
- #define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
- #define AIL_LOCK_PROTECTION 18
- #define DEFAULT_ALP NO // Don't suspend foreground thread by default
- #define AIL_CPU_AFFINITY 50
- #define DEFAULT_CPUAF 2 // Use Xenon CPU 2 by default
- #endif
- #ifdef IS_LINUX
- #define AIL_TIMERS 13
- #define DEFAULT_AT 16 // 16 allocatable HTIMER handles
- #define AIL_MUTEX_PROTECTION 44
- #define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
- #endif
- #ifdef IS_MAC
- #define DIG_SM_FRAGMENT_SIZE 34
- #define DEFAULT_DSFS 8 // Use 8 millisecond buffer fragments with Sound Manager
- #define DIG_SM_MIX_FRAGMENT_CNT 42
- #define DEFAULT_DSMFC 8 // Buffer 8 fragments ahead (should be an even number)
- #define DIG_SM_FRAGMENT_CNT 35
- #define DEFAULT_DSFC 64 // Allow up to 64 buffer fragments with Sound Manager (should be an even number)
- #endif
- #if defined(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_MUTEX_PROTECTION 44
- #define DEFAULT_AMPR YES // Lock each call into Miles with a mutex
- #define DIG_PREFERRED_WO_DEVICE 40
- #define DEFAULT_DPWOD WAVE_MAPPER // Preferred WaveOut device == WAVE_MAPPER
- #define DIG_PREFERRED_DS_DEVICE 47
- #define DEFAULT_DPDSD 0 // Preferred DirectSound device == default NULL GUID
- #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 64 // 64 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_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 DIG_LEVEL_RAMP_SAMPLES 48
- #define DEFAULT_DLRS 32 // Ramp level changes over first 32 samples in each buffer to reduce zipper noise
- #define DIG_ENCODE_QUALITY_PERCENT 49
- #define DEFAULT_DEQP 50 // Default encoding quality (e.g., for DTS) = 50%
- #define N_PREFS 51 // # of preference types
- typedef MSS_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;
- #ifndef RIB_H // RIB.H contents included if RIB.H not already included
- #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 U32 HPROVIDER;
- //
- // Handle representing token used to obtain property data
- //
- // This needs to be large enough to store a function pointer
- //
- typedef UINTa HPROPERTY;
- //
- // 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 U32 HPROENUM;
- #define HPROENUM_FIRST 0
- //
- // Data types for RIB properties
- //
- 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_READONLY = 0x80000000 // Property is read-only
- }
- RIB_DATA_SUBTYPE;
- //
- // RIB_ENTRY_TYPE structure, used to register an interface or request one
- //
- typedef enum
- {
- RIB_FUNCTION = 0,
- RIB_PROPERTY // Property: read-only or read-write data type
- }
- RIB_ENTRY_TYPE;
- //
- // RIB_INTERFACE_ENTRY, used to represent a function or data entry in an
- // interface
- //
- typedef MSS_STRUCT
- {
- RIB_ENTRY_TYPE type; // See list above
- C8 FAR *entry_name; // Name of desired function or property
- UINTa token; // Function pointer or property token
- RIB_DATA_SUBTYPE subtype; // Property subtype
- }
- RIB_INTERFACE_ENTRY;
- //
- // Standard RAD Interface Broker provider identification properties
- //
- #define PROVIDER_NAME ((U32) (S32) (-100)) // RIB_STRING name of decoder
- #define PROVIDER_VERSION ((U32) (S32) (-101)) // RIB_HEX BCD version number
- //
- // Standard function to obtain provider properties (see PROVIDER_ defines
- // above)
- //
- // Each provider of a searchable interface must export this function
- //
- typedef S32 (AILCALL FAR *PROVIDER_PROPERTY) (HPROPERTY index,
- void FAR * before_value,
- void const FAR * new_value,
- void FAR * after_value
- );
- //
- // Macros to simplify interface registrations/requests for functions,
- // and properties
- //
- #define FN(entry_name) { RIB_FUNCTION, #entry_name, (UINTa) &(entry_name), RIB_NONE }
- #define REG_FN(entry_name) { RIB_FUNCTION, #entry_name, (UINTa) &(entry_name), RIB_NONE }
- #define PR(entry_name,ID) { RIB_PROPERTY, (entry_name), (UINTa) &(ID), RIB_NONE }
- #define REG_PR(entry_name,ID,subtype) { RIB_PROPERTY, (entry_name), (UINTa) (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)(ssx), 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 (long 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 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,
- UINTa 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 (void const FAR * data,
- RIB_DATA_SUBTYPE subtype);
- DXDEC HPROVIDER AILCALL RIB_find_file_provider (C8 const FAR *interface_name,
- C8 const FAR *property_name,
- C8 const FAR *file_suffix);
- DXDEC HPROVIDER AILCALL RIB_find_provider (C8 const FAR *interface_name,
- C8 const FAR *property_name,
- void const FAR *property_value);
- //
- // Static library definitions
- //
- #ifdef IS_STATIC
- #define RIB_MAIN_NAME( name ) name##_RIB_Main
- DXDEC S32 AILCALL RIB_MAIN_NAME(SRS)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(DTS)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(DolbySurround)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(MP3Dec)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(OggDec)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(SpxDec)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(SpxEnc)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(Voice)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(SpxVoice)( HPROVIDER provider_handle, U32 up_down );
- DXDEC S32 AILCALL RIB_MAIN_NAME(DSP)( HPROVIDER provider_handle, U32 up_down );
- #ifdef IS_XENON
- DXDEC S32 AILCALL RIB_MAIN_NAME(XMADec)( HPROVIDER provider_handle, U32 up_down );
- #endif
- #define Register_RIB(name) RIB_load_static_provider_library(RIB_MAIN_NAME(name),#name)
- #else
- #define RIB_MAIN_NAME( name ) RIB_Main
- DXDEC S32 AILCALL RIB_Main( HPROVIDER provider_handle, U32 up_down );
- #endif
- typedef S32 ( AILCALL FAR * RIB_MAIN_FUNC) ( HPROVIDER provider_handle, U32 up_down );
- DXDEC HPROVIDER AILCALL RIB_load_static_provider_library (RIB_MAIN_FUNC main, char FAR* description);
- DXDEC HPROVIDER AILCALL RIB_find_files_provider (C8 const FAR *interface_name,
- C8 const FAR *property_name_1,
- C8 const FAR *file_suffix_1,
- C8 const FAR *property_name_2,
- C8 const FAR *file_suffix_2);
- DXDEC HPROVIDER AILCALL RIB_find_file_dec_provider (C8 const FAR *interface_name,
- C8 const FAR *property_name_1,
- U32 decimal_property_value_1,
- C8 const FAR *property_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,
- SINTa value);
- DXDEC SINTa AILCALL RIB_provider_user_data (HPROVIDER provider,
- U32 index);
- DXDEC void AILCALL RIB_set_provider_system_data
- (HPROVIDER provider,
- U32 index,
- SINTa value);
- DXDEC SINTa 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
- #define AIL_ASI_VERSION 1
- #define AIL_ASI_REVISION 0
- //
- // Handle to stream being managed by ASI codec
- //
- typedef SINTa 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) (UINTa 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_property() where appropriate.
- //
- 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) (UINTa 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 or set a property value by index (returns 1 on success)
- //
- typedef S32 (AILCALL FAR *ASI_STREAM_PROPERTY) (HASISTREAM stream,
- HPROPERTY property,
- void FAR * before_value,
- void const FAR * new_value,
- void FAR * after_value
- );
- //
- // Close stream, freeing handle and all internally-allocated resources
- //
- typedef ASIRESULT (AILCALL FAR *ASI_STREAM_CLOSE) (HASISTREAM stream);
- #endif
- //############################################################################
- //## ##
- //## Interface "MSS mixer services" ##
- //## ##
- //############################################################################
- //
- // Operation flags used by mixer and filter modules
- //
- #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_ORDER 16 // Set to reverse L/R stereo order for sample
- #define M_RESAMPLE 32 // Set to enable playback ratios other than 65536
- #define M_VOL_SCALING 64 // Set to enable volume scalars other than 2048
- #define M_COPY16_NOVOL 128
- #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_property() as appropriate.
- //
- 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
- #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
- //
- // "option" parameter is big_endian_output on Mac, MMX on x86, overwrite flag on PS2
- //
- typedef void (AILCALL FAR *MIXER_COPY) (void const FAR *src,
- S32 src_len,
- void FAR *dest,
- U32 operation
- #if defined(IS_BE) || defined(IS_X86) || defined(IS_PS2)
- ,U32 option
- #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_property() as appropriate.
- //
- 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,
- 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 option);
- #endif
- typedef MSS_STRUCT _MSS_BB // Used in both MC and conventional mono/stereo configurations
- {
- S32 FAR *buffer; // Build buffer
- S32 bytes; // Size in bytes
- S32 chans; // Always mono (1) or stereo (2)
- S32 speaker_offset; // Destination offset in interleaved PCM block for left channel
- }
- MSS_BB;
- typedef MSS_STRUCT _ADPCMDATATAG
- {
- U32 blocksize;
- U32 extrasamples;
- U32 blockleft;
- U32 step;
- UINTa savesrc;
- U32 sample;
- UINTa destend;
- UINTa srcend;
- U32 samplesL;
- U32 samplesR;
- U16 moresamples[16];
- } ADPCMDATA;
- typedef void (AILCALL FAR * MIXER_MC_COPY) ( MSS_BB FAR * build,
- S32 n_build_buffers,
- void FAR * lpWaveAddr,
- S32 hw_format,
- #ifdef IS_X86
- S32 use_MMX,
- #endif
- S32 samples_per_buffer,
- S32 physical_channels_per_sample );
- typedef void (AILCALL FAR * MIXER_ADPCM_DECODE ) ( void FAR * dest,
- void const FAR * in,
- S32 out_len,
- S32 in_len,
- S32 input_format,
- ADPCMDATA FAR *adpcm_data);
- //
- // Type definitions
- //
- MSS_STRUCT _DIG_DRIVER;
- MSS_STRUCT _MDI_DRIVER;
- typedef MSS_STRUCT _DIG_DRIVER FAR * HDIGDRIVER; // Handle to digital driver
- typedef MSS_STRUCT _MDI_DRIVER FAR * HMDIDRIVER; // Handle to XMIDI driver
- typedef MSS_STRUCT _SAMPLE FAR * HSAMPLE; // Handle to sample
- typedef MSS_STRUCT _SMPATTRIBS FAR * HSATTRIBS; // Handle to sample performance attributes
- typedef MSS_STRUCT _SEQUENCE FAR * HSEQUENCE; // Handle to sequence
- typedef S32 HTIMER; // Handle to timer
- #ifdef IS_DOS
- //
- // Type definitions
- //
- typedef MSS_STRUCT // I/O parameters structure
- {
- S16 IO;
- S16 IRQ;
- S16 DMA_8_bit;
- S16 DMA_16_bit;
- S32 IO_reserved[4];
- }
- IO_PARMS;
- typedef MSS_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 MSS_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 MSS_STRUCT
- {
- U8 format_supported[16];
- DIG_MODE format_data[16];
- }
- DIG_DDT;
- typedef MSS_STRUCT
- {
- REALFAR DMA_buffer_A;
- REALFAR DMA_buffer_B;
- S16 active_buffer;
- }
- DIG_DST;
- typedef MSS_STRUCT
- {
- REALFAR library_environment;
- REALFAR GTL_suffix;
- U16 num_voices;
- U16 max_melodic_channel;
- U16 min_melodic_channel;
- U16 percussion_channel;
- }
- MDI_DDT;
- typedef MSS_STRUCT
- {
- S8 library_directory[128];
- S8 GTL_filename[128];
- S8 MIDI_data[512];
- }
- MDI_DST;
- typedef MSS_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 MSS_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 MSS_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, UINTa user_data);
- typedef void (AILCALLBACK FAR* AILTRACECB) (C8 *text, S32 nest_depth);
- typedef void (AILCALLBACK FAR* AILTIMERCB) (UINTa user);
- typedef void (AILCALLBACK FAR* AILSAMPLECB) (HSAMPLE sample);
- typedef F32 (AILCALLBACK FAR* AILFALLOFFCB) (HSAMPLE sample, F32 distance, F32 rolloff_factor, F32 min_dist, F32 max_dist);
- 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);
- typedef S32 (AILCALLBACK FAR *SS_STREAM_CB) (HSAMPLE S, S16 FAR *dest_mono_sample_buffer, S32 dest_buffer_size);
- //
- // Handle to sample and driver being managed by pipeline filter
- //
- typedef SINTa HSAMPLESTATE;
- typedef SINTa 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
- {
- SP_ASI_DECODER = 0, // Must be "ASI codec stream" provider
- SP_FILTER, // Must be "MSS pipeline filter" provider
- SP_FILTER_0 = SP_FILTER, // Must be "MSS pipeline filter" provider
- SP_FILTER_1, // Must be "MSS pipeline filter" provider
- SP_FILTER_2, // Must be "MSS pipeline filter" provider
- SP_FILTER_3, // Must be "MSS pipeline filter" provider
- SP_FILTER_4, // Must be "MSS pipeline filter" provider
- SP_FILTER_5, // Must be "MSS pipeline filter" provider
- SP_FILTER_6, // Must be "MSS pipeline filter" provider
- SP_FILTER_7, // Must be "MSS pipeline filter" provider
- SP_MERGE, // Must be "MSS mixer" provider
- N_SAMPLE_STAGES, // Placeholder for end of list (= # of valid sample pipeline stages)
- SP_OUTPUT = N_SAMPLE_STAGES, // Used to set/get prefs/attribs on a driver's output or matrix filter (if present)
- 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
- DP_MC_COPY, // Must be "MSS mixer" provider
- DP_ADPCM_DECODE, // 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 MSS_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_PROPERTY ASI_stream_property;
- HPROPERTY INPUT_BIT_RATE;
- HPROPERTY INPUT_SAMPLE_RATE;
- HPROPERTY INPUT_BITS;
- HPROPERTY INPUT_CHANNELS;
- HPROPERTY OUTPUT_BIT_RATE;
- HPROPERTY OUTPUT_SAMPLE_RATE;
- HPROPERTY OUTPUT_BITS;
- HPROPERTY OUTPUT_CHANNELS;
- HPROPERTY OUTPUT_RESERVOIR;
- HPROPERTY POSITION;
- HPROPERTY PERCENT_DONE;
- HPROPERTY MIN_INPUT_BLOCK_SIZE;
- HPROPERTY RAW_RATE;
- HPROPERTY RAW_BITS;
- HPROPERTY RAW_CHANNELS;
- HPROPERTY REQUESTED_RATE;
- HPROPERTY REQUESTED_BITS;
- HPROPERTY REQUESTED_CHANS;
- HPROPERTY STREAM_SEEK_POS;
- HPROPERTY DATA_START_OFFSET;
- HPROPERTY DATA_LEN;
- HASISTREAM stream;
- }
- ASISTAGE;
- typedef MSS_STRUCT
- {
- struct _FLTPROVIDER FAR *provider;
- HSAMPLESTATE sample_state;
- }
- FLTSTAGE;
- typedef MSS_STRUCT
- {
- S32 active; // Pass-through if 0, active if 1
- HPROVIDER provider;
- union
- {
- ASISTAGE ASI;
- MIXER_MERGE MSS_mixer_merge;
- FLTSTAGE FLT;
- }
- TYPE;
- }
- SPINFO;
- typedef MSS_STRUCT
- {
- S32 active; // Pass-through if 0, active if 1
- HPROVIDER provider;
- union
- {
- MIXER_FLUSH MSS_mixer_flush;
- MIXER_COPY MSS_mixer_copy;
- MIXER_MC_COPY MSS_mixer_mc_copy;
- MIXER_ADPCM_DECODE MSS_mixer_adpcm_decode;
- }
- TYPE;
- }
- DPINFO;
- //
- // Other data types
- //
- typedef enum
- {
- WIN32_TIMER_THREAD, // Handle to thread used to run mixer and all other background tasks/timers
- WIN32_STREAM_THREAD, // Handle to thread to do disk IO in the streaming API
- WIN32_HWAVEOUT, // waveOut handle for HDIGDRIVER, if any
- WIN32_HWAVEIN, // waveIn handle for HDIGINPUT, if any
- WIN32_LPDS, // lpDirectSound pointer for HSAMPLE
- WIN32_LPDSB, // lpDirectSoundBuffer pointer for HSAMPLE
- WIN32_HWND, // HWND that will be used to open DirectSound driver
- PS3_TIMER_THREAD, // Handle to thread to run background task/timer
- PS3_STREAM_THREAD, // Handle to thread to do disk IO in the streaming API
- PS3_AUDIO_PORT, // cellaudio port that Miles is using
- PS3_AUDIO_ADDRESS, // address of cellaudio sound buffer
- PS3_AUDIO_LENGTH, // length of cellaudio sound buffer
- PS3_AUDIO_POSITION, // current playback position of cellaudio sound buffer
- XB_TIMER_THREAD, // Handle to thread used to run background tasks/timers
- XB_STREAM_THREAD, // Handle to thread to do disk IO in the streaming API
- XB_LPDS, // lpDirectSound pointer for HSAMPLE
- XB_LPDSB, // lpDirectSoundBuffer pointer for HSAMPLE
- XB360_TIMER_THREAD, // Handle to thread used to run mixer and all other background tasks/timers
- XB360_STREAM_THREAD, // Handle to thread to do disk IO in the streaming API
- XB360_LPXAB // IXAudioSourceVoice pointer for HDIGDRIVER
- }
- MSS_PLATFORM_PROPERTY;
- typedef MSS_STRUCT _SMPATTRIBS
- {
- F32 cone_inner_angle;
- F32 cone_outer_angle;
- F32 cone_outer_volume;
- F32 max_distance;
- F32 min_distance;
- S32 auto_3D_wet_atten;
- S32 is_3D;
- F32 X_pos;
- F32 Y_pos;
- F32 Z_pos;
- F32 X_face;
- F32 Y_face;
- F32 Z_face;
- F32 X_up;
- F32 Y_up;
- F32 Z_up;
- F32 X_meters_per_ms;
- F32 Y_meters_per_ms;
- F32 Z_meters_per_ms;
- F32 channel_levels[MAX_SPEAKERS];
- S32 n_channel_levels;
- F32 exclusion;
- F32 obstruction;
- F32 occlusion;
- S32 loop_count;
- S32 loop_start_offset;
- S32 loop_end_offset;
- F32 LPF_cutoff;
- S32 playback_rate;
- U32 position;
- F32 dry_level;
- F32 wet_level;
- U32 playback_status;
- F32 FL_51_level;
- F32 FR_51_level;
- F32 BL_51_level;
- F32 BR_51_level;
- F32 C_51_level;
- F32 LFE_51_level;
- F32 left_volume; // Used in non-5.1 API modes
- F32 right_volume;
- SAMPLESTAGE filter_stages [MAX_SAVED_FILTER_PROPERTIES];
- HPROVIDER filter_providers [MAX_SAVED_FILTER_PROPERTIES];
- UINTa filter_property_tokens[MAX_SAVED_FILTER_PROPERTIES];
- U32 filter_property_values[MAX_SAVED_FILTER_PROPERTIES];
- S32 n_filter_properties;
- }
- SMPATTRIBS;
- typedef MSS_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)
- UINTa user_data; // this is a user defined value
- }
- AIL_INPUT_INFO;
- typedef MSS_STRUCT _AILTIMER // Timer instance
- {
- U32 status;
- AILTIMERCB callback;
- UINTa 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)
- } AILTIMERSTR;
- #ifndef IS_WIN64
- #define OFSblocksize 0 // these constants valid for 32-bit versions only!
- #define OFSextrasamples 4
- #define OFSblockleft 8
- #define OFSstep 12
- #define OFSsavesrc 16
- #define OFSsample 20
- #define OFSdestend 24
- #define OFSsrcend 28
- #define OFSsamplesL 32
- #define OFSsamplesR 36
- #define OFSmoresamples 40
- #endif
- typedef MSS_STRUCT LOWPASS_CONSTANT_INFO
- {
- S32 A;
- S32 B0, B1;
- } LOWPASS_CONSTANT_INFO;
- typedef MSS_STRUCT LOWPASS_UPDATED_INFO
- {
- S32 XL0, XL1;
- S32 YL0, YL1;
- S32 XR0, XR1;
- S32 YR0, YR1;
- } LOWPASS_UPDATED_INFO;
- typedef MSS_STRUCT LOWPASS_INFO
- {
- LOWPASS_UPDATED_INFO u;
- LOWPASS_CONSTANT_INFO c;
- F32 cutoff;
- S32 on;
- } LOWPASS_INFO;
- typedef union STAGE_BUFFER
- {
- union STAGE_BUFFER * next;
- U8 data[ 1 ];
- } STAGE_BUFFER;
- typedef MSS_STRUCT _MSSVECTOR3D
- {
- F32 x;
- F32 y;
- F32 z;
- } MSSVECTOR3D;
- typedef MSS_STRUCT _S3DSTATE // Portion of HSAMPLE that deals with 3D positioning
- {
- MSSVECTOR3D position; // 3D position
- MSSVECTOR3D face; // 3D orientation
- MSSVECTOR3D up; // 3D up-vector
- MSSVECTOR3D velocity; // 3D velocity
-
- S32 doppler_valid; // TRUE if OK to apply Doppler shift
- F32 doppler_shift; // Scalar for S->playback rate
-
- F32 inner_angle; // Cone attenuation parameters
- F32 outer_angle; // (Angles divided by two and convered to rads for dot-product comparisons)
- F32 outer_volume;
- S32 cone_enabled;
-
- F32 max_dist; // Sample distances
- F32 min_dist;
- S32 dist_changed; // TRUE if min/max distances have changed and need to be sent to the hardware
- S32 auto_3D_atten; // TRUE if distance/cone attenuation should be applied to wet signal
- F32 atten_3D; // Attenuation due to distance/cone effects, calculated by software 3D positioner
- HSAMPLE owner; // May be NULL if used for temporary/internal calculations
- AILFALLOFFCB falloff_function; // User function for min/max distance calculations, if desired
- }
- S3DSTATE;
- typedef MSS_STRUCT _SAMPLE // Sample instance
- {
- char tag[4]; // HSAM
- HDIGDRIVER driver; // Driver for playback
- S32 index; // Numeric index of this sample
- 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
- S32 reset_seek_pos[2]; // New destination offset in stream source data, for ASI codecs that care
- S32 exhaust_ASI; // Are we prolonging the buffer lifetime until ASI output is exhausted?
- 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 orig_loop_count; // Original loop properties specified by app, before any
- S32 orig_loop_start; // alignment constraints
- S32 orig_loop_end;
- 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
- F32 save_volume; // Sample volume 0-1.0
- F32 save_pan; // Mono panpot/stereo balance (0=L ... 1.0=R)
- F32 left_volume; // Left/mono volume 0 to 1.0
- F32 right_volume; // Right volume 0 to 1.0
- F32 wet_level; // reverb level 0 to 1.0
- F32 dry_level; // non-reverb level 0 to 1.0
- F32 obstruction;
- F32 occlusion;
- F32 exclusion;
- F32 auto_3D_channel_levels[MAX_SPEAKERS]; // Channel levels set by 3D positioner (always 1.0 if not 3D-positioned)
- F32 user_channel_levels[MAX_SPEAKERS]; // Channel levels set by AIL_set_sample_channel_levels() [driver->logical_channels]
- S32 cur_scale[MAX_SPEAKERS]; // Calculated 11-bit volume scale factors for current/previous mixing interval
- S32 prev_scale[MAX_SPEAKERS]; // (These are all indexed by build buffer*2, not speaker indexes!)
- S32 ramps_left[MAX_SPEAKERS];
- LOWPASS_INFO lp; // low pass info
- F32 cutoff_param;
- F32 calculated_cut;
- 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
- SINTa user_data [8]; // Miscellaneous user data
- SINTa system_data[8]; // Miscellaneous system data
- ADPCMDATA adpcm;
- S32 last_decomp_left; // last sample in an asi or adpcm buffer
- S32 last_decomp_right; // last sample in an asi or adpcm buffer
- S32 doeob; // Flags to trigger callbacks
- S32 dosob;
- S32 doeos;
- //
- // Sample pipeline stages
- //
- SPINFO pipeline[N_SAMPLE_STAGES];
- S32 n_active_filters; // # of SP_FILTER_n stages active
- //
- // 3D-related state for all platforms (including Xbox)
- //
- S32 is_3D; // TRUE if channel levels are derived automatically from 3D positional state, FALSE if they're controlled manually
- S3DSTATE S3D; // Software version applies 3D positioning only if is_3D == TRUE, but output filters always use it
- #ifdef MSS_VFLT_SUPPORTED
- void FAR *voice; // Optional object used by output filter to store per-sample information such as DS3D buffers
- #endif
- //
- // Platform-specific members
- //
- #ifdef IS_XBOX
- AILLPDIRECTSOUNDBUFFER pDSB;
- S32 hw_rate;
- S32 hw_channels;
- S32 hw_bits;
- S32 direct_mode;
- STAGE_BUFFER * ds_staging_buffer;
- S32 waiting_for_which_half;
- S32 cleared_bufs;
- S32 cleared_bytes;
- S32 need_more_zeroes;
- S32 ds_stage_size;
- F32 shadow_FL;
- F32 shadow_FR;
- F32 shadow_FC;
- F32 shadow_LF;
- F32 shadow_BL;
- F32 shadow_BR;
- MSSVECTOR3D shadow_position;
- MSSVECTOR3D shadow_face;
- MSSVECTOR3D shadow_velocity;
- S32 shadow_playback_rate;
- F32 shadow_volume;
- F32 shadow_occlusion;
- F32 shadow_obstruction;
- F32 shadow_exclusion;
- F32 shadow_min_dist;
- F32 shadow_max_dist;
- F32 shadow_inner_angle;
- F32 shadow_outer_angle;
- F32 shadow_outer_volume;
- F32 shadow_wet_level;
- F32 shadow_dry_level;
- S32 shadow_auto_3D_atten;
- S32 shadow_is_3D;
- #endif
- F32 leftb_volume; // Left/mono volume 0 to 1.0 (back)
- F32 rightb_volume; // Right volume 0 to 1.0 (back)
- F32 center_volume; // Center volume 0 to 1.0
- F32 low_volume; // Low volume 0 to 1.0
- F32 save_fb_pan; // Sample volume 0-1.0
- F32 save_center; // saved center level
- F32 save_low; // saved sub level
- #ifdef IS_WINDOWS
- //
- // DirectSound-specific data
- //
- 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
- }
- SAMPLE;
- //
- // used for AIL_process
- //
- typedef MSS_STRUCT _AILMIXINFO {
- AILSOUNDINFO Info;
- ADPCMDATA mss_adpcm;
- U32 src_fract;
- S32 left_val;
- S32 right_val;
- } AILMIXINFO;
- #if defined(IS_WINDOWS) || defined(IS_MAC) || defined(IS_LINUX) || defined(IS_XBOX) || defined(IS_XENON) || defined(IS_PS3) || defined(IS_PS2) || defined(IS_WII)
- DXDEC U32 AILCALL AIL_get_timer_highest_delay (void);
- DXDEC void AILCALL AIL_serve(void);
- #ifdef IS_MAC
- typedef void * LPSTR;
- #define WHDR_DONE 0
- typedef MSS_STRUCT _WAVEIN
- {
- long temp;
- } * HWAVEIN;
- typedef MSS_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
- #define N_WAVEIN_BUFFERS 8 // Use a ring of 8 buffers by default
- typedef MSS_STRUCT _DIG_INPUT_DRIVER FAR *HDIGINPUT; // Handle to digital input driver
- #ifdef IS_MAC
- #define AIL_DIGITAL_INPUT_DEFAULT 0
- typedef MSS_STRUCT _DIG_INPUT_DRIVER // Handle to digital input driver
- {
- C8 tag[4]; // HDIN
- S32 input_enabled; // 1 if enabled, 0 if not
- U32 incoming_buffer_size;
- void * incoming_buffer[ 2 ];
- void* outgoing_buffer;
- U32 which_buffer;
- AIL_INPUT_INFO info; // Input device descriptor
- AILMIXINFO incoming_info;
- long device;
- #if defined(__SOUND__)
- SPB record_rec;
- #endif
- } DIG_INPUT_DRIVER;
- #else
- #define AIL_DIGITAL_INPUT_DEFAULT ((U32)WAVE_MAPPER)
- typedef MSS_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
- UINTa callback_user; // Callback user value
- //
- // Provider-independent data
- //
- U32 DMA_size; // Size of each DMA sub-buffer in bytes
- void FAR *DMA[N_WAVEIN_BUFFERS]; // Simulated DMA buffers
- U8 silence; // Silence value for current format (0 or 128)
- S32 device_active; // 1 if buffers submittable, 0 if not
- #ifdef IS_WINDOWS
- //
- // waveOut-specific data
- //
- HWAVEIN hWaveIn; // Handle to wave input device
- volatile MWAVEHDR wavehdr[N_WAVEIN_BUFFERS]; // Handles to wave headers
- #endif
- }
- DIG_INPUT_DRIVER;
- #endif
- #endif
- typedef MSS_STRUCT REVERB_CONSTANT_INFO
- {
- F32 FAR* start0, FAR* start1, FAR* start2, FAR* start3, FAR* start4, FAR* start5;
- F32 FAR* end0, FAR* end1, FAR* end2, FAR* end3, FAR* end4, FAR* end5;
- F32 C0, C1, C2, C3, C4, C5;
- F32 A;
- F32 B0, B1;
- } REVERB_CONSTANT_INFO;
- typedef MSS_STRUCT REVERB_UPDATED_INFO
- {
- F32 FAR * address0, FAR * address1, FAR * address2, FAR * address3, FAR * address4, FAR * address5;
- F32 X0, X1, Y0, Y1;
- } REVERB_UPDATED_INFO;
- typedef MSS_STRUCT REVERB_INFO
- {
- REVERB_UPDATED_INFO u;
- REVERB_CONSTANT_INFO c;
- } REVERB_INFO;
- typedef MSS_STRUCT _MSS_RECEIVER_LIST
- {
- MSSVECTOR3D direction; // Normalized direction vector from listener
- S32 speaker_index[MAX_SPEAKERS]; // List of speakers affected by sounds in this direction
- F32 speaker_level[MAX_SPEAKERS]; // Each speaker's degree of effect from this source
- S32 n_speakers_affected;
- }
- MSS_RECEIVER_LIST;
- typedef MSS_STRUCT _D3DSTATE
- {
- S32 mute_at_max;
- MSSVECTOR3D listen_position;
- MSSVECTOR3D listen_face;
- MSSVECTOR3D listen_up;
- MSSVECTOR3D listen_cross;
- MSSVECTOR3D listen_velocity;
- F32 rolloff_factor;
- F32 doppler_factor;
- F32 distance_factor;
- F32 falloff_power;
- //
- // Precalculated listener info
- //
- S32 ambient_channels [MAX_SPEAKERS]; // E.g., LFE
- S32 n_ambient_channels;
- S32 directional_channels[MAX_SPEAKERS+1]; // Channel index, or -1 if virtual
- MSSVECTOR3D listener_to_speaker [MAX_SPEAKERS+1];
- S32 n_directional_channels;
- MSS_RECEIVER_LIST receiver_specifications[MAX_RECEIVER_SPECS]; // Constellation of receiver vectors
- S32 n_receiver_specs;
- MSSVECTOR3D speaker_positions [MAX_SPEAKERS]; // Listener-relative speaker locations
- F32 speaker_wet_reverb_response [MAX_SPEAKERS]; // Reverb sensitivity of each speaker
- F32 speaker_dry_reverb_response [MAX_SPEAKERS];
- }
- D3DSTATE;
- typedef enum
- {
- MSS_MC_MONO = 1, // For compatibility with S32 channel param
- MSS_MC_STEREO = 2,
- MSS_MC_USE_SYSTEM_CONFIG = 0x10, // Leave space between entries for new variations
- MSS_MC_HEADPHONES = 0x20, // with similar quality levels/speaker counts
- MSS_MC_DOLBY_SURROUND = 0x30,
- MSS_MC_SRS_CIRCLE_SURROUND = 0x40,
- MSS_MC_40_DTS = 0x48,
- MSS_MC_40_DISCRETE = 0x50,
- MSS_MC_51_DTS = 0x58,
- MSS_MC_51_DISCRETE = 0x60,
- MSS_MC_61_DISCRETE = 0x70,
- MSS_MC_71_DISCRETE = 0x80,
- MSS_MC_81_DISCRETE = 0x90,
- MSS_MC_DIRECTSOUND3D = 0xA0,
- MSS_MC_EAX2 = 0xC0,
- MSS_MC_EAX3 = 0xD0,
- MSS_MC_EAX4 = 0xE0
- }
- MSS_MC_SPEC;
- typedef MSS_STRUCT _DIG_DRIVER // Handle to digital audio driver
- {
- char tag[4]; // HDIG
- HTIMER backgroundtimer; // Background timer handle
- F32 master_volume; // Master sample volume 0-1.0
- S32 DMA_rate; // Hardware sample rate
- S32 hw_format; // DIG_F code in use
- S32 n_active_samples; // # of samples being processed
- MSS_MC_SPEC channel_spec; // Original "channels" value passed to AIL_open_digital_driver()
- D3DSTATE D3D; // 3D listener parms for all platforms
- #ifdef IS_XBOX
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- AILLPDIRECTSOUND pDS; // DirectSound output driver
- S32 use_3d; // are we using 3D?
- S32 use_reverb;
- STAGE_BUFFER * staging_buffer_ring;
- STAGE_BUFFER * staging_mem_ptr;
- MSSVECTOR3D shadow_listen_position;
- MSSVECTOR3D shadow_listen_face;
- MSSVECTOR3D shadow_listen_up;
- MSSVECTOR3D shadow_listen_velocity;
- F32 shadow_listen_doppler_factor;
- F32 shadow_listen_distance_factor;
- F32 shadow_listen_rolloff_factor;
- S32 shadow_room_type;
- F32 shadow_master_wet;
- F32 shadow_reverb_decay_time_s;
- F32 shadow_reverb_damping;
- F32 shadow_reverb_predelay_s;
- #else
- S32 quiet; // # of consecutive quiet sample periods
- U32 hw_mode_flags; // DIG_PCM_ flags for mode in use
- S32 playing; // Playback active if non-zero
- #endif
- S32 bytes_per_channel; // # of bytes per channel (always 1 or 2 for 8- or 16-bit hardware output)
- S32 samples_per_buffer; // # of samples per build buffer / half-buffer
- S32 physical_channels_per_sample; // # of channels per *physical* sample (1 or 2, or more in discrete MC mode)
- S32 logical_channels_per_sample; // # of logical channels per sample (may differ from physical channel count in matrix formats)
- #ifdef IS_LINUX
- S32 released; // has the sound manager been released?
- #endif
- #ifdef IS_PS2
- struct RAD_IOP_SOUND_DATA * IOP;
- S32 IOP_overwrite; // FALSE if RADIOP layer requests addition to output buffer (rather than writes)
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- #endif
- HSAMPLE samples; // Pointer to list of SAMPLEs
-
- U32 *sample_status; // SMP_ flags: _FREE, _DONE, _PLAYING, moved out of SAMPLEs for faster iteration
- S32 n_samples; // # of SAMPLEs
- SINTa system_data[8]; // Miscellaneous system data
- //
- // Build buffers
- //
- // In multichannel mode, source samples may be mixed into more than one
- // build buffer
- //
- MSS_BB build[MAX_SPEAKERS+EXTRA_BUILD_BUFFERS];
- S32 n_build_buffers; // # of build buffers actually used for output processing
- S32 build_size; // # of bytes in build buffer 0, used for position comparisons
- #ifndef IS_XBOX
- S32 hardware_buffer_size; // Size of each output buffer
- #endif
- #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)
- //
- // DirectSound-specific interface data
- //
- UINTa 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
- UINTa 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
- //
- // Driver output configuration
- //
- // Note: # of "logical" (source) channels per sample = dig->channels_per_sample
- // # of "physical" (DAC) channels per sample = dig->wformat.wf.nChannels
- //
- // These may be different if a matrix format (e.g., Dolby/SRS)
- // is in use!
- //
- MPCMWAVEFORMAT wformat; // format from waveout open
- C8 wfextra[32]; // Extension to PCMWAVEFORMAT (e.g., WAVE_FORMAT_EXTENSIBLE)
- //
- // 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
- U32 position_error; // last status from position report (can be used
- // to watch for headset removal)
- U32 last_ds_play;
- U32 last_ds_write;
- U32 last_ds_move;
- #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
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- #endif
- #endif
- #ifdef IS_X86
- S32 use_MMX; // Use MMX with this driver if TRUE
- #endif
- U32 us_count;
- U32 ms_count;
- U32 last_ms_polled;
- U32 last_percent;
- //
- // Digital driver pipeline filter stages
- //
- DPINFO pipeline[N_DIGDRV_STAGES];
- #ifdef MSS_VFLT_SUPPORTED
- struct _FLTPROVIDER FAR *voice_filter;
- SS_STREAM_CB stream_callback;
- #endif
- struct _FLTPROVIDER FAR *matrix_filter;
- //
- // Reverb
- //
- S32 room_type; // Changes to this drive master_wet and duration/damping/predelay!
- F32 master_wet; // Master reverb level 0-1.0
- F32 master_dry; // Master non-reverb level 0-1.0
- REVERB_INFO ri;
- S32 FAR *reverb_build_buffer;
- S32 reverb_total_size;
- S32 reverb_fragment_size;
- S32 reverb_buffer_size;
- S32 reverb_on;
- U32 reverb_off_time_ms;
- U32 reverb_duration_ms;
- F32 reverb_decay_time_s;
- F32 reverb_predelay_s;
- F32 reverb_damping;
- S32 reverb_head;
- S32 reverb_tail;
- #ifdef IS_XENON
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- void * hw_buf;
- U32 hw_datarate;
- U32 hw_align;
- void * XA_voice;
- S32 XA_buffer_size;
- S32 XA_frag_cnt;
- S32 XA_frag_size;
- S32 XA_last_frag;
- S32 XA_last_write;
- S32 XA_skip_time;
- U32 last_xa_play;
- U32 last_xa_move;
- S32 XA_last_timer;
- #endif
- #ifdef IS_PS3
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- void * hw_buf;
- U32 hw_datarate;
- U32 hw_align;
- U32 port;
- S32 hw_buffer_size;
- S32 snd_frag_cnt;
- S32 snd_frag_size;
- S32 snd_last_frag;
- S32 snd_last_write;
- S32 snd_skip_time;
- U32 snd_last_play;
- U32 snd_last_move;
- S32 snd_last_timer;
- #endif
- #ifdef IS_WII
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
- U32 hw_datarate;
- S32 hw_buffer_size;
- S32 each_buffer_size;
- S32 snd_frag_cnt;
- S32 snd_frag_size;
- S32 snd_last_frag;
- S32 snd_last_write;
- S32 snd_skip_time;
- U32 snd_last_play;
- U32 snd_last_move;
- S32 snd_last_timer;
- void * buffer[ 2 ];
- U32 physical[ 2 ];
- #ifdef AX_OUTPUT_BUFFER_DOUBLE
- AXVPB* voice[ 2 ];
- #endif
-
- #endif
- #ifdef IS_WINDOWS
- S32 no_wom_done; // don't process WOM_DONEs on this driver
- U32 wom_done_buffers;
- #endif
- #ifdef XAUDIOFRAMESIZE_NATIVE
- XAUDIOPACKET packet;
- #endif
- #ifdef IS_MAC
- U32 n_samples_allocated;
- U32 n_samples_used;
- U32 n_samples_played;
- U32 total_buffer_size;
- 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?
- U32 loaded[2];
- U32 work_buffer;
- U32 play_buffer;
- #if defined(__SOUND__)
- ExtSoundHeader sound_header;
- SndChannelPtr sound_channel;
- SndCallBackUPP global_callback;
- Ptr buffers[2];
- #endif
- #endif
- }
- DIG_DRIVER;
- typedef MSS_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 MSS_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
- SINTa user_data [8]; // Miscellaneous user data
- SINTa system_data[8]; // Miscellaneous system data
- } SEQUENCE;
- #if defined(IS_MAC) || defined(IS_LINUX) || defined(IS_XBOX) || defined(IS_XENON) || defined(IS_PS2) || defined(IS_PS3) || defined(IS_WII)
- MSS_STRUCT MIDIHDR;
- MSS_STRUCT MIDIOUT;
- typedef MSS_STRUCT MIDIOUT* HMIDIOUT;
- typedef HMIDIOUT* LPHMIDIOUT;
- #endif
- typedef MSS_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
- SINTa system_data[8]; // Miscellaneous system data
- #if defined(IS_WINDOWS) || defined(IS_MAC) || defined(IS_LINUX)
- S32 released; // has the hmidiout handle been released
- U32 deviceid; // ID of the MIDI device
- U8 FAR *sysdata; // SysEx buffer
- #endif
- #if defined(IS_XBOX) || defined(IS_XENON) || defined(IS_WII) || defined(IS_PS2) || defined(IS_PS3)
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- #endif
- #ifdef IS_LINUX
- struct MIDIHDR FAR *mhdr; // SysEx header
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- HMIDIOUT hMidiOut; // MIDI output driver
- #endif
- #ifdef IS_WINDOWS
- struct midihdr_tag 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
- #if defined(IS_MAC)
- struct MIDIHDR FAR *mhdr; // SysEx header
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- HMIDIOUT hMidiOut; // MIDI output driver
- #endif
- #endif
- #endif
- }
- MDI_DRIVER;
- typedef MSS_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 MSS_STRUCT // XMIDI RBRN IFF entry
- {
- S16 bnum;
- U32 offset;
- }
- RBRN_entry;
- typedef MSS_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 MSS_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_WIN32API
- #ifdef NTAPI
- extern HANDLE hAppThread;
- #endif
- #endif
- //
- // Background flag for timers
- //
- extern volatile S32 AIL_bkgnd_flag;
- //
- // Global preference array
- //
- extern SINTa 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 SP_ASI_DECODER_callback(UINTa user,
- void FAR *dest,
- S32 bytes_requested,
- S32 offset);
- DXDEC void FAR * AILCALL AIL_mem_alloc_lock(UINTa 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);
- #ifndef IS_DOS
- typedef void FAR * (AILCALLBACK FAR *AILMEMALLOCCB)(UINTa size);
- typedef void (AILCALLBACK FAR *AILMEMFREECB)(void FAR *);
- DXDEC AILMEMALLOCCB AILCALL AIL_mem_use_malloc(AILMEMALLOCCB fn);
- DXDEC AILMEMFREECB AILCALL AIL_mem_use_free (AILMEMFREECB fn);
- #endif
- #ifdef ON_MAC_USE_FSS
- 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);
- #endif
- #ifdef IS_DOS
- extern void * AILCALLBACK (*AIL_mem_alloc) (UINTa);
- extern void AILCALLBACK (*AIL_mem_free) (void *);
- typedef void * (AILCALLBACK *AILMEMALLOCCB)(UINTa size);
- typedef void (AILCALLBACK *AILMEMFREECB)(void *);
-
- AILMEMALLOCCB cdecl AIL_mem_use_malloc(AILMEMALLOCCB allocf);
- AILMEMFREECB cdecl AIL_mem_use_free (AILMEMFREECB freef);
- //
- // 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__
- #pragma warning 14 10 // disable "no reference to symbol" warning on function args
- void MSSBreakPoint();
- #pragma aux MSSBreakPoint = "int 3";
- #else
- #ifdef IS_PS2
- #define MSSBreakPoint() __asm__("break 0")
- #else
- #if defined(IS_XENON) || defined(IS_PS3) || defined(IS_WII)
- #define MSSBreakPoint() (*(int *) 0 = 0);
- #else
- #ifdef IS_WIN64
- #define MSSBreakPoint() __debugbreak();
- #else
- #define MSSBreakPoint() __asm {int 3}
- #endif
- #endif
- #endif
- #endif
- //
- // Compiler-independent CRTL helper functions for PS2
- // Exported here for use in demo programs as well as MSS itself
- //
- #ifdef IS_PS2
- DXDEC F32 AILCALL AIL_sin(F32 x);
- DXDEC F32 AILCALL AIL_cos(F32 x);
- DXDEC F32 AILCALL AIL_tan( F32 x );
- DXDEC F32 AILCALL AIL_acos(F32 x);
- DXDEC F32 AILCALL AIL_atan(F32 x);
- DXDEC F32 AILCALL AIL_ceil( F32 x );
- DXDEC F32 AILCALL AIL_floor( F32 x );
- DXDEC F32 AILCALL AIL_fsqrt( F32 x );
- DXDEC F32 AILCALL AIL_fabs ( F32 x );
- DXDEC F32 AILCALL AIL_log10( F32 x );
- DXDEC F32 AILCALL AIL_log( F32 x );
- DXDEC F32 AILCALL AIL_pow( F32 x, F32 p );
- DXDEC F32 AILCALL AIL_frexpf( F32 x, S32 *pw2 );
- DXDEC F32 AILCALL AIL_ldexpf( F32 x, S32 pw2 );
- #define AIL_exp(x) AIL_pow(2.718281828F,(x))
- #else
-
- #ifdef IS_WATCOM
- #define AIL_pow powf
- #define AIL_tan tanf
- #else
- #define AIL_pow pow
- #define AIL_tan tan
- #endif
- #define AIL_sin sin
- #define AIL_cos cos
- #define AIL_acos acos
- #define AIL_atan atan
- #define AIL_ceil ceil
- #define AIL_floor floor
- #define AIL_fsqrt(arg) ((F32) sqrt(arg))
- #define AIL_fabs fabs
- #define AIL_log10 log10
- #define AIL_log log
- #define AIL_frexpf(a1,a2) ((F32) frexp(a1,a2))
- #define AIL_ldexpf(a1,a2) ((F32) ldexp(a1,a2))
- #define AIL_exp exp
- #endif
- DXDEC C8 * AILCALL AIL_ftoa(F32 val);
- //
- // High-level support services
- //
- #ifdef IS_DOS
- #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 SINTa AILCALL AIL_get_preference (U32 number);
- #endif
- DXDEC void AILCALL AIL_shutdown (void);
- DXDEC SINTa AILCALL AIL_set_preference (U32 number,
- SINTa 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
- #if !defined(IS_MAC) && !defined(IS_LINUX) && !defined(IS_PS2) && !defined(IS_PS3) && !defined(IS_WII)
- __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);
- #if defined(IS_WIN32API) || defined(IS_MAC) || defined(IS_LINUX)
- 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);
- #ifndef IS_DOS
- DXDEC AILTRACECB AILCALL AIL_register_trace_callback (AILTRACECB cb,
- S32 level);
- #endif
- //
- // Process services
- //
- DXDEC HTIMER AILCALL AIL_register_timer (AILTIMERCB fn);
- DXDEC UINTa AILCALL AIL_set_timer_user (HTIMER timer,
- UINTa 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 __RADINDLL__
- // static function that handles shutdown
- int __cdecl MSS_auto_cleanup(void);
- #ifdef _MSC_VER
- // on MSVC, automatically register a cleanup function
- #define AIL_startup() (MSS_auto_cleanup(),AIL_startup())
- #endif
- #endif
- */
- DXDEC HWND AILCALL AIL_HWND (void);
- #else
- #ifdef IS_MAC
- #if defined(__PROCESSES__)
- DXDEC ProcessSerialNumber AIL_Process(void);
- #endif
- #endif
- #endif
- //
- // high-level digital services
- //
- #define AIL_OPEN_DIGITAL_FORCE_PREFERENCE 1
- #define AIL_OPEN_DIGITAL_NEED_HW_3D 2
- #define AIL_OPEN_DIGITAL_NEED_FULL_3D 4
- #define AIL_OPEN_DIGITAL_NEED_LIGHT_3D 8
- #define AIL_OPEN_DIGITAL_NEED_HW_REVERB 16
- #define AIL_OPEN_DIGITAL_NEED_REVERB 32
- #define AIL_OPEN_DIGITAL_USE_IOP_CORE0 64
- DXDEC HDIGDRIVER AILCALL AIL_open_digital_driver( U32 frequency,
- S32 bits,
- S32 channel,
- U32 flags );
- DXDEC void AILCALL AIL_close_digital_driver( HDIGDRIVER dig );
- #ifdef IS_LINUX
- #define AIL_MSS_version(str,len) \
- { \
- strncpy(str, MSS_VERSION, len); \
- }
- DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
- DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
- #else
- #ifdef IS_WINDOWS
- #define AIL_MSS_version(str,len) \
- { \
- HINSTANCE l=LoadLibrary(MSSDLLNAME); \
- if ((UINTa)l<=32) \
- *(str)=0; \
- else { \
- LoadString(l,1,str,len); \
- FreeLibrary(l); \
- } \
- }
- #if 0
- DXDEC S32 AILCALL AIL_waveOutOpen (HDIGDRIVER FAR *drvr,
- LPHWAVEOUT FAR *lphWaveOut,
- S32 wDeviceID,
- LPWAVEFORMAT lpFormat);
- DXDEC void AILCALL AIL_waveOutClose (HDIGDRIVER drvr);
- #endif
- DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
- DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
- #else
- #ifdef IS_MAC
- #if defined(__RESOURCES__)
- typedef MSS_STRUCT MSS_VersionType_
- {
- Str255 version_name;
- } MSS_VersionType;
- #define AIL_MSS_version(str,len) \
- { \
- long _res = HOpenResFile(0,0,"\p" MSSDLLNAME,fsRdPerm); \
- 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); \
- } \
- } \
- }
- #endif
- DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
- DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
- #else
- #ifdef IS_DOS
- //
- // 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
- #endif
- #endif
- DXDEC char FAR* AILCALL AIL_set_redist_directory(char const FAR*dir);
- DXDEC S32 AILCALL AIL_background_CPU_percent (void);
- 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 void AILCALL AIL_set_speaker_configuration
- (HDIGDRIVER dig,
- MSSVECTOR3D FAR *array,
- S32 n_channels,
- F32 falloff_power);
- DXDEC MSSVECTOR3D FAR *
- AILCALL AIL_speaker_configuration
- (HDIGDRIVER dig,
- S32 FAR *n_physical_channels,
- S32 FAR *n_logical_channels,
- F32 FAR *falloff_power,
- MSS_MC_SPEC FAR *channel_spec);
- DXDEC void AILCALL AIL_set_listener_relative_receiver_array
- (HDIGDRIVER dig,
- MSS_RECEIVER_LIST FAR *array,
- S32 n_receivers);
- DXDEC MSS_RECEIVER_LIST FAR *
- AILCALL AIL_listener_relative_receiver_array
- (HDIGDRIVER dig,
- S32 FAR *n_receivers);
- #ifndef IS_XBOX
- DXDEC void AILCALL AIL_set_speaker_reverb_levels
- (HDIGDRIVER dig,
- F32 FAR *wet_array,
- F32 FAR *dry_array,
- S32 n_levels);
- DXDEC void AILCALL AIL_speaker_reverb_levels (HDIGDRIVER dig,
- S32 FAR *n_levels,
- F32 FAR * FAR *wet_array,
- F32 FAR * FAR *dry_array);
- #endif
- DXDEC
- S32 AILEXPORT AIL_calculate_3D_channel_levels (HDIGDRIVER dig, //)
- F32 FAR *channel_levels,
- MSSVECTOR3D FAR *src_pos,
- MSSVECTOR3D FAR *src_face,
- MSSVECTOR3D FAR *src_up,
- F32 src_inner_angle,
- F32 src_outer_angle,
- F32 src_outer_volume,
- F32 src_max_dist,
- F32 src_min_dist,
- MSSVECTOR3D FAR *listen_pos,
- MSSVECTOR3D FAR *listen_face,
- MSSVECTOR3D FAR *listen_up,
- F32 rolloff_factor,
- MSSVECTOR3D FAR *doppler_velocity,
- F32 FAR *doppler_shift);
-
- DXDEC void AILCALL AIL_release_sample_handle (HSAMPLE S);
- DXDEC void AILCALL AIL_init_sample (HSAMPLE S,
- S32 format,
- U32 flags);
- DXDEC S32 AILCALL AIL_set_sample_file (HSAMPLE S,
- void const FAR *file_image,
- S32 block);
- DXDEC S32 AILCALL AIL_set_sample_info (HSAMPLE S,
- AILSOUNDINFO const FAR * info);
- DXDEC S32 AILCALL AIL_set_named_sample_file (HSAMPLE S,
- C8 const FAR *file_type_suffix,
- void const FAR *file_image,
- U32 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 HPROVIDER AILCALL AIL_sample_processor (HSAMPLE S,
- SAMPLESTAGE pipeline_stage);
- DXDEC HPROVIDER AILCALL AIL_digital_driver_processor
- (HDIGDRIVER dig,
- DIGDRVSTAGE pipeline_stage);
- 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_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_pan (HSAMPLE S,
- F32 volume,
- F32 pan);
- DXDEC void AILCALL AIL_set_sample_volume_levels(HSAMPLE S,
- F32 left_level,
- F32 right_level);
- DXDEC void AILCALL AIL_set_sample_channel_levels (HSAMPLE S,
- F32 FAR *level_array,
- S32 n_levels);
- DXDEC void AILCALL AIL_set_sample_reverb_levels(HSAMPLE S,
- F32 dry_level,
- F32 wet_level);
- DXDEC void AILCALL AIL_set_sample_low_pass_cut_off(HSAMPLE S,
- F32 cut_off);
- 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 S32 AILCALL AIL_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 void AILCALL AIL_sample_volume_pan (HSAMPLE S, F32 FAR* volume, F32 FAR* pan);
- DXDEC F32 FAR * AILCALL AIL_sample_channel_levels (HSAMPLE S,
- S32 FAR *n_levels);
- DXDEC void AILCALL AIL_sample_volume_levels (HSAMPLE S,
- F32 FAR *left_level,
- F32 FAR *right_level);
- DXDEC void AILCALL AIL_sample_reverb_levels (HSAMPLE S,
- F32 FAR *dry_level,
- F32 FAR *wet_level);
- DXDEC F32 AILCALL AIL_sample_low_pass_cut_off(HSAMPLE S);
- DXDEC S32 AILCALL AIL_sample_loop_count (HSAMPLE S);
- DXDEC void AILCALL AIL_set_digital_master_volume_level
- (HDIGDRIVER dig,
- F32 master_volume);
- DXDEC F32 AILCALL AIL_digital_master_volume_level (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_set_sample_51_volume_pan( HSAMPLE S,
- F32 volume,
- F32 pan,
- F32 fb_pan,
- F32 center_level,
- F32 sub_level );
- DXDEC void AILCALL AIL_sample_51_volume_pan ( HSAMPLE S,
- F32 FAR* volume,
- F32 FAR* pan,
- F32 FAR* fb_pan,
- F32 FAR* center_level,
- F32 FAR* sub_level );
- DXDEC void AILCALL AIL_set_sample_51_volume_levels( HSAMPLE S,
- F32 f_left_level,
- F32 f_right_level,
- F32 b_left_level,
- F32 b_right_level,
- F32 center_level,
- F32 sub_level );
- DXDEC void AILCALL AIL_sample_51_volume_levels ( HSAMPLE S,
- F32 FAR* f_left_level,
- F32 FAR* f_right_level,
- F32 FAR* b_left_level,
- F32 FAR* b_right_level,
- F32 FAR* center_level,
- F32 FAR* sub_level );
- #if !defined(IS_XBOX)
- DXDEC void AILCALL AIL_set_digital_master_reverb
- (HDIGDRIVER dig,
- F32 reverb_decay_time,
- F32 reverb_predelay,
- F32 reverb_damping);
- DXDEC void AILCALL AIL_digital_master_reverb
- (HDIGDRIVER dig,
- F32 FAR* reverb_time,
- F32 FAR* reverb_predelay,
- F32 FAR* reverb_damping);
- #endif
- DXDEC void AILCALL AIL_set_digital_master_reverb_levels
- (HDIGDRIVER dig,
- F32 dry_level,
- F32 wet_level);
- DXDEC void AILCALL AIL_digital_master_reverb_levels
- (HDIGDRIVER dig,
- F32 FAR * dry_level,
- F32 FAR * wet_level);
- //
- // 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,
- S32 new_stream_position);
- 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 AILFALLOFFCB AILCALL AIL_register_falloff_function_callback
- (HSAMPLE S,
- AILFALLOFFCB falloff_cb);
- DXDEC void AILCALL AIL_set_sample_user_data (HSAMPLE S,
- U32 index,
- SINTa value);
- DXDEC SINTa 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);
- DXDEC S32 AILCALL AIL_platform_property (void *object,
- MSS_PLATFORM_PROPERTY property,
- void FAR *before_value,
- void const FAR *new_value,
- void FAR *after_value);
- #ifdef IS_WIN32API
- 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);
- #ifdef IS_WIN32
- DXDEC S32 AILCALL AIL_set_DirectSound_HWND(HDIGDRIVER dig, HWND wnd);
- #endif
- #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) || defined(IS_LINUX) || defined(IS_XBOX) || defined(IS_XENON)
- 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 );
- #if defined(IS_MAC) || defined(IS_LINUX)
- 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,
- SINTa value);
- DXDEC SINTa 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_LINUX
- MSS_STRUCT SDL_CD;
- #endif
- #if !defined(IS_XBOX) && !defined(IS_XENON) && !defined(IS_PS2) && !defined(IS_PS3) && !defined(IS_WII)
- #ifdef IS_DOS
- typedef MSS_STRUCT _REDBOOKTRACKINFO {
- U32 tracks;
- U32 trackstarts[100];
- } REDBOOKTRACKINFO;
- #endif
- typedef MSS_STRUCT _REDBOOK {
- U32 DeviceID;
- U32 paused;
- U32 pausedsec;
- U32 lastendsec;
- #ifdef IS_DOS
- U32 readcontents;
- REDBOOKTRACKINFO info;
- #endif
- #ifdef IS_MAC
- short vDRefNum;
- #endif
- #ifdef IS_LINUX
- struct SDL_CD *cdrom;
- #endif
- } REDBOOK;
- typedef MSS_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 F32 AILCALL AIL_redbook_volume_level(HREDBOOK hand);
- DXDEC F32 AILCALL AIL_redbook_set_volume_level(HREDBOOK hand, F32 volume);
- #endif
- #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 MSS_STRUCT _STREAM FAR* HSTREAM; // Handle to stream
- typedef void (AILCALLBACK FAR* AILSTREAMCB) (HSTREAM stream);
- typedef MSS_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
- UINTa 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 reset_seek_pos[3]; // new stream position after reset
- 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
- SINTa user_data[8]; // Miscellaneous user data
- void FAR* next; // pointer to next stream
- #if defined(IS_WINDOWS) || defined(IS_MAC) || defined(IS_LINUX) || defined(IS_XBOX) || defined(IS_XENON) || defined(IS_PS2) || defined(IS_PS3) || defined(IS_WII)
- S32 autostreaming; // are we autostreaming this stream
- #endif
- S32 docallback; // set when it time to poll for a callback
- } 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 HSAMPLE AILCALL AIL_stream_sample_handle(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 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,
- SINTa value);
- DXDEC SINTa 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);
- #ifdef ON_MAC_USE_FSS
- typedef MSS_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,
- UINTa FAR* FileHandle);
- typedef void (AILCALLBACK FAR*AIL_file_close_callback) (UINTa 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) (UINTa FileHandle,
- S32 Offset,
- U32 Type);
- typedef U32 (AILCALLBACK FAR*AIL_file_read_callback) (UINTa 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) (UINTa 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 MSS_STRUCT _DLSFILEID {
- SINTa id;
- struct _DLSFILEID FAR* next;
- } DLSFILEID;
- typedef MSS_STRUCT _DLSFILEID FAR* HDLSFILEID;
- typedef MSS_STRUCT _DLSDEVICE {
- VOIDFUNC FAR* pGetPref;
- VOIDFUNC FAR* pSetPref;
- VOIDFUNC FAR* pMSSOpen;
- VOIDFUNC FAR* pOpen;
- VOIDFUNC FAR* pClose;
- VOIDFUNC FAR* pLoadFile;
- VOIDFUNC FAR* pLoadMem;
- VOIDFUNC FAR* pUnloadFile;
- VOIDFUNC FAR* pUnloadAll;
- VOIDFUNC FAR* pGetInfo;
- VOIDFUNC FAR* pCompact;
- VOIDFUNC FAR* pSetAttr;
- SINTa 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_STATIC
- char FAR* DOSname;
- #endif
- #endif
- } DLSDEVICE;
- typedef MSS_STRUCT _DLSDEVICE FAR* HDLSDEVICE;
- typedef MSS_STRUCT _AILDLSINFO {
- char Description[128];
- S32 MaxDLSMemory;
- S32 CurrentDLSMemory;
- S32 LargestSize;
- S32 GMAvailable;
- S32 GMBankSize;
- } AILDLSINFO;
- #ifdef IS_STATIC
- typedef MSS_STRUCT _AILSTATICDLS {
- char FAR* description;
- VOIDFUNC FAR* pDLSOpen;
- VOIDFUNC FAR* pMSSOpen;
- VOIDFUNC FAR* pOpen;
- VOIDFUNC FAR* pClose;
- VOIDFUNC FAR* pLoadFile;
- VOIDFUNC FAR* pLoadMem;
- VOIDFUNC FAR* pUnloadFile;
- VOIDFUNC FAR* pUnloadAll;
- VOIDFUNC FAR* pGetInfo;
- VOIDFUNC FAR* pCompact;
- VOIDFUNC FAR* pSetAttr;
- } AILSTATICDLS;
- #endif
- DXDEC HDLSDEVICE AILCALL AIL_DLS_open(HMDIDRIVER mdi, HDIGDRIVER dig,
- #ifdef IS_STATIC
- AILSTATICDLS const FAR * staticdls,
- #else
- char const FAR * libname,
- #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)(UINTa)(SINTa)-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 HSAMPLE AILCALL AIL_DLS_sample_handle(HDLSDEVICE dls);
- //
- // Quick-integration service functions and data types
- //
- typedef MSS_STRUCT
- {
- U32 const FAR *data;
- S32 size;
- S32 type;
- void FAR *handle;
- S32 status;
- void FAR* next;
- S32 speed;
- F32 volume;
- F32 extravol;
- F32 dry;
- F32 wet;
- F32 cutoff;
- HDLSFILEID dlsid;
- void FAR* dlsmem;
- void FAR* dlsmemunc;
- S32 milliseconds;
- S32 length;
- SINTa 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) || defined(IS_LINUX) || defined(IS_XBOX) || defined(IS_XENON) || defined(IS_PS2) || defined(IS_PS3) || defined(IS_WII)
- 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 ON_MAC_USE_FSS
- 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_load_named_mem (void const FAR *mem,
- char const FAR *filename,
- 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 ON_MAC_USE_FSS
- 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, F32 volume, F32 extravol);
- DXDEC void AILCALL AIL_quick_set_reverb_levels (HAUDIO audio,
- F32 dry_level,
- F32 wet_level);
- DXDEC void AILCALL AIL_quick_set_low_pass_cut_off(HAUDIO S,
- F32 cut_off);
- 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
- #define AIL_QUICK_OGG_VORBIS_TYPE 5
- #define AIL_QUICK_V12_VOICE_TYPE 6
- #define AIL_QUICK_V24_VOICE_TYPE 7
- #define AIL_QUICK_V29_VOICE_TYPE 8
- #define AIL_QUICK_OGG_SPEEX_TYPE 9
- #define AIL_QUICK_S8_VOICE_TYPE 10
- #define AIL_QUICK_S16_VOICE_TYPE 11
- #define AIL_QUICK_S32_VOICE_TYPE 12
- DXDEC S32 AILCALL AIL_quick_type(HAUDIO audio);
- DXDEC void AILCALL AIL_save_sample_attributes(HSAMPLE S,
- HSATTRIBS D);
- DXDEC U32 AILCALL AIL_load_sample_attributes(HSAMPLE S,
- HSATTRIBS D);
- 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_PROPERTY 1
- #define AIL_LENGTHY_UPDATE 2
- #define AIL_LENGTHY_DONE 3
- typedef S32 (AILCALLBACK FAR* AILLENGTHYCB)(U32 state,UINTa user);
- typedef S32 (AILCALLBACK FAR* AILCODECSETPROP)(char const FAR* property,void const FAR * 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 AILDLSLIST_ARTICULATION 1
- #define AILDLSLIST_DUMP_WAVS 2
- #if defined(IS_WIN32) || defined(IS_MAC)
- DXDEC S32 AILCALL AIL_list_DLS (void const FAR* DLS,
- char FAR* FAR* lst,
- U32 FAR* lst_size,
- S32 flags,
- C8 FAR* title);
- #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);
- #endif
- #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
- #define AILFILETYPE_XBOX_ADPCM_WAV 15
- #define AILFILETYPE_OGG_VORBIS 16
- #define AILFILETYPE_V12_VOICE 17
- #define AILFILETYPE_V24_VOICE 18
- #define AILFILETYPE_V29_VOICE 19
- #define AILFILETYPE_OGG_SPEEX 20
- #define AILFILETYPE_S8_VOICE 21
- #define AILFILETYPE_S16_VOICE 22
- #define AILFILETYPE_S32_VOICE 23
- DXDEC S32 AILCALL AIL_file_type(void const FAR* data, U32 size);
- DXDEC S32 AILCALL AIL_file_type_named(void const FAR* data, char const FAR* filename, 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);
- typedef MSS_STRUCT
- {
- //
- // File-level data accessible to app
- //
- // This is valid after AIL_inspect_MP3() is called (even if the file contains no valid frames)
- //
- U8 FAR *MP3_file_image; // Original MP3_file_image pointer passed to AIL_inspect_MP3()
- S32 MP3_image_size; // Original MP3_image_size passed to AIL_inspect_MP3()
- U8 FAR *ID3v2; // ID3v2 tag, if not NULL
- S32 ID3v2_size; // Size of tag in bytes
- U8 FAR *ID3v1; // ID3v1 tag, if not NULL (always 128 bytes long if present)
- U8 FAR *start_MP3_data; // Pointer to start of data area in file (not necessarily first valid frame)
- U8 FAR *end_MP3_data; // Pointer to last valid byte in MP3 data area (before ID3v1 tag, if any)
- //
- // Information about current frame being inspected, valid if AIL_enumerate_MP3_frames() returns
- // TRUE
- //
- S32 sample_rate; // Sample rate in Hz (normally constant across all frames in file)
- S32 bit_rate; // Bits/second for current frame
- S32 channels_per_sample; // 1 or 2
- S32 samples_per_frame; // Always 576 or 1152 samples in each MP3 frame, depending on rate
- S32 byte_offset; // Offset of frame from start_MP3_data (i.e., suitable for use as loop point)
- S32 next_frame_expected; // Anticipated offset of next frame to be enumerated, if any
- S32 average_frame_size; // Average source bytes per frame, determined solely by bit rate and sample rate
- S32 data_size; // # of data-only bytes in this particular frame
- S32 header_size; // 4 or 6 bytes, depending on CRC
- S32 side_info_size; // Valid for layer 3 side info only
- S32 ngr; // Always 2 for MPEG1, else 1
- S32 main_data_begin; // Always 0 in files with no bit reservoir
- S32 hpos; // Current bit position in header/side buffer
- S32 MPEG1; // Data copied directly from frame header, see ISO docs for info...
- S32 MPEG25;
- S32 layer;
- S32 protection_bit;
- S32 bitrate_index;
- S32 sampling_frequency;
- S32 padding_bit;
- S32 private_bit;
- S32 mode;
- S32 mode_extension;
- S32 copyright;
- S32 original;
- S32 emphasis;
- //
- // LAME/Xing info tag data
- //
- S32 Xing_valid;
- S32 Info_valid;
- U32 header_flags;
- S32 frame_count;
- S32 byte_count;
- S32 VBR_scale;
- U8 TOC[100];
- S32 enc_delay;
- S32 enc_padding;
- //
- // Private (undocumented) data used during frame enumeration
- //
- U8 FAR *ptr;
- S32 bytes_left;
- S32 check_valid;
- S32 check_MPEG1;
- S32 check_MPEG25;
- S32 check_layer;
- S32 check_protection_bit;
- S32 check_sampling_frequency;
- S32 check_mode;
- S32 check_copyright;
- S32 check_original;
- }
- MP3_INFO;
- DXDEC void AILCALL AIL_inspect_MP3 (MP3_INFO FAR *inspection_state,
- U8 FAR *MP3_file_image,
- S32 MP3_image_size);
- DXDEC S32 AILCALL AIL_enumerate_MP3_frames (MP3_INFO FAR *inspection_state);
- //
- // 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
- #if defined(IS_WIN32API) || defined(IS_MAC) || defined(IS_LINUX) || defined(IS_DOS) || defined(IS_PS2) || defined(IS_PS3) || defined(IS_WII)
- //
- // Auxiliary 2D interface calls
- //
- DXDEC HDIGDRIVER AILCALL AIL_primary_digital_driver (HDIGDRIVER new_primary);
- //
- // 3D-related calls
- //
- DXDEC S32 AILCALL AIL_room_type (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_set_room_type (HDIGDRIVER dig,
- S32 room_type);
- DXDEC F32 AILCALL AIL_3D_rolloff_factor (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_set_3D_rolloff_factor (HDIGDRIVER dig,
- F32 factor);
- DXDEC F32 AILCALL AIL_3D_doppler_factor (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_set_3D_doppler_factor (HDIGDRIVER dig,
- F32 factor);
- DXDEC F32 AILCALL AIL_3D_distance_factor (HDIGDRIVER dig);
- DXDEC void AILCALL AIL_set_3D_distance_factor (HDIGDRIVER dig,
- F32 factor);
- DXDEC void AILCALL AIL_set_sample_obstruction (HSAMPLE S,
- F32 obstruction);
- DXDEC void AILCALL AIL_set_sample_occlusion (HSAMPLE S,
- F32 occlusion);
- DXDEC void AILCALL AIL_set_sample_exclusion (HSAMPLE S,
- F32 exclusion);
- DXDEC F32 AILCALL AIL_sample_obstruction (HSAMPLE S);
- DXDEC F32 AILCALL AIL_sample_occlusion (HSAMPLE S);
- DXDEC F32 AILCALL AIL_sample_exclusion (HSAMPLE S);
- DXDEC void AILCALL AIL_set_sample_3D_distances (HSAMPLE S,
- F32 max_dist,
- F32 min_dist,
- S32 auto_3D_wet_atten);
- DXDEC void AILCALL AIL_sample_3D_distances (HSAMPLE S,
- F32 FAR * max_dist,
- F32 FAR * min_dist,
- S32 FAR * auto_3D_wet_atten);
- DXDEC void AILCALL AIL_set_sample_3D_cone (HSAMPLE S,
- F32 inner_angle,
- F32 outer_angle,
- F32 outer_volume_level);
- DXDEC void AILCALL AIL_sample_3D_cone (HSAMPLE S,
- F32 FAR* inner_angle,
- F32 FAR* outer_angle,
- F32 FAR* outer_volume_level);
- DXDEC void AILCALL AIL_set_sample_3D_position (HSAMPLE obj,
- F32 X,
- F32 Y,
- F32 Z);
- DXDEC void AILCALL AIL_set_sample_3D_velocity (HSAMPLE obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
- DXDEC void AILCALL AIL_set_sample_3D_velocity_vector (HSAMPLE obj,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
- DXDEC void AILCALL AIL_set_sample_3D_orientation (HSAMPLE obj,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
- DXDEC S32 AILCALL AIL_sample_3D_position (HSAMPLE obj,
- F32 FAR *X,
- F32 FAR *Y,
- F32 FAR *Z);
- DXDEC void AILCALL AIL_sample_3D_velocity (HSAMPLE obj,
- F32 FAR *dX_per_ms,
- F32 FAR *dY_per_ms,
- F32 FAR *dZ_per_ms);
- DXDEC void AILCALL AIL_sample_3D_orientation (HSAMPLE 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_sample_3D_position (HSAMPLE obj,
- F32 dt_milliseconds);
- DXDEC void AILCALL AIL_set_listener_3D_position (HDIGDRIVER dig,
- F32 X,
- F32 Y,
- F32 Z);
- DXDEC void AILCALL AIL_set_listener_3D_velocity (HDIGDRIVER dig,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
- DXDEC void AILCALL AIL_set_listener_3D_velocity_vector (HDIGDRIVER dig,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
- DXDEC void AILCALL AIL_set_listener_3D_orientation (HDIGDRIVER dig,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
-
- DXDEC void AILCALL AIL_listener_3D_position (HDIGDRIVER dig,
- F32 FAR *X,
- F32 FAR *Y,
- F32 FAR *Z);
- DXDEC void AILCALL AIL_listener_3D_velocity (HDIGDRIVER dig,
- F32 FAR *dX_per_ms,
- F32 FAR *dY_per_ms,
- F32 FAR *dZ_per_ms);
- DXDEC void AILCALL AIL_listener_3D_orientation (HDIGDRIVER dig,
- 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_listener_3D_position (HDIGDRIVER dig,
- F32 dt_milliseconds);
- #endif
- #ifdef MSS_FLT_SUPPORTED
- //
- // Filter result codes
- //
- typedef SINTa 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" (some functions shared by ##
- //## "MSS voice filter") ##
- //## ##
- //############################################################################
- typedef FLTRESULT (AILCALL FAR *FLT_STARTUP)(void);
- typedef FLTRESULT (AILCALL FAR *FLT_SHUTDOWN)(void);
- typedef C8 FAR * (AILCALL FAR *FLT_ERROR)(void);
- typedef HDRIVERSTATE (AILCALL FAR *FLT_OPEN_DRIVER) (HDIGDRIVER dig);
- typedef FLTRESULT (AILCALL FAR *FLT_CLOSE_DRIVER) (HDRIVERSTATE state);
- typedef void (AILCALL FAR *FLT_PREMIX_PROCESS) (HDRIVERSTATE driver);
- typedef S32 (AILCALL FAR *FLT_POSTMIX_PROCESS) (HDRIVERSTATE driver, void FAR *output_buffer);
- //############################################################################
- //## ##
- //## 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 void (AILCALL FAR * FLTSMP_SAMPLE_PROCESS) (HSAMPLESTATE state,
- void FAR * source_buffer,
- void FAR * dest_buffer, // may be the same as src
- S32 n_samples,
- S32 playback_rate,
- S32 is_stereo );
- typedef S32 (AILCALL FAR * FLTSMP_SAMPLE_PROPERTY) (HSAMPLESTATE state,
- HPROPERTY property,
- void FAR* before_value,
- void const FAR* new_value,
- void FAR* after_value
- );
- //############################################################################
- //## ##
- //## Interface "MSS output filter" ##
- //## ##
- //############################################################################
- typedef S32 (AILCALL FAR * VFLT_ASSIGN_SAMPLE_VOICE) (HDRIVERSTATE driver,
- HSAMPLE S);
- typedef void (AILCALL FAR * VFLT_RELEASE_SAMPLE_VOICE) (HDRIVERSTATE driver,
- HSAMPLE S);
- typedef S32 (AILCALL FAR * VFLT_START_SAMPLE_VOICE) (HDRIVERSTATE driver,
- HSAMPLE S);
- //############################################################################
- //## ##
- //## Interface "Voice filter driver services" ##
- //## ##
- //############################################################################
- typedef S32 (AILCALL FAR * VDRV_DRIVER_PROPERTY) (HDRIVERSTATE driver,
- HPROPERTY property,
- void FAR* before_value,
- void const FAR* new_value,
- void FAR* after_value
- );
- typedef S32 (AILCALL FAR * VDRV_FORCE_UPDATE) (HDRIVERSTATE driver);
- //############################################################################
- //## ##
- //## Interface "Voice filter sample services" ##
- //## ##
- //############################################################################
- typedef S32 (AILCALL FAR * VSMP_SAMPLE_PROPERTY) (HSAMPLE S,
- HPROPERTY property,
- void FAR* before_value,
- void const FAR* new_value,
- void FAR* after_value
- );
- //
- // Pipeline filter calls
- //
- DXDEC HPROVIDER AILCALL AIL_digital_output_filter (HDIGDRIVER dig);
- 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_find_filter (C8 const *name,
- HPROVIDER *ret);
- DXDEC S32 AILCALL AIL_enumerate_filter_properties
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC S32 AILCALL AIL_filter_property (HPROVIDER lib,
- C8 const FAR* name,
- void FAR* before_value,
- void const FAR* new_value,
- void FAR* after_value
- );
- DXDEC S32 AILCALL AIL_enumerate_output_filter_driver_properties
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC S32 AILCALL AIL_output_filter_driver_property
- (HDIGDRIVER dig,
- C8 const FAR * name,
- void FAR* before_value,
- void const FAR* new_value,
- void FAR* after_value
- );
- DXDEC S32 AILCALL AIL_enumerate_output_filter_sample_properties
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC S32 AILCALL AIL_enumerate_filter_sample_properties
- (HPROVIDER lib,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC S32 AILCALL AIL_enumerate_sample_stage_properties
- (HSAMPLE S,
- SAMPLESTAGE stage,
- HINTENUM FAR * next,
- RIB_INTERFACE_ENTRY FAR * dest);
- DXDEC S32 AILCALL AIL_sample_stage_property
- (HSAMPLE S,
- SAMPLESTAGE stage,
- C8 const FAR * name,
- void FAR* before_value,
- void const FAR* new_value,
- void FAR* after_value
- );
- #define AIL_filter_sample_property(S,name,beforev,newv,afterv) AIL_sample_stage_property((S),SP_FILTER_0,(name),(beforev),(newv),(afterv))
- typedef MSS_STRUCT _FLTPROVIDER
- {
- PROVIDER_PROPERTY PROVIDER_property;
- FLT_STARTUP startup;
- FLT_ERROR error;
- FLT_SHUTDOWN shutdown;
- 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_PROPERTY sample_property;
- VFLT_ASSIGN_SAMPLE_VOICE assign_sample_voice;
- VFLT_RELEASE_SAMPLE_VOICE release_sample_voice;
- VFLT_START_SAMPLE_VOICE start_sample_voice;
- VDRV_DRIVER_PROPERTY driver_property;
- VDRV_FORCE_UPDATE force_update;
- VSMP_SAMPLE_PROPERTY output_sample_property;
- HDIGDRIVER dig;
- HPROVIDER provider;
- HDRIVERSTATE driver_state;
- S32 provider_flags;
- struct _FLTPROVIDER FAR *next;
- }
- FLTPROVIDER;
- //
- // Values for "Flags" property exported by all MSS Pipeline Filter and MSS Output Filter
- // providers
- //
- #define FPROV_ON_SAMPLES 0x0001 // Pipeline filter that operates on input samples (and is enumerated by AIL_enumerate_filters)
- #define FPROV_ON_POSTMIX 0x0002 // Pipeline filter that operates on the post mixed output (capture filter)
- #define FPROV_MATRIX 0x0004 // This is a matrix output filter (e.g., SRS/Dolby)
- #define FPROV_VOICE 0x0008 // This is a per-voice output filter (e.g., DirectSound 3D)
- #define FPROV_3D 0x0010 // Output filter uses S3D substructure for positioning
- #define FPROV_OCCLUSION 0x0020 // Output filter supports occlusion (doesn't need per-sample lowpass)
- #define FPROV_EAX 0x0040 // Output filter supports EAX-compatible environmental reverb
- #ifdef IS_WIN32
- #define MSS_EAX_AUTO_GAIN 1
- #define MSS_EAX_AUTOWAH 2
- #define MSS_EAX_CHORUS 3
- #define MSS_EAX_DISTORTION 4
- #define MSS_EAX_ECHO 5
- #define MSS_EAX_EQUALIZER 6
- #define MSS_EAX_FLANGER 7
- #define MSS_EAX_FSHIFTER 8
- #define MSS_EAX_VMORPHER 9
- #define MSS_EAX_PSHIFTER 10
- #define MSS_EAX_RMODULATOR 11
- #define MSS_EAX_REVERB 12
- typedef MSS_STRUCT EAX_SAMPLE_SLOT_VOLUME
- {
- S32 Slot; // 0, 1, 2, 3
- S32 Send;
- S32 SendHF;
- S32 Occlusion;
- F32 OcclusionLFRatio;
- F32 OcclusionRoomRatio;
- F32 OcclusionDirectRatio;
- } EAX_SAMPLE_SLOT_VOLUME;
- typedef MSS_STRUCT EAX_SAMPLE_SLOT_VOLUMES
- {
- U32 NumVolumes; // 0, 1, or 2
- EAX_SAMPLE_SLOT_VOLUME volumes[ 2 ];
- } EAX_SAMPLE_SLOT_VOLUMES;
- // Use this structure for EAX REVERB
- typedef MSS_STRUCT EAX_REVERB
- {
- S32 Effect; // set to MSS_EAX_REVERB
- S32 Volume; // -10000 to 0
- U32 Environment; // one of the ENVIRONMENT_ enums
- F32 EnvironmentSize; // environment size in meters
- F32 EnvironmentDiffusion; // environment diffusion
- S32 Room; // room effect level (at mid frequencies)
- S32 RoomHF; // relative room effect level at high frequencies
- S32 RoomLF; // relative room effect level at low frequencies
- F32 DecayTime; // reverberation decay time at mid frequencies
- F32 DecayHFRatio; // high-frequency to mid-frequency decay time ratio
- F32 DecayLFRatio; // low-frequency to mid-frequency decay time ratio
- S32 Reflections; // early reflections level relative to room effect
- F32 ReflectionsDelay; // initial reflection delay time
- F32 ReflectionsPanX; // early reflections panning vector
- F32 ReflectionsPanY; // early reflections panning vector
- F32 ReflectionsPanZ; // early reflections panning vector
- S32 Reverb; // late reverberation level relative to room effect
- F32 ReverbDelay; // late reverberation delay time relative to initial reflection
- F32 ReverbPanX; // late reverberation panning vector
- F32 ReverbPanY; // late reverberation panning vector
- F32 ReverbPanZ; // late reverberation panning vector
- F32 EchoTime; // echo time
- F32 EchoDepth; // echo depth
- F32 ModulationTime; // modulation time
- F32 ModulationDepth; // modulation depth
- F32 AirAbsorptionHF; // change in level per meter at high frequencies
- F32 HFReference; // reference high frequency
- F32 LFReference; // reference low frequency
- F32 RoomRolloffFactor; // like DS3D flRolloffFactor but for room effect
- U32 Flags; // modifies the behavior of properties
- } EAX_REVERB;
- // Use this structure for EAX AUTOGAIN
- typedef MSS_STRUCT EAX_AUTOGAIN
- {
- S32 Effect; // set to MSS_EAX_AUTO_GAIN
- S32 Volume; // -10000 to 0
- U32 OnOff; // Switch Compressor on or off (1 or 0)
- } EAX_AUTOGAIN;
- // Use this structure for EAX AUTOWAH
- typedef MSS_STRUCT EAX_AUTOWAH
- {
- S32 Effect; // set to MSS_EAX_AUTOWAH
- S32 Volume; // -10000 to 0
- F32 AttackTime; // Attack time (seconds)
- F32 ReleaseTime; // Release time (seconds)
- S32 Resonance; // Resonance (mB)
- S32 PeakLevel; // Peak level (mB)
- } EAX_AUTOWAH;
- // Use this structure for EAX CHORUS
- typedef MSS_STRUCT EAX_CHORUS
- {
- S32 Effect; // set to MSS_EAX_CHORUS
- S32 Volume; // -10000 to 0
- U32 Waveform; // Waveform selector - 0 = sinusoid, 1 = triangle
- S32 Phase; // Phase (Degrees)
- F32 Rate; // Rate (Hz)
- F32 Depth; // Depth (0 to 1)
- F32 Feedback; // Feedback (-1 to 1)
- F32 Delay; // Delay (seconds)
- } EAX_CHORUS;
- // Use this structure for EAX DISTORTION
- typedef MSS_STRUCT EAX_DISTORTION
- {
- S32 Effect; // set to MSS_EAX_DISTORTION
- S32 Volume; // -10000 to 0
- F32 Edge; // Controls the shape of the distortion (0 to 1)
- S32 Gain; // Controls the post distortion gain (mB)
- F32 LowPassCutOff; // Controls the cut-off of the filter pre-distortion (Hz)
- F32 EQCenter; // Controls the center frequency of the EQ post-distortion (Hz)
- F32 EQBandwidth; // Controls the bandwidth of the EQ post-distortion (Hz)
- } EAX_DISTORTION;
- // Use this structure for EAX ECHO
- typedef MSS_STRUCT EAX_ECHO
- {
- S32 Effect; // set to MSS_EAX_ECHO
- S32 Volume; // -10000 to 0
- F32 Delay; // Controls the initial delay time (seconds)
- F32 LRDelay; // Controls the delay time between the first and second taps (seconds)
- F32 Damping; // Controls a low-pass filter that dampens the echoes (0 to 1)
- F32 Feedback; // Controls the duration of echo repetition (0 to 1)
- F32 Spread; // Controls the left-right spread of the echoes
- } EAX_ECHO;
- // Use this structure for EAXEQUALIZER_ALLPARAMETERS
- typedef MSS_STRUCT EAX_EQUALIZER
- {
- S32 Effect; // set to MSS_EAX_EQUALIZER
- S32 Volume; // -10000 to 0
- S32 LowGain; // (mB)
- F32 LowCutOff; // (Hz)
- S32 Mid1Gain; // (mB)
- F32 Mid1Center; // (Hz)
- F32 Mid1Width; // (octaves)
- F32 Mid2Gain; // (mB)
- F32 Mid2Center; // (Hz)
- F32 Mid2Width; // (octaves)
- S32 HighGain; // (mB)
- F32 HighCutOff; // (Hz)
- } EAX_EQUALIZER;
- // Use this structure for EAX FLANGER
- typedef MSS_STRUCT EAX_FLANGER
- {
- S32 Effect; // set to MSS_EAX_FLANGER
- S32 Volume; // -10000 to 0
- U32 Waveform; // Waveform selector - 0 = sinusoid, 1 = triangle
- S32 Phase; // Phase (Degrees)
- F32 Rate; // Rate (Hz)
- F32 Depth; // Depth (0 to 1)
- F32 Feedback; // Feedback (0 to 1)
- F32 Delay; // Delay (seconds)
- } EAX_FLANGER;
- // Use this structure for EAX FREQUENCY SHIFTER
- typedef MSS_STRUCT EAX_FSHIFTER
- {
- S32 Effect; // set to MSS_EAX_FSHIFTER
- S32 Volume; // -10000 to 0
- F32 Frequency; // (Hz)
- U32 LeftDirection; // direction - 0 = down, 1 = up, 2 = off
- U32 RightDirection; // direction - 0 = down, 1 = up, 2 = off
- } EAX_FSHIFTER;
- // Use this structure for EAX VOCAL MORPHER
- typedef MSS_STRUCT EAX_VMORPHER
- {
- S32 Effect; // set to MSS_EAX_VMORPHER
- S32 Volume; // -10000 to 0
- U32 PhonemeA; // phoneme: 0 to 29 - A E I O U AA AE AH AO EH ER IH IY UH UW B D G J K L M N P R S T V Z
- S32 PhonemeACoarseTuning; // (semitones)
- U32 PhonemeB; // phoneme: 0 to 29 - A E I O U AA AE AH AO EH ER IH IY UH UW B D G J K L M N P R S T V Z
- S32 PhonemeBCoarseTuning; // (semitones)
- U32 Waveform; // Waveform selector - 0 = sinusoid, 1 = triangle, 2 = sawtooth
- F32 Rate; // (Hz)
- } EAX_VMORPHER;
- // Use this structure for EAX PITCH SHIFTER
- typedef MSS_STRUCT EAX_PSHIFTER
- {
- S32 Effect; // set to MSS_EAX_PSHIFTER
- S32 Volume; // -10000 to 0
- S32 CoarseTune; // Amount of pitch shift (semitones)
- S32 FineTune; // Amount of pitch shift (cents)
- } EAX_PSHIFTER;
- // Use this structure for EAX RING MODULATOR
- typedef MSS_STRUCT EAX_RMODULATOR
- {
- S32 Effect; // set to MSS_EAX_RMODULATOR
- S32 Volume; // -10000 to 0
- F32 Frequency; // Frequency of modulation (Hz)
- F32 HighPassCutOff; // Cut-off frequency of high-pass filter (Hz)
- U32 Waveform; // Waveform selector - 0 = sinusoid, 1 = triangle, 2 = sawtooth
- } EAX_RMODULATOR;
- #endif
- #else
- typedef MSS_STRUCT _FLTPROVIDER
- {
- U32 junk;
- } FLTPROVIDER;
- #endif
- #ifndef IS_PS2
- #if defined(_PUSHPOP_SUPPORTED) || PRAGMA_STRUCT_PACKPUSH
- #pragma pack(pop)
- #else
- #pragma pack()
- #endif
- #else
- // round up to multiples of 16 for DMA alignment
- #define SPR_IS_NEEDED (((2 * 578 * sizeof(S16)) + 15) & ~15) // 2320
- #define SPR_XR_NEEDED (((2 * 32 * 18 * sizeof(F32)) + 15) & ~15) // 4608
- #define SPR_LR_NEEDED (((2 * 32 * 18 * sizeof(F32)) + 15) & ~15) // 4608
- #define SPR_RES_NEEDED (((32 * 18 * sizeof(F32)) + 15) & ~15) // 2304
- #define SPR_S_NEEDED (((2 * 32 * 18 * sizeof(F32)) + 15) & ~15) // 4608
- #define SPR_U_NEEDED (((2 * 2 * 17 * 16 * sizeof(F32)) + 15) & ~15) // 4352
- #define SPR_MEM (0x70000000)
- #define SPR_U_START (SPR_MEM)
- #define SPR_S_START (SPR_U_START + SPR_U_NEEDED)
- #define SPR_RES_START (SPR_S_START + SPR_S_NEEDED)
- #define SPR_LR_START (SPR_RES_START + SPR_RES_NEEDED)
- #define SPR_IS_START (SPR_RES_START + SPR_RES_NEEDED) // Shared with LR space (LR is larger)
- #define END_SPR_MEM (SPR_LR_START + SPR_LR_NEEDED)
- #define SPR_BYTES_USED (END_SPR_MEM - SPR_MEM)
- typedef enum
- {
- MSS_DO_NOT_USE,
- MSS_USE_AND_SAVE,
- MSS_USE_WITHOUT_SAVING,
- MSS_USED = 100, // Internal use only
- }
- MSS_RESOURCE_POLICY;
- DXDEC MSS_RESOURCE_POLICY AILCALL AIL_set_scratchpad_policy(MSS_RESOURCE_POLICY policy);
- DXDEC MSS_RESOURCE_POLICY AILCALL AIL_scratchpad_policy (void);
- #endif
- #ifndef __RADINDLL__
- #ifdef FSSpec
- #undef FSSpec
- #endif
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif