aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Windows64/Miles/include/mss.h
diff options
context:
space:
mode:
authorGuglioIsStupid <guglioisbusiness@gmail.com>2026-03-05 19:48:12 -0500
committerGitHub <noreply@github.com>2026-03-06 07:48:12 +0700
commit8398eb16b8996df7093960bb0a5d7fc65b8229d4 (patch)
tree1e25a1a2ad9bd39881d2193fd7cbd67b93b734e2 /Minecraft.Client/Windows64/Miles/include/mss.h
parentf012250219abcdb0d07cd60ca2089fbb63dc222c (diff)
Miniaudio Implementation (+stb_vorbis) (#624)
* Miniaudio Implementation * Do not link miles + remove miles lib
Diffstat (limited to 'Minecraft.Client/Windows64/Miles/include/mss.h')
-rw-r--r--Minecraft.Client/Windows64/Miles/include/mss.h8429
1 files changed, 0 insertions, 8429 deletions
diff --git a/Minecraft.Client/Windows64/Miles/include/mss.h b/Minecraft.Client/Windows64/Miles/include/mss.h
deleted file mode 100644
index 531dcbc9..00000000
--- a/Minecraft.Client/Windows64/Miles/include/mss.h
+++ /dev/null
@@ -1,8429 +0,0 @@
-//############################################################################
-//## ##
-//## Miles Sound System ##
-//## ##
-//############################################################################
-//## ##
-//## Contact RAD Game Tools at 425-893-4300 for technical support. ##
-//## ##
-//############################################################################
-
-#ifndef MSS_VERSION
-
-// also update versions below for the docs
-
-// for cdep and installs
-#define MILESVERSION "9.3m"
-// see below in docs section
-#define MILESMAJORVERSION 9
-#define MILESMINORVERSION 3
-#define MILESSUBVERSION 11
-#define MILESBUILDVERSION 0
-#define MILESVERSIONDATE "20-Jun-14"
-#define MILESCOPYRIGHT "Copyright (C) 1991-2014, RAD Game Tools, Inc."
-
-// source files use these defines
-#define MSS_VERSION MILESVERSION
-#define MSS_MAJOR_VERSION MILESMAJORVERSION
-#define MSS_MINOR_VERSION MILESMINORVERSION
-#define MSS_SUB_VERSION MILESSUBVERSION
-#define MSS_BUILD_VERSION MILESBUILDVERSION
-
-#define MSS_VERSION_DATE MILESVERSIONDATE
-#define MSS_COPYRIGHT MILESCOPYRIGHT
-
-#endif
-
-#if !defined(MSS_H) && !defined(__RADRES__)
-#define MSS_H
-
-// doc system stuff
-#ifndef EXPAPI
-#define EXPAPI
-#endif
-#ifndef EXPTYPE
-#define EXPTYPE
-#endif
-#ifndef EXPMACRO
-#define EXPMACRO
-#endif
-#ifndef EXPCONST
-#define EXPCONST
-#endif
-#ifndef EXPOUT
-#define EXPOUT
-#endif
-#ifndef EXPTYPEBEGIN
-#define EXPTYPEBEGIN
-#endif
-#ifndef EXPTYPEEND
-#define EXPTYPEEND
-#endif
-#ifndef EXPGROUP
-#define EXPGROUP(GroupName)
-#endif
-#ifndef DEFGROUP
-#define DEFGROUP(GroupName, Info)
-#endif
-
-// For docs
-EXPGROUP(_NullGroup)
-#define MilesVersion "9.3m" EXPMACRO
-#define MilesMajorVersion 9 EXPMACRO
-#define MilesMinorVersion 3 EXPMACRO
-#define MilesBuildNumber 11 EXPMACRO
-#define MilesCustomization 0 EXPMACRO
-EXPGROUP(_RootGroup)
-
-
-// IS_WINDOWS for Windows or Win32
-// IS_WIN64 for Win64
-// IS_WIN32 for Win32
-// IS_WIN32API for Windows, Xbox and Xenon
-// IS_64REGS when CPU registers are 64-bit - Xenon, PS3, Win64 and PS2
-// IS_32 for at least 32-bit pointers
-// 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_SPU for PS3 SPU
-// IS_WII for Wii
-
-#include "rrCore.h"
-
-//#define MILES_CHECK_OFFSETS
-#ifdef MILES_CHECK_OFFSETS
- #include <stddef.h>
-#endif
-
-#ifdef __RADNT__
-#define IS_WIN32
-#if defined(__RAD64__)
-#define IS_WIN64
-#endif
-#endif
-
-#if defined(__RADWIN__) && !defined(__RADXENON__) && !defined(__RADXBOX__) && !defined(__RADWINRTAPI__)
-#define IS_WINDOWS
-#endif
-
-#if defined(__RADWIN__)
-#define IS_WIN32API
-#endif
-
-#if defined(__RAD64__) && defined(__RADWIN__)
-#define IS_WIN64
-#endif
-
-// 16-bit not supported anymore
-#define IS_32
-
-#ifdef __RADLITTLEENDIAN__
-#define IS_LE
-#endif
-
-#ifdef __RADBIGENDIAN__
-#define IS_BE
-#endif
-
-#ifdef __RADX86__
-#define IS_X86
-#endif
-
-#ifdef __RADMAC__
-#define IS_MAC
-#endif
-
-#ifdef __RADPPC__
-#define IS_PPC
-#endif
-
-#ifdef __RAD68K__
-#define IS_68K
-#endif
-
-#ifdef __RADLINUX__
-#define IS_LINUX
-#endif
-
-//
-// MSS_STATIC_RIB is used to determine whether anything loaded
-// through the RIB interface is loaded via RIB_load_application_providers
-// or via a static declaration from the user (Register_RIB)
-// mirror this in rib.h
-//
-#if defined(__RADANDROID__) || defined(__RADPSP__) || defined(__RADPSP2__) || \
- defined(__RADWII__) || defined(__RADWIIU__) || defined(__RAD3DS__) || defined(__RADIPHONE__) || \
- defined(__RADXENON__) || defined(__RADPS4__) || defined(__RADPS3__) || defined(__RADSPU__) || \
- defined(__RADDURANGO__) || defined(__RADWINRTAPI__)
- #define MSS_STATIC_RIB
- // WinRT is weird in that we statically pull in the RIBs, but we dynamically link Midi
- #ifndef __RADWINRTAPI__
- #define MSS_STATIC_MIDI
- #endif
-#elif defined(__RADWIN__) || defined(__RADLINUX__) || defined(__RADMAC__)
- // not static.
-#else
- #error "MSS needs to know whether it is being distributed as a static lib!"
-#endif
-
-// Retain the old IS_STATIC define for example code
-#ifdef MSS_STATIC_RIB
- #define IS_STATIC
-#endif
-
-#ifdef __RADXBOX__
-#define IS_XBOX
-#endif
-
-#ifdef __RADXENON__
-#define IS_XENON
-#endif
-
-#ifdef __RADWII__
-#define IS_WII
-#endif
-
-#ifdef __RADWIIU__
-#define IS_WIIU
-#endif
-
-#ifdef __RADPS2__
-#define IS_PS2
-#endif
-
-#ifdef __RADPS3__
-#define IS_PS3
-#ifndef HOST_SPU_PROCESS
- #define HOST_SPU_PROCESS
-#endif
-#endif
-
-#ifdef __RADSPU__
-#define IS_PS3
-#define IS_SPU
-#endif
-
-#ifdef __RADPSP__
-#define IS_PSP
-#endif
-
-#ifdef __RADPSP2__
-#define IS_PSP2
-#endif
-
-#ifdef __RADDOS__
-#define IS_DOS
-#endif
-
-#ifdef __RAD64REGS__
-#define IS_64REGS
-#endif
-
-#ifdef __RADMACH__
-#define IS_MACHO
-#endif
-
-#ifdef __RADIPHONE__
-#define IS_IPHONE
-#endif
-
-#ifdef __RADIPHONESIM__
-#define IS_IPHONESIM
-#endif
-
-#ifdef __RAD3DS__
-#define IS_3DS
-#endif
-
-#define MSSRESTRICT RADRESTRICT
-
-#define MSS_STRUCT RADSTRUCT
-
-#define C8 char
-typedef void VOIDFUNC(void);
-
-
-#if (!defined(IS_LE) && !defined(IS_BE))
- #error MSS.H did not detect your platform. Define _WINDOWS, WIN32, WIN64, or macintosh.
-#endif
-
-//
-// Pipeline filters supported on following platforms
-//
-
-#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
-
-#define MSS_REVERB_SUPPORTED 1
-
-//================
-
-EXPGROUP(Basic Types)
-#define AILCALL EXPTAG(AILCALL)
-/*
- Internal calling convention that all external Miles functions use.
-
- Usually cdecl or stdcall on Windows.
-*/
-
-#define AILCALLBACK EXPTAG(AILCALLBACK docproto)
-/*
- Calling convention that user supplied callbacks <b>from</b> Miles use.
-
- Usually cdecl or stdcall on Windows.
-*/
-
-EXPGROUP(_RootGroup)
-#undef AILCALL
-#undef AILCALLBACK
-//================
-
-RADDEFSTART
-
-#define MSSFOURCC U32
-#ifdef IS_LE
- #define MSSMAKEFOURCC(ch0, ch1, ch2, ch3) \
- ((U32)(U8)(ch0) | ((U32)(U8)(ch1) << 8) | \
- ((U32)(U8)(ch2) << 16) | ((U32)(U8)(ch3) << 24 ))
-#else
-
- #define MSSMAKEFOURCC(ch0, ch1, ch2, ch3) \
- (((U32)(U8)(ch0) << 24) | ((U32)(U8)(ch1) << 16) | \
- ((U32)(U8)(ch2) << 8) | ((U32)(U8)(ch3) ))
-#endif
-
-#define MSSmmioFOURCC(w,x,y,z) MSSMAKEFOURCC(w,x,y,z)
-
-#if defined(__RADWINRTAPI__)
-
- #define AILLIBCALLBACK RADLINK
- #define AILCALL RADLINK
- #define AILEXPORT RADEXPLINK
- #define AILCALLBACK RADLINK
- #define DXDEF RADEXPFUNC
- #define DXDEC RADEXPFUNC
-
-#elif defined(IS_WINDOWS)
-
- 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;
-
- #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;
-
- #define MSS_MAIN_DEF __cdecl
-
- //
- // If compiling MSS DLL, use __declspec(dllexport) for both
- // declarations and definitions
- //
-
- #ifdef IS_WIN32
-
- #if !defined(FORNONWIN) && !defined(__RADNTBUILDLINUX__)
- #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
-
- #if defined( __BORLANDC__ ) || defined( MSS_SPU_PROCESS )
- #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
-
- #endif
-
- typedef void * LPVOID;
- typedef LPVOID AILLPDIRECTSOUND;
- typedef LPVOID AILLPDIRECTSOUNDBUFFER;
-
-#elif defined( IS_MAC ) || defined(IS_IPHONE) || defined(IS_LINUX)
-
- #if defined(__RADARM__) || defined(__RADX64__)
- #define AILLIBCALLBACK
- #define AILCALL
- #define AILEXPORT
- #define AILCALLBACK
- #elif defined(__RADX86__)
- #define AILLIBCALLBACK __attribute__((cdecl))
- #define AILCALL __attribute__((cdecl))
- #define AILCALLBACK __attribute__((cdecl))
- #define AILEXPORT __attribute__((cdecl))
- #else
- #error "No fn call decorators specified"
- #endif
-
- #ifdef __RADINDLL__
- #define DXDEC __attribute__((visibility("default")))
- #define DXDEF __attribute__((visibility("default")))
- #else
- #define DXDEC extern
- #define DXDEF
- #endif
-
- #ifdef __RADX64__
- #define MSS_REDIST_DIR_NAME "redist/x64"
- #elif defined(IS_X86)
- #define MSS_REDIST_DIR_NAME "redist/x86"
- #elif defined(__RADARM__)
- #define MSS_REDIST_DIR_NAME ""
- #else
- #error "No Redist Dir Specified"
- #endif
-
- #define MSS_DIR_SEP "/"
- #define MSS_DIR_UP ".." MSS_DIR_SEP
- #define MSS_DIR_UP_TWO MSS_DIR_UP MSS_DIR_UP
-
- #define MSS_MAIN_DEF
-
-#elif defined(IS_XENON)
-
- #define AILLIBCALLBACK __stdcall
- #define AILCALL __stdcall
- #define AILEXPORT __stdcall
- #define AILCALLBACK __stdcall
-
- #define DXDEC extern
- #define DXDEF
-
- typedef void * AILLPDIRECTSOUND;
- typedef void * AILLPDIRECTSOUNDBUFFER;
-
-#else
-
- #define AILLIBCALLBACK
- #define AILCALL
- #define AILEXPORT
- #define AILCALLBACK
-
- #define DXDEC extern
- #define DXDEF
-
-#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 9 // Up to 9 hardware output channels supported on Win32
-#elif defined(IS_PS3) || defined(IS_WII) || defined(IS_WIIU) || defined(__RADWINRTAPI__) || defined(__RADSEKRIT2__)
-#define MAX_SPEAKERS 8 // Up to 8 hardware output channels on PS3, PS2, Wii, WiiU
-#elif defined(IS_PSP) || defined(IS_IPHONE) || defined(IS_3DS) || defined(IS_PSP2) || defined(__RADANDROID__)
-#define MAX_SPEAKERS 2 // Up to 2 hardware output channels on PSP
-#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_BUSSES 4 // # of busses that can be active.
-#define MILES_MAX_STATES 4 // # of state pushes allowed.
-
-
-#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) // (not actually supported)
-#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_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
-
-#ifndef WAVE_FORMAT_PCM
- #define WAVE_FORMAT_PCM 1
-#endif
-#ifndef WAVE_FORMAT_IMA_ADPCM
- #define WAVE_FORMAT_IMA_ADPCM 0x0011
-#endif
-#ifndef WAVE_FORMAT_XBOX_ADPCM
- #define WAVE_FORMAT_XBOX_ADPCM 0x0069
-#endif
-#ifndef WAVE_FORMAT_EXTENSIBLE
- #define WAVE_FORMAT_EXTENSIBLE 0xFFFE
-#endif
-
-typedef enum
-{
- MSS_SPEAKER_MONO = 0,
- MSS_SPEAKER_FRONT_LEFT = 0, // Speaker order indexes correspond to
- MSS_SPEAKER_FRONT_RIGHT = 1, // bitmasks in PSDK's ksmedia.h
- MSS_SPEAKER_FRONT_CENTER = 2, // Also see microsoft.com/whdc/device/audio/multichaud.mspx
- MSS_SPEAKER_LOW_FREQUENCY = 3,
- MSS_SPEAKER_BACK_LEFT = 4,
- MSS_SPEAKER_BACK_RIGHT = 5,
- MSS_SPEAKER_FRONT_LEFT_OF_CENTER = 6,
- MSS_SPEAKER_FRONT_RIGHT_OF_CENTER = 7,
- MSS_SPEAKER_BACK_CENTER = 8,
- MSS_SPEAKER_SIDE_LEFT = 9,
- MSS_SPEAKER_SIDE_RIGHT = 10,
- MSS_SPEAKER_TOP_CENTER = 11,
- MSS_SPEAKER_TOP_FRONT_LEFT = 12,
- MSS_SPEAKER_TOP_FRONT_CENTER = 13,
- MSS_SPEAKER_TOP_FRONT_RIGHT = 14,
- MSS_SPEAKER_TOP_BACK_LEFT = 15,
- MSS_SPEAKER_TOP_BACK_CENTER = 16,
- MSS_SPEAKER_TOP_BACK_RIGHT = 17,
- MSS_SPEAKER_MAX_INDEX = 17,
- MSS_SPEAKER_FORCE_32 = 0x7fffffff
-} MSS_SPEAKER;
-
-//
-// Pass to AIL_midiOutOpen for NULL MIDI driver
-//
-
-#define MIDI_NULL_DRIVER ((U32)(S32)-2)
-
-
-//
-// 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
-#define EVT_HANDLE_MAGIC 1 // EventSystem handle.magic
-#define EVT_HANDLE_INDEX 2 // EventSystem handle.index
-
-//
-// 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_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
-
-#ifndef MSS_BASIC
-
-#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
- #define AIL_NO_AVAIL_ASYNC 7
-#endif
-
-#define MIN_VAL 0
-#define NOM_VAL 1
-#define MAX_VAL 2
-
-
-EXPGROUP(Basic Types)
-EXPTYPEBEGIN typedef SINTa HMSSENUM;
-#define MSS_FIRST ((HMSSENUM)-1)
-EXPTYPEEND
-/*
- specifies a type used to enumerate through a list of properties.
-
- $:MSS_FIRST use this value to start the enumeration process.
-
-The Miles enumeration functions all work similarly - you set a local variable of type HMSSENUM to MSS_FIRST and then call
-the enumeration function until it returns 0.
-
-*/
-
-
-
-
-//
-// Preference names and default values
-//
-
-#define AIL_MM_PERIOD 0
-#define DEFAULT_AMP 1 // Default MM timer period = 5 msec.
-
-#define AIL_TIMERS 1
-#define DEFAULT_AT 16 // 16 allocatable HTIMER handles
-
-#define AIL_ENABLE_MMX_SUPPORT 2 // Enable MMX support if present
-#define DEFAULT_AEMS YES // (may be changed at any time)
-
-
-#define DIG_MIXER_CHANNELS 3
-#define DEFAULT_DMC 64 // 64 allocatable SAMPLE structures
-
-#define DIG_ENABLE_RESAMPLE_FILTER 4 // Enable resampling filter by
-#define DEFAULT_DERF YES // default
-
-#define DIG_RESAMPLING_TOLERANCE 5
-#define DEFAULT_DRT 131 // Resampling triggered at +/- 0.2%
-
-// 1 ms per mix. The PS3 has frag count restrictions, so we use 5 ms.
-#define DIG_DS_FRAGMENT_SIZE 6
-#ifdef __RADPS3__
-# define DEFAULT_DDFS 5
-#else
-# define DEFAULT_DDFS 1
-#endif
-
-// We want ~256 ms of buffers. PS3 must be 8, 16, or 32.
-#define DIG_DS_FRAGMENT_CNT 7
-#ifdef __RADPS3__
-# define DEFAULT_DDFC 32
-#else
-# define DEFAULT_DDFC 256
-#endif
-
-// Mix ahead ~48 ms. PS3 is based off on 5 ms frag size above...
-#define DIG_DS_MIX_FRAGMENT_CNT 8
-#ifdef __RADPS3__
-# define DEFAULT_DDMFC 8
-#else
-# define DEFAULT_DDMFC 48
-#endif
-
-#define DIG_LEVEL_RAMP_SAMPLES 9
-#define DEFAULT_DLRS 32 // Ramp level changes over first 32 samples in each buffer to reduce zipper noise
-
-
-#define DIG_MAX_PREDELAY_MS 10
-#define DEFAULT_MPDMS 500 // Max predelay reverb time in ms
-
-#define DIG_3D_MUTE_AT_MAX 11
-#define DEFAULT_D3MAM YES // on by default
-
-#define DIG_DS_USE_PRIMARY 12
-#define DEFAULT_DDUP NO // Mix into secondary DirectSound buffer by default
-
-
-#define DIG_DS_DSBCAPS_CTRL3D 13
-#define DEFAULT_DDDC NO // Do not use DSBCAPS_CTRL3D by default
-
-#define DIG_DS_CREATION_HANDLER 14
-#define DEFAULT_DDCH 0 // Use DirectSoundCreate() by default
-
-
-#define DIG_MAX_CHAIN_ELEMENT_SIZE 15
-#define DEFAULT_MCES 8192 // max of 8192 bytes/waveOut buffer
-
-#define DIG_MIN_CHAIN_ELEMENT_TIME 16
-#define DEFAULT_MCET 100 // 100 milliseconds buffers
-
-
-#define DIG_USE_WAVEOUT 17
-#define DEFAULT_DUW NO // Use DirectSound by default
-
-#define DIG_OUTPUT_BUFFER_SIZE 18
-#define DEFAULT_DOBS 49152 // Windows: waveout 48K output buffer size
-
-
-#define DIG_PREFERRED_WO_DEVICE 19
-#define DEFAULT_DPWOD ((UINTa)-1) // Preferred WaveOut device == WAVE_MAPPER
-
-#define DIG_PREFERRED_DS_DEVICE 20
-#define DEFAULT_DPDSD 0 // Preferred DirectSound device == default NULL GUID
-
-
-#define MDI_SEQUENCES 21
-#define DEFAULT_MS 8 // 8 sequence handles/driver
-
-#define MDI_SERVICE_RATE 22
-#define DEFAULT_MSR 120 // XMIDI sequencer timing = 120 Hz
-
-#define MDI_DEFAULT_VOLUME 23
-#define DEFAULT_MDV 127 // Default sequence volume = 127 (0-127)
-
-#define MDI_QUANT_ADVANCE 24
-#define DEFAULT_MQA 1 // Beat/bar count +1 interval
-
-#define MDI_ALLOW_LOOP_BRANCHING 25
-#define DEFAULT_ALB NO // Branches cancel XMIDI FOR loops
-
-#define MDI_DEFAULT_BEND_RANGE 26
-#define DEFAULT_MDBR 2 // Default pitch-bend range = 2
-
-#define MDI_DOUBLE_NOTE_OFF 27
-#define DEFAULT_MDNO NO // For stuck notes on SB daughterboards
-
-#define MDI_SYSEX_BUFFER_SIZE 28
-#define DEFAULT_MSBS 1536 // Default sysex buffer = 1536 bytes
-
-
-#define DLS_VOICE_LIMIT 29
-#define DEFAULT_DVL 64 // 64 voices supported
-
-#define DLS_TIMEBASE 30
-#define DEFAULT_DTB 120 // 120 intervals/second by default
-
-#define DLS_BANK_SELECT_ALIAS 31
-#define DEFAULT_DBSA NO // Do not treat controller 114 as bank
-
-#define DLS_STREAM_BOOTSTRAP 32 // Don't submit first stream buffer
-#define DEFAULT_DSB YES // until at least 2 available
-
-#define DLS_VOLUME_BOOST 33
-#define DEFAULT_DVB 0 // Boost final volume by 0 dB
-
-#define DLS_ENABLE_FILTERING 34 // Filtering = on by default
-#define DEFAULT_DEF YES // (may be changed at any time)
-
-
-#define DLS_GM_PASSTHROUGH 35 // 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 36 // Size in samples to switch to ASI
-#define DEFAULT_DATAT 32768
-
-#ifdef __RAD3DS__
-# define AIL_3DS_USE_SYSTEM_CORE 32 // Defaults to 0
-#endif
-
-#define N_PREFS 40 // # of preference types
-
-#if defined(IS_WIN32API) || defined(IS_WII)
- #pragma pack(push, 1)
-#endif
-
-typedef struct Mwavehdr_tag {
- C8 * lpData;
- U32 dwBufferLength;
- U32 dwBytesRecorded;
- UINTa dwUser;
- U32 dwFlags;
- U32 dwLoops;
- struct Mwavehdr_tag *lpNext;
- UINTa reserved;
-} MWAVEHDR;
-typedef MSS_STRUCT Mwaveformat_tag {
- U16 wFormatTag;
- U16 nChannels;
- U32 nSamplesPerSec;
- U32 nAvgBytesPerSec;
- U16 nBlockAlign;
-} MWAVEFORMAT;
-typedef MSS_STRUCT Mpcmwaveformat_tag {
- MWAVEFORMAT wf;
- U16 wBitsPerSample;
-} MPCMWAVEFORMAT;
-typedef MSS_STRUCT Mwaveformatex_tag {
- U16 wFormatTag;
- U16 nChannels;
- U32 nSamplesPerSec;
- U32 nAvgBytesPerSec;
- U16 nBlockAlign;
- U16 wBitsPerSample;
- U16 cbSize;
-} MWAVEFORMATEX;
-typedef MSS_STRUCT Mwaveformatextensible_tag {
- MWAVEFORMATEX Format;
- union {
- U16 wValidBitsPerSample;
- U16 wSamplesPerBlock;
- U16 wReserved;
- } Samples;
- U32 dwChannelMask;
- U8 SubFormat[16];
-} MWAVEFORMATEXTENSIBLE;
-
-#if defined(IS_WIN32API) || defined(IS_WII)
- #pragma pack(pop)
-#endif
-
-// This will fail if structure packing isn't correct for the compiler we are running.
-RR_COMPILER_ASSERT(sizeof(MWAVEFORMATEXTENSIBLE) == 40);
-
-
-typedef struct _AILSOUNDINFO {
- S32 format;
- void const* data_ptr;
- U32 data_len;
- U32 rate;
- S32 bits;
- S32 channels;
- U32 channel_mask;
- U32 samples;
- U32 block_size;
- void const* initial_ptr;
-} AILSOUNDINFO;
-
-// asis use these callbacks
-typedef void * (AILCALL MSS_ALLOC_TYPE)( UINTa size, UINTa user, char const * filename, U32 line );
-typedef void (AILCALL MSS_FREE_TYPE)( void * ptr, UINTa user, char const * filename, U32 line );
-
-// helper functions that just turn around and call AIL_mem_alloc_lock
-DXDEC void * AILCALL MSS_alloc_info( UINTa size, UINTa user, char const * filename, U32 line );
-DXDEC void AILCALL MSS_free_info( void * ptr, UINTa user, char const * filename, U32 line );
-
-#if defined(STANDALONEMIXRIB) && !defined(FORNONWIN)
-#define MSS_CALLBACK_ALIGNED_NAME( name ) name##_fixup
-#define MSS_DEC_CB_STACK_ALIGN( name ) DXDEC void AILCALL MSS_CALLBACK_ALIGNED_NAME(name)(void);
-#else
-#define MSS_CALLBACK_ALIGNED_NAME( name ) name
-#define MSS_DEC_CB_STACK_ALIGN( name )
-#endif
-
-MSS_DEC_CB_STACK_ALIGN( MSS_alloc_info )
-MSS_DEC_CB_STACK_ALIGN( MSS_free_info)
-
-
-#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 UINTa HPROVIDER;
-
-//
-// Handle representing token used to obtain property data
-//
-// This needs to be large enough to store a function pointer
-//
-
-typedef UINTa HPROPERTY;
-
-//
-// 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_FORCE_32 = 0x7fffffff
-}
-RIB_ENTRY_TYPE;
-
-//
-// RIB_INTERFACE_ENTRY, used to represent a function or data entry in an
-// interface
-//
-
-typedef struct
-{
- RIB_ENTRY_TYPE type; // See list above
- const C8 *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 *PROVIDER_PROPERTY) (HPROPERTY index,
- void * before_value,
- void const * new_value,
- void * 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), 0, 0, 0)
-#define RIB_free_libraries() RIB_free_provider_library((HPROVIDER)(0));
-#define RIB_request(x,y,z) RIB_request_interface (x, y, ARY_CNT(z), z)
-
-// passed to RIB DLLs in Miles 9 and up (so RIBS don't have to link to MSS32.dll)
-typedef HPROVIDER AILCALL RIB_ALLOC_PROVIDER_HANDLE_TYPE(long module);
-
-typedef RIBRESULT AILCALL RIB_REGISTER_INTERFACE_TYPE (HPROVIDER provider,
- C8 const *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY const *rlist);
-
-typedef RIBRESULT AILCALL RIB_UNREGISTER_INTERFACE_TYPE (HPROVIDER provider,
- C8 const *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY const *rlist);
-
-#define RIB_registerP(x,y,z) rib_reg ((HPROVIDER)(x), y, ARY_CNT(z), z)
-#define RIB_unregister_allP(x) rib_unreg ((HPROVIDER)(x), 0, 0, 0)
-
-
-// ----------------------------------
-// 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 *filename);
-DXDEC void AILCALL RIB_free_provider_library (HPROVIDER provider);
-
-DXDEC RIBRESULT AILCALL RIB_register_interface (HPROVIDER provider,
- C8 const *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY const *rlist);
-
-DXDEC RIBRESULT AILCALL RIB_unregister_interface (HPROVIDER provider,
- C8 const *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY const *rlist);
-
-DXDEC RIBRESULT AILCALL RIB_request_interface (HPROVIDER provider,
- C8 const *interface_name,
- S32 entry_count,
- RIB_INTERFACE_ENTRY *rlist);
-
-DXDEC RIBRESULT AILCALL RIB_request_interface_entry (HPROVIDER provider,
- C8 const *interface_name,
- RIB_ENTRY_TYPE entry_type,
- C8 const *entry_name,
- UINTa *token);
-
-DXDEC S32 AILCALL RIB_enumerate_interface (HPROVIDER provider,
- C8 const *interface_name,
- RIB_ENTRY_TYPE type,
- HMSSENUM *next,
- RIB_INTERFACE_ENTRY *dest);
-
-DXDEC S32 AILCALL RIB_enumerate_providers (C8 const *interface_name,
- HMSSENUM *next,
- HPROVIDER *dest);
-
-DXDEC C8 * AILCALL RIB_type_string (void const * data,
- RIB_DATA_SUBTYPE subtype);
-
-DXDEC HPROVIDER AILCALL RIB_find_file_provider (C8 const *interface_name,
- C8 const *property_name,
- C8 const *file_suffix);
-
-DXDEC HPROVIDER AILCALL RIB_find_provider (C8 const *interface_name,
- C8 const *property_name,
- void const *property_value);
-
-//
-// Static library definitions
-//
-
-#ifdef MSS_STATIC_RIB
- #define RIB_MAIN_NAME( name ) name##_RIB_Main
-
- DXDEC S32 AILCALL RIB_MAIN_NAME(SRS)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(DTS)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(DolbySurround)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(MP3Dec)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(OggDec)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(BinkADec)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(SpxDec)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(SpxEnc)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(Voice)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(SpxVoice)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
- DXDEC S32 AILCALL RIB_MAIN_NAME(DSP)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
-
-#ifdef IS_XENON
- DXDEC S32 AILCALL RIB_MAIN_NAME(XMADec)( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
-#endif
-
- #define Register_RIB(name) RIB_load_static_provider_library(RIB_MAIN_NAME(name),#name)
-
-#else // MSS_STATIC_RIB
- #define RIB_MAIN_NAME( name ) RIB_Main
- DXDEC S32 AILCALL RIB_Main( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
-#endif // MSS_STATIC_RIB
-
-typedef S32 ( AILCALL * RIB_MAIN_FUNC) ( HPROVIDER provider_handle, U32 up_down, RIB_ALLOC_PROVIDER_HANDLE_TYPE * rib_alloc, RIB_REGISTER_INTERFACE_TYPE * rib_reg, RIB_UNREGISTER_INTERFACE_TYPE * rib_unreg );
-
-DXDEC HPROVIDER AILCALL RIB_load_static_provider_library (RIB_MAIN_FUNC main, const char* description);
-
-
-DXDEC HPROVIDER AILCALL RIB_find_files_provider (C8 const *interface_name,
- C8 const *property_name_1,
- C8 const *file_suffix_1,
- C8 const *property_name_2,
- C8 const *file_suffix_2);
-
-DXDEC HPROVIDER AILCALL RIB_find_file_dec_provider (C8 const *interface_name,
- C8 const *property_name_1,
- U32 decimal_property_value_1,
- C8 const *property_name_2,
- C8 const *file_suffix_2);
-
-DXDEC S32 AILCALL RIB_load_application_providers
- (C8 const *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 * AILCALL RIB_error (void);
-
-#endif // RIB_H
-
-
-#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 * AILASIFETCHCB) (UINTa user, // User value passed to ASI_open_stream()
- void *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 *ASI_STARTUP)(void);
-
-//
-// Shut down ASI codec
-//
-
-typedef ASIRESULT (AILCALL * 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 * (AILCALL * ASI_ERROR)(void);
-
-//############################################################################
-//## ##
-//## Interface "ASI stream" ##
-//## ##
-//############################################################################
-
-//
-// Open a stream, returning handle to stream
-//
-
-typedef HASISTREAM (AILCALL *ASI_STREAM_OPEN) (MSS_ALLOC_TYPE * palloc,
- MSS_FREE_TYPE * pfree,
- 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 *ASI_STREAM_PROCESS) (HASISTREAM stream, // Handle of stream
- void *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 *ASI_STREAM_SEEK) (HASISTREAM stream,
- S32 stream_offset);
-
-//
-// Retrieve or set a property value by index (returns 1 on success)
-//
-
-typedef S32 (AILCALL *ASI_STREAM_PROPERTY) (HASISTREAM stream,
- HPROPERTY property,
- void * before_value,
- void const * new_value,
- void * after_value
- );
-
-//
-// Close stream, freeing handle and all internally-allocated resources
-//
-
-typedef ASIRESULT (AILCALL *ASI_STREAM_CLOSE) (HASISTREAM stream);
-
-#endif // MSS_ASI_VERSION
-
-//############################################################################
-//## ##
-//## 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_RESAMPLE 16 // Set to enable playback ratios other than 65536
-#define M_VOL_SCALING 32 // Set to enable volume scalars other than 2048
-#define M_COPY16_NOVOL 64
-
-#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 *MIXER_STARTUP)(void);
-
-//
-// Shut down mixer
-//
-
-typedef void (AILCALL *MIXER_SHUTDOWN)(void);
-
-//
-// Flush mixer buffer
-//
-
-typedef void (AILCALL *MIXER_FLUSH) (S32 *dest,
- S32 len
-#ifdef IS_X86
- ,U32 MMX_available
-#endif
- );
-
-//
-// Perform audio mixing operation
-//
-
-typedef void (AILCALL *MIXER_MERGE) (void const * *src,
- U32 *src_fract,
- void const *src_end,
- S32 * *dest,
- void *dest_end,
- S32 *left_val,
- S32 *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 *MIXER_COPY) (void const *src,
- S32 src_len,
- void *dest,
- U32 operation
-#if defined(IS_BE) || defined(IS_X86)
- ,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 *MIXER_STARTUP)(void);
-
-//
-// Shut down mixer
-//
-
-typedef void (AILCALL *MIXER_SHUTDOWN)(void);
-
-//
-// Flush mixer buffer
-//
-
-typedef void (AILCALL *MIXER_FLUSH) (S32 *dest,
- S32 len,
- U32 MMX_available);
-
-//
-// Perform audio mixing operation
-//
-
-typedef void (AILCALL *MIXER_MERGE) (U32 src_sel,
- U32 dest_sel,
- U32 *src_fract,
- U32 *src_offset,
- U32 *dest_offset,
- U32 src_end_offset,
- U32 dest_end_offset,
- S32 *left_val,
- S32 *right_val,
- S32 playback_ratio,
- S32 scale_both,
- U32 operation);
-
-//
-// Translate mixer buffer contents to final output format
-//
-
-typedef void (AILCALL *MIXER_COPY) (void const *src,
- S32 src_len,
- void *dest,
- U32 operation,
- U32 option);
-#endif
-
-
-typedef struct _MSS_BB // Used in both MC and conventional mono/stereo configurations
-{
- S32 *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 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 * MIXER_MC_COPY) ( MSS_BB * build,
- S32 n_build_buffers,
- void * lpWaveAddr,
- S32 hw_format,
-#ifdef IS_X86
- S32 use_MMX,
-#endif
- S32 samples_per_buffer,
- S32 physical_channels_per_sample );
-
-
-typedef void (AILCALL * MIXER_ADPCM_DECODE ) ( void * dest,
- void const * in,
- S32 out_len,
- S32 in_len,
- S32 input_format,
- ADPCMDATA *adpcm_data);
-
-//
-// Type definitions
-//
-
-struct _DIG_DRIVER;
-
-struct _MDI_DRIVER;
-
-typedef struct _DIG_DRIVER * HDIGDRIVER; // Handle to digital driver
-
-typedef struct _MDI_DRIVER * HMDIDRIVER; // Handle to XMIDI driver
-
-typedef struct _SAMPLE * HSAMPLE; // Handle to sample
-
-typedef struct _SEQUENCE * HSEQUENCE; // Handle to sequence
-
-typedef S32 HTIMER; // Handle to timer
-
-
-//
-// Function pointer types
-//
-
-typedef void (AILCALLBACK* AILINCB) (void const *data, S32 len, UINTa user_data);
-
-typedef void (AILCALLBACK* AILTRACECB) (C8 *text, S32 nest_depth);
-
-typedef void (AILCALLBACK* AILTIMERCB) (UINTa user);
-
-typedef void (AILCALLBACK* AILSAMPLECB) (HSAMPLE sample);
-
-typedef void (AILCALLBACK* AILMIXERCB) (HDIGDRIVER dig);
-
-typedef F32 (AILCALLBACK* AILFALLOFFCB) (HSAMPLE sample, F32 distance, F32 rolloff_factor, F32 min_dist, F32 max_dist);
-
-typedef S32 (AILCALLBACK* AILEVENTCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 status,S32 data_1,S32 data_2);
-
-typedef S32 (AILCALLBACK* AILTIMBRECB) (HMDIDRIVER hmi,S32 bank,S32 patch);
-
-typedef S32 (AILCALLBACK* AILPREFIXCB) (HSEQUENCE seq,S32 log,S32 data);
-
-typedef void (AILCALLBACK* AILTRIGGERCB) (HSEQUENCE seq,S32 log,S32 data);
-
-typedef void (AILCALLBACK* AILBEATCB) (HMDIDRIVER hmi,HSEQUENCE seq,S32 beat,S32 measure);
-
-typedef void (AILCALLBACK* AILSEQUENCECB) (HSEQUENCE seq);
-
-typedef S32 (AILCALLBACK *SS_STREAM_CB) (HSAMPLE S, S16 *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;
-
-#define N_SP_FILTER_STAGES 8 // SP_FILTER_0 ... SP_FILTER_7
-
-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 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_CHANNEL_MASK;
- 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;
- HPROPERTY EXACT_SEEK;
- HPROPERTY EXACT_GETPOS;
- HPROPERTY SEEK_LOOKUP;
- HPROPERTY SET_LOOPING_SAMPLES;
- HPROPERTY CLEAR_LOOP_META;
-
- HASISTREAM stream;
- }
-ASISTAGE;
-
-typedef struct
- {
- struct _FLTPROVIDER *provider;
- HSAMPLESTATE sample_state[MAX_SPEAKERS];
- }
-FLTSTAGE;
-
-typedef 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 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_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
- WIN32_POSITION_ERR, // Nonzero if DirectSound play cursor stops moving (e.g., headphones removed)
-
- 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
-
- PSP_SUBMIT_THREAD, // Handle to thread submitting chucks of audio to the hw
- PSP_AUDIO_PORT, // Port # Miles is using, -1 for simple audio, >= 0 for libwave
-
- PSP2_SUBMIT_THREAD, // Handle to thread submitting chucks of audio to the hw
- PSP2_AUDIO_PORT, // Port # Miles is using
-
- OAL_CONTEXT, // OpenAL Context
- OAL_DEVICE, // OpenAL Device
-
- XB_LPDS, // lpDirectSound pointer for HSAMPLE
- XB_LPDSB, // lpDirectSoundBuffer pointer for HSAMPLE
-
- XB360_LPXAB // IXAudioSourceVoice pointer for HDIGDRIVER
-}
-MSS_PLATFORM_PROPERTY;
-
-
-typedef struct _AIL_INPUT_INFO // Input descriptor type
-{
- AILINCB callback; // Callback function to receive incoming data
- UINTa user_data; // this is a user defined value
- U32 device_ID; // DS LPGUID or wave device ID
- U32 hardware_format; // e.g., DIG_F_STEREO_16
- U32 hardware_rate; // e.g., 22050
- S32 buffer_size; // Maximum # of bytes to be passed to callback (-1 to use DIG_INPUT_LATENCY)
-} AIL_INPUT_INFO;
-
-typedef struct _AILTIMER // Timer instance
-{
- AILTIMERCB callback;
- U64 next;
- U64 delta;
- UINTa user;
- U32 status;
-} 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 struct LOWPASS_INFO
-{
- S32 X0, X1;
- S32 Y0, Y1;
- S32 A, B0, B1;
- S32 flags;
- S32 queuedA, queuedB;
- F32 calculated_cut;
- F32 cutoff;
-} LOWPASS_INFO;
-
-
-typedef union STAGE_BUFFER
-{
- union STAGE_BUFFER * next;
- U8 data[ 1 ];
-} STAGE_BUFFER;
-
-typedef struct _MSSVECTOR3D
-{
- F32 x;
- F32 y;
- F32 z;
-} MSSVECTOR3D;
-
-#define MILES_TANGENT_LINEAR 0
-#define MILES_TANGENT_CURVE 1
-#define MILES_TANGENT_STEP 2
-#define MILES_MAX_FALLOFF_GRAPH_POINTS 5
-
-#define MILES_MAX_SEGMENT_COUNT 10
-
-typedef struct _MSSGRAPHPOINT
-{
- F32 X, Y, ITX, ITY, OTX, OTY; // Point & tangents.
- S32 IType, OType;
-} MSSGRAPHPOINT;
-
-typedef 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
- F32 rolloff; // per sample rolloff factor to use instead of global rolloff, if non zero.
-
- F32 exclusion_3D; // exclusion value computed by falloff graph. -1 if not affected.
- F32 lowpass_3D; // low pass cutoff computed by falloff graph. -1 if not affected.
-
- F32 spread;
-
- HSAMPLE owner; // May be NULL if used for temporary/internal calculations
- AILFALLOFFCB falloff_function; // User function for min/max distance calculations, if desired
-
- MSSVECTOR3D position_graph[MILES_MAX_SEGMENT_COUNT];
- S32 position_graph_count;
-
- MSSGRAPHPOINT volgraph[MILES_MAX_FALLOFF_GRAPH_POINTS];
- MSSGRAPHPOINT excgraph[MILES_MAX_FALLOFF_GRAPH_POINTS];
- MSSGRAPHPOINT lpgraph[MILES_MAX_FALLOFF_GRAPH_POINTS];
- MSSGRAPHPOINT spreadgraph[MILES_MAX_FALLOFF_GRAPH_POINTS];
-
- U8 volgraphcnt;
- U8 excgraphcnt;
- U8 lpgraphcnt;
- U8 spreadgraphcnt;
-
-} S3DSTATE;
-
-typedef struct _SMPBUF
-{
- void const *start; // Sample buffer address (W)
- U32 len; // Sample buffer size in bytes (W)
- U32 pos; // Index to next byte (R/W)
- U32 done; // Nonzero if buffer with len=0 sent by app
- S32 reset_ASI; // Reset the ASI decoder at the end of the buffer
- S32 reset_seek_pos; // New destination offset in stream source data, for ASI codecs that care
-} SMPBUF;
-
-typedef struct _SAMPLE // Sample instance
-{
- U32 tag; // HSAM
-
- HDIGDRIVER driver; // Driver for playback
-
- S32 index; // Numeric index of this sample
-
- SMPBUF buf[8]; // Source data buffers
-
- U32 src_fract; // Fractional part of source address
-
- U32 mix_delay; // ms until start mixing (decreased every buffer mix)
- F32 max_output_mix_volume; // max_volume of any speaker at last mix
-
- U64 mix_bytes; // total number of bytes sent to the mixer for this sample.
-
- S32 group_id; // ID for grouped operations.
-
- // size of the next dynamic arrays
- U32 chan_buf_alloced;
- U32 chan_buf_used;
- U8* chan_buf_ptr;
-
- // these are dynamic arrays sized as n_channels long (so 1 for mono, 2 stereo, 6 for 5.1)
- S32 *left_val;
- S32 *right_val;
- S32 *last_decomp;
- LOWPASS_INFO *lp; // low pass info
-
-
- // these are dynamic arrays pointing to dynamic arrays, each of the sub arrays are n_channels long or [MAX_SPEAKERS][n_channels]
- F32 **user_channel_levels; // Channel levels set by AIL_set_sample_channel_levels() [source_channels][driver->logical_channels]
- S32 **cur_scale; // Calculated 11-bit volume scale factors for current/previous mixing interval
- S32 **prev_scale; // (These are all indexed by build buffer*2, not speaker indexes!)
- S32 **ramps_left;
-
- // these are dynamic arrays
- F32 *auto_3D_channel_levels; // Channel levels set by 3D positioner (always 1.0 if not 3D-positioned)
- F32 *speaker_levels; // one level per speaker (multiplied after user or 3D)
-
- S8 *speaker_enum_to_source_chan; // array[MSS_SPEAKER_xx] = -1 if not present, else channel #
- // 99% of the time this is a 1:1 mapping and is zero.
-
- S32 lp_any_on; // are any of the low pass filters on?
- S32 user_channels_need_deinterlace; // do any of the user channels require a stereo sample to be deinterlaced?
-
- S32 n_buffers; // # of buffers (default = 2)
- S32 head;
- S32 tail;
- S32 starved; // Buffer stream has run out of data
- S32 exhaust_ASI; // Are we prolonging the buffer lifetime until ASI output is exhausted?
-
- 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/multichannel)
- S32 n_channels; // # of channels (which can be >2 for multichannel formats)
- U32 channel_mask; // Same as WAVEFORMATEXTENSIBLE.dwChannelMask
-
- S32 original_playback_rate; // Playback rate in hertz
- F32 playback_rate_factor; // Fractional playback rate, normally 1.0
-
- 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 sys_level; // system control
-
- F32 extra_volume; // Volume scalar for ramping or otherwise.
- F32 extra_wet;
- F32 extra_lp;
- F32 extra_rate;
-
-
- U32 low_pass_changed; // bit mask for what channels changed.
-
- S32 bus; // Bus assignment for this sample.
- S32 bus_comp_sends; // Which buses this bus routes compressor input to.
- S32 bus_comp_installed; // Nonzero if we have a compressor installed.
- U32 bus_comp_input; // The input to use for this bus's compressor, if we have one installed
- S32 bus_override_wet; // If true, samples on this bus will use the bus's wet level instead of their own.
- U32 bus_signal_strength; // The bus level.
- S32 bus_enable_limiter; // If true, a basic limiter will be run on the samples prior to clamping to S16.
- S32 bus_limiter_atten; // The attenuation that was applied on the last bus pass.
-
- S32 fade_to_stop; // # of samples to fade to stop over. ( currently fixed at the volramp count )
-
- U64 mix_start_time; // arbitrary non-zero id for starting sounds synced.
-
- S16 pop_fade_total;
- S16 pop_fade_time;
- U8 pop_fade_stop; // nonzero we end the sample when it fades out.
-
- U8 state_level; // Level the sample was started at.
-#ifdef IS_WIIU
- S8 route_to_drc;
-#endif
-
- F32 obstruction;
- F32 occlusion;
- F32 exclusion;
-
- 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
- SINTa hl_marker_list;
-
- ADPCMDATA adpcm;
-
- S32 doeob; // Flags to trigger callbacks
- S32 dosob;
- S32 doeos;
-
- S32 vol_ramps;
- S32 resamp_tolerance;
- S32 enable_resamp_filter;
-
- //
- // 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 *voice; // Optional object used by output filter to store per-sample information such as DS3D buffers
-#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
-
-#if defined(HOST_SPU_PROCESS) || defined(MSS_SPU_PROCESS)
- S32 spu_on;
- U32 align[1];
-#endif
-
-#if defined(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;
-
-#ifdef MILES_CHECK_OFFSETS
- RR_COMPILER_ASSERT((RR_MEMBER_OFFSET(SAMPLE, save_low) & 3) == 0);
-#endif
-
-//
-// used for AIL_process
-//
-
-typedef struct _AILMIXINFO {
- AILSOUNDINFO Info;
- ADPCMDATA mss_adpcm;
- U32 src_fract;
- S32 left_val;
- S32 right_val;
-} AILMIXINFO;
-
-
-
-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 struct _WAVEIN
- {
- long temp;
- } * HWAVEIN;
-
- typedef struct _WAVEHDR
- {
- S32 dwFlags;
- S32 dwBytesRecorded;
- S32 dwUser;
- S32 temp;
- void * lpData;
- S32 dwBufferLength;
- S32 longdwLoops;
- S32 dwLoops;
- void * lpNext;
- U32 * reserved;
-
- } WAVEHDR, * LPWAVEHDR;
-
-#endif
-
-#define N_WAVEIN_BUFFERS 8 // Use a ring of 8 buffers by default
-
-typedef struct _DIG_INPUT_DRIVER *HDIGINPUT; // Handle to digital input driver
-
-#ifdef IS_MAC
-
- #define AIL_DIGITAL_INPUT_DEFAULT 0
-
- typedef struct _DIG_INPUT_DRIVER // Handle to digital input driver
- {
- U32 tag; // 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;
-#ifdef IS_MAC
- char InternalRecordingState[128]; // Hide this so we dont' have to #include OS stuff everywhere.
-#endif
- } DIG_INPUT_DRIVER;
-
-#else
-
-#define AIL_DIGITAL_INPUT_DEFAULT ((U32)WAVE_MAPPER)
-
-typedef struct _DIG_INPUT_DRIVER // Handle to digital input driver
-{
- U32 tag; // 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 *DMA[N_WAVEIN_BUFFERS]; // Simulated DMA buffers
-
- U32 silence; // Silence value for current format (0 or 128)
-
- S32 device_active; // 1 if buffers submittable, 0 if not
-
-#if defined(IS_WINDOWS) && !defined(__RADWINRTAPI__)
- //
- // 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
-
-
-typedef struct REVERB_CONSTANT_INFO
-{
- F32* start0,* start1,* start2,* start3,* start4,* start5;
- F32* end0,* end1,* end2,* end3,* end4,* end5;
- F32 C0, C1, C2, C3, C4, C5;
- F32 A;
- F32 B0, B1;
-} REVERB_CONSTANT_INFO;
-
-typedef struct REVERB_UPDATED_INFO
-{
- F32 * address0, * address1, * address2, * address3, * address4, * address5;
- F32 X0, X1, Y0, Y1;
-} REVERB_UPDATED_INFO;
-
-typedef struct REVERB_INFO
-{
- REVERB_UPDATED_INFO u;
- REVERB_CONSTANT_INFO c;
-} REVERB_INFO;
-
-typedef struct REVERB_SETTINGS
-{
- 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 *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;
-} REVERB_SETTINGS;
-
-
-typedef 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 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_INVALID = 0, // Used for configuration-function errors
- 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_FORCE_32 = 0x7fffffff
-}
-MSS_MC_SPEC;
-
-
-typedef struct _DIG_DRIVER // Handle to digital audio driver
-{
- U32 tag; // HDIG
-
- HTIMER backgroundtimer; // Background timer handle
-
- U32 num_mixes; // incrementing number of mixes
-
- S32 mix_ms; // rough ms per mix
-
-
- 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
-
-
-#if defined(IS_PSP2) || defined(IS_PSP) || defined(IS_XENON) || defined(IS_IPHONE) || defined(IS_MAC) || defined(IS_LINUX) || defined(IS_3DS) || defined(IS_WIIU) || defined(__RADWINRTAPI__) || defined(__RADSEKRIT2__) || defined(__RADANDROID__) // generic dig platforms
-#define IS_GENERICDIG
- void* dig_ss; // Sound system ptr (embed in mss.h?)
- void* dig_heap; // Sound system heap.
-#endif
-
-#ifdef IS_XENON
- void* x2_voiceptr; //! \todo get rid of this? Only expose dig_ss?
-#endif
-
- S32 quiet; // # of consecutive quiet sample periods
- S32 playing; // Playback active if non-zero
-
- 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
-
- 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
-
- HSAMPLE bus_samples[MAX_BUSSES]; // Sample handles the bus will route through.
- S32 bus_active_count[MAX_BUSSES]; // Number of samples mixed on the bus last mix.
- void* bus_ptrs[MAX_BUSSES]; // Buffers for each bus to mix in to.
-
- void* pushed_states[MILES_MAX_STATES];
- U8 state_index;
-
- //
- // 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 hardware_buffer_size; // Size of each output buffer
-
- S32 enable_limiter;
- S32 limiter_atten; // attenuation level from last hw copy.
-
- S32 scheduled_sample_count; // # of samples that are waiting to be started at an exact time.
-
- AILMIXERCB mixcb; // callback for each mix.
-
-#if defined(IS_WINDOWS) && !defined(__RADWINRTAPI__)
-
- //
- // 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 *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 * lpbufflist; // List of pointers to secondary buffers
- HSAMPLE *samp_list; // HSAMPLE associated with each buffer
- S32 *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?
-
- HDIGDRIVER next; // Pointer to next HDIGDRIVER in use
-
- //
- // 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;
-
-#endif
-
-#ifdef IS_X86
- S32 use_MMX; // Use MMX with this driver if TRUE
-#endif
-
- U64 mix_total;
- U64 last_polled;
- U32 last_percent;
-
- void * MC_buffer;
- //
- // Digital driver pipeline filter stages
- //
-
- DPINFO pipeline[N_DIGDRV_STAGES];
-
-#ifdef MSS_VFLT_SUPPORTED
- struct _FLTPROVIDER *voice_filter;
- SS_STREAM_CB stream_callback;
-#endif
-
- struct _FLTPROVIDER *matrix_filter;
-
- //
- // Reverb
- // If no busses are active, 0 is still used as the base reverb.
- //
- REVERB_SETTINGS reverb[MAX_BUSSES];
-
-#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_GENERICDIG
- HDIGDRIVER next;
-#endif
-
-#if defined(IS_WINDOWS)
- S32 no_wom_done; // don't process WOM_DONEs on this driver
- U32 wom_done_buffers;
-#endif
-
-#if defined(HOST_SPU_PROCESS) || defined(MSS_SPU_PROCESS)
- U32 spu_num;
- S32 spu_on;
- U64 spu_total;
- U64 spu_last_polled;
- U32 spu_last_percent;
- #ifdef IS_PS3
- U32 align[ 2 ];
- #else
- U32 align[ 1 ];
- #endif
-#endif
-
- U64 adpcm_time;
- U64 deinterlace_time;
- U64 mix_time;
- U64 rev_time;
- U64 reformat_time;
- U64 lowpass_time;
- U64 filter_time;
- U64 copy_time;
- U64 sob_time;
- U64 eob_time;
- U64 eos_time;
- U64 spu_wait_time;
- U64 asi_times[4];
-
- HSAMPLE adpcm_sam;
- HSAMPLE deinterlace_sam;
- HSAMPLE mix_sam;
- HSAMPLE rev_sam;
- HSAMPLE reformat_sam;
- HSAMPLE lowpass_sam;
- HSAMPLE filter_sam;
- HSAMPLE asi_sams[4];
-
- U32 adpcm_num;
- U32 deinterlace_num;
- U32 mix_num;
- U32 rev_num;
- U32 reformat_num;
- U32 lowpass_num;
- U32 filter_num;
- U32 asi_nums[4];
-
-
- // these clauses have to be at the end of the structure!!
-#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 XAUDIOFRAMESIZE_NATIVE
- XAUDIOPACKET packet;
-#endif
-
-} DIG_DRIVER;
-
-#ifdef MILES_CHECK_OFFSETS
- RR_COMPILER_ASSERT((RR_MEMBER_OFFSET(DIG_DRIVER, filter_num) & 3) == 0);
-#endif
-
-typedef struct // MIDI status log structure
- {
- S32 program [NUM_CHANS]; // Program Change
- S32 pitch_l [NUM_CHANS]; // Pitch Bend LSB
- S32 pitch_h [NUM_CHANS]; // Pitch Bend MSB
-
- S32 c_lock [NUM_CHANS]; // Channel Lock
- S32 c_prot [NUM_CHANS]; // Channel Lock Protection
- S32 c_mute [NUM_CHANS]; // Channel Mute
- S32 c_v_prot [NUM_CHANS]; // Voice Protection
- S32 bank [NUM_CHANS]; // Patch Bank Select
- S32 gm_bank_l [NUM_CHANS]; // GM Bank Select
- S32 gm_bank_m [NUM_CHANS]; // GM Bank Select
- S32 indirect [NUM_CHANS]; // ICA indirect controller value
- S32 callback [NUM_CHANS]; // Callback Trigger
-
- S32 mod [NUM_CHANS]; // Modulation
- S32 vol [NUM_CHANS]; // Volume
- S32 pan [NUM_CHANS]; // Panpot
- S32 exp [NUM_CHANS]; // Expression
- S32 sus [NUM_CHANS]; // Sustain
- S32 reverb [NUM_CHANS]; // Reverb
- S32 chorus [NUM_CHANS]; // Chorus
-
- S32 bend_range[NUM_CHANS]; // Bender Range (data MSB, RPN 0 assumed)
-
- S32 RPN_L [NUM_CHANS]; // RPN # LSB
- S32 RPN_M [NUM_CHANS]; // RPN # MSB
- }
-CTRL_LOG;
-
-typedef struct _SEQUENCE // XMIDI sequence state table
-{
- char tag[4]; // HSEQ
-
- HMDIDRIVER driver; // Driver for playback
-
- U32 status; // SEQ_ flagsstruct
-
- void const *TIMB; // XMIDI IFF chunk pointers
- void const *RBRN;
- void const *EVNT;
-
- U8 const *EVNT_ptr; // Current event pointer
-
- U8 *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;
-
- U8 const *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_XENON) || defined(IS_PS3) || defined(IS_WII) || defined(IS_PSP) || defined(IS_PSP2) || defined(__RADWINRTAPI__) || defined(__RADSEKRIT2__) || defined(__RADANDROID__)
-
-struct MIDIHDR;
-struct MIDIOUT;
-typedef struct MIDIOUT* HMIDIOUT;
-typedef HMIDIOUT* LPHMIDIOUT;
-
-#endif
-
-typedef struct _MDI_DRIVER // Handle to XMIDI driver
-{
- char tag[4]; // HMDI
-
- HTIMER timer; // XMIDI quantization timer
- S32 interval_time; // XMIDI quantization timer interval in uS
-
- 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(__RADWINRTAPI__)) || defined(IS_MAC) || defined(IS_LINUX)
-
- S32 released; // has the hmidiout handle been released
- U32 deviceid; // ID of the MIDI device
- U8 *sysdata; // SysEx buffer
-
-#endif
-
-#if defined(IS_XENON) || defined(IS_WII) || defined(IS_PS3) || defined(IS_PSP) || defined(IS_3DS) || defined(IS_IPHONE) || defined(IS_PSP2) || defined(IS_WIIU) || defined(__RADWINRTAPI__) || defined(__RADSEKRIT2__) || defined(__RADANDROID__)
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
-#endif
-
-#ifdef IS_LINUX
- struct MIDIHDR *mhdr; // SysEx header
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- HMIDIOUT hMidiOut; // MIDI output driver
-#endif
-
-#if defined(IS_WINDOWS) && !defined(__RADWINRTAPI__)
-
- struct midihdr_tag *mhdr; // SysEx header
-
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
-
- HMIDIOUT hMidiOut; // MIDI output driver
-
-#else
-
- #if defined(IS_MAC)
- struct MIDIHDR *mhdr; // SysEx header
- HMDIDRIVER next; // Pointer to next HMDIDRIVER in use
- HMIDIOUT hMidiOut; // MIDI output driver
- #endif
-
-#endif
-
-} MDI_DRIVER;
-
-#if defined(IS_WIN32API) || defined(IS_WII)
- #pragma pack(push, 1)
-#endif
-
-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;
-
-#if defined(IS_WIN32API) || defined(IS_WII)
- #pragma pack(pop)
-#endif
-
-typedef struct // Wave library entry
-{
- S32 bank; // XMIDI bank, MIDI patch for sample
- S32 patch;
-
- S32 root_key; // Root MIDI note # for sample (or -1)
-
- U32 file_offset; // Offset of wave data from start-of-file
- U32 size; // Size of wave sample in bytes
-
- S32 format; // DIG_F format (8/16 bits, mono/stereo)
- S32 playback_rate; // Playback rate in hertz
-}
-WAVE_ENTRY;
-
-typedef struct // Virtual "wave synthesizer" descriptor
-{
- HMDIDRIVER mdi; // MIDI driver for use with synthesizer
- HDIGDRIVER dig; // Digital driver for use with synthesizer
-
- WAVE_ENTRY *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 *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 * HWAVESYNTH;// Handle to virtual wave synthesizer
-
-
-//
-// DIG_DRIVER list
-//
-
-extern HDIGDRIVER DIG_first;
-
-//
-// MDI_DRIVER list
-//
-
-extern HMDIDRIVER MDI_first;
-
-//
-// Miscellaneous system services
-//
-
-#define FILE_READ_WITH_SIZE ((void*)(SINTa)-1)
-
-
-typedef void * (AILCALLBACK *AILMEMALLOCCB)(UINTa size);
-typedef void (AILCALLBACK *AILMEMFREECB)(void *);
-
-#define AIL_mem_alloc_lock_trk(size) AIL_mem_alloc_lock_info( size, __FILE__, __LINE__ )
-#define AIL_file_read_trk(file,dest) AIL_file_read_info( file, dest, __FILE__, __LINE__ )
-#define AIL_file_size_trk(file) AIL_file_size_info( file, __FILE__, __LINE__ )
-
-//#define MSS_NONTRACKED
-#ifdef MSS_NONTRACKED
- DXDEC void * AILCALL AIL_mem_alloc_lock(UINTa size);
- DXDEC void * AILCALL AIL_file_read(char const * filename, void * dest );
- DXDEC S32 AILCALL AIL_file_size(char const * filename );
-#else
- #define AIL_mem_alloc_lock(size) AIL_mem_alloc_lock_trk(size)
- #define AIL_file_read(file,dest) AIL_file_read_trk(file,dest)
- #define AIL_file_size(file) AIL_file_size_trk(file)
-#endif
-
-DXDEC void * AILCALL AIL_mem_alloc_lock_info(UINTa size, char const * file, U32 line);
-DXDEC void AILCALL AIL_mem_free_lock (void *ptr);
-
-
-DXDEC S32 AILCALL AIL_file_error (void);
-
-DXDEC S32 AILCALL AIL_file_size_info(char const *filename,
- char const * caller,
- U32 line);
-
-DXDEC void * AILCALL AIL_file_read_info(char const *filename,
- void *dest,
- char const * caller,
- U32 line);
-
-DXDEC S32 AILCALL AIL_file_write (char const *filename,
- void const *buf,
- U32 len);
-
-DXDEC S32 AILCALL AIL_WAV_file_write
- (char const *filename,
- void const *buf,
- U32 len,
- S32 rate,
- S32 format);
-
-DXDEC S32 AILCALL AIL_file_append (char const *filename,
- void const *buf, U32 len);
-
-DXDEC AILMEMALLOCCB AILCALL AIL_mem_use_malloc(AILMEMALLOCCB fn);
-DXDEC AILMEMFREECB AILCALL AIL_mem_use_free (AILMEMFREECB fn);
-
-
-#define MSSBreakPoint RR_BREAK
-
-
-//
-// Compiler-independent CRTL helper functions for PS2
-// Exported here for use in demo programs as well as MSS itself
-//
-
-#if defined(IS_PSP)
-
- 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_tan tan
- #define AIL_pow pow
- #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
-
- #if defined(IS_PS3) && !defined(IS_SPU)
- DXDEC F32 AILCALL AIL_fsqrt( F32 val );
- #else
- #define AIL_fsqrt(arg) ((F32) sqrt(arg))
- #endif
-
- #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
-
-//
-// High-level support services
-//
-
-DXDEC S32 AILCALL AIL_startup (void);
-
-DXDEC SINTa AILCALL AIL_get_preference (U32 number);
-
-DXDEC void AILCALL AIL_shutdown (void);
-
-DXDEC SINTa AILCALL AIL_set_preference (U32 number,
- SINTa value);
-
-DXDEC char *AILCALL AIL_last_error (void);
-
-DXDEC void AILCALL AIL_set_error (char const * error_msg);
-
-#ifdef IS_WIIU
-DXDEC void AILCALL AIL_set_wiiu_file_client (void* ptr_to_fsclient, void* ptr_to_fscmdblock);
-#endif
-
-#ifdef __RADIPHONE__
-//
-// On iOS, audio session interruptions stop the audio queues, and we have to manually restart them.
-//
-// This should be called whenever you get an Interruption Ended msg via your Audio Session callback.
-//
-DXDEC void AILCALL AIL_ios_post_audio_session_interrupt_end(HDIGDRIVER dig);
-#endif
-
-//
-// Low-level support services
-//
-
-#ifdef IS_X86
-
-DXDEC U32 AILCALL AIL_MMX_available (void);
-
-#endif
-
-#define AIL_lock AIL_lock_mutex
-#define AIL_unlock AIL_unlock_mutex
-
-DXDEC void AILCALL AIL_lock_mutex (void);
-DXDEC void AILCALL AIL_unlock_mutex (void);
-
-#define AIL_delay AIL_sleep
-DXDEC void AILCALL AIL_sleep (U32 ms);
-
-DXDEC AILTRACECB AILCALL AIL_configure_logging (char const * filename,
- AILTRACECB cb,
- S32 level);
-
-
-//
-// 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);
-
-DXDEC S32 AILCALL AIL_timer_thread_handle(void* o_handle);
-
-#ifdef IS_MAC
- #if defined(__PROCESSES__)
- DXDEC ProcessSerialNumber AIL_Process(void);
- #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
-
-#define AIL_OPEN_DIGITAL_USE_SPU0 (1<<24)
-#define AIL_OPEN_DIGITAL_USE_SPU1 (2<<24)
-#define AIL_OPEN_DIGITAL_USE_SPU2 (3<<24)
-#define AIL_OPEN_DIGITAL_USE_SPU3 (4<<24)
-#define AIL_OPEN_DIGITAL_USE_SPU4 (5<<24)
-#define AIL_OPEN_DIGITAL_USE_SPU5 (6<<24)
-#define AIL_OPEN_DIGITAL_USE_SPU6 (7<<24)
-
-#define AIL_OPEN_DIGITAL_USE_SPU( num ) ( ( num + 1 ) << 24 )
-
-#ifdef IS_GENERICDIG
-
- struct _RadSoundSystem;
- typedef S32 (*RADSS_OPEN_FUNC)(struct _RadSoundSystem* i_SoundSystem, U32 i_MinBufferSizeInMs, U32 i_Frequency, U32 i_ChannelCount, U32 i_MaxLockSize, U32 i_Flags);
-
- DXDEC HDIGDRIVER AILCALL AIL_open_generic_digital_driver(U32 frequency, S32 bits, S32 channel, U32 flags, RADSS_OPEN_FUNC dig_open);
-
- #ifdef IS_WIN32
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_DSInstallDriver(UINTa, UINTa);
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_WOInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_DSInstallDriver(0, 0))
-
- #elif defined(IS_3DS)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_3DSInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_3DSInstallDriver(0, 0))
-
- #elif defined(__RADANDROID__)
-
- DXDEC void AILCALL AIL_set_asset_manager(void* asset_manager);
-
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_SLESInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_SLESInstallDriver(0, 0))
-
-
- #elif defined(IS_PSP2)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_PSP2InstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_PSP2InstallDriver(0, 0))
-
- #elif defined(__RADSEKRIT2__)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_SonyInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_SonyInstallDriver(0, 0))
-
- #elif defined(IS_PSP)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_PSPInstallDriver(UINTa, UINTa);
-
- #define AIL_OPEN_DIGITAL_USE_SIMPLEAUDIO ~0U
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_PSPInstallDriver(0, 0))
-
- #elif defined(IS_XENON) || defined(__RADWINRTAPI__)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_XAudio2InstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_XAudio2InstallDriver(0, 0))
-
- #elif defined(IS_WIIU)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_AXInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_AXInstallDriver(0, 0))
-
- #elif defined(IS_MAC) || defined(IS_IPHONE)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_OalInstallDriver(UINTa, UINTa);
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_CAInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_CAInstallDriver(0, 0))
-
- #elif defined(IS_LINUX)
- DXDEC RADSS_OPEN_FUNC AILCALL RADSS_OalInstallDriver(UINTa, UINTa);
-
- #define AIL_open_digital_driver(frequency, bits, channel, flags) \
- AIL_open_generic_digital_driver(frequency, bits, channel, flags, RADSS_OalInstallDriver(0, 0))
- #endif
-#else // IS_GENERICDIG
-
-DXDEC HDIGDRIVER AILCALL AIL_open_digital_driver( U32 frequency,
- S32 bits,
- S32 channel,
- U32 flags );
-
-#endif // not IS_GENERICDIG
-
-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);
-#elif defined( 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); \
- } \
-}
-
-DXDEC S32 AILCALL AIL_digital_handle_release(HDIGDRIVER drvr);
-
-DXDEC S32 AILCALL AIL_digital_handle_reacquire
- (HDIGDRIVER drvr);
-
-#elif defined( 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);
-
-#endif
-
-DXDEC void AILCALL AIL_debug_log (char const * ifmt, ...);
-
-DXDEC S32 AILCALL AIL_sprintf(char *dest,
- char const *fmt, ...);
-
-DXDEC char* AILCALL AIL_set_redist_directory(char const*dir);
-
-DXDEC S32 AILCALL AIL_background_CPU_percent (void);
-
-DXDEC S32 AILCALL AIL_digital_CPU_percent (HDIGDRIVER dig);
-
-#ifdef HOST_SPU_PROCESS
-DXDEC S32 AILCALL AIL_digital_SPU_percent (HDIGDRIVER dig);
-#endif
-
-DXDEC S32 AILCALL AIL_digital_latency (HDIGDRIVER dig);
-
-DXDEC HSAMPLE AILCALL AIL_allocate_sample_handle
- (HDIGDRIVER dig);
-
-
-EXPGROUP(Digital Audio Services)
-
-#define MILES_PUSH_REVERB 1
-#define MILES_PUSH_VOLUME 2
-#define MILES_PUSH_3D 4
-#define MILES_PUSH_RESET 8
-
-DXDEC EXPAPI void AILCALL AIL_push_system_state(HDIGDRIVER dig, U32 flags, S16 crossfade_ms);
-/*
- Pushes the current system state, allowing for a temporary "clean" driver to use, and then
- revert from.
-
- $:dig The driver to push
- $:flags Logical "or" of options controlling the extent of the push. See discussion.
- $:crossfade_ms The number of milliseconds to fade the transition over. [0, 32767]
-
- By default (ie flags == 0), effectively nothing happens. Since the operation neither affects
- any subsystems nor resets the playing samples, a push immediately followed by a pop should
- have no audible effects.
-
- However, any samples started during the push will be stopped (via $AIL_end_fade_sample) when the system is popped.
- Streams will return SMP_DONE via $AIL_stream_status. It is up to the client code to perform any cleanup required.
-
- The flags can alter the above behavior in the following ways:
-
- $* <b>MILES_PUSH_RESET</b> - This flag causes the system to revert to a "new" state when pushed. Without any
- other flags this will only be apparent with samples - any playing samples will cease to be processed
- (though they will still report SMP_PLAYING). When the system is popped, these samples will resume.
-
- $* <b>MILES_PUSH_REVERB</b> - When present, reverb state will be affected in addition to sample state.
- If MILES_PUSH_RESET is present, the reverb will be cleared to zero on push. Otherwise, it will be retained,
- and only affected when popped.
-
- $* <b>MILES_PUSH_3D</b> - When present, 3d listener state will be affected in addition to sample state.
- If MILES_PUSH_RESET is present, the 3d listener state will be reverted to the same state as a new driver. Otherwise
- it will be retained and only affected when popped.
-
- $* <b>MILES_PUSH_VOLUME</b> - When present, master volume will be affected in addition to sample state.
- If MILES_PUSH_RESET is present, the master volume will be set to 1.0f, otherwise it will be retained and only
- affected when popped.
-
- $-
-
- If you want more control over whether a sample will be affected by a push or a pop operation,
- see $AIL_set_sample_level_mask.
-
-*/
-
-DXDEC EXPAPI void AILCALL AIL_pop_system_state(HDIGDRIVER dig, S16 crossfade_ms);
-/*
- Pops the current system state and returns the system to the way it
- was before the last push.
-
- $:dig The driver to pop.
- $:crossfade_ms The number of milliseconds to crossfade the transition over - [0, 32767]
-
- See $AIL_push_system_state for documentation.
-*/
-
-DXDEC EXPAPI U8 AILCALL AIL_system_state_level(HDIGDRIVER dig);
-/*
- Returns the current level the system has been pushed to.
-
- $:dig The driver to inspect
- $:return A value between 0 and MILES_MAX_STATES, representing the depth of the current system stack.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_level_mask(HSAMPLE S, U8 mask);
-/*
- Sets the system levels at which a sample will play.
-
- $:S The sample to set the mask for.
- $:mask The bitmask of levels for which the sample will play.
-
- Under normal push/pop operations, a sample's mask is set when it is
- started to the level the system is at. If the system is pushed
- without a reset, then the mask is adjusted to include the new level.
- When a system is popped, if the sample is going to continue playing,
- the state mask is adjusted to remove the level the system is popping
- <i>from</i>.
-
- If you have a sample playing on a higher system level that needs
- to continue after a pop, you can adjust the sample's mask by using
- this function in conjunction with $AIL_system_state_level and
- $AIL_sample_level_mask:
-
- ${
- AIL_set_sample_level_mask(S, AIL_sample_level_mask(S) |= (1 << (AIL_system_state_level(dig) - 1)));
- $}
-*/
-
-DXDEC EXPAPI U8 AILCALL AIL_sample_level_mask(HSAMPLE S);
-/*
- Return the mask used to determine if the sample will play at a given system level.
-
- $:S The sample to inspect.
- $:return The level mask for the sample.
-
- See $AIL_set_sample_level_mask.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_digital_mixed_samples(HDIGDRIVER dig);
-/*
- Returns the number of samples that have been mixed in to the hardware.
-
- Used for timing samples for start via $AIL_schedule_start_sample.
-*/
-
-#define AIL_digital_samples_per_second(dig) (dig->DMA_rate)
-
-
-DXDEC EXPAPI void AILCALL AIL_enable_limiter(HDIGDRIVER dig, S32 on_off);
-/*
- Enables a basic limiter to prevent clipping.
-
- $:dig The driver to enable the limiter on.
- $:on_off If non-zero, the limiter will be enabled, otherwise it will be disabled.
-
- By default limiters are off. Currently they are not configurable. They kick on around
- -10 db, and with a 0db signal will attenuate by about -18 db. Limiters run prior to
- the 16 bit clamp.
-
- See also $AIL_bus_enable_limiter.
-*/
-
-EXPGROUP(bus_section)
-
-DXDEC EXPAPI HSAMPLE AILCALL AIL_allocate_bus(HDIGDRIVER dig);
-/*
- Allocates a bus to mix samples to.
-
- $:dig The HDIGDRIVER to allocate the bus on.
- $:return The HSAMPLE for the new bus.
-
- A bus allows you to treat a group of samples as one sample. With the bus sample you can
- do almost all of the things you can do with a normal sample handle. The only exception
- is you can't adjust the playback rate of the sample.
-
- Use $AIL_bus_sample_handle to get the HSAMPLE associated with a bus.
-
- Each call to AIL_allocate_bus adds a new bus, up to a total bus count of MAX_BUSSES. After
- the first call, two busses exist - the main bus and the first aux bus. The HSAMPLE returned
- is for the first aux bus (index 1)
-*/
-
-DXDEC EXPAPI void AILCALL AIL_bus_enable_limiter(HDIGDRIVER dig, S32 bus_index, S32 on_off);
-/*
- Enables a basic limiter to prevent clipping.
-
- $:dig The driver containing the bus to enable the limiter on.
- $:bus_index The index of the bus to enable the limiter on.
- $:on_off If non-zero, the limiter will be enabled, otherwise it will be disabled.
-
- By default limiters are off. Currently they are not configurable. They kick on around
- -10 db, and with a 0db signal will attenuate by about -18 db. Limiters run prior to
- the 16 bit clamp.
-
- See also $AIL_enable_limiter.
-*/
-
-DXDEC EXPAPI HSAMPLE AILCALL AIL_bus_sample_handle(HDIGDRIVER dig, S32 bus_index);
-/*
- Returns the HSAMPLE associated with a bus.
-
- $:dig The HDIGDRIVER the bus resides within.
- $:bus_index The index of the bus to return the HSAMPLE for.
- $:return The HSAMPLE for the bus index.
-
- If the bus has not been allocated, or no busses have been allocated, this returns 0. This
- means that for the "Main Bus" - index 0 - it will still return zero if no additional busses
- have been allocated.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_bus(HSAMPLE S, S32 bus_index);
-/*
- Assigns an HSAMPLE to a bus.
-
- $:S The HSAMPLE to assign.
- $:bus_index The bus index to assign the sample to.
-
- If the given bus has not been allocated, this function has no effect.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_sample_bus(HSAMPLE S);
-/*
- Returns the bus an HSAMPLE is assigned to.
-
- $:S The HSAMPLE to check.
- $:return The index of the bus the sample is assigned.
-
- All samples by default are assigned to bus 0.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_install_bus_compressor(HDIGDRIVER dig, S32 bus_index, SAMPLESTAGE filter_stage, S32 input_bus_index);
-/*
- Installs the Compressor filter on to a bus, using another bus as the input for
- compression/limiting.
-
- $:dig The driver the busses exist on.
- $:bus_index The index of the bus the compressor will affect.
- $:filter_stage The SAMPLESTAGE the compressor will use on the bus HSAMPLE.
- $:input_bus_index The bus index the compressor will use as <b>input</b>.
-
- This installs a side chain compressor in to a given bus. It acts exactly like
- any other filter you would put on an HSAMPLE, except the input_bus_index bus pipe's
- its signal strength to the filter, allowing it to attenuate the bus_index bus based
- on another bus's contents.
-
- To control the compressor parameters, access the bus's HSAMPLE via $AIL_bus_sample_handle and
- use $AIL_sample_stage_property exactly as you would any other filter. The filter's properties
- are documented under $(Compressor Filter)
-*/
-
-DXDEC void AILCALL AIL_set_speaker_configuration
- (HDIGDRIVER dig,
- MSSVECTOR3D *array,
- S32 n_channels,
- F32 falloff_power);
-
-DXDEC MSSVECTOR3D *
- AILCALL AIL_speaker_configuration
- (HDIGDRIVER dig,
- S32 *n_physical_channels,
- S32 *n_logical_channels,
- F32 *falloff_power,
- MSS_MC_SPEC *channel_spec);
-
-DXDEC void AILCALL AIL_set_listener_relative_receiver_array
- (HDIGDRIVER dig,
- MSS_RECEIVER_LIST *array,
- S32 n_receivers);
-
-DXDEC MSS_RECEIVER_LIST *
- AILCALL AIL_listener_relative_receiver_array
- (HDIGDRIVER dig,
- S32 *n_receivers);
-DXDEC void AILCALL AIL_set_speaker_reverb_levels
- (HDIGDRIVER dig,
- F32 *wet_array,
- F32 *dry_array,
- MSS_SPEAKER const *speaker_index_array,
- S32 n_levels);
-
-DXDEC S32 AILCALL AIL_speaker_reverb_levels (HDIGDRIVER dig,
- F32 * *wet_array,
- F32 * *dry_array,
- MSS_SPEAKER const * *speaker_index_array);
-
-
-DXDEC
-void AILCALL AIL_set_sample_speaker_scale_factors (HSAMPLE S, //)
- MSS_SPEAKER const * dest_speaker_indexes,
- F32 const * levels,
- S32 n_levels );
-DXDEC
-void AILCALL AIL_sample_speaker_scale_factors (HSAMPLE S, //)
- MSS_SPEAKER const * dest_speaker_indexes,
- F32 * levels,
- S32 n_levels );
-
-DXDEC
-S32 AILEXPORT AIL_set_sample_is_3D (HSAMPLE S, //)
- S32 onoff);
-
-//DXDEC F32 AILEXPORT AIL_calculate_sample_final_attenuation(HSAMPLE S);
-/*
- Returns the attenuation that a sample will have.
-
- $:S Sample to compute.
-*/
-
-DXDEC
-S32 AILEXPORT AIL_calculate_3D_channel_levels (HDIGDRIVER dig, //)
- F32 *channel_levels,
- MSS_SPEAKER const * *speaker_array,
- MSSVECTOR3D *src_pos,
- MSSVECTOR3D *src_face,
- MSSVECTOR3D *src_up,
- F32 src_inner_angle,
- F32 src_outer_angle,
- F32 src_outer_volume,
- F32 src_max_dist,
- F32 src_min_dist,
- MSSVECTOR3D *listen_pos,
- MSSVECTOR3D *listen_face,
- MSSVECTOR3D *listen_up,
- F32 rolloff_factor,
- MSSVECTOR3D *doppler_velocity,
- F32 *doppler_shift);
-
-
-DXDEC void AILCALL AIL_release_sample_handle (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_init_sample (HSAMPLE S,
- S32 format);
-
-DXDEC S32 AILCALL AIL_set_sample_file (HSAMPLE S,
- void const *file_image,
- S32 block);
-
-DXDEC S32 AILCALL AIL_set_sample_info (HSAMPLE S,
- AILSOUNDINFO const * info);
-
-DXDEC S32 AILCALL AIL_set_named_sample_file (HSAMPLE S,
- C8 const *file_type_suffix,
- void const *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 *start,
- U32 len);
-
-DXDEC void AILCALL AIL_start_sample (HSAMPLE S);
-
-EXPGROUP(Digital Audio Services)
-
-DXDEC EXPAPI void AILCALL AIL_schedule_start_sample(HSAMPLE S, U64 mix_time_to_start);
-/*
- Marks the specified sample to begin at the exact time specified.
-
- $:S The sample to start
- $:mix_time_to_start The time to start the sample, in samples.
-
- Once set, the sample will have $AIL_start_sample called automatically
- when the mixer reaches the specified time. The sample's delay will
- be automatically adjusted such that the sample starts mid-block.
-
- ${
- // Get the current time.
- U64 mix_time = AIL_digital_mixed_samples(dig);
-
- // Schedule to start 1 second out
- mix_time += AIL_digital_samples_per_second(dig);
- AIL_schedule_start_sample(S, mix_time );
- $}
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_sample_schedule_time(HSAMPLE S);
-/*
- Returns the mix time the sample is scheduled to start at, or 0 if not scheduled.
-
- $:S The sample to query.
-*/
-
-DXDEC void AILCALL AIL_stop_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_end_fade_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_resume_sample (HSAMPLE S);
-
-DXDEC void AILCALL AIL_end_sample (HSAMPLE S);
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_id(HSAMPLE S, S32 id);
-/*
- Set an ID on a sample for use in synchronized control.
-
- $:S The sample to alter
- $:id The id to use.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_sample_id(HSAMPLE S);
-/*
- Return the current ID for a sample.
-
- $:S Sample to access
-*/
-
-DXDEC EXPAPI void AILCALL AIL_start_sample_group(HDIGDRIVER dig, S32 start_id, S32 set_to_id);
-/*
- Start a group of samples at the same time.
-
- $:dig The driver the samples are allocated from.
- $:start_id The ID to start
- $:set_to_id The ID to set the samples to once they have started.
-
- This function atomically calls $AIL_start_sample on all the samples to ensure the samples start in sync.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_stop_sample_group(HDIGDRIVER dig, S32 stop_id, S32 set_to_id);
-/*
- Stops a group of samples at the same time.
-
- $:dig The driver the samples are allocated from.
- $:stop_id The ID to stop
- $:set_to_id The ID to set the samples to once they have stopped.
-
- This function atomically calls $AIL_stop_sample on all the samples to ensure they stop at the same point.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_resume_sample_group(HDIGDRIVER dig, S32 resume_id, S32 set_to_id);
-/*
- Resumes a group of samples at the same time.
-
- $:dig The driver the samples are allocated from.
- $:resume_id The ID to resume
- $:set_to_id The ID to set the samples to once they have resumed.
-
- This function atomically calls $AIL_resume_sample on all the samples to ensure the samples start in sync.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_end_sample_group(HDIGDRIVER dig, S32 end_id);
-/*
- Ends a group of samples at the same time.
-
- $:dig The driver the samples are allocated from.
- $:end_id The ID to end
-
- This function atomically calls $AIL_end_sample on all the samples.
-*/
-
-DXDEC void AILCALL AIL_set_sample_playback_rate
- (HSAMPLE S,
- S32 playback_rate);
-
-DXDEC void AILCALL AIL_set_sample_playback_rate_factor
- (HSAMPLE S,
- F32 playback_rate_factor);
-
-DXDEC void AILCALL AIL_set_sample_playback_delay
- (HSAMPLE S,
- S32 playback_delay);
-
-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,
- MSS_SPEAKER const *source_speaker_indexes,
- MSS_SPEAKER const *dest_speaker_indexes,
- F32 const *levels,
- 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,
- S32 /*-1 or MSS_SPEAKER*/ channel,
- 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 EXPAPI S32 AILCALL AIL_set_sample_loop_samples(HSAMPLE S, S32 loop_start_samples, S32 loop_end_samples);
-/*
- Defines the loop points on a sample in samples rather than bytes.
-
- $:S The sample to alter.
- $:loop_start_samples The sample count in to the file to start the looping.
- $:loop_end_samples The sample count in the file to end the looping.
- $:return 1 if successful, 0 otherwise. Check $AIL_last_error for details.
-
- For uncompressed samples, this largely reverts to $AIL_set_sample_loop_block, since the mapping
- is straightforward. For compressed formats (like bink audio or mp3), looping in sample space is
- non trivial and must be handled on a format-by-format basis. For the moment, only Bink Audio
- supports this functionality - all other ASI formats will return failure.
-
- If a loop's length is too short, it may be extended.
-*/
-
-
-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 U32 AILCALL AIL_sample_mixed_ms (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_playback_rate (HSAMPLE S);
-
-DXDEC F32 AILCALL AIL_sample_playback_rate_factor (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_playback_delay (HSAMPLE S);
-
-DXDEC void AILCALL AIL_sample_volume_pan (HSAMPLE S, F32* volume, F32* pan);
-
-DXDEC S32 AILCALL AIL_sample_channel_count (HSAMPLE S, U32 *mask);
-
-DXDEC void AILCALL AIL_sample_channel_levels (HSAMPLE S,
- MSS_SPEAKER const *source_speaker_indexes,
- MSS_SPEAKER const *dest_speaker_indexes,
- F32 *levels,
- S32 n_levels);
-
-DXDEC void AILCALL AIL_sample_volume_levels (HSAMPLE S,
- F32 *left_level,
- F32 *right_level);
-
-DXDEC void AILCALL AIL_sample_reverb_levels (HSAMPLE S,
- F32 *dry_level,
- F32 *wet_level);
-
-DXDEC F32 AILCALL AIL_sample_output_levels (HSAMPLE S,
- MSS_SPEAKER const *source_speaker_indexes,
- MSS_SPEAKER const *dest_speaker_indexes,
- F32 *levels,
- S32 n_levels);
-
-DXDEC F32 AILCALL AIL_sample_low_pass_cut_off(HSAMPLE S, S32 /*-1 or MSS_SPEAKER*/ channel);
-
-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* volume,
- F32* pan,
- F32* fb_pan,
- F32* center_level,
- F32* 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* 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_set_digital_master_reverb
- (HDIGDRIVER dig,
- S32 bus_index,
- F32 reverb_decay_time,
- F32 reverb_predelay,
- F32 reverb_damping);
-
-DXDEC void AILCALL AIL_digital_master_reverb
- (HDIGDRIVER dig,
- S32 bus_index,
- F32* reverb_time,
- F32* reverb_predelay,
- F32* reverb_damping);
-
-DXDEC void AILCALL AIL_set_digital_master_reverb_levels
- (HDIGDRIVER dig,
- S32 bus_index,
- F32 dry_level,
- F32 wet_level);
-
-DXDEC void AILCALL AIL_digital_master_reverb_levels
- (HDIGDRIVER dig,
- S32 bus_index,
- F32 * dry_level,
- F32 * 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_set_sample_buffer_count (HSAMPLE S,
- S32 n_buffers);
-
-DXDEC S32 AILCALL AIL_sample_loaded_len (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_buffer_count (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_sample_buffer_available (HSAMPLE S);
-
-DXDEC S32 AILCALL AIL_load_sample_buffer (HSAMPLE S,
- S32 buff_num,
- void const *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, //)
- S32 buff_num,
- U32 *pos,
- U32 *len,
- S32 *head,
- S32 *tail);
-
-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 AILMIXERCB AILCALL AIL_register_mix_callback(HDIGDRIVER dig, AILMIXERCB mixcb);
-
-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 *rate,
- S32 *format,
- char *string);
-
-DXDEC S32 AILCALL AIL_platform_property (void *object,
- MSS_PLATFORM_PROPERTY property,
- void *before_value,
- void const *new_value,
- void *after_value);
-
-
-DXDEC void AILCALL AIL_set_sample_ms_position (HSAMPLE S, //)
- S32 milliseconds);
-
-DXDEC U32 AILCALL AIL_sample_ms_lookup (HSAMPLE S, //)
- S32 milliseconds,
- S32* actualms);
-
-DXDEC void AILCALL AIL_sample_ms_position (HSAMPLE S, //)
- S32 * total_milliseconds,
- S32 * current_milliseconds);
-
-//
-// Digital input services
-//
-
-#if defined(IS_WINDOWS)
- #define MSS_HAS_INPUT 1
-#elif defined(IS_MAC)
- #define MSS_HAS_INPUT 1
-#else
- #define MSS_HAS_INPUT 0
-#endif
-
-#if MSS_HAS_INPUT
-
-DXDEC HDIGINPUT AILCALL AIL_open_input (AIL_INPUT_INFO *info);
-
-DXDEC void AILCALL AIL_close_input (HDIGINPUT dig);
-
-DXDEC AIL_INPUT_INFO *
- 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);
-
-#elif defined( IS_WINDOWS )
-
-DXDEC S32 AILCALL AIL_midiOutOpen(HMDIDRIVER *drvr,
- LPHMIDIOUT *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);
-
-#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 *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 *beat,
- S32 *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 *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 *buffer);
-
-DXDEC HWAVESYNTH
- AILCALL AIL_create_wave_synthesizer (HDIGDRIVER dig,
- HMDIDRIVER mdi,
- void const *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 *total_milliseconds,
- S32 *current_milliseconds);
-
-
-
-//
-// red book functions
-//
-
-#ifdef IS_WINDOWS
-
-#pragma pack(push, 1)
-
-typedef MSS_STRUCT _REDBOOK {
- U32 DeviceID;
- U32 paused;
- U32 pausedsec;
- U32 lastendsec;
-} REDBOOK;
-
-#pragma pack(pop)
-
-typedef MSS_STRUCT _REDBOOK* 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);
-
-DXDEC HREDBOOK AILCALL AIL_redbook_open_drive(S32 drive);
-
-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* startmsec,U32* 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
-
-DXDEC U32 AILCALL AIL_ms_count(void);
-DXDEC U32 AILCALL AIL_us_count(void);
-DXDEC U64 AILCALL AIL_ms_count64(void);
-DXDEC U64 AILCALL AIL_us_count64(void);
-DXDEC U64 AILCALL AIL_get_time(void);
-DXDEC U64 AILCALL AIL_time_to_ms(U64 time);
-DXDEC U64 AILCALL AIL_ms_to_time(U64 ms);
-
-DXDEC void AILCALL MilesUseTelemetry( void * context );
-DXDEC void AILCALL MilesUseTmLite( void* context );
-
-//
-//
-//
-
-#define MSSIO_FLAGS_DONT_CLOSE_HANDLE 1
-#define MSSIO_FLAGS_QUERY_SIZE_ONLY 2
-#define MSSIO_FLAGS_DONT_USE_OFFSET 4
-
-#define MSSIO_STATUS_COMPLETE 1
-#define MSSIO_STATUS_ERROR_FAILED_OPEN 0x1003
-#define MSSIO_STATUS_ERROR_FAILED_READ 0x1004
-#define MSSIO_STATUS_ERROR_SHUTDOWN 0x1005
-#define MSSIO_STATUS_ERROR_CANCELLED 0x1006
-#define MSSIO_STATUS_ERROR_MEMORY_ALLOC_FAIL 0x1007
-#define MSSIO_STATUS_ERROR_MASK 0x1000
-
-// returns percent full (1.0 = 100%)
-typedef F32 (AILCALLBACK *MilesAsyncStreamCallback)(void* i_User);
-
-struct MilesAsyncRead
-{
- char FileName[256];
- U64 Offset;
- S64 Count;
- void* Buffer;
- void* StreamUserData;
- MilesAsyncStreamCallback StreamCB;
- char const * caller;
- U32 caller_line;
- UINTa FileHandle;
- S32 Flags;
- S32 ReadAmt; // current read amt.
- S32 AdditionalBuffer;
- S32 volatile Status; // This is only valid after a call to MilesAsyncFileWait or MilesAsyncFileCancel has succeeded.
- char Internal[48+128];
-};
-
-DXDEC S32 AILCALL MilesAsyncFileRead(struct MilesAsyncRead* i_Request);
-DXDEC S32 AILCALL MilesAsyncFileCancel(struct MilesAsyncRead* i_Request); // 1 if the request has completed, 0 otherwise. Use Wait if needed.
-DXDEC S32 AILCALL MilesAsyncFileStatus(struct MilesAsyncRead* i_Request, U32 i_MS); // 1 if complete, 0 if timeout exceeded.
-DXDEC S32 AILCALL MilesAsyncStartup();
-DXDEC S32 AILCALL MilesAsyncShutdown();
-DXDEC S32 AILCALL AIL_IO_thread_handle(void* o_Handle);
-DXDEC void AILCALL MilesAsyncSetPaused(S32 i_IsPaused);
-
-typedef S32 (AILCALLBACK * MilesAsyncFileRead_callback)(struct MilesAsyncRead* i_Request);
-typedef S32 (AILCALLBACK * MilesAsyncFileCancel_callback)(struct MilesAsyncRead* i_Request); // 1 if the request has completed, 0 otherwise. Use Wait if needed.
-typedef S32 (AILCALLBACK * MilesAsyncFileStatus_callback)(struct MilesAsyncRead* i_Request, U32 i_MS); // 1 if complete, 0 if timeout exceeded.
-typedef S32 (AILCALLBACK * MilesAsyncStartup_callback)();
-typedef S32 (AILCALLBACK * MilesAsyncShutdown_callback)();
-typedef void (AILCALLBACK * MilesAsyncSetPaused_callback)(S32 i_IsPaused);
-typedef S32 (AILCALLBACK * AIL_IO_thread_handle_callback)(void* o_Handle);
-
-DXDEC void AILCALL AIL_set_async_callbacks(
- MilesAsyncFileRead_callback read,
- MilesAsyncFileCancel_callback cancel,
- MilesAsyncFileStatus_callback status,
- MilesAsyncStartup_callback startup,
- MilesAsyncShutdown_callback shutdown,
- MilesAsyncSetPaused_callback setpaused,
- AIL_IO_thread_handle_callback threadhandle);
-
-//
-//
-//
-
-typedef struct _STREAM* HSTREAM; // Handle to stream
-
-typedef void (AILCALLBACK* AILSTREAMCB) (HSTREAM stream);
-
-#define MSS_STREAM_CHUNKS 8
-
-typedef struct _STREAM
-{
- S32 block_oriented; // 1 if this is an ADPCM or ASI-compressed stream
- S32 using_ASI; // 1 if using ASI decoder to uncompress stream data
- ASISTAGE *ASI; // handy pointer to our ASI coded
-
- HSAMPLE samp; // the sample handle
-
- UINTa fileh; // the open file handle
-
- U8* bufs[MSS_STREAM_CHUNKS]; // the data buffers
- S32 reset_ASI[MSS_STREAM_CHUNKS]; // should we reset the ASI at the end of the buffer?
- S32 reset_seek_pos[MSS_STREAM_CHUNKS]; // new stream position after reset
- S32 bufstart[MSS_STREAM_CHUNKS]; // offset of where this buffer started
- S32 loadedsizes[MSS_STREAM_CHUNKS]; // sizes of the data to be started
-
- struct MilesAsyncRead asyncs[MSS_STREAM_CHUNKS];
- S32 asyncs_loaded[MSS_STREAM_CHUNKS]; // 0=unloaded, 1=loading, 2=loaded, but not started
- S32 next_read_offset; // offset to pass to the next read, so the seek occurs internally. -1 to not seek.
-
- S32 into_Miles_index; // index of buffer that we will async into next
- S32 read_IO_index; // index of buffer to be loaded into Miles next
-
- S32 bufsize; // size of each buffer
-
- U32 datarate; // datarate in bytes per second
- S32 filerate; // original datarate of the file
- S32 filetype; // file format type
- U32 filemask; // channel mask for stream file
- S32 totallen; // total length of the sound data
-
- S32 substart; // subblock loop start
- S32 sublen; // subblock loop len
-
- U32 blocksize; // ADPCM block size
-
- S32 loadedsome; // have we done any loads?
-
- U32 startpos; // point that the sound data begins
- U32 async_pos; // position if the last async completed
-
- 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
- U32 noback; // no background processing
- S32 alldone; // alldone
- S32 primeamount; // amount to load after a seek
- S32 primeleft; // amount to read before starting
-
- 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* next; // pointer to next stream
-
- S32 autostreaming; // are we autostreaming this stream
-
- F32 level; // io percent full
- F32 last_level; // old io percent
- F32 percent_mult; // factor to scale by
- S32 stream_count; // unique number of the stream
-
- S32 docallback; // set when it time to poll for a callback
-
- S32 was_popped; // set to 1 if the stream needs to be freed due to a system push/pop - causes SMP_DONE to be stream_status
-} MSTREAM_TYPE;
-
-
-DXDEC HSTREAM AILCALL AIL_open_stream(HDIGDRIVER dig, char const * 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 F32 AILCALL AIL_stream_filled_percent(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* datarate, S32* sndtype, S32* length, S32* 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 * total_milliseconds,
- S32 * current_milliseconds);
-
-//! \todo MSS_FILE not needed anymore?
-typedef char MSS_FILE;
-
-typedef U32 (AILCALLBACK*AIL_file_open_callback) (MSS_FILE const* Filename,
- UINTa* FileHandle);
-
-typedef void (AILCALLBACK*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*AIL_file_seek_callback) (UINTa FileHandle,
- S32 Offset,
- U32 Type);
-
-typedef U32 (AILCALLBACK*AIL_file_read_callback) (UINTa FileHandle,
- void* 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);
-
-DXDEC void AILCALL AIL_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* (AILCALLBACK *AIL_file_async_read_callback) (UINTa FileHandle,
- void* Buffer,
- U32 Bytes);
-
-typedef S32 (AILCALLBACK*AIL_file_async_status_callback) (void* async,
- S32 wait,
- U32* BytesRead);
-
-DXDEC void AILCALL AIL_set_file_async_callbacks (AIL_file_open_callback opencb,
- AIL_file_close_callback closecb,
- AIL_file_seek_callback seekcb,
- AIL_file_async_read_callback areadcb,
- AIL_file_async_status_callback statuscb);
-
-#endif
-
-//
-// High-level DLS functions
-//
-
-typedef struct _DLSFILEID {
- SINTa id;
- struct _DLSFILEID* next;
-} DLSFILEID;
-
-typedef struct _DLSFILEID* HDLSFILEID;
-
-typedef struct _DLSDEVICE {
- VOIDFUNC* pGetPref;
- VOIDFUNC* pSetPref;
- VOIDFUNC* pMSSOpen;
- VOIDFUNC* pOpen;
- VOIDFUNC* pClose;
- VOIDFUNC* pLoadFile;
- VOIDFUNC* pLoadMem;
- VOIDFUNC* pUnloadFile;
- VOIDFUNC* pUnloadAll;
- VOIDFUNC* pGetInfo;
- VOIDFUNC* pCompact;
- VOIDFUNC* pSetAttr;
- SINTa DLSHandle;
- U32 format;
- U32 buffer_size;
- void* buffer[2];
- HSAMPLE sample;
- HMDIDRIVER mdi;
- HDIGDRIVER dig;
- HDLSFILEID first;
-#if defined(__RADNT__)
-
- #ifdef MSS_STATIC_RIB
- #error "Bad defines - can't have a static rib on NT"
- #endif
- HMODULE lib;
-#elif defined(MSS_STATIC_RIB)
- char* DOSname;
-#endif
-} DLSDEVICE;
-
-typedef struct _DLSDEVICE* HDLSDEVICE;
-
-typedef struct _AILDLSINFO {
- char Description[128];
- S32 MaxDLSMemory;
- S32 CurrentDLSMemory;
- S32 LargestSize;
- S32 GMAvailable;
- S32 GMBankSize;
-} AILDLSINFO;
-
-#ifdef MSS_STATIC_RIB
-
-typedef struct _AILSTATICDLS {
- char* description;
- VOIDFUNC* pDLSOpen;
- VOIDFUNC* pMSSOpen;
- VOIDFUNC* pOpen;
- VOIDFUNC* pClose;
- VOIDFUNC* pLoadFile;
- VOIDFUNC* pLoadMem;
- VOIDFUNC* pUnloadFile;
- VOIDFUNC* pUnloadAll;
- VOIDFUNC* pGetInfo;
- VOIDFUNC* pCompact;
- VOIDFUNC* pSetAttr;
-} AILSTATICDLS;
-
-#endif // MSS_STATIC_RIB
-
-
-DXDEC HDLSDEVICE AILCALL AIL_DLS_open(HMDIDRIVER mdi, HDIGDRIVER dig,
-#ifdef MSS_STATIC_RIB
- AILSTATICDLS const * staticdls,
-#elif defined(__RADNT__)
- char const * 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* filename, U32 flags);
-
-DXDEC HDLSFILEID AILCALL AIL_DLS_load_memory(HDLSDEVICE dls, void const* 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* info, S32* PercentCPU);
-
-DXDEC HSAMPLE AILCALL AIL_DLS_sample_handle(HDLSDEVICE dls);
-
-
-//
-// Quick-integration service functions and data types
-//
-
-typedef struct
-{
- U32 const *data;
- S32 size;
- S32 type;
- void *handle;
- S32 status;
- void* next;
- S32 speed;
- F32 volume;
- F32 extravol;
- F32 dry;
- F32 wet;
- F32 cutoff;
- HDLSFILEID dlsid;
- void* dlsmem;
- void* 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 * 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
- AIL_quick_startup (
- 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* pdig,
- HMDIDRIVER* pmdi,
- HDLSDEVICE* pdls );
-
-DXDEC HAUDIO AILCALL AIL_quick_load (char const *filename);
-
-DXDEC HAUDIO AILCALL AIL_quick_load_mem (void const *mem,
- U32 size);
-
-DXDEC HAUDIO AILCALL AIL_quick_load_named_mem (void const *mem,
- char const *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 *filename,
- U32 loop_count,
- S32 wait_request);
-
-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,
- S32 channel,
- 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
-#define AIL_QUICK_BINKA_TYPE 13
-
-DXDEC S32 AILCALL AIL_quick_type(HAUDIO audio);
-
-DXDEC S32 AILCALL AIL_WAV_info(void const* WAV_image, AILSOUNDINFO* info);
-
-DXDEC S32 AILCALL AIL_WAV_marker_count(void const *WAV_image);
-
-DXDEC S32 AILCALL AIL_WAV_marker_by_index(void const *WAV_image, S32 n, C8 const **name);
-
-DXDEC S32 AILCALL AIL_WAV_marker_by_name(void const *WAV_image, C8 *name);
-
-DXDEC S32 AILCALL AIL_size_processed_digital_audio(
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO const * src);
-
-DXDEC S32 AILCALL AIL_process_digital_audio(
- void *dest_buffer,
- S32 dest_buffer_size,
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO* 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* AILLENGTHYCB)(U32 state,UINTa user);
-
-typedef S32 (AILCALLBACK* AILCODECSETPROP)(char const* property,void const * value);
-
-DXDEC S32 AILCALL AIL_compress_ASI(AILSOUNDINFO const * info, //)
- char const* filename_ext,
- void** outdata,
- U32* outsize,
- AILLENGTHYCB callback);
-
-DXDEC S32 AILCALL AIL_decompress_ASI(void const* indata, //)
- U32 insize,
- char const* filename_ext,
- void** wav,
- U32* wavsize,
- AILLENGTHYCB callback);
-
-DXDEC S32 AILCALL AIL_compress_ADPCM(AILSOUNDINFO const * info,
- void** outdata, U32* outsize);
-
-DXDEC S32 AILCALL AIL_decompress_ADPCM(AILSOUNDINFO const * info,
- void** outdata, U32* outsize);
-
-DXDEC S32 AILCALL AIL_compress_DLS(void const* dls,
- char const* compression_extension,
- void** mls, U32* mlssize,
- AILLENGTHYCB callback);
-
-DXDEC S32 AILCALL AIL_merge_DLS_with_XMI(void const* xmi, void const* dls,
- void** mss, U32* msssize);
-
-DXDEC S32 AILCALL AIL_extract_DLS( void const *source_image, //)
- U32 source_size,
- void * *XMI_output_data,
- U32 *XMI_output_size,
- void * *DLS_output_data,
- U32 *DLS_output_size,
- AILLENGTHYCB callback);
-
-#define AILFILTERDLS_USINGLIST 1
-
-DXDEC S32 AILCALL AIL_filter_DLS_with_XMI(void const* xmi, void const* dls,
- void** dlsout, U32* dlssize,
- S32 flags, AILLENGTHYCB callback);
-
-#define AILMIDITOXMI_USINGLIST 1
-#define AILMIDITOXMI_TOLERANT 2
-
-DXDEC S32 AILCALL AIL_MIDI_to_XMI (void const* MIDI,
- U32 MIDI_size,
- void* *XMIDI,
- U32 * XMIDI_size,
- S32 flags);
-
-#define AILDLSLIST_ARTICULATION 1
-#define AILDLSLIST_DUMP_WAVS 2
-
-#if defined(IS_WIN32) || defined(IS_MAC) || defined(IS_LINUX)
-
-DXDEC S32 AILCALL AIL_list_DLS (void const* DLS,
- char** lst,
- U32 * lst_size,
- S32 flags,
- C8 * title);
-
-#define AILMIDILIST_ROLANDSYSEX 1
-#define AILMIDILIST_ROLANDUN 2
-#define AILMIDILIST_ROLANDAB 4
-
-DXDEC S32 AILCALL AIL_list_MIDI (void const* MIDI,
- U32 MIDI_size,
- char** lst,
- U32 * 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
-#define AILFILETYPE_BINKA 24
-
-DXDEC S32 AILCALL AIL_file_type(void const* data, U32 size);
-
-DXDEC S32 AILCALL AIL_file_type_named(void const* data, char const* filename, U32 size);
-
-DXDEC S32 AILCALL AIL_find_DLS (void const* data, U32 size,
- void** xmi, U32* xmisize,
- void** dls, U32* dlssize);
-typedef 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 *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 *ID3v2; // ID3v2 tag, if not NULL
- S32 ID3v2_size; // Size of tag in bytes
-
- U8 *ID3v1; // ID3v1 tag, if not NULL (always 128 bytes long if present)
-
- U8 *start_MP3_data; // Pointer to start of data area in file (not necessarily first valid frame)
- U8 *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 *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 *inspection_state,
- U8 *MP3_file_image,
- S32 MP3_image_size);
-
-DXDEC S32 AILCALL AIL_enumerate_MP3_frames (MP3_INFO *inspection_state);
-
-typedef struct
-{
- //
- // File-level data accessible to app
- //
- // This is valid after AIL_inspect_Ogg() is called (even if the file contains no valid pages)
- //
-
- U8 *Ogg_file_image; // Originally passed to AIL_inspect_Ogg()
- S32 Ogg_image_size; // Originally passed to AIL_inspect_Ogg()
-
- U8 *start_Ogg_data; // Pointer to start of data area in file
- U8 *end_Ogg_data; // Pointer to last valid byte in data area
-
- // Information lifted from the header after AIL_inspect_Ogg() is called.
- S32 channel_count;
- S32 sample_rate;
-
- //
- // Information about current page being inspected, valid if AIL_enumerate_Ogg_pages() returns
- // TRUE
- //
-
- S32 page_num; // 32-bit page sequence number from OggS header at byte offset 16
-
- S32 sample_count; // Total # of samples already generated by encoder at the time the current page was written
-
- S32 byte_offset; // Offset of page from start_Ogg_data (i.e., suitable for use as loop point)
- S32 next_page_expected; // Anticipated offset of next page to be enumerated, if any
-
- //
- // Private (undocumented) data used during page enumeration
- //
-
- U8 *ptr;
- S32 bytes_left;
-}
-OGG_INFO;
-
-DXDEC void AILCALL AIL_inspect_Ogg (OGG_INFO *inspection_state,
- U8 *Ogg_file_image,
- S32 Ogg_file_size);
-
-DXDEC S32 AILCALL AIL_enumerate_Ogg_pages (OGG_INFO *inspection_state);
-
-typedef struct
-{
- const char* file_image;
- S32 image_size;
-
- S32 channel_count;
- S32 sample_rate;
-
- S32 total_samples;
- S32 samples_per_frame;
-
- const char* current_frame;
-
- // output data - byte offset for current frame.
- S32 byte_offset;
-} BINKA_INFO;
-
-DXDEC U32 AILCALL AIL_inspect_BinkA(BINKA_INFO* state, char const* file_image, S32 file_size);
-DXDEC S32 AILCALL AIL_enumerate_BinkA_frames(BINKA_INFO* 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
-
-#define MSS_BUFFER_HEAD (-1)
-
-//
-// 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,
- S32 bus_index);
-
-DXDEC void AILCALL AIL_set_room_type (HDIGDRIVER dig,
- S32 bus_index,
- 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);
-
-EXPGROUP(3D Digital Audio Services)
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_3D_volume_falloff(HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-/*
- Sets a sample's volume falloff graph.
-
- $:S Sample to affect
- $:graph The array of points to use as the graph.
- $:pointcount The number of points passed in. Must be less than or equal to MILES_MAX_FALLOFF_GRAPH_POINTS. Passing 0 removes the graph.
-
- This marks a sample as having a volume falloff graph. If a sample has a volume graph, it no
- longer attenuates as per the default falloff function, and as such, its "minimum distance" no
- longer has any effect. However, the "max distance" still clamps the sample to full attenuation.
-
- A graph with only one point is treated as a line, returning graph[0].Y always.
-
- Otherwise, the graph is evaluated as follows:
-
-
-
- The distance to the listener is evaluated.
-
- The two points with X values bounding "distance" are located.
-
- If the distance is past the last graph point, graph[pointcount-1].Y is returned.
-
- If either the output tangent type of the previous point, or the input tangent type of the next point are
- MILES_TANGENT_STEP, previous->Y is returned.
-
- Otherwise, the segment is evaluated as a hermite curve. ITX and ITY are ignore if ITYpe is MILES_TANGENT_LINEAR,
- and likewise OTX and OTY are ignored if OType is MILES_TANGENT_LINEAR.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_3D_lowpass_falloff(HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-/*
- Sets a sample's low pass cutoff falloff graph.
-
- $:S Sample to affect
- $:graph The array of points to use as the graph.
- $:pointcount The number of points passed in. Must be less than or equal to MILES_MAX_FALLOFF_GRAPH_POINTS. Passing 0 removes the graph.
-
- This marks a sample as having a low pass cutoff that varies as a function of distance to the listener. If
- a sample has such a graph, $AIL_set_sample_low_pass_cut_off will be called constantly, and thus shouldn't be
- called otherwise.
-
- The graph is evaluated the same as $AIL_set_sample_3D_volume_falloff.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_3D_exclusion_falloff(HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-/*
- Sets a sample's exclusion falloff graph.
-
- $:S Sample to affect
- $:graph The array of points to use as the graph.
- $:pointcount The number of points passed in. Must be less than or equal to MILES_MAX_FALLOFF_GRAPH_POINTS. Passing 0 removes the graph.
-
- This marks a sample as having an exclusion that varies as a function of distance to the listener. If
- a sample has such a graph, auto_3D_wet_atten will be disabled to prevent double affects, as exclusion
- affects reverb wet level.
-
- The graph is evaluated the same as $AIL_set_sample_3D_volume_falloff.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_3D_spread_falloff(HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-/*
- Sets a sample's spread falloff graph.
-
- $:S Sample to affect
- $:graph The array of points to use as the graph.
- $:pointcount The number of points passed in. Must be less than or equal to MILES_MAX_FALLOFF_GRAPH_POINTS. Passing 0 removes the graph.
-
- This marks a sample as having a spread that varies as a function of distance to the listener. See
- $AIL_set_sample_3D_spread.
-
- The graph is evaluated the same as $AIL_set_sample_3D_volume_falloff.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_3D_position_segments(HSAMPLE S, MSSVECTOR3D* points, S32 point_count);
-/*
- Sets a sample's position as a series of line segments.
-
- $:S Sample to affect
- $:points The 3D points representing the line segments. 0 reverts to classic point based positioning. All
- segments are connected - N points represents N - 1 chained line segments.
- $:point_count Size of points array. Minimum 2 (unless removing), max MILES_MAX_SEGMENT_COUNT
-
- This marks a sample as having a position that is not a single point. When 3D attenuation is computed,
- the closest point to the listener is found by walking each segment. That position is then used in all
- other computations (cones, falloffs, etc). Spatialization is done using all segments as a directional
- source.
-
- If there is neither spread falloff nor volume falloff specified, spread will be automatically applied
- when the listener is within min_distance to the closest point. See $AIL_set_sample_3D_spread_falloff
- and $AIL_set_sample_3D_volume_falloff.
-
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sample_3D_spread(HSAMPLE S, F32 spread);
-/*
- Sets a sample's "spread" value.
-
- $:S Sample to affect.
- $:spread The value to set the spread to.
-
- Spread is how much the directionality of a sample "spreads" to more speakers - emulating
- the effect a sound has when it occupies more than a point source. For instance, a sound
- point source that sits directly to the left of the listener would have a very strong left
- speaker signal, and a fairly weak right speaker signal. Via spread, the signal would be
- more even, causing the source to feel as though it is coming from an area, rather than
- a point source.
-
- A spread of 1 will effectively negate any spatialization effects other than distance attenuation.
-*/
-
-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 * max_dist,
- F32 * min_dist,
- S32 * 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* inner_angle,
- F32* outer_angle,
- F32* 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 *X,
- F32 *Y,
- F32 *Z);
-
-DXDEC void AILCALL AIL_sample_3D_velocity (HSAMPLE obj,
- F32 *dX_per_ms,
- F32 *dY_per_ms,
- F32 *dZ_per_ms);
-
-DXDEC void AILCALL AIL_sample_3D_orientation (HSAMPLE obj,
- F32 *X_face,
- F32 *Y_face,
- F32 *Z_face,
- F32 *X_up,
- F32 *Y_up,
- F32 *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 *X,
- F32 *Y,
- F32 *Z);
-
-DXDEC void AILCALL AIL_listener_3D_velocity (HDIGDRIVER dig,
- F32 *dX_per_ms,
- F32 *dY_per_ms,
- F32 *dZ_per_ms);
-
-DXDEC void AILCALL AIL_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_update_listener_3D_position (HDIGDRIVER dig,
- F32 dt_milliseconds);
-
-#if defined( HOST_SPU_PROCESS )
-
-DXDEC S32 AILCALL MilesStartAsyncThread( S32 thread_num, void const * param );
-
-DXDEC S32 AILCALL MilesRequestStopAsyncThread( S32 thread_num );
-
-DXDEC S32 AILCALL MilesWaitStopAsyncThread( S32 thread_num );
-
-#endif
-
-
-//-----------------------------------------------------------------------------
-//
-// MSS 8 Bank API
-//
-//-----------------------------------------------------------------------------
-
-EXPGROUP(Miles High Level Event System)
-
-// misc character maxes.
-#define MSS_MAX_ASSET_NAME_BYTES 512
-#define MSS_MAX_PATH_BYTES 512
-
-#ifdef DOCS_ONLY
-
-EXPTYPE typedef struct MSSSOUNDBANK {};
-/*
- Internal structure.
-
- Use $HMSOUNDBANK instead.
-*/
-
-#endif
-
-EXPTYPE typedef struct SoundBank *HMSOUNDBANK;
-/*
- Describes a handle to an open sound bank.
-
- This handle typedef refers to an open soundbank which is usually obtained from the $AIL_add_soundbank function.
-*/
-
-EXPGROUP(highlevel_util)
-
-DXDEC EXPAPI HMSOUNDBANK AILCALL AIL_open_soundbank(char const *filename, char const* name);
-/*
- Open a sound bank. If you are using the event execution engine, use the add soundbank function
- provided there.
-
- $:return 0 on fail, or a valid HMSOUNDBANK.
- $:filename The filename of the soundbank to open.
-
- Opens a sound bank for use with the MSS8 high level functions. The sound bank must be
- closed with $AIL_close_soundbank. Use $AIL_add_soundbank if the Miles Event system is used.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_close_soundbank(HMSOUNDBANK bank);
-/*
- Close a soundbank previously opened with $AIL_open_soundbank.
-
- $:bank Soundbank to close.
-
- Close a soundbank previously opened with $AIL_open_soundbank. Presets/events loaded from
- this soundbank are no longer valid.
-*/
-
-DXDEC EXPAPI char const * AILCALL AIL_get_soundbank_filename(HMSOUNDBANK bank);
-/*
- Return the filename used to open the given soundbank.
-
- $:bank Soundbank to query.
-
- $:return A pointer to the filename for the given soundbank, or 0 if bank is invalid.
-
- Returns a pointer to the filename for a soundbank. This pointer should not be deleted.
-*/
-
-DXDEC EXPAPI char const * AILCALL AIL_get_soundbank_name(HMSOUNDBANK bank);
-/*
- Return the name of the given soundbank.
-
- $:bank Soundbank to query.
-
- $:return A pointer to the name of the sound bank, or 0 if the bank is invalid.
-
- The name of the bank is the name used in asset names. This is distinct from the
- file name of the bank.
-
- The return value should not be deleted.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_get_soundbank_mem_usage(HMSOUNDBANK bank);
-/*
- Returns the amount of data used by the soundbank management structures.
-
- $:bank Soundbank to query.
- $:return Total memory allocated.
-
- Returns the memory used via AIL_mem_alloc_lock during the creation of this structure.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enumerate_sound_presets(HMSOUNDBANK bank, HMSSENUM* next, char const* list, char const** name);
-/*
- Enumerate the sound presets stored in a soundbank.
-
- $:bank Containing soundbank.
- $:next Enumeration token. Prior to first call, initialize to MSS_FIRST
- $:list Optional filter. If specified, presets will only enumerate from the given preset sound preset list.
- $:name The pointer to the currently enumerated preset name. This should not be deleted.
-
- $:return Returns 0 when enumeration is complete.
-
- Enumerates the sound presets available inside of a bank file. Example usage:
-
- ${
- HMSSENUM Token = MSS_FIRST;
- const char* PresetName = 0;
- while (AIL_enumerate_sound_presets(MyBank, &Token, 0, &PresetName))
- {
- printf("Found a preset named %s!", PresetName);
-
- $AIL_apply_sound_preset(MySample, MyBank, PresetName);
- }
- $}
-
- Note that name should NOT be deleted by the caller - this points at memory owned by
- Miles.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enumerate_environment_presets(HMSOUNDBANK bank, HMSSENUM* next, char const* list, char const** name);
-/*
- Enumerate the environment presets stored in a soundbank.
-
- $:bank Containing soundbank.
- $:next Enumeration token. Prior to first call, initialize to MSS_FIRST
- $:list Optional filter. If specified, presets will only enumerate from the given environment preset list.
- $:name The pointer to the currently enumerated preset name. This should not be deleted.
- $:return Returns 0 when enumeration is complete.
-
- Enumerates the environment presets available inside of a bank file. Example usage:
-
- ${
- HMSSENUM Token = MSS_FIRST;
- const char* PresetName = 0;
- while (AIL_enumerate_environment_presets(MyBank, &Token, 0, &PresetName))
- {
- printf("Found a preset named %s!", PresetName);
-
- AIL_apply_environment_preset(MyDriver, MyBank, PresetName);
- }
- $}
-
- Note that name should NOT be deleted by the caller - this points at memory owned by
- Miles.
-*/
-
-
-DXDEC EXPAPI S32 AILCALL AIL_enumerate_sound_assets(HMSOUNDBANK bank, HMSSENUM* next, char const** name);
-/*
- Enumerate sounds stored in a soundbank.
-
- $:bank Containing soundbank.
- $:next Enumeration token. Prior to first call, initialize to MSS_FIRST
- $:name The pointer to the currently enumerated sound name. This should not be deleted.
- $:return Returns 0 when enumeration is complete.
-
- Enumerates the sounds available inside of a bank file. Example usage:
-
- ${
- HMSSENUM Token = MSS_FIRST;
- const char* SoundName = 0;
- while (AIL_enumerate_sound_assets(MyBank, &Token, &SoundName))
- {
- char filename[MSS_MAX_PATH_BYTES];
- AIL_sound_asset_filename(MyBank, SoundName, filename);
-
- printf("Found a sound named %s!", SoundName);
-
- S32* pData = (S32*)AIL_file_read(filename, FILE_READ_WITH_SIZE);
- AIL_mem_free_lock(pData);
- }
- $}
-
- Note that name should NOT be deleted by the caller - this points at memory owned by
- Miles.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enumerate_events(HMSOUNDBANK bank, HMSSENUM* next, char const * list, char const ** name);
-/*
- Enumerate the events stored in a soundbank.
-
- $:bank Soundbank to enumerate within.
- $:next Enumeration token. Prior to first call, initialize to MSS_FIRST
- $:list Optional filter. If specified, event will only enumerate from the given event list.
- $:name The pointer to the currently enumerated preset name. This should not be deleted.
- $:return Returns 0 when enumeration is complete.
-
- Enumerates the events available inside of a bank file. Example usage:
-
- ${
- HMSSENUM Token = MSS_FIRST;
- const char* EventName = 0;
- while (AIL_enumerate_events(MyBank, &Token, 0, &EventName))
- {
- printf("Found an event named %s!", EventName);
-
- const U8* EventContents = 0;
- AIL_get_event_contents(MyBank, EventName, &EventContents);
-
- AIL_enqueue_event(EventContents, 0, 0, 0, 0);
- }
- $}
-
- Note that name should NOT be deleted by the caller - this points at memory owned by
- Miles.
-*/
-
-DXDEC EXPAPI void* AILCALL AIL_find_environment_preset(HMSOUNDBANK bank, char const *name);
-/*
- Returns the raw environment data associated with the given name.
-
- $:bank The bank to look within
- $:name The name of the asset to search for, including bank name.
-
- $:return Raw environment data. This should not be deleted.
-
- This function is designed to be used with $AIL_apply_raw_environment_preset.
-*/
-
-DXDEC EXPAPI void* AILCALL AIL_find_sound_preset(HMSOUNDBANK bank, char const* name);
-/*
- Returns the raw preset data associated with the given name.
-
- $:bank The bank to look within
- $:name The name of the asset to search for, including bank name.
-
- $:return Raw preset data. This should not be deleted.
-
- This function is designed to be used with $AIL_apply_raw_sound_preset.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_apply_raw_sound_preset(HSAMPLE sample, void* preset);
-/*
- Applies the sound preset to the given sample.
-
- $:sample The sample to modify.
- $:preset The raw preset data to apply, returned from $AIL_find_sound_preset
-
- Updates sample properties based on the desired settings specified in the given preset.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_apply_sound_preset(HSAMPLE sample, HMSOUNDBANK bank, char const *name);
-/*
- Apply the sound preset to the given sample.
-
- $:sample The sample that will have its properties updated by the preset.
- $:bank The sound bank containing the named preset.
- $:name The name of the preset to apply.
- $:return Returns 0 on fail - check for sample/bank validity, and that the preset is in the correct bank.
-
- This will alter the properties on a given sample, based on the given preset.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_unapply_raw_sound_preset(HSAMPLE sample, void* preset);
-/*
- Returns the properties altered by the preset to their default state.
-
- $:sample The sample to update.
- $:preset The raw preset data to unapply, returned from $AIL_find_sound_preset
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_unapply_sound_preset(HSAMPLE sample, HMSOUNDBANK bank, char const *name);
-/*
- Restore the properties affected by the given preset to defaults.
-
- $:sample The sample that will have its properties updated by the preset.
- $:bank The sound bank containing the named preset.
- $:name The name of the preset to apply.
- $:return Returns 0 on fail - check for sample/bank validity, and that the preset is in the correct bank.
-
- Presets may or may not affect any given property. Only the properties affected by the specified
- preset will have their values restored to default.
-*/
-
-typedef S32 (*MilesResolveFunc)(void* context, char const* exp, S32 explen, EXPOUT void* output, S32 isfloat);
-/*
- Callback type for resolving variable expressions to values.
-
- $:context Value passed to AIL_resolve_raw_*_preset().
- $:exp The string expression to resolve.
- $:explen Length of exp.
- $:output Pointer to the memory to receive the result value.
- $:isfloat nonzero if the output needs to be a float.
-
- The function callback should convert variable expressions in to an output value of the
- requested type.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_resolve_raw_sound_preset(void* preset, void* context, MilesResolveFunc eval);
-/*
- Compute the value of properties for the current value of variables using the given lookup function.
-
- $:preset The raw preset as returns from $AIL_find_sound_preset.
- $:context The context to pass in to the resolution function.
- $:eval A function pointer to use for resolving expressions to values.
- $:return 0 if the preset is invalid.
-
- This function converts variable expressions that were stored in the preset in to values
- that can be used by the event system. The values are stored in the preset itself, all that
- has to happen is this is called with a valid resolve function prior to calling
- $AIL_apply_raw_sound_preset.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_resolve_raw_environment_preset(void* env, MilesResolveFunc eval);
-/*
- Compute the value of properties for the current value of variables using the given lookup function.
-
- $:env The raw preset as returns from $AIL_find_environment_preset.
- $:context The context to pass in to the resolution function.
- $:eval A function pointer to use for resolving expressions to values.
- $:return 0 if the preset is invalid.
-
- This function converts variable expressions that were stored in the environment in to values
- that can be used by the event system. The values are stored in the environment itself, all that
- has to happen is this is called with a valid resolve function prior to calling
- $AIL_apply_raw_environment_preset.
-*/
-
-
-DXDEC EXPAPI S32 AILCALL AIL_apply_raw_environment_preset(HDIGDRIVER dig, void* environment);
-/*
- Applies the environment to the given driver.
-
- $:dig The driver to modify.
- $:environment The raw environment data to apply, returned from $AIL_find_environment_preset
-
- Updates driver properties based on the desired settings specified in the given environment.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_apply_environment_preset(HDIGDRIVER dig, HMSOUNDBANK bank, char const *name);
-/*
- Apply the environment preset to the given driver.
-
- $:dig The driver that will have its properties updated by the preset.
- $:bank The sound bank containing the named preset.
- $:name The name of the preset to apply.
- $:return Returns 0 on fail - check for sample/bank validity, and that the preset is in the correct bank.
-
- This will alter properties on a given driver, based on the given preset.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_unapply_raw_environment_preset(HDIGDRIVER dig, void* environment);
-/*
- Returns the properties the environment affects to default state.
-
- $:dig The driver to modify.
- $:environment The raw environment data to unapply, returned from $AIL_find_environment_preset
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_unapply_environment_preset(HDIGDRIVER dig, HMSOUNDBANK bank, char const *name);
-/*
- Restore the properties affected by the given preset to defaults.
-
- $:dig The driver that will have its properties updated by the preset.
- $:bank The sound bank containing the named preset.
- $:name The name of the preset to apply.
- $:return Returns 0 on fail - check for sample/bank validity, and that the preset is in the correct bank.
-
- Presets may or may not affect any given property. Only the properties affected by the specified
- preset will have its value restored to default.
-*/
-
-EXPTYPE typedef struct _MILESBANKSOUNDINFO
-{
- // If this changes at all, compiled banks must be versioned...
- S32 ChannelCount;
- U32 ChannelMask;
- S32 Rate;
- S32 DataLen;
- S32 SoundLimit;
- S32 IsExternal;
- U32 DurationMs;
- S32 StreamBufferSize;
- S32 IsAdpcm;
- S32 AdpcmBlockSize;
- F32 MixVolumeDAC;
-} MILESBANKSOUNDINFO;
-/*
- Structure containing all metadata associated with a sound asset.
-
- $:ChannelCount The number of channels the sound assets contains.
- $:ChannelMask The channel mask for the sound asset.
- $:Rate The sample rate for the sound asset.
- $:DataLen The byte count the asset requires if fully loaded.
- $:SoundLimit The maximum number of instances of this sound that is allowed to play at once.
- $:IsExternal Nonzero if the sound is stored external to the sound bank. See the eventexternal sample.
- $:DurationMs The length of the sound asset, in milliseconds.
- $:StreamBufferSize If the sound is played as a stream, this is the buffer to use for this sound.
- $:IsAdpcm Nonzero if the asset is an adpcm sound, and needs to be initialized as such.
- $:AdpcmBlockSize The adpcm block size if the asset is adpcm encoded.
- $:MixVolumeDAC The attenuation to apply to all instances of this sound, as a DAC scalar.
-
- See $AIL_sound_asset_info.
-*/
-
-
-DXDEC EXPAPI S32 AILCALL AIL_sound_asset_info(HMSOUNDBANK bank, char const* name, char* out_name, MILESBANKSOUNDINFO* out_info);
-/*
- Return the meta data associated with a sound assets in a sound bank.
-
- $:bank The soundbank containing the sound asset.
- $:name The name of the sound asset to find.
- $:out_name Optional - Pointer to a buffer that is filled with the sound filename to use for loading.
- $:out_info Pointer to a $MILESBANKSOUNDINFO structure that is filled with meta data about the sound asset.
- $:return Returns the byte size of the buffer required for out_name.
-
- This function must be called in order to resolve the sound asset name to
- something that can be used by miles. To ensure safe buffer containment, call
- once with out_name as null to get the size needed.
-
- For external deployment see the eventexternal example program.
-*/
-
-DXDEC EXPAPI SINTa AILCALL AIL_get_marker_list(HMSOUNDBANK bank, char const* sound_name);
-/*
- Return an opaque value representing the list of markers attached to a given sound name.
-
- $:bank The bank containing the sound asset.
- $:sound_name The name of the sound asset.
-
- $:return on fail/nonexistent list, or a nonzero opaque value to be passed to $AIL_find_marker_in_list.
-
- Returns the marker list for a given sound asset. This value should just be passed directly to $AIL_find_marker_in_list
- to retrieve the offset for a marker by name.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_find_marker_in_list(SINTa marker_list, char const * marker_name, S32* is_samples);
-/*
- Returns the byte offset into a sample corresponding to the given marker name.
-
- $:marker_list The marker list returned from $AIL_get_marker_list.
- $:marker_name The name of the marker to look up.
- $:is_samples returns whether the marker is at a sample location instead of a byte location.
-
- $:return -1 if the marker was not found, or the byte offset of the marker.
-
- Looks up an offset to use in functions such as $AIL_set_sample_position. marker_list can be retrieved with
- $AIL_get_marker_list.
-*/
-
-// ----------------------------
-// End MSS8 declarations
-// ----------------------------
-
-//
-// Event routines
-//
-typedef struct _MEMDUMP* HMEMDUMP;
-#define HMSSEVENTCONSTRUCT HMEMDUMP
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_create_event", "Creates an empty event to be filled with steps."
-
- ReturnType = "HMSSEVENTCONSTRUCT", "An empty event to be passed to the various step addition functions, or 0 if out of memory."
-
- Discussion = "Primarily designed for offline use, this function is the first step in
- creating an event that can be consumed by the MilesEvent system. Usage is as follows:
-
- HMSSEVENTCONSTRUCT hEvent = AIL_create_event();
-
- // misc add functions
- AIL_add_start_sound_event_step(hEvent, ...);
- AIL_add_control_sounds_event_step(hEvent, ...);
- // etc
-
- char* pEvent = AIL_close_event(hEvent);
-
- // Do something with the event
-
- AIL_mem_free_lock(pEvent);
-
- Note that if immediately passed to AIL_enqueue_event(), the memory must remain valid until the following
- $AIL_complete_event_queue_processing.
-
- Events are generally tailored to the MilesEvent system, even though there is nothing preventing you
- from writing your own event system, or creation ui.
- "
- }
-*/
-DXDEC HMSSEVENTCONSTRUCT AILCALL AIL_create_event(void);
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_close_event", "Returns a completed event, ready for enqueueing in to the MilesEvent system."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to complete."
-
- ReturnType = "char*", "An allocated event string that can be passed to AIL_next_event_step or enqueued in the
- MilesEvent system via AIL_enqueue_event."
-
- Discussion = "The returned pointer must be deleted via AIL_mem_free_lock(). Note that if the MilesEvent system
- is used, the event pointer must remain valid through the following $AIL_complete_event_queue_processing call."
-
- }
-*/
-DXDEC U8* AILCALL AIL_close_event(HMSSEVENTCONSTRUCT i_Event);
-
-EXPTYPEBEGIN typedef S32 MILES_START_STEP_EVICTION_TYPE;
-#define MILES_START_STEP_PRIORITY 0
-#define MILES_START_STEP_DISTANCE 1
-#define MILES_START_STEP_VOLUME 2
-#define MILES_START_STEP_OLDEST 3
-EXPTYPEEND
-/*
- Determines the behavior of a sound if it encounters a limit trying to play.
-
- $:MILES_START_STEP_PRIORITY Evict a sound less than our priority.
- $:MILES_START_STEP_DISTANCE Evict the farthest sound from the listener.
- $:MILES_START_STEP_VOLUME Evict the quietest sound after mixing, using the loudest channel as the qualifier.
- $:MILES_START_STEP_OLDEST Evict the sound that has been playing the longest.
-
- See also $AIL_add_start_sound_event_step.
-*/
-
-EXPTYPEBEGIN typedef S32 MILES_START_STEP_SELECTION_TYPE;
-#define MILES_START_STEP_RANDOM 0
-#define MILES_START_STEP_NO_REPEATS 1
-#define MILES_START_STEP_IN_ORDER 2
-#define MILES_START_STEP_RANDOM_ALL_BEFORE_REPEAT 3
-#define MILES_START_STEP_BLENDED 4
-#define MILES_START_STEP_SELECT_MASK 0x7
-#define MILES_START_STEP_SELECT_BITS 3
-EXPTYPEEND
-/*
- Determines the usage of the sound names list in the $AIL_add_start_sound_event_step.
-
- $:MILES_START_STEP_RANDOM Randomly select from the list, and allow the same
- sound to play twice in a row. This is the only selection type that doesn't require
- a state variable.
- $:MILES_START_STEP_NO_REPEATS Randomly select from the list, but prevent the last sound from being the same.
- $:MILES_START_STEP_IN_ORDER Play the list in order, looping.
- $:MILES_START_STEP_RANDOM_ALL_BEFORE_REPEAT Randomly select from the list, but don't allow duplicates until all sounds have been played.
- $:MILES_START_STEP_BLENDED Play *all* of the sounds, using the state variable as both the variable name to poll,
- and the name of the blend function to look up. The blend should have been specified prior to execution of
- this step in the runtime, see $AIL_add_setblend_event_step.
- $:MILES_START_STEP_SELECT_MASK Expect a value from the game to determine which sound to play, added in to the other selection type.
-*/
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_start_sound_event_step", "Adds a step to a given event to start a sound with the given specifications."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add the step to."
- In = "const char*", "i_SoundNames", "The names and associated weights for the event step to choose from.
- If there are multiple names listed, the sound will be chosen at random based on the given weights. This
- string is of the form 'BankName1/SoundName1:Weight1:BankName2/SoundName2:Weight2:' etc. The string must always
- terminate in a ':'. Weight must be between 0 and 200. To provide a null sound to randomly choose to not play anything, use
- an empty string as an entry."
-
- In = "const char*", "i_PresetName", "[optional] The name of the preset, of the form 'PresetList/PresetName'"
- In = "U8", "i_PresetIsDynamic", "Nonzero if the preset should poll the value of variables every frame, instead of only when applied."
- In = "const char*", "i_EventName", "[optional] The name of the event to execute upon completion of the sound, of the form 'PresetList/PresetName'"
- In = "const char*", "i_StartMarker", "[optional] The name of a marker to use as the loop start point."
- In = "const char*", "i_EndMarker", "[optional] The name of a marker to use as the loop end point."
- In = "const char*", "i_StateVar", "[optional] The name of a variable to use for storing state associated with this start sound step."
- In = "char const*", "i_VarInit", "[optional] A list of variable names, mins, and maxes to use for randomizing the sound instance state."
- In = "const char*", "i_Labels", "[optional] A comma delimited list of labels to assign to the sound."
- In = "U32", "i_Streaming", "If nonzero, the sound will be set up and started as a stream."
- In = "U8", "i_CanLoad", "If nonzero, the sound is allowed to hit the disk instead of only accessing cached sounds. If true, this might cause a hitch."
- In = "U16", "i_Delay", "The minimum delay in ms to apply to the sound before start."
- In = "U16", "i_DelayMax", "The maximum delay in ms to apply to the sound before start."
- In = "U8", "i_Priority", "The priority to assign to the sound. If a sound encounters a limit based on its labels, it will evict any sound
- with a priority strictly less than the given priority."
- In = "U8", "i_LoopCount", "The loop count as per AIL_set_sample_loop_count."
- In = "const char*", "i_StartOffset", "[optional] The name of the marker to use as the sound's initial offset."
- In = "F32", "i_VolMin", "The min volume value to randomly select for initial volume for the sound. In LinLoud."
- In = "F32", "i_VolMax", "The max volume value to randomly select for initial volume for the sound. In LinLoud."
- In = "F32", "i_PitchMin", "The min pitch to randomly select from for initial playback. In sT."
- In = "F32", "i_PitchMax", "The max pitch to randomly select from for initial playback. In sT."
- In = "F32", "i_FadeInTime", "The time to fade the sound in over. Interpolation is linear in loudness."
- In = "U8", "i_EvictionType", "The basis for deciding what sound will get kicked out if a limit is hit when trying to play this sound. See $MILES_START_STEP_EVICTION_TYPE."
- In = "U8", "i_SelectType", "The method to use for selecting the sound to play from the sound name list. See $MILES_START_SOUND_SELECTION_TYPE."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "Adds an event that can start a sound. If the sound names list contains multiple entries, one will be selected
- randomly based on the given weights and the selection type. Weights are effectively ratios for likelihood. A sound with 100 weight will be twice as likely
- as a sound with 50 weight. Some times you may want to have an event that only *might* play a sound. To do this, add a empty sound name
- with an associated weight.
- "
- }
-*/
-DXDEC
-S32
-AILCALL
-AIL_add_start_sound_event_step(
- HMSSEVENTCONSTRUCT i_Event,
- const char* i_SoundNames,
- const char* i_PresetName,
- U8 i_PresetIsDynamic,
- const char* i_EventName,
- const char* i_StartMarker, const char* i_EndMarker,
- char const* i_StateVar, char const* i_VarInit,
- const char* i_Labels, U32 i_Streaming, U8 i_CanLoad,
- U16 i_Delay, U16 i_DelayMax, U8 i_Priority, U8 i_LoopCount,
- const char* i_StartOffset,
- F32 i_VolMin, F32 i_VolMax, F32 i_PitchMin, F32 i_PitchMax,
- F32 i_FadeInTime,
- U8 i_EvictionType,
- U8 i_SelectType
- );
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_cache_sounds_event_step", "Adds a step to an event to load a list of sounds in to memory for play."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "bankName", "The bank filename containing all of the sounds."
- In = "const char*", "i_Sounds", "A list of colon separated sounds to load from the bank file."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "In general events are not allowed to hit the disk in order to prevent unexpected hitching during
- gameplay. In order to facilitate that, sounds need to be preloaded by this event. Each cache step can only
- load sounds from a single bank file, so for multiple bank files, multiple steps will be needed.
-
- In order to release the data loaded by this event, AIL_add_uncache_sounds_event_step() needs to
- be called with the same parameters.
-
- If you are using MilesEvent, the data is refcounted so the sound will not be freed until all
- samples using it complete."
- }
-*/
-DXDEC
-S32
-AILCALL
-AIL_add_cache_sounds_event_step(
- HMSSEVENTCONSTRUCT i_Event, const char* bankName, const char* i_Sounds);
-
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_uncache_sounds_event_step", "Adds a step to an event to free a list of sounds previously loaded in to memory for play."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "bankName", "The bank filename containing all of the sounds."
- In = "const char*", "i_Sounds", "A list of colon separated sounds from the bank file to uncache."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "This event released sounds loaded via AIL_add_cache_sounds_event_step()"
- }
-*/
-DXDEC
-S32
-AILCALL
-AIL_add_uncache_sounds_event_step(
- HMSSEVENTCONSTRUCT i_Event, const char* bankName, const char* i_Sounds);
-
-
-EXPTYPEBEGIN typedef S32 MILES_CONTROL_STEP_TYPE;
-#define MILES_CONTROL_STEP_STOP 3
-#define MILES_CONTROL_STEP_STOP_NO_EVENTS 4
-#define MILES_CONTROL_STEP_PASS 0
-#define MILES_CONTROL_STEP_PAUSE 1
-#define MILES_CONTROL_STEP_RESUME 2
-#define MILES_CONTROL_STEP_STOP_FADE 5
-
-EXPTYPEEND
-/*
- Determines how the playhead is adjusted during a $AIL_add_control_sounds_event_step.
-
- $:MILES_CONTROL_STEP_STOP Stop the affected sounds.
- $:MILES_CONTROL_STEP_PASS Do not change the playhead.
- $:MILES_CONTROL_STEP_PAUSE Pause the affected sounds.
- $:MILES_CONTROL_STEP_RESUME Resume the affected sounds.
- $:MILES_CONTROL_STEP_STOP_NO_EVENTS Stop the affected sounds, and prevent their completion events from playing.
- $:MILES_CONTROL_STEP_STOP_FADE Stop the sound after fading the sound out linearly in loudness.
-*/
-
-#define MILES_CONTROL_STEP_IGNORELOOP 255
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_control_sounds_event_step", "Adds a step to an event to control sample playback by label."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "i_Labels", "[optional] A comma seperated list of labels to control."
- In = "const char*", "i_MarkerStart", "[optional] If exists, sets the loop start to the marker's offset."
- In = "const char*", "i_MarkerEnd", "[optional] If exists, sets the loop end to the marker's offset."
- In = "const char*", "i_Position", "[optional] If exists, sets the current playback position to the marker's offset."
- In = "const char*", "i_PresetName", "[optional] The name of the preset to apply, of the form Bank/PresetList/PresetName."
- In = "U8", "i_PresetApplyType", "If nonzero, the preset is applied dynamically(the variables are polled every frame)."
- In = "U8", "i_LoopCount", "If the loop count is not to be affected, pass MILES_CONTROL_STEP_IGNORELOOP. Otherwise, the sample's loop count will be set to this value."
- In = "U8", "i_Type", "The control type requested. See $MILES_CONTROL_STEP_TYPE."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "Controls playback of current instances. The sounds are matched either on name or label. If
- i_Labels is null, all sounds will be controlled.
- "
- }
-*/
-DXDEC
-S32
-AILCALL
-AIL_add_control_sounds_event_step(
- HMSSEVENTCONSTRUCT i_Event,
- const char* i_Labels, const char* i_MarkerStart, const char* i_MarkerEnd, const char* i_Position,
- const char* i_PresetName,
- U8 i_PresetApplyType,
- F32 i_FadeOutTime,
- U8 i_LoopCount, U8 i_Type);
-
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_apply_environment_event_step", "Adds a step to an event to apply an environment preset."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "i_EnvName", "The name of the environment preset to apply, of the form EnvList/EnvName."
- In = "U8", "i_IsDynamic", "If nonzero, any variables in the environment are polled every frame."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "Applies the specified environment preset to the current HDIGDRIVER."
- }
-*/
-DXDEC S32 AILCALL AIL_add_apply_environment_event_step(HMSSEVENTCONSTRUCT i_Event, const char* i_EnvName, U8 i_IsDynamic);
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_comment_event_step", "Adds a step that represents a comment to the user of the editing tool."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "i_Comment", "A string to display in the editing tool."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "This event is ignored in the runtime, and only exist for editing convenience."
- }
-*/
-DXDEC S32 AILCALL AIL_add_comment_event_step(HMSSEVENTCONSTRUCT i_Event, const char* i_Comment);
-
-EXPTYPEBEGIN typedef S32 MILES_RAMP_TYPE;
-#define MILES_RAMPTYPE_VOLUME 0
-#define MILES_RAMPTYPE_WET 1
-#define MILES_RAMPTYPE_LOWPASS 2
-#define MILES_RAMPTYPE_RATE 3
-EXPTYPEEND
-/*
- The different values the ramps can affect.
-
- $:MILES_RAMPTYPE_VOLUME The ramp will adjust the sample's volume, and will interpolate in loudness level. Target is in dB.
- $:MILES_RAMPTYPE_WET The ramp will affect the sample's reverb wet level, and will interpolate in loudness. Target is in dB.
- $:MILES_RAMPTYPE_LOWPASS The ramp will affect the sample's low pass cutoff. Interpolation and target are in Hz.
- $:MILES_RAMPTYPE_RATE The ramp will affect the sample's playback rate. Interpolation and target are in sT.
-*/
-
-EXPTYPEBEGIN typedef S32 MILES_INTERP_TYPE;
-#define MILES_INTERP_LINEAR 0
-#define MILES_INTERP_EXP 1
-#define MILES_INTERP_SCURVE 2
-EXPTYPEEND
-/*
- The different ways the interpolation occurs for a ramp.
-
- $:MILES_INTERP_LINEAR The ramp will lerp between the current value and the target.
- $:MILES_INTERP_EXP The ramp will move toward the target slowly at first, then faster as it closes on its total time.
- $:MILES_INTERP_SCURVE The ramp will quickly move to about halfway, then slowly move, then move more quickly as it ends.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_add_ramp_event_step(
- HMSSEVENTCONSTRUCT i_Event, char const* i_Name, char const* i_Labels,
- F32 i_Time, char const* i_Target, U8 i_Type, U8 i_ApplyToNew, U8 i_InterpolationType);
-/*
- Add an event step that updates or creates a new ramp in the runtime.
-
- $:i_Event The event to add the step to.
- $:i_Name The name of the ramp. If this name already exists, the ramp will shift its target to the new value.
- $:i_Labels The label query determining the sounds the ramp will affect.
- $:i_Time The length the time in seconds the ramp will take to reach its target.
- $:i_Target The target value, or a variable expression representing the target value. The target's type is
- dependent on i_Type.
- $:i_Type One of the $MILES_RAMP_TYPE values.
- $:i_ApplyToNew If 1, the ramp will affect sounds that start after the ramp is created. If not, it will only affect sounds that
- are playing when the ramp is created. This value can not be changed once the ramp has been created.
- $:i_InterpolationType The method the ramp will affect the target values. One of $MILES_INTERP_TYPE values.
-
- Ramps are means of interpolating aspects of samples. They are removed from the system if they are targeted to
- a value for their type that is a non-op - meaning 0 dB, 0 sT, or >24000 Hz.
-
- Ramps use the current value as the start point for the interpolation. They stay at the target point,
- so you can use the same ramp name to adjust a sound's volume down, and later ramp it back up.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_add_setblend_event_step(HMSSEVENTCONSTRUCT i_Event,
- char const* i_Name, S32 i_SoundCount, F32 const* i_InMin, F32 const* i_InMax,
- F32 const* i_OutMin, F32 const* i_OutMax, F32 const* i_MinP, F32 const* i_MaxP);
-/*
- Defines a named blend function to be referenced by a blended sound later.
-
- $:i_Event The event to add the step to.
- $:i_Name The name of the blend. This is the name that will be
- referenced by the state variable in start sound, as well as the variable name
- to set by the game to update the blend for an instance.
- $:i_SoundCount The number of sounds this blend will affect. Max 10.
- $:i_InMin Array of length i_SoundCount representing the value of the blend variable the sound will start to fade in.
- $:i_InMax Array of length i_SoundCount representing the value of the blend variable the sound will reach full volume.
- $:i_OutMin Array of length i_SoundCount representing the value of the blend variable the sound will start to fade out.
- $:i_OutMax Array of length i_SoundCount representing the value of the blend variable the sound will cease to be audible.
- $:i_MinP Array of length i_SoundCount representing the pitch of the sound when it starts to fade in.
- $:i_MaxP Array of length i_SoundCount representing the pitch of the sound when it has completed fading out.
-
- This step only sets up the lookup for when a blended sound is actually started. When a blended sound plays, every frame it
- polls its state variable, then searches for a blend of the same name. If it finds both, then it uses its index in
- the start sounds list to find its relevant values from the blended sound definition.
-
- Once it has the correct values, it uses them to affect the sample as stated in the parameter docs above.
-*/
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_sound_limit_event_step", "Adds a step that defines the maximum number of playing sounds per label."
-
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "i_SoundLimits", "A string of the form `"label count:anotherlabel count`"."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "Defines limits for instances of sounds on a per label basis. Sounds with multiple labels
- must fit under the limits for all of their labels. By default sounds are not limited other than the
- Miles max sample count."
- }
-*/
-DXDEC S32 AILCALL
-AIL_add_sound_limit_event_step(HMSSEVENTCONSTRUCT i_Event, char const* i_LimitName, const char* i_SoundLimits);
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_add_persist_preset_event_step", "Adds a preset that applies to current sound instances, and continues to be applied to new sounds as they are started."
- In = "HMSSEVENTCONSTRUCT", "i_Event", "The event to add on to."
- In = "const char*", "i_PresetName", "The name of the preset, of the form PresetList/PresetName. See discussion."
- In = "const char*", "i_PersistName", "The name of this persisted preset, for future removal."
- In = "const char*", "i_Labels", "The labels to apply this preset to."
- In = "U8", "i_IsDynamic", "If nonzero, the preset polls its variables every frame."
-
- ReturnType = "S32", "Returns 1 on success."
-
- Discussion = "Defines a preset by name that remains in the system, testing against all started sounds for label match. If a
- match occurs, then the preset is applied to the new sound, before the preset specified in the startsound step itself.
-
- In order to remove a persisted preset, refer to it by name, but leave all other parameters null.
-
- Example:
-
- // Persist a preset for players.
- AIL_add_persist_preset_event_step(hEvent, , `"Bank/PlayerEffects/Underwater`", `"Underwater`", `"player`");
-
- // Remove the above preset.
- AIL_add_persist_preset_event_step(hEvent, 0, `"Underwater`", 0);"
- }
-*/
-DXDEC S32 AILCALL
-AIL_add_persist_preset_event_step(HMSSEVENTCONSTRUCT i_Event, const char* i_PresetName, const char* i_PersistName,
- const char* i_Labels, U8 i_IsDynamic
- );
-
-DXDEC EXPAPI S32 AILCALL AIL_get_event_contents(HMSOUNDBANK bank, char const * name, U8 const** event);
-/*
- Return the event data for an event, by name.
-
- $:bank Soundbank containing the event.
- $:name Name of the event to retrieve.
- $:event Returns an output pointer to the event contents. Note that this string isn't null terminated, and
- thus shouldn't be checked via strlen, etc.
- $:return Returns 0 on fail.
-
- Normally, event contents are meant to be handled by the Miles high-level system via $AIL_enqueue_event,
- rather than inspected directly.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_add_clear_state_event_step(HMSSEVENTCONSTRUCT i_Event);
-/*
- Clears all persistent state in the runtime.
-
- $:i_Event The event to add the step to.
-
- This removes all state that can stick around after an event in done executing. Ramps, Blends, Persisted
- Preset, etc.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_add_exec_event_event_step(HMSSEVENTCONSTRUCT i_Event, char const* i_EventName);
-/*
- Adds a step to run another named event.
-
- $:i_Event The event to add the step to.
- $:i_EventName The name of the event, of the form "Bank/Path/To/Event".
-
- When this step is encountered, the event is enqueued, so it will be executed the following frame (currently). It has the same parent
- event mechanics as a completion event, so the QueuedId for a sound started by it will be for the event
- that fired this step.
-*/
-
-
-DXDEC EXPAPI S32 AILCALL AIL_add_enable_limit_event_step(HMSSEVENTCONSTRUCT i_Event, char const* i_LimitName);
-/*
- Adds a step to set the currently active limit.
-
- $:i_Event The event to add the step to.
- $:i_EventName The name of the limit, as defined by a set_limits event.
-
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_add_set_lfo_event_step(HMSSEVENTCONSTRUCT i_Event, char const* i_Name, char const* i_Base, char const* i_Amp, char const* i_Freq, S32 i_Invert, S32 i_Polarity, S32 i_Waveform, S32 i_DutyCycle, S32 i_IsLFO);
-/*
- Adds a step to define a variable that oscillates over time.
-
- $:i_Event The event to add the step to.
- $:i_Name The nane of the variable to oscillate.
- $:i_Base The value to oscillate around, or a variable name to use as the base.
- $:i_Amp The maximum value to reach, or a variable name to use as the amplitude.
- $:i_Freq The rate at which the oscillation occurs, or a variable name to use as the rate. Rate should not exceed game tick rate / 2.
- $:i_Invert Whether the waveform should be inverted.
- $:i_Polarity Bipolar (1) or Unipolar (0) - whether the waveform goes around the base or only above it.
- $:i_Waveform Sine wave (0), Triangle (1), Saw (2), or Square(3)
- $:i_DutyCycle Only valid for square, determines what percent of the wave is "on". (0-100)
- $:i_IsLFO If zero, Base is the default value to assign the variable when the settings are applied, and the rest of the parameters are ignored.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_add_move_var_event_step(HMSSEVENTCONSTRUCT i_Event, char const* i_Name, const F32 i_Times[2], const S32 i_InterpolationTypes[2], const F32 i_Values[3]);
-/*
- Adds a step to set and move a variable over time on a curve.
-
- $:i_Event The event to add the step to.
- $:i_Name The variable to move.
- $:i_Times The midpoint and final times for the curves
- $:i_InterpolationTypes The curve type for the two curves - Curve In (0), Curve Out (1), S-Curve (2), Linear (3)
- $:i_Values The initial, midpoint, and final values for the variable.
-
- The variable is locked to this curve over the timeperiod - no interpolation from a previous value is done.
-
- If an existing move var exists when the new one is added, the old one is replaced.
-*/
-
-enum EVENT_STEPTYPE
-{
- EVENT_STEPTYPE_STARTSOUND = 1,
- EVENT_STEPTYPE_CONTROLSOUNDS,
- EVENT_STEPTYPE_APPLYENV,
- EVENT_STEPTYPE_COMMENT,
- EVENT_STEPTYPE_CACHESOUNDS,
- EVENT_STEPTYPE_PURGESOUNDS,
- EVENT_STEPTYPE_SETLIMITS,
- EVENT_STEPTYPE_PERSIST,
- EVENT_STEPTYPE_VERSION,
- EVENT_STEPTYPE_RAMP,
- EVENT_STEPTYPE_SETBLEND,
- EVENT_STEPTYPE_CLEARSTATE,
- EVENT_STEPTYPE_EXECEVENT,
- EVENT_STEPTYPE_ENABLELIMIT,
- EVENT_STEPTYPE_SETLFO,
- EVENT_STEPTYPE_MOVEVAR
-};
-
-//! Represents an immutable string that is not null terminated, and shouldn't be deleted.
-struct _MSSSTRINGC
-{
- const char* str;
- S32 len;
-};
-typedef struct _MSSSTRINGC MSSSTRINGC;
-
-
-/*!
- Represents a single step that needs to be executed for an event.
-
- All of the members in the structures share the same definition as
- their counterpart params in the functions that added them during
- event construction.
-*/
-struct EVENT_STEP_INFO
-{
- //! type controls which struct in the union is accessed.
- enum EVENT_STEPTYPE type;
- union
- {
- struct
- {
- MSSSTRINGC soundname;
- MSSSTRINGC presetname;
- MSSSTRINGC eventname;
- MSSSTRINGC labels;
- MSSSTRINGC markerstart;
- MSSSTRINGC markerend;
- MSSSTRINGC startoffset;
- MSSSTRINGC statevar;
- MSSSTRINGC varinit;
- U32 stream;
- F32 volmin,volmax,pitchmin,pitchmax;
- F32 fadeintime;
- U16 delaymin;
- U16 delaymax;
- U8 canload;
- U8 priority;
- U8 loopcount;
- U8 evictiontype;
- U8 selecttype;
- U8 presetisdynamic;
- } start;
-
- struct
- {
- MSSSTRINGC labels;
- MSSSTRINGC markerstart;
- MSSSTRINGC markerend;
- MSSSTRINGC position;
- MSSSTRINGC presetname;
- F32 fadeouttime;
- U8 presetapplytype;
- U8 loopcount;
- U8 type;
- } control;
-
- struct
- {
- MSSSTRINGC envname;
- U8 isdynamic;
- } env;
-
- struct
- {
- MSSSTRINGC comment;
- } comment;
-
- struct
- {
- MSSSTRINGC lib;
- const char** namelist;
- S32 namecount;
- } load;
-
- struct
- {
- MSSSTRINGC limits;
- MSSSTRINGC name;
- } limits;
-
- struct
- {
- MSSSTRINGC name;
- MSSSTRINGC presetname;
- MSSSTRINGC labels;
- U8 isdynamic;
- } persist;
-
- struct
- {
- MSSSTRINGC name;
- MSSSTRINGC labels;
- MSSSTRINGC target;
- F32 time;
- U8 type;
- U8 apply_to_new;
- U8 interpolate_type;
- } ramp;
-
- struct
- {
- MSSSTRINGC name;
- F32 inmin[10];
- F32 inmax[10];
- F32 outmin[10];
- F32 outmax[10];
- F32 minp[10];
- F32 maxp[10];
- U8 count;
- } blend;
-
- struct
- {
- MSSSTRINGC eventname;
- } exec;
-
- struct
- {
- MSSSTRINGC limitname;
- } enablelimit;
-
- struct
- {
- MSSSTRINGC name;
- MSSSTRINGC base;
- MSSSTRINGC amplitude;
- MSSSTRINGC freq;
- S32 invert;
- S32 polarity;
- S32 waveform;
- S32 dutycycle;
- S32 islfo;
- } setlfo;
-
- struct
- {
- MSSSTRINGC name;
- F32 time[2];
- S32 interpolate_type[2];
- F32 value[3];
- } movevar;
- };
-};
-
-/*!
- function
- {
- ExcludeOn = 1
-
- Name = "AIL_next_event_step", "Retrieves the next step in the event buffer, parsing it in to a provided buffer."
-
- In = "const U8*", "i_EventString", "The event returned by $AIL_close_event, or a previous call to $AIL_next_event_step"
- Out = "const EVENT_STEP_INFO*", "o_Step", "A pointer to the step struct will be stored here."
- In = "void*", "i_Buffer", "A working buffer for the function to use for parsing."
- In = "S32", "i_BufferSize", "The size in bytes of the working buffer."
-
- ReturnType = "U8 char*", "Returns 0 on fail or when the event string has been exhausted of steps. Otherwise, returns
- the string location of the next event step in the buffer."
-
- Discussion = "This function parses the event string in to a struct for usage by the user. This function should only be
- used by the MilesEvent system. It returns the pointer to the next step to be passed to this function to get the
- next step. In this manner it can be used in a loop:
-
- // Create an event to stop all sounds.
- HMSSEVENTCONSTRUCT hEvent = AIL_create_event();
- AIL_add_control_sound_event_step(hEvent, 0, 0, 0, 0, 0, 0, 255, 3);
- char* pEvent = AIL_close_event(hEvent);
-
- char EventBuffer[4096];
- EVENT_STEP_INFO* pStep = 0;
- char* pCurrentStep = pEvent;
-
- while (pCurrentStep)
- {
- pStep = 0;
- pCurrentStep = AIL_next_event_step(pCurrentStep, &pStep, EventBuffer, 4096);
- if (pStep == 0)
- {
- // Error, or an empty event. If $AIL_last_error is an empty string, then it was an empty event.
- break;
- }
-
- // Handle event step.
- switch (pStep->type)
- {
- default: break;
- }
- }
-
- AIL_mem_free_lock(pEvent);
- "
- }
-*/
-DXDEC const U8* AILCALL AIL_next_event_step(const U8* i_EventString, struct EVENT_STEP_INFO** o_Step, void* i_Buffer, S32 i_BufferSize);
-
-
-// Old style names.
-#define AIL_find_event MilesFindEvent
-#define AIL_clear_event_queue MilesClearEventQueue
-#define AIL_register_random MilesRegisterRand
-#define AIL_enumerate_sound_instances MilesEnumerateSoundInstances
-#define AIL_enumerate_preset_persists MilesEnumeratePresetPersists
-#define AIL_enqueue_event MilesEnqueueEvent
-#define AIL_enqueue_event_system MilesEnqueueEventContext
-#define AIL_enqueue_event_by_name MilesEnqueueEventByName
-#define AIL_begin_event_queue_processing MilesBeginEventQueueProcessing
-#define AIL_complete_event_queue_processing MilesCompleteEventQueueProcessing
-#define AIL_startup_event_system MilesStartupEventSystem
-#define AIL_shutdown_event_system MilesShutdownEventSystem
-#define AIL_add_soundbank MilesAddSoundBank
-#define AIL_release_soundbank MilesReleaseSoundBank
-#define AIL_set_sound_label_limits MilesSetSoundLabelLimits
-#define AIL_text_dump_event_system MilesTextDumpEventSystem
-#define AIL_event_system_state MilesGetEventSystemState
-#define AIL_get_event_length MilesGetEventLength
-#define AIL_stop_sound_instances MilesStopSoundInstances
-#define AIL_pause_sound_instances MilesPauseSoundInstances
-#define AIL_resume_sound_instances MilesResumeSoundInstances
-#define AIL_start_sound_instance MilesStartSoundInstance
-#define AIL_set_event_error_callback MilesSetEventErrorCallback
-#define AIL_set_event_bank_functions MilesSetBankFunctions
-#define AIL_get_event_bank_functions MilesGetBankFunctions
-
-#define AIL_set_variable_int MilesSetVarI
-#define AIL_set_variable_float MilesSetVarF
-#define AIL_variable_int MilesGetVarI
-#define AIL_variable_float MilesGetVarF
-
-#define AIL_set_sound_start_offset MilesSetSoundStartOffset
-#define AIL_requeue_failed_asyncs MilesRequeueAsyncs
-#define AIL_add_event_system MilesAddEventSystem
-
-#define AIL_audition_local_host MilesAuditionLocalHost
-#define AIL_audition_connect MilesAuditionConnect
-#define AIL_audition_startup MilesAuditionStartup
-#define AIL_audition_shutdown MilesAuditionShutdown
-EXPGROUP(Miles High Level Event System)
-
-EXPTYPE typedef void* HEVENTSYSTEM;
-/*
- The type used to distinguish between running event systems.
-
- Only used if multiple event systems are running. See the eventmultiple example.
-*/
-
-DXDEC EXPAPI HEVENTSYSTEM AILCALL AIL_startup_event_system(HDIGDRIVER dig, S32 command_buf_len, EXPOUT char* memory_buf, S32 memory_len);
-/*
- Initializes the Miles Event system and associates it with an open digital driver.
-
- $:dig The digital sound driver that this event system should use.
- $:command_buf_len An optional number of bytes to use for the command buffer. If you pass 0, a reasonable default will be used (currently 5K).
- $:memory_buf An optional pointer to a memory buffer buffer that the event system will use for all event allocations.
- Note that the sound data itself is not stored in this buffer - it is only for internal buffers, the command buffer, and instance data.
- Use 0 to let Miles to allocate this buffer itself.
- $:memory_len If memory_buf is non-null, then this parameter provides the length. If memory_buf is null, the Miles will
- allocate this much memory for internal buffers. If both memory_buf and memory_len are null, the Miles will allocate reasonable default (currently 64K).
- $:return Returns 0 on startup failure.
-
- This function starts up the Miles Event System, which is used to trigger events throughout your game.
- You call it after $AIL_open_digital_driver.
-*/
-
-DXDEC EXPAPI HEVENTSYSTEM AILCALL AIL_add_event_system(HDIGDRIVER dig);
-/*
- Creates an additional event system attached to a different driver, in the event that you need to trigger events
- tied to different sound devices.
-
- $:dig The digital sound driver to attach the new event system to.
- $:return A handle to the event system to use in various high level functions.
-
- Both systems will access the same set of loaded soundbanks, and are updated when $AIL_begin_event_queue_processing is called.
-
- To enqueue events to the new system, use $AIL_enqueue_event_system.
-
- To iterate the sounds for the new system, pass the $HEVENTSYSTEM as the first parameter to $AIL_enumerate_sound_instances.
-
- To access or set global variables for the new system, pass the $HEVENTSYSTEM as the context in the variable access functions.
-
- See also the <i>eventmultiple.cpp</i> example program.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_shutdown_event_system( void );
-/*
- Shuts down the Miles event system.
-
- This function will closes everything in the event system - it ignores reference counts. It will free
- all event memory, sound banks, and samples used by the system.
-*/
-
-DXDEC EXPAPI HMSOUNDBANK AILCALL AIL_add_soundbank(char const * filename, char const* name);
-/*
- Open and add a sound bank for use with the event system.
-
- $:filename Filename of the bank to load.
- $:name The name of the soundbank to load - this is only used for auditioning.
- $:return The handle to the newly loaded soundbank (zero on failure).
-
- This function opens the sound bank and makes it available to the event system. The filename
- is the name on the media, and the name is the symbolic name you used in the Miles Sound Studio.
- You might, for example, be using a soundbank with a platform extension, like: 'gamebank_ps3.msscmp',
- and while using the name 'gamebank' for authoring and auditioning.
-
- Sound data is not loaded when this function is called - it is only loaded when the relevant Cache Sounds
- is played, or a sound requiring it plays.
-
- This function will access the disc, so you will usually call it at level load time.
-
- If you are using the Auditioner, $AIL_audition_startup and $AIL_audition_connect must be called prior
- to this function.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_release_soundbank(HMSOUNDBANK bank);
-/*
- Releases a sound bank from the event system.
-
- $:bank The bank to close.
- $:return Returns non-zero for success (zero on failure).
-
- This function closes a given soundbank. Any data references in the event system need to be removed beforehand - with
- $AIL_enqueue_event_by_name usage this should only be pending sounds with completion events.
-
- Any other data references still existing (queued events, persisted presets, etc) will report errors when used,
- but will not crash.
-
- Releasing a sound bank does not free any cached sounds loaded from the bank - any sounds from the bank should be freed
- via a Purge Sounds event step. If this does not occur, the sound data will still be loaded, but the
- sound metadata will be gone, so Start Sound events will not work. Purge Sounds will still work.
-
- This is different from Miles 8, which would maintain a reference count for all data.
-*/
-
-DXDEC U8 const * AILCALL AIL_find_event(HMSOUNDBANK bank,char const* event_name);
-/*
- (EXPAPI removed to prevent release in docs)
-
- Searches for an event by name in the event system.
-
- $:bank The soundbank to search within, or 0 to search all open banks (which is the normal case).
- $:event_name The name of the event to find. This name should be of the form "soundbank/event_list/event_name".
- $:return A pointer to the event contents (or 0, if the event isn't found).
-
- This function is normally used as the event parameter for $AIL_enqueue_event. It
- searches one or all open soundbanks for a particular event name.
-
- <b>This is deprecated</b>. If you know the event name, you should use $AIL_enqueue_event_by_name, or $AIL_enqueue_event with
- MILESEVENT_ENQUEUE_BY_NAME.
-
- Events that are not enqueued by name can not be tracked by the Auditioner.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_enqueue_event_system(HEVENTSYSTEM system, U8 const * event, void* user_buffer, S32 user_buffer_len, S32 enqueue_flags, U64 apply_to_ID );
-/*
- Enqueue an event to a specific system. Used only if you have multiple event systems running.
-
- $:system The event system to attach the event to.
- $:return See $AIL_enqueue_event for return description.
-
- For full information on the parameters, see $AIL_enqueue_event.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_enqueue_event_by_name(char const* name);
-/*
- Enqueue an event by name.
-
- $:name The full name of the event, eg "soundbank/path/to/event".
- $:return See $AIL_enqueue_event for return description.
-
- This is the most basic way to enqueue an event. It enqueues an event by name, and as a result the event will be tracked by the auditioner.
-
- For when you need more control over the event, but still want it to be tracked by the auditioner, it is equivalent
- to calling $AIL_enqueue_event_end_named($AIL_enqueue_event_start(), name)
-
- For introduction to the auditioning system, see $integrating_events.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_start();
-/*
- Start assembling a packet to use for enqueuing an event.
-
- $:return A token used for passing to functions that add data to the event.
-
- This is used to pass more data to an event that will be executed. For instance, if
- an event is going to spatialize a sound, but there's no need to move the sound over the course of
- its lifetime, you can add positional data to the event via $AIL_enqueue_event_position. When a
- sound is started it will use that for its initial position, and there is no need to do any
- game object <-> event id tracking.
-
- ${
- // Start the enqueue.
- S32 enqueue_token = AIL_enqueue_event_start();
-
- // Tell all sounds started by the event to position at (100, 100, 100)
- AIL_enqueue_event_position(&enqueue_token, 100, 100, 100);
-
- // Complete the token and enqueue the event to the command buffer.
- AIL_enqueue_event_end_named(enqueue_token);
- $}
-
- The enqueue process is still completely thread safe. No locks are used, however only 8
- enqueues can be "assembling" at the same time - if more than that occur, the $AIL_enqueue_event_start
- will yield the thread until a slot is open.
-
- The ONLY time that should happen is if events enqueues are started but never ended:
-
- ${
- // Start the enqueue
- S32 enqueue_token = AIL_enqueue_event_start();
-
- // Try to get the game position
- Vector3* position = GetPositionOfSomething(my_game_object);
- if (position == 0)
- return; // OOPS! enqueue_token was leaked here, never to be reclaimed.
-
- $}
-
- Each event has a limit to the amount of data that can be attached to it. Currently this
- amount is 512 bytes - which should cover all use cases. If any enqueue functions return 0,
- then this amount has been reached. The ErrorHandler will be called as well, with $AIL_last_error
- reporting that the enqueue buffer was filled.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_enqueue_event_cancel(S32 token);
-/*
- Clears a enqueue token without passing it to the command buffer
-
- $:token A token created with $AIL_enqueue_event_start.
-
- Used to handle the case where you decided to not actually enqueue the event you've assembled.
-
- In general it's better to handle anything that can fail before actually starting
- to create the enqueue.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_position(S32* token, F32 x, F32 y, F32 z);
-/*
- Pass an initial position to an event to use for sound spatialization.
-
- $:token A token created with $AIL_enqueue_event_start.
- $:return 0 if the enqueue buffer is full
-
- If the event queued starts a sound, the sound's position will be set to the given coordinates.
-
- Setting the position of a sample automatically enables 3D spatialization.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_velocity(S32* token, F32 vx, F32 vy, F32 vz, F32 mag);
-/*
- Pass an initial velocity to an event to use for sound spatialization.
-
- $:token A token created with $AIL_enqueue_event_start.
- $:return 0 if the enqueue buffer is full
-
- If the event queued starts a sound, the sound's velocity will be set to the given vector.
-
- Setting the velocity of a sample does NOT automatically enable 3D spatialization.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_buffer(S32* token, void* user_buffer, S32 user_buffer_len, S32 user_buffer_is_ptr);
-/*
- Attaches a user buffer to the event.
-
- $:token A token created with $AIL_enqueue_event_start.
- $:user_buffer Pointer to a user buffer to pass with the event. If user_buffer_is_ptr is 1, the pointer is copied
- directly and user_buffer_len is ignored.
- $:user_buffer_len The size of the user_buffer to attach to the event.
- $:user_buffer_is_ptr If 1, the pointer is copied and user_buffer_len is ignored.
- $:return 0 if the enqueue buffer is full
-
- User buffers are helpful for bridging the gap between game objects and sound objects.
-
- There are two use cases available in this function
-
- $* <b>Pointer</b> If user_buffer_is_ptr is 1, then the value passed to user_buffer is copied directly as the
- user buffer contents, and then exposed during sound enumeration. This is equivalent in spirit to
- the void* value that often accompanies callbacks. In this case, user_buffer_len is ignored, as
- user_buffer is never dereferenced.
- $* <b>Buffer</b> If user_buffer_is_ptr is 0, then user_buffer_len bytes are copied from user_buffer and
- carried with the event. During sound enumeration this buffer is made available, and you never have to
- worry about memory management.
- $-
-
- Pointer-
- ${
- struct useful_data
- {
- S32 game_stat;
- S32 needed_info;
- };
-
- useful_data* data = (useful_data*)malloc(sizeof(useful_data));
- data->game_stat = 1;
- data->needed_info = 2;
-
- // Pointer - the "data" pointer will be copied directly, so we can't free() "data" until after the sound
- // completes and we're done using it in the enumeration loop.
- S32 ptr_token = AIL_enqueue_event_start();
- AIL_enqueue_event_buffer(&ptr_token, data, 0, 1);
- AIL_enqueue_event_end_named(ptr_token, "mybank/myevent");
- $}
-
- Buffer-
- ${
- struct useful_data
- {
- S32 game_stat;
- S32 needed_info;
- };
-
- useful_data data;
- data.game_stat = 1;
- data.needed_info = 2;
-
- // Buffer - the "data" structure will be copied internally, so we can free() the data - or just use
- // a stack variable like this
- S32 buf_token = AIL_enqueue_event_start();
- AIL_enqueue_event_buffer(&buf_token, &data, sizeof(data), 0);
- AIL_enqueue_event_end_named(buf_token, "mybank/myevent");
- $}
-
- As noted in $AIL_enqueue_event_start(), there's only 512 bytes available to an enqueue, so that
- places an upper limit on the amount of data you can pass along. If the data is huge, then you
- should use user_buffer_is_ptr.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_variablef(S32* token, char const* name, F32 value);
-/*
- Attaches a variable's value to the event enqueue.
-
- $:token A token created with $AIL_enqueue_event_start
- $:name The variable name to set.
- $:value The value of the variable to set.
- $:return 0 if the enqueue buffer is full
-
- When a sound starts, the given variable will be set to the given value prior to any possible
- references being used by presets.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_filter(S32* token, U64 apply_to_ID);
-/*
- Limits the effects of the event to sounds started by the given ID.
-
- $:token A token created with $AIL_enqueue_event_start
- $:apply_to_ID The ID to use for filtering. This can be either a sound or event ID. For an
- event, it will apply to all sounds started by the event, and any events queued by that event.
- $:return 0 if the enqueue buffer is full
-
- IDs are assigned to events and sounds - for events, it is returned via the $AIL_enqueue_event_end_named function
- (or any other enqueue function). For sounds, you can access the assigned id during the enumeration process.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_context(S32* token, HEVENTSYSTEM system);
-/*
- Causes the event to run on a separate running event system.
-
- $:token A token created with $AIL_enqueue_event_start
- $:system An event system $AIL_add_event_system
- $:return 0 if the enqueue buffer is full
-
- If you are running multiple event systems, this is required to get events
- to queue on the additional event systems.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enqueue_event_selection(S32* token, U32 selection);
-/*
- Passes in a selection value for start sound events to use for picking sounds.
-
- $:token A token created with $AIL_enqueue_event_start.
- $:selection The value to use for selecting the sound to play.
- $:return 0 if the enqueue buffer is full
-
- The selection index is used to programatically select a sound from the
- loaded banks. The index passed in replaces any numeric value at the end
- of the sound name existing in any start sound event step. For example, if
- a start sound event plays "mybank/sound1", and the event is queued with
- a selection, then the selection will replace the "1" with the number passed in:
-
- ${
- // Enqueue with a selection of 5
- S32 token = AIL_enqueue_event_start();
- AIL_enqueue_event_selection(&token, 50;
- AIL_enqueue_event_end_named(token, "mybank/myevent");
- $}
-
- Assuming mybank/myevent starts sound "mybank/sound1", the sound
- that will actually be played will be "mybank/sound5". If the sound does
- not exist, it is treated the same as if any other sound was not found.
-
- The selection process replaces ALL trailing numbers with a representation
- of the selection index using the same number of digits, meaning in the above
- example, "mybank/sound123" would have become "mybank/sound005".
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_enqueue_event_end_named(S32 token, char const* event_name);
-/*
- Completes assembling the event and queues it to the command buffer to be run during next tick.
-
- $:token A token created with $AIL_enqueue_event_start.
- $:event_name The name of the event to run.
- $:return A unique ID for the event that can be used to identify sounds started by this event,
- or for filtering future events to the sounds started by this event.
-
- This function takes all of the data accumulated via the various enqueue functions and assembles
- it in to the command buffer to be run during the next $AIL_begin_event_queue_processing.
-
- As with all of the enqueue functions it is completely thread-safe.
-
- Upon completion of this function, the enqueue slot is release and available for another
- $AIL_enqueue_event_start.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_enqueue_event(U8 const * event_or_name, void* user_buffer, S32 user_buffer_len, S32 enqueue_flags, U64 apply_to_ID );
-/*
- Enqueue an event to be processed by the next $AIL_begin_event_queue_processing function.
-
- $:event_or_name Pointer to the event contents to queue, or the name of the event to find and queue.
- If an event, the contents must be valid until the next call to $AIL_begin_event_queue_processing.
- If a name, the string is copied internally and does not have any lifetime requirements, and MILES_ENQUEUE_BY_NAME must be present in enqueue_flags.
- $:user_buffer Pointer to a user buffer. Depending on $(AIL_enqueue_event::enqueue_flags), this pointer can be saved directly, or its contents copied into the sound instance.
- This data is then accessible later, when enumerating the instances.
- $:user_buffer_len Size of the buffer pointed to by user_buffer.
- $:enqueue_flags Optional $MILESEVENTENQUEUEFLAGS logically OR'd together that control how to enqueue this event (default is 0).
- $:apply_to_ID Optional value that is used for events that affect sound instances. Normally,
- when Miles triggers one of these event steps, it matches the name and labels stored with the event step. However, if
- you specify an apply_to_ID value, then event step will only run on sounds that matches this QueuedID,InstanceID,or EventID too. This is how you
- execute events only specific sound instances. QueuedIDs are returned from each call $AIL_enqueue_event.
- InstanceIDs and EventIDs are returned from $AIL_enumerate_sound_instances.
- $:return On success, returns QueuedID value that is unique to this queued event for the rest of this
- program run (you can use this ID to uniquely identify sounds triggered from this event).
-
- This function enqueues an event to be triggered - this is how you begin execution of an event. First, you
- queue it, and then later (usually once a game frame), you call $AIL_begin_event_queue_processing to
- execute an event.
-
- This function is very lightweight. It does nothing more than post the event and data to a
- command buffer that gets executed via $AIL_begin_event_queue_processing.
-
- The user_buffer parameter can be used in different ways. If no flags are passed in, then
- Miles will copy the data from user_buffer (user_buffer_len bytes long) and store the data with
- the queued sound - you can then free the user_buffer data completely! This lets Miles keep track
- of all your sound related memory directly and is the normal way to use the system (it is very
- convenient once you get used to it).
-
- If you instead pass the MILESEVENT_ENQUEUE_BUFFER_PTR flag, then user_buffer pointer will
- simply be associated with each sound that this event may start. In this case, user_buffer_len
- is ignored.
-
- In both cases, when you later enumerate the sound instances, you can access your sound data
- with the $(MILESEVENTSOUNDINFO::UserBuffer) field.
-
- You can call this function from any number threads - it's designed to be called from anywhere in your game.
-
- If you want events you queue to be captured by Miles Studio, then they have to be passed by name. This can be done
- by either using the convenience function $AIL_enqueue_event_by_name, or by using the MILESEVENT_ENQUEUE_BY_NAME flag and
- passing the name in event_or_name. For introduction to the auditioning system, see $integrating_events.
-*/
-
-EXPTYPEBEGIN typedef S32 MILESEVENTENQUEUEFLAGS;
-#define MILESEVENT_ENQUEUE_BUFFER_PTR 0x1
-#define MILESEVENT_ENQUEUE_FREE_EVENT 0x2
-#define MILESEVENT_ENQUEUE_BY_NAME 0x4
-// 0x8 can't be used, internal.
-EXPTYPEEND
-/*
- The available flags to pass in $AIL_enqueue_event or $AIL_enqueue_event_system.
-
- $:MILESEVENT_ENQUEUE_BUFFER_PTR The user_buffer parameter passed in should not be duplicated, and instead
- should just tranparently pass the pointer on to the event, so that the $(MILESEVENTSOUNDINFO::UserBuffer)
- during sound iteration is just the same pointer. user_buffer_len is ignored in this case.
-
- $:MILESEVENT_ENQUEUE_FREE_EVENT The ownership of the memory for the event is passed to the event system. If this
- is present, once the event completes $AIL_mem_free_lock will be called on the raw pointer passed in to $AIL_enqueue_event or
- $AIL_enqueue_event_system. This is rarely used.
-
- $:MILESEVENT_ENQUEUE_BY_NAME The event passed in is actually a string. The event system will then look for this event
- in the loaded sound banks during queue processing.
-*/
-
-
-DXDEC EXPAPI S32 AILCALL AIL_begin_event_queue_processing( void );
-/*
- Begin execution of all of the enqueued events.
-
- $:return Return 0 on failure. The only failures are unrecoverable errors in the queued events
- (out of memory, bank file not found, bad data, etc). You can get the specific error by
- calling $AIL_last_error.
-
- This function executes all the events currently in the queue. This is where all major
- processing takes place in the event system.
-
- Once you execute this functions, then sound instances will be in one of three states:
-
- $(MILESEVENTSOUNDSTATUS::MILESEVENT_SOUND_STATUS_PENDING)[MILESEVENT_SOUND_STATUS_PENDING] - these are new sound instances that were
- created by events that had a "Start Sound Step". Note that these instances aren't audible yet,
- so that you have a chance to modify game driven properties (like the 3D position)
- on the sound before Miles begins to play it.
-
- $(MILESEVENTSOUNDSTATUS::MILESEVENT_SOUND_STATUS_PLAYING)[MILESEVENT_SOUND_STATUS_PLAYING] - these are sound instances that were previously
- started and are continuing to play (you might update the 3D position for these, for example).
-
- $(MILESEVENTSOUNDSTATUS::MILESEVENT_SOUND_STATUS_COMPLETE)[MILESEVENT_SOUND_STATUS_COMPLETE] - these are sound instances that finished playing
- since the last this frame (you might use this status to free any game related memory, for example).
-
- You will normally enumerate the active sound instances in-between calls to $AIL_begin_event_queue_processing
- and $AIL_complete_event_queue_processing with $AIL_enumerate_sound_instances.
-
- $AIL_complete_event_queue_processing must be called after this function to commit
- all the changes.
-
- Example usage:
-${
- // enqueue an event
- $AIL_enqueue_event( EventThatStartsSounds, game_data_ptr, 0, MILESEVENT_ENQUEUE_BUFFER_PTR, 0 );
-
- // now process that event
- $AIL_begin_event_queue_processing( );
-
- // next, enumerate the pending and complete sounds for game processing
- MILESEVENTSOUNDINFO Info;
-
- HMSSENUM SoundEnum = MSS_FIRST;
- while ( $AIL_enumerate_sound_instances( &SoundEnum, MILESEVENT_SOUND_STATUS_PENDING | MILESEVENT_SOUND_STATUS_COMPLETE, 0, &Info ) )
- {
- game_type * game_data = (game_type*) Info.UserBuffer; // returns the game_data pointer from the enqueue
-
- if ( Info.Status == MILESEVENT_SOUND_STATUS_PENDING )
- {
- // setup initial state
- AIL_set_sample_3D_position( Info.Sample, game_data->x, game_data->y, game_data->z );
- }
- else if ( Info.Status == MILESEVENT_SOUND_STATUS_COMPLETE )
- {
- // Free some state we have associated with the sound now that its done.
- game_free( game_data );
- }
- }
-
- $AIL_complete_event_queue_processing( );
- $}
-
- Note that if any event step drastically fails, the rest of the command queue is
- skipped, and this function returns 0! For this reason, you shouldn't assume
- that a start sound event will always result in a completed sound later.
-
- Therefore, you should allocate memory that you want associated with a sound instance
- during the enumeration loop, rather than at enqueue time. Otherwise, you
- need to detect that the sound didn't start and then free the memory (which can be complicated).
-*/
-
-// Returned by AIL_enumerate_sound_instances()
-EXPTYPE typedef struct _MILESEVENTSOUNDINFO
-{
- U64 QueuedID;
- U64 InstanceID;
- U64 EventID;
- HSAMPLE Sample;
- HSTREAM Stream;
- void* UserBuffer;
- S32 UserBufferLen;
- S32 Status;
- U32 Flags;
- S32 UsedDelay;
- F32 UsedVolume;
- F32 UsedPitch;
- char const* UsedSound;
- S32 HasCompletionEvent;
-} MILESEVENTSOUNDINFO;
-/*
- Sound instance data that is associated with each active sound instance.
-
- $:QueuedID A unique ID that identifies the queued event that started this sound. Returned from each call to $AIL_enqueue_event.
- $:EventID A unique ID that identifies the actual event that started this sound. This is the same as QueuedID unless the sound
- was started by a completion event or a event exec step. In that case, the QueuedID represents the ID returned from
- $AIL_enqueue_event, and EventID represents the completion event.
- $:InstanceID A unique ID that identified this specific sound instance (note that one QueuedID can trigger multiple InstanceIDs).
- $:Sample The $HSAMPLE for this playing sound.
- $:Stream The $HSTREAM for this playing sound (if it is being streamed, zero otherwise).
- $:UserBuffer A pointer to the user data for this sound instance.
- $:UserBufferLen The length in bytes of the user data (if known by Miles).
- $:Status One of the $MILESEVENTSOUNDSTATUS status values.
- $:Flags One or more of the $MILESEVENTSOUNDFLAG flags.
- $:UsedDelay The value actually used as a result of the randomization of delay for this instance
- $:UsedVolume The value actually used as a result of the randomization of pitch for this instance
- $:UsedPitch The value actually used as a result of the randomization of volume for this instance
- $:UsedSound The name of the sound used as a result of randomization. This pointer should NOT be deleted
- and is only valid for the until the next call in to Miles.
- $:HasCompletionEvent Nonzero if the sound will fire an event upon completion.
-
- This structure is returned by the $AIL_enumerate_sound_instances function. It
- returns information about an active sound instance.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_variable_int(UINTa context, char const* name, S32 value);
-/*
- Sets a named variable that the designer can reference in the tool.
-
- $:context The context the variable is set for. Can be either a $HEVENTSYSTEM
- to set a global variable for a specific system, 0 to set a global variable
- for the default system, or an $HMSSENUM from $AIL_enumerate_sound_instances.
- $:name The name of the variable to set.
- $:value The value of the variable to set.
-
- Variables are tracked per sound instance and globally, and when a variable is needed
- by an event, it will check the relevant sound instance first, before falling back to
- the global variable list:
-
- ${
- $HMSSENUM FirstSound = MSS_FIRST;
- $MILESEVENTSOUNDINFO Info;
-
- // Grab the first sound, whatever it is.
- $AIL_enumerate_sound_instances(0, &FirstSound, 0, 0, 0, &Info);
-
- // Set a variable on that sound.
- $AIL_set_variable_int(FirstSound, "MyVar", 10);
-
- // Set a global variable by the same name.
- $AIL_set_variable_int(0, "MyVar", 20);
-
- // A preset referencing "MyVar" for FirstSound will get 10. Any other sound will
- // get 20.
- $}
-
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_variable_float(UINTa context, char const* name, F32 value);
-/*
- Sets a named variable that the designer can reference in the tool.
-
- $:context The context the variable is set for. Can be either a $HEVENTSYSTEM
- to set a global variable for a specific system, 0 to set a global variable
- for the default system, or an $HMSSENUM from $AIL_enumerate_sound_instances.
- $:name The name of the variable to set.
- $:value The value of the variable to set.
-
- Variables are tracked per sound instance and globally, and when a variable is needed
- by an event, it will check the relevant sound instance first, before falling back to
- the global variable list.
-
- ${
- $HMSSENUM FirstSound = MSS_FIRST;
- $MILESEVENTSOUNDINFO Info;
-
- // Grab the first sound, whatever it is.
- $AIL_enumerate_sound_instances(0, &FirstSound, 0, 0, 0, &Info);
-
- // Set a variable on that sound.
- $AIL_set_variable_float(FirstSound, "MyVar", 10.0);
-
- // Set a global variable by the same name.
- $AIL_set_variable_float(0, "MyVar", 20.0);
-
- // A preset referencing "MyVar" for FirstSound will get 10. Any other sound will
- // get 20.
- $}
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_variable_int(UINTa context, char const* name, S32* value);
-/*
- Retrieves a named variable.
-
- $:context The context to start the lookup at, same as $AIL_set_variable_int.
- $:name The name to look up.
- $:value Pointer to an int to store the value in.
- $:return 1 if the variable was found, 0 otherwise.
-
- This function follows the same lookup pattern as the runtime - if the context is a
- sound instance, it checks the instance before falling back to global variables.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_variable_float(UINTa context, char const* name, F32* value);
-/*
- Retrieves a named variable.
-
- $:context The context to start the lookup at, same as $AIL_set_variable_float.
- $:name The name to look up.
- $:value Pointer to a float to store the value in.
- $:return 1 if the variable was found, 0 otherwise.
-
- This function follows the same lookup pattern as the runtime - if the context is a
- sound instance, it checks the instance before falling back to global variables.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_requeue_failed_asyncs();
-/*
- Requeues any failed asynchronous loads for sound sources.
-
- Use this function when a disc error causes a slew of failed caches. Any sound source that
- has failed due to asynchronous load will get retried.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_sound_start_offset(HMSSENUM sound, S32 offset, S32 isms);
-/*
- Specify the starting position for a pending sound.
-
- $:sound The enumeration from $AIL_enumerate_sound_instances representing the desired sound.
- The sound must be in the pending state.
- $:offset The offset to use for the starting position of the sound.
- $:isms If nonzero, the offset is in milliseconds, otherwise bytes.
-
- Use this function instead of manipulating the sample position directly via low level Miles calls prior to
- the sound starting. Generally you don't need to do this manually, since the sound designer should do
- this, however if you need to restart a sound that stopped - for example a stream that went to error -
- you will have to set the start position via code.
-
- However, since there can be a delay between the time the sound is first seen in the sound iteration and
- the time it gets set to the data, start positions set via the low level miles calls can get lost, so
- use this.
-
- See the <i>eventstreamerror.cpp</i> example program for usage.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enumerate_sound_instances(HEVENTSYSTEM system, HMSSENUM* next, S32 statuses, char const* label_query, U64 search_for_ID, EXPOUT MILESEVENTSOUNDINFO* info);
-/*
- Enumerated the active sound instances managed by the event system.
-
- $:next Enumeration token - initialize to MSS_FIRST before the first call. You can pass 0 here, if you just want the first instance that matches.
- $:statuses Or-ed list of status values to enumerate. Use 0 for all status types.
- $:label_query A query to match sound instance labels against. Use 0 to skip label matching.
- $:search_for_ID Match only instances that have a QueuedID,InstanceID,or EventID that matches this value. Use 0 to skip ID matching.
- $:info Returns the data for each sound instance.
- $:return Returns 0 when enumeration is complete.
-
- Enumerates the sound instances. This will generally be used between
- calls to $AIL_begin_event_queue_processing and $AIL_complete_event_queue_processing to
- manage the sound instances.
-
- The label_query is a list of labels to match, separated by commas. By default, comma-separated
- values only have to match at least one label. So, if you used "level1, wind", then all sound instances
- that had either "level1" <i>or</i> "wind" would match. If you want to match <i>all</i> labels,
- then use the + sign first (for example, "+level1, +wind" would only match sound instances that
- had <i>both</i> "level1" and "wind"). You can also use the - sign before a label to <i>not</i>
- match that label (so, "level1, -wind" would match all "level1" labeled sound instances that didn't have
- a "wind" label). Finally, you can also use * and ? to match wildcard style labels (so, "gun*"
- would match any sound instance with a label that starts with "gun").
-
- Valid status flags are:
-
- $(MILESEVENTSOUNDSTATUS::MILESEVENT_SOUND_STATUS_PENDING)[MILESEVENT_SOUND_STATUS_PENDING] - these are new sound instances that were
- created by events that had a "Start Sound Step". Note that these instances aren't audible yet,
- so that you have a chance to modify game driven properties (like the 3D position)
- on the sound before Miles begins to play it.
-
- $(MILESEVENTSOUNDSTATUS::MILESEVENT_SOUND_STATUS_PLAYING)[MILESEVENT_SOUND_STATUS_PLAYING] - these are sound instances that were previously
- started and are continuing to play (you might update the 3D position for these, for example).
-
- $(MILESEVENTSOUNDSTATUS::MILESEVENT_SOUND_STATUS_COMPLETE)[MILESEVENT_SOUND_STATUS_COMPLETE] - these are sound instances that finished playing
- since the last this frame (you might use this status to free any game related memory, for example).
-
- Example Usage:
-${
- HMSSENUM SoundEnum = MSS_FIRST;
- MILESEVENTSOUNDINFO Info;
-
- while ( $AIL_enumerate_sound_instances( &SoundEnum, 0, 0, &Info ) )
- {
- if ( Info.Status != MILESEVENT_SOUND_STATUS_COMPLETE )
- {
- game_SoundState* game_data= (game_SoundState*)( Info.UserBuffer );
- $AIL_set_sample_is_3D( Info.Sample, 1 );
- $AIL_set_sample_3D_position( Info.Sample, game_data->x, game_data->y, game_date->z );
- }
- }
-
-$}
-*/
-
-EXPTYPEBEGIN typedef S32 MILESEVENTSOUNDSTATUS;
-#define MILESEVENT_SOUND_STATUS_PENDING 0x1
-#define MILESEVENT_SOUND_STATUS_PLAYING 0x2
-#define MILESEVENT_SOUND_STATUS_COMPLETE 0x4
-EXPTYPEEND
-/*
- Specifies the status of a sound instance.
-
- $:MILESEVENT_SOUND_STATUS_PENDING New sound instances that were
- created by events that had a "Start Sound Step". Note that these instances aren't audible yet,
- so that you have a chance to modify game driven properties (like the 3D position)
- on the sound before Miles begins to play it.
-
- $:MILESEVENT_SOUND_STATUS_PLAYING Sound instances that were previously
- started and are continuing to play (you might update the 3D position for these, for example).
-
- $:MILESEVENT_SOUND_STATUS_COMPLETE Sound instances that finished playing
- since the last this frame (you might use this status to free any game related memory, for example).
-
- These are the status values that each sound instance can have. Use $AIL_enumerate_sound_instances to retrieve them.
-*/
-
-EXPTYPEBEGIN typedef U32 MILESEVENTSOUNDFLAG;
-#define MILESEVENT_SOUND_FLAG_MISSING_SOUND 0x1
-#define MILESEVENT_SOUND_FLAG_EVICTED 0x2
-#define MILESEVENT_SOUND_FLAG_WAITING_ASYNC 0x4
-#define MILESEVENT_SOUND_FLAG_PENDING_ASYNC 0x8
-#define MILESEVENT_SOUND_FLAG_FAILED_HITCH 0x10
-#define MILESEVENT_SOUND_FLAG_FAILED_ASYNC 0x20
-EXPTYPEEND
-/*
- Specifies the status of a sound instance.
-
- $:MILESEVENT_SOUND_FLAG_MISSING_SOUND The event system tried to look up the sound requested from a Start Sound event
- and couldn't find anything in the loaded banks.
- $:MILESEVENT_SOUND_FLAG_EVICTED The sound was evicted due to a sound instance limit being hit. Another sound was selected
- as being higher priority, and this sound was stopped as a result. This can be the result of either a Label Sound Limit,
- or a limit on the sound itself.
- $:MILESEVENT_SOUND_FLAG_WAITING_ASYNC The sound is pending because the data for it is currently being loaded.
- The sound will start when sufficient data has been loaded to hopefully avoid a skip.
- $:MILESEVENT_SONUD_FLAG_PENDING_ASYNC The sound has started playing, but the data still isn't completely loaded, and it's possible
- that the sound playback will catch up to the read position under poor I/O conditions.
- $:MILESEVENT_SOUND_FLAG_FAILED_HITCH The sound meta data was found, but the sound was not in memory, and the Start Sound event
- was marked as "Must Be Cached". To prevent this, either clear the flag in the event, which will cause a start delay as the
- sound data is asynchronously loaded, or specify the sound in a Cache Sounds step prior to attempting to start it.
- $:MILESEVENT_SOUND_FLAG_FAILED_ASYNC The sound tried to load and the asynchronous I/O operation failed - most likely either the media
- was removed during load, or the file was not found.
-
- These are the flag values that each sound instance can have. Use $AIL_enumerate_sound_instances to retrieve them. Instances
- may have more than one flag, logically 'or'ed together.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_complete_event_queue_processing( void );
-/*
- Completes the queue processing (which is started with $AIL_begin_event_queue_processing ).
-
- $:return Returns 0 on failure.
-
- This function must be called as a pair with $AIL_begin_event_queue_processing.
-
- In $AIL_begin_event_queue_processing, all the new sound instances are queued up, but they haven't
- started playing yet. Old sound instances that have finished playing are still valid - they
- haven't been freed yet. $AIL_complete_event_queue_processing actually starts the sound instances
- and frees the completed ones - it's the 2nd half of the event processing.
-
- Usually you call $AIL_enumerate_sound_instances before this function to manage all the sound
- instances.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_stop_sound_instances(char const * label_query, U64 apply_to_ID);
-/*
- Allows the programmer to manually enqueue a stop sound event into the event system.
-
- $:label_query A query to match sound instance labels against. Use 0 to skip label matching.
- $:apply_to_ID An optional value returned from a previous $AIL_enqueue_event or $AIL_enumerate_sound_instances that
- tells Miles to stop only those instances who's QueuedID,InstanceID,or EventID matches this value.
- $:return Returns a non-zero queue ID on success.
-
- Enqueues an event to stop all sounds matching the specified label query (see $AIL_enumerate_sound_instances
- for a description of the label_query format).
-
- Usually the programmer should trigger a named event that the sound designed can fill out to stop the necessary sounds,
- however, if a single sound (for example associated with an enemy that the player just killed) needs to be stopped,
- this function accomplishes that, and is captured by the auditioner for replay.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_pause_sound_instances(char const * label_query, U64 apply_to_ID);
-/*
- Allows the programmer to manually enqueue a pause sound event into the event system.
-
- $:label_query A query to match sound instance labels against. Use 0 to skip label matching.
- $:apply_to_ID An optional value returned from a previous $AIL_enqueue_event or $AIL_enumerate_sound_instances that
- tells Miles to pause only those instances who's QueuedID,InstanceID,or EventID matches this value.
- $:return Returns a non-zero queue ID on success.
-
- Enqueues an event to pause all sounds matching the specified label query (see $AIL_enumerate_sound_instances
- for a description of the label_query format).
-
- Usually the programmer should trigger a named event that the sound designed can fill out to pause the necessary sounds,
- however, if a single sound (for example associated with an enemy that has been put in to stasis) needs to be paused,
- this function accomplishes that, and is captured by the auditioner for replay.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_resume_sound_instances(char const * label_query, U64 apply_to_ID);
-/*
- Allows the programmer to manually enqueue a resume sound event into the event system.
-
- $:label_query A query to match sound instance labels against. Use 0 to skip label matching.
- $:apply_to_ID An optional value returned from a previous $AIL_enqueue_event or $AIL_enumerate_sound_instances that
- tells Miles to resume only those instances who's QueuedID,InstanceID,or EventID matches this value.
- $:return Returns a non-zero enqueue ID on success.
-
- Enqueues an event to resume all sounds matching the specified label query (see $AIL_enumerate_sound_instances
- for a description of the label_query format).
-
- Usually the programmer should trigger a named event that the sound designed can fill out to resume the necessary sounds,
- however, if a single sound (for example associated with an enemy that has been restored from stasis) needs to be resumed,
- this function accomplishes that, and is captured by the auditioner for replay.
-*/
-
-DXDEC EXPAPI U64 AILCALL AIL_start_sound_instance(HMSOUNDBANK bank, char const * sound, U8 loop_count,
- S32 should_stream, char const * labels, void* user_buffer, S32 user_buffer_len, S32 enqueue_flags );
-/*
- Allows the programmer to manually enqueue a start sound event into the event system.
-
- $:bank The bank containing the sound to start.
- $:sound The name of the sound file to start, including bank name, e.g. "BankName/SoundName"
- $:loop_count The loop count to assign to the sound. 0 for infinite, 1 for play once, or just the number of times to loop.
- $:stream Non-zero if the sound playback should stream off the disc.
- $:labels An optional comma-delimited list of labels to assign to the sound playback.
- $:user_buffer See the user_buffer description in $AIL_enqueue_event.
- $:user_buffer_len See the user_buffer_len description in $AIL_enqueue_event.
- $:enqueue_flags See the enqueue_flags description in $AIL_enqueue_event.
- $:return Returns a non-zero EnqueueID on success.
-
- Enqueues an event to start the specified sound asset.
-
- Usually the programmer should trigger an event that the sound designer has specifically
- create to start the appropriate sounds, but this function gives the programmer
- manual control, if necessary. <b>This function is not captured by the auditioner.</b>
-*/
-
-DXDEC EXPAPI void AILCALL AIL_clear_event_queue( void );
-/*
- Removes all pending events that you have enqueued.
-
- This function will clears the list of all events that you have previously enqueued.
-*/
-
-
-DXDEC EXPAPI S32 AILCALL AIL_set_sound_label_limits(HEVENTSYSTEM system, char const* sound_limits);
-/*
- Sets the maximum number of sounds that matches a particular label.
-
- $:sound_limits A string that defines one or more limits on a label by label basis. The string should
- be of the form "label1name label1count:label2name label2count".
- $:return Returns 0 on failure (usually a bad limit string).
-
- Every time an event triggers a sound to be played, the sound limits are checked, and, if exceeded, a sound is dropped (based
- on the settings in the event step).
-
- Usually event limits are set by a sound designer via an event, but this lets the programmer override the limits at runtime.
- Note that this replaces those events, it does not supplement.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_enumerate_preset_persists(HEVENTSYSTEM system, HMSSENUM* next, EXPOUT char const ** name);
-/*
- Enumerates the current persisted presets that active in the system.
-
- $:system The system to enumerate the persists for, or 0 to use the default system.
- $:next Enumeration token - initialize to MSS_FIRST before the first call.
- $:name Pointer to a char* that receives the name of the persist. NOTE
- that this pointer can change frame to frame and should be immediately copied to a client-allocated
- buffer if persistence is desired.
- $:return Returns 0 when enumeration is complete.
-
- This function lets you enumerate all the persisting presets that are currently active in the system. It
- is mostly a debugging aid.
-*/
-
-DXDEC EXPAPI char * AILCALL AIL_text_dump_event_system(void);
-/*
- Returns a big string describing the current state of the event system.
-
- $:return String description of current systems state.
-
- This function is a debugging aid - it can be used to show all of the active allocations,
- active sounds, etc.
-
- You must delete the pointer returned from this function with $AIL_mem_free_lock.
-*/
-
-EXPTYPE typedef struct _MILESEVENTSTATE
-{
- S32 CommandBufferSize;
- S32 HeapSize;
- S32 HeapRemaining;
- S32 LoadedSoundCount;
- S32 PlayingSoundCount;
- S32 LoadedBankCount;
- S32 PersistCount;
-
- S32 SoundBankManagementMemory;
- S32 SoundDataMemory;
-} MILESEVENTSTATE;
-/*
- returns the current state of the Miles Event System.
-
- $:CommandBufferSize The size of the command buffer in bytes. See also the $AIL_startup_event_system.
- $:HeapSize The total size of memory used by the event system for management structures, and is allocated during startup. This does not include loaded file sizes.
- $:HeapRemaining The number of bytes in HeapSize that is remaining.
- $:LoadedSoundCount The number of sounds loaded and ready to play via cache event steps.
- $:PlayingSoundCount The number of sounds currently playing via start sound event steps.
- $:LoadedBankCount The number of sound banks loaded in the system via cache event steps, or AIL_add_soundbank.
- $:PersistCount The number of presets persisted via the persist event step.
- $:SoundBankManagementMemory The number of bytes used for the management of the loaded sound banks.
- $:SoundDataMemory The number of bytes used in file sizes - remember this is not included in HeapSize. Streaming overhead is not included in this number, only fully loaded sounds.
-
- This structure returns debugging info about the event system. It is used with $AIL_event_system_state.
-*/
-
-EXPGROUP(Miles High Level Callbacks)
-
-EXPAPI typedef void AILCALLBACK MilesBankFreeAll( void );
-/*
- callback to free all user managed bank memory.
-*/
-
-EXPAPI typedef void * AILCALLBACK MilesBankGetPreset( char const * name );
-/*
- callback to retrieve a sound preset.
-*/
-
-EXPAPI typedef void * AILCALLBACK MilesBankGetEnvironment( char const * name );
-/*
- callback to retrieve an environment preset.
-*/
-EXPAPI typedef S32 AILCALLBACK MilesBankGetSound(char const* SoundAssetName, char* SoundFileName, MILESBANKSOUNDINFO* o_SoundInfo );
-/*
- callback to return whether the sound asset is in the bank, and, if so, what the final data filename is.
-
- In order to externally deploy sound files, you will need to register your own GetSound callback. This is detailed in the
- eventexternal example program.
-
- This returns the len of the buffer required for the output file name if SoundFileName is zero.
-*/
-
-EXPAPI typedef void * AILCALLBACK MilesBankGetEvent( char const * name );
-/*
- callback to retrieve an event.
-*/
-
-EXPAPI typedef void * AILCALLBACK MilesBankGetMarkerList( char const * name );
-/*
- callback to retrieve a sound marker list.
-*/
-
-EXPAPI typedef S32 AILCALLBACK MilesBankGetLoadedCount( void );
-/*
- callback to retrieve the number of loaded sound banks.
-*/
-
-EXPAPI typedef S32 AILCALLBACK MilesBankGetMemUsage( void );
-/*
- callback to retrieve the total memory in use.
-*/
-
-EXPAPI typedef char const * AILCALLBACK MilesBankGetLoadedName( S32 index );
-/*
- callback to retrieve the file name of a sound index.
-*/
-
-
-EXPTYPE typedef struct _MILESBANKFUNCTIONS
-{
- MilesBankFreeAll * FreeAll;
- MilesBankGetPreset * GetPreset;
- MilesBankGetEnvironment * GetEnvironment;
- MilesBankGetSound * GetSound;
- MilesBankGetEvent * GetEvent;
- MilesBankGetMarkerList * GetMarkerList;
- MilesBankGetLoadedCount * GetLoadedCount;
- MilesBankGetMemUsage * GetMemUsage;
- MilesBankGetLoadedName * GetLoadedName;
-} MILESBANKFUNCTIONS;
-/*
- specifies callbacks for each of the Miles event system.
-
- $:FreeAll Callback that tells you to free all user-side bank memory.
- $:GetPreset Callback to retrieve a sound preset.
- $:GetEnvironment Callback to retrieve an environment preset.
- $:GetSound Callback to return the actual filename of a sound asset.
- $:GetEvent Callback to retrieve a sound event.
- $:GetMarkerList Callback to retrieve a sound marker list.
- $:GetLoadedCount Callback to retrieve a count of loaded sound banks.
- $:GetMemUsage Callback to retrieve the amount of memory in use.
- $:GetLoadedName Callback to retrieve the filename for a sound asset index.
-
- This structure is used to provide overrides for all of the high-level loading
- functionality.
-*/
-
-EXPGROUP(Miles High Level Event System)
-
-DXDEC EXPAPI void AILCALL AIL_set_event_sample_functions(HSAMPLE (*CreateSampleCallback)(char const* SoundName, char const* SoundFileName, HDIGDRIVER dig, void* UserBuffer, S32 UserBufferLen), void (*ReleaseSampleCallback)(HSAMPLE));
-/*
- Allows you to manage sound data availability and sample handles.
-
- $:CreateSampleCallback Function that will be called when a sample handle is needed.
- $:ReleaseSampleCallback Function that will be called when a sample is no longer needed.
-
- A created sample is required to have all data pointers necessary to play - e.g.
- the event system needs to be able to just do a AIL_start_sample() on the returned
- handle and have it work.
-
- In the callback, SoundName is the name of the asset in Miles Studio, and SoundFileName
- is the value returned from Container_GetSound() (see also $AIL_set_event_bank_functions).
-
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_event_bank_functions(MILESBANKFUNCTIONS const * Functions);
-/*
- Allows you to override the internal bank file resource management..
-
- $:Functions A pointer to a structure containing all the callback functions.
-
- This function is used to completely override the high-level resource management system.
- It's not for overriding the IO - it's when you need much higher-level of control. Primarily
- targeted internally for the Auditioner to use, it also is used when deploying sound files
- externally.
-*/
-
-DXDEC EXPAPI MILESBANKFUNCTIONS const* AILCALL AIL_get_event_bank_functions();
-/*
- Returns the current functions used to retrieve and poll bank assets.
-*/
-
-
-typedef S32 AILCALLBACK AuditionStatus();
-typedef S32 AILCALLBACK AuditionPump();
-typedef void* AILCALLBACK AuditionOpenBank(char const* i_FileName);
-typedef S32 AILCALLBACK AuditionOpenComplete(void* i_Bank);
-typedef void AILCALLBACK AuditionCloseBank(void* i_Bank);
-
-typedef void AILCALLBACK AuditionSuppress(S32 i_IsSuppressed);
-typedef void AILCALLBACK AuditionFrameStart();
-typedef void AILCALLBACK AuditionFrameEnd();
-typedef void AILCALLBACK AuditionDefragStart();
-typedef void AILCALLBACK AuditionSetBlend(U64 i_EventId, char const* i_Name);
-typedef void AILCALLBACK AuditionSetPersist(U64 i_EventId, char const* i_Name, char const* i_Preset);
-typedef void AILCALLBACK AuditionEvent(char const* i_EventName, U64 i_EventId, U64 i_Filter, S32 i_Exists, void* i_InitBlock, S32 i_InitBlockLen);
-typedef void AILCALLBACK AuditionSound(U64 i_EventId, U64 i_SoundId, char const* i_Sound, char const* i_Labels, float i_Volume, S32 i_Delay, float i_Pitch);
-typedef void AILCALLBACK AuditionSoundComplete(U64 i_SoundId);
-typedef void AILCALLBACK AuditionSoundPlaying(U64 i_SoundId);
-typedef void AILCALLBACK AuditionSoundFlags(U64 i_SoundId, S32 i_Flags);
-typedef void AILCALLBACK AuditionSoundLimited(U64 i_SoundId, char const* i_Label);
-typedef void AILCALLBACK AuditionSoundEvicted(U64 i_SoundId, U64 i_ForSound, S32 i_Reason);
-typedef void AILCALLBACK AuditionControl(U64 i_EventId, char const* i_Labels, U8 i_ControlType, U64 i_Filter);
-typedef void AILCALLBACK AuditionSoundBus(U64 i_SoundId, U8 i_BusIndex);
-
-typedef void AILCALLBACK AuditionError(U64 i_Id, char const* i_Details);
-
-typedef void AILCALLBACK AuditionAsyncQueued(U64 i_RelevantId, S32 i_AsyncId, char const* i_Asset);
-typedef void AILCALLBACK AuditionAsyncLoad(S32 i_AsyncId, S32 i_ExpectedData);
-typedef void AILCALLBACK AuditionAsyncError(S32 i_AsyncId);
-typedef void AILCALLBACK AuditionAsyncComplete(S32 i_AsyncId, S32 i_DataLoaded);
-typedef void AILCALLBACK AuditionAsyncCancel(S32 i_AsyncId);
-typedef void AILCALLBACK AuditionListenerPosition(float x, float y, float z);
-typedef void AILCALLBACK AuditionSoundPosition(U64 i_Sound, float x, float y, float z);
-typedef void AILCALLBACK AuditionSendCPU(HDIGDRIVER i_Driver);
-typedef void AILCALLBACK AuditionUpdateDataCount(S32 i_CurrentDataLoaded);
-typedef void AILCALLBACK AuditionSendCount(S32 i_Count);
-typedef void AILCALLBACK AuditionHandleSystemLoad(S32 i_Avail, S32 i_Total);
-typedef void AILCALLBACK AuditionVarState(char const* i_Var, U64 i_SoundId, S32 i_Int, void* i_4ByteValue);
-typedef void AILCALLBACK AuditionRampState(char const* i_Ramp, U64 i_SoundId, S32 i_Type, float i_Current);
-typedef void AILCALLBACK AuditionSoundState(U64 i_SoundId, float i_FinalVol, float i_3DVol, float i_BlendVol, float i_BlendPitch, float i_RampVol, float i_RampWet, float i_RampLp, float i_RampRate);
-
-typedef void AILCALLBACK AuditionClearState();
-typedef void AILCALLBACK AuditionCompletionEvent(U64 i_CompletionEventId, U64 i_ParentSoundId);
-typedef void AILCALLBACK AuditionAddRamp(U64 i_ParentSoundId, S32 i_Type, char const* i_Name, char const* i_Query, U64 i_EventId);
-
-typedef struct _MILESAUDITIONFUNCTIONS
-{
- AuditionStatus* Status;
- AuditionPump* Pump;
- AuditionOpenBank* OpenBank;
- AuditionOpenComplete* OpenComplete;
- AuditionCloseBank* CloseBank;
-
- AuditionSuppress* Suppress;
- AuditionFrameStart* FrameStart;
- AuditionFrameEnd* FrameEnd;
- AuditionDefragStart* DefragStart;
- AuditionSetBlend* SetBlend;
- AuditionSetPersist* SetPersist;
- AuditionEvent* Event;
- AuditionSound* Sound;
- AuditionSoundComplete* SoundComplete;
- AuditionSoundPlaying* SoundPlaying;
- AuditionSoundFlags* SoundFlags;
- AuditionSoundLimited* SoundLimited;
- AuditionSoundEvicted* SoundEvicted;
- AuditionControl* Control;
- AuditionSoundBus* SoundBus;
-
- AuditionError* Error;
-
- AuditionAsyncQueued* AsyncQueued;
- AuditionAsyncLoad* AsyncLoad;
- AuditionAsyncError* AsyncError;
- AuditionAsyncComplete* AsyncComplete;
- AuditionAsyncCancel* AsyncCancel;
- AuditionListenerPosition* ListenerPosition;
- AuditionSoundPosition* SoundPosition;
- AuditionSendCPU* SendCPU;
- AuditionSendCount* SendCount;
- AuditionUpdateDataCount* UpdateDataCount;
- AuditionHandleSystemLoad* HandleSystemLoad;
- AuditionVarState* VarState;
- AuditionRampState* RampState;
- AuditionSoundState* SoundState;
-
- AuditionClearState* ClearState;
- AuditionCompletionEvent* CompletionEvent;
- AuditionAddRamp* AddRamp;
-} MILESAUDITIONFUNCTIONS;
-
-DXDEC void AILCALL MilesEventSetAuditionFunctions(MILESAUDITIONFUNCTIONS const* i_Functions);
-
-// Auditioner lib functions.
-EXPGROUP(auditioning)
-
-EXPTYPEBEGIN typedef S32 MILESAUDITIONCONNECTRESULT;
-#define MILES_CONNECTED 0
-#define MILES_CONNECT_FAILED 1
-#define MILES_HOST_NOT_FOUND 2
-#define MILES_SERVER_ERROR 3
-EXPTYPEEND
-/*
- Return values for $AIL_audition_connect.
-
- $:MILES_CONNECTED The Auditioner connected and successfully executed the handshake.
- $:MILES_CONNECT_FAILED The Auditioner couldn't connect - either the IP wasn't valid, or Miles Sound Studio wasn't accepting connections.
- $:MILES_HOST_NOT_FOUND The given host name could not be resolved to an IP.
- $:MILES_SERVER_ERROR We connected, but the server was either another app on the same port, or the server version was incorrect.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_audition_connect(char const* i_Address);
-/*
- Connect to a currently running Miles Sound Studio.
-
- $:i_Address The IP or host name of the computer running Miles Sound Studio. Use $AIL_audition_local_host to connect to the same machine as the runtime.
- $:return One of $MILESAUDITIONCONNECTRESULT
-
- The is a synchronous connection attempt to Miles Sound Studio - it will not return until it is happy with the connection
- and the server, or a failure occurs.
-
- This must be called before any $AIL_add_soundbank calls.
-*/
-
-DXDEC EXPAPI char const* AILCALL AIL_audition_local_host();
-/*
- Return the host name of the local machine.
-*/
-
-// Defines - must match values in studio/Common.h
-EXPTYPEBEGIN typedef S32 MILESAUDITIONLANG;
-#define MILES_LANG_ENGLISH 1
-#define MILES_LANG_FRENCH 2
-#define MILES_LANG_GERMAN 3
-#define MILES_LANG_SPANISH 4
-#define MILES_LANG_ITALIAN 5
-#define MILES_LANG_JAPANESE 6
-#define MILES_LANG_KOREAN 7
-#define MILES_LANG_CHINESE 8
-#define MILES_LANG_RUSSIAN 9
-EXPTYPEEND
-/*
- Values representing the various languages the high level tool allows.
-
- $:MILES_LANG_ENGLISH English
- $:MILES_LANG_FRENCH French
- $:MILES_LANG_GERMAN German
- $:MILES_LANG_SPANISH Spanish
- $:MILES_LANG_ITALIAN Italian
- $:MILES_LANG_JAPANESE Japanese
- $:MILES_LANG_KOREAN Korean
- $:MILES_LANG_CHINESE Chinese
- $:MILES_LANG_RUSSIAN Russian
-
- Values representing the various languages the high level tool allows.
-*/
-
-EXPTYPEBEGIN typedef S32 MILESAUDITIONPLAT;
-#define MILES_PLAT_WIN 1
-#define MILES_PLAT_MAC 2
-#define MILES_PLAT_PS3 3
-#define MILES_PLAT_360 4
-#define MILES_PLAT_3DS 5
-#define MILES_PLAT_PSP 6
-#define MILES_PLAT_IPHONE 7
-#define MILES_PLAT_LINUX 8
-#define MILES_PLAT_WII 9
-#define MILES_PLAT_PSP2 10
-#define MILES_PLAT_WIIU 11
-#define MILES_PLAT_SEKRIT 12
-#define MILES_PLAT_SEKRIT2 13
-#define MILES_PLAT_WIN64 14
-#define MILES_PLAT_LINUX64 15
-#define MILES_PLAT_MAC64 16
-#define MILES_PLAT_WINRT32 17
-#define MILES_PLAT_WINRT64 18
-#define MILES_PLAT_WINPH32 19
-#define MILES_PLAT_ANDROID 20
-
-EXPTYPEEND
-/*
- Values representing the various platforms the high level tool allows.
-
- $:MILES_PLAT_WIN Microsoft Win32/64
- $:MILES_PLAT_MAC Apple OSX
- $:MILES_PLAT_PS3 Sony PS3
- $:MILES_PLAT_360 Microsoft XBox360
- $:MILES_PLAT_3DS Nintendo 3DS
- $:MILES_PLAT_PSP Sony PSP
- $:MILES_PLAT_IPHONE Apple iDevices
- $:MILES_PLAT_LINUX Linux Flavors
- $:MILES_PLAT_WII Nintendo Wii
- $:MILES_PLAT_PSP2 Sony NGP
-
- Values representing the various platforms the high level tool allows.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_audition_startup(S32 i_ProfileOnly, S32 i_Language, S32 i_Platform);
-/*
- Binds the Auditioner to the Miles Event Runtime.
-
- $:i_ProfileOnly Specify 0 to use assets from the connected Miles Sound Studio, and 1 to use assets from disc.
- $:i_Language One of $MILESAUDITIONLANG, or zero to use Default assets. See comments below.
- $:i_Platform One of $MILESAUDITIONPLAT, or zero to use the current platform. See comments below.
-
- The Auditioner can run in one of two modes - the first is standard mode, where all assets
- are loaded from the server, and profiling data is sent back to the server. The second is
- Profiling mode, where the assets are loaded exactly as they would be under normal execution,
- but all of the profiling data is sent to the server.
-
- The $(AIL_audition_startup::i_Language) and the $(AIL_audition_startup::i_Platform) are used to determine what assets Miles Sound Studio sends
- the Auditioner, and as a result are not used in Profiling Mode. Otherwise these are equivalent to
- the options selected for compiling banks.
-
- This must be called before any $AIL_add_soundbank calls.
-*/
-
-DXDEC EXPAPI void AILCALL AIL_audition_shutdown();
-/*
- Removes the Auditioner from the Miles Event Runtime.
-*/
-
-EXPGROUP(Miles High Level Event System)
-
-DXDEC EXPAPI void AILCALL AIL_event_system_state(HEVENTSYSTEM system, MILESEVENTSTATE* state);
-/*
- Returns an information structure about the current state of the Miles Event System.
-
- $:system The system to retrieve information for, or zero for the default system.
- $:state A pointer to a structure to receive the state information.
-
- This function is a debugging aid - it returns information for the event system.
-*/
-
-DXDEC EXPAPI U32 AILCALL AIL_event_system_command_queue_remaining();
-/*
- Returns the number of bytes remaining in the command buffer.
-
- This can be invalid for a number of reasons - first, if the
- command buffer will need to wrap for the next queue, the effective
- bytes remaining will be lower. Second, if an enqueue occurs on another
- thread in the interim, the value will be outdated.
-*/
-
-DXDEC EXPAPI S32 AILCALL AIL_get_event_length(char const* i_EventName);
-/*
- Returns the length of the first sound referenced in the named event, in milliseconds.
-
- $:i_EventName The name of an event that starts a sound.
- $:return The length in milliseconds, or 0 if there is an error, or the event has no sound references, or the sound was not found.
-
- This looks up the given event and searches for the first Start Sound event step, then
- uses the first sound name in its list to look up the length. As such, if the start sound
- step has multiple sounds, the rest will be ignored.
-*/
-
-// Callback for the error handler.
-EXPAPI typedef void AILCALLBACK AILEVENTERRORCB(S64 i_RelevantId, char const* i_Resource);
-/*
- The function prototype to use for a callback that will be made when the event system
- encounters an unrecoverable error.
-
- $:i_RelevantId The ID of the asset that encountered the error, as best known. EventID or SoundID.
- $:i_Resource A string representing the name of the resource the error is in regards to, or 0 if unknown.
-
- The error description can be retrieved via $AIL_last_error.
-*/
-
-
-
-EXPAPI typedef S32 AILCALLBACK MSS_USER_RAND( void );
-/*
- The function definition to use when defining your own random function.
-
- You can define a function with this prototype and pass it to $AIL_register_random
- if you want to tie the Miles random calls in with your game's (for logging and such).
-*/
-
-DXDEC EXPAPI void AILCALL AIL_set_event_error_callback(AILEVENTERRORCB * i_ErrorCallback);
-/*
- Set the error handler for the event system.
-
- $:i_ErrorHandler The function to call when an error is encountered.
-
- Generally the event system handles errors gracefully - the only noticeable effect
- is that a given sound won't play, or a preset doesn't get set. As a result, the errors
- can sometimes be somewhat invisible. This function allows you to see what went wrong,
- when it went wrong.
-
- The basic usage is to have the callback check $AIL_last_error() for the overall category of
- failure. The parameter passed to the callback might provide some context, but it can and will
- be zero on occasion. Generally it will represent the resource string that is being worked on when the error
- occurred.
-
- Note that there are two out of memory errors - one is the event system ran out of memory - meaning
- the value passed in to $AIL_startup_event_system was insufficient for the current load, and
- the other is the memory used for sound data - allocated via $AIL_mem_alloc_lock - ran out.
-*/
-
-
-DXDEC EXPAPI void AILCALL AIL_register_random(MSS_USER_RAND * rand_func);
-/*
- Sets the function that Miles will call to obtain a random number.
-
- Use this function to set your own random function that the Miles Event System will call when it needs a random number.
- This lets you control the determinism of the event system.
-*/
-
-
-
-
-#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 *FLT_STARTUP)(void);
-
-typedef FLTRESULT (AILCALL *FLT_SHUTDOWN)(void);
-
-typedef C8 * (AILCALL *FLT_ERROR)(void);
-
-typedef HDRIVERSTATE (AILCALL *FLT_OPEN_DRIVER) (MSS_ALLOC_TYPE * palloc,
- MSS_FREE_TYPE * pfree,
- UINTa user,
- HDIGDRIVER dig, void * memory);
-
-typedef FLTRESULT (AILCALL *FLT_CLOSE_DRIVER) (HDRIVERSTATE state);
-
-typedef void (AILCALL *FLT_PREMIX_PROCESS) (HDRIVERSTATE driver);
-
-typedef S32 (AILCALL *FLT_POSTMIX_PROCESS) (HDRIVERSTATE driver, void *output_buffer);
-
-//############################################################################
-//## ##
-//## Interface "Pipeline filter sample services" ##
-//## ##
-//############################################################################
-
-typedef HSAMPLESTATE (AILCALL * FLTSMP_OPEN_SAMPLE) (HDRIVERSTATE driver,
- HSAMPLE S,
- void * memory);
-
-typedef FLTRESULT (AILCALL * FLTSMP_CLOSE_SAMPLE) (HSAMPLESTATE state);
-
-typedef void (AILCALL * FLTSMP_SAMPLE_PROCESS) (HSAMPLESTATE state,
- void * source_buffer,
- void * dest_buffer, // may be the same as src
- S32 n_samples,
- S32 is_stereo );
-
-typedef S32 (AILCALL * FLTSMP_SAMPLE_PROPERTY) (HSAMPLESTATE state,
- HPROPERTY property,
- void* before_value,
- void const* new_value,
- void* after_value
- );
-
-//############################################################################
-//## ##
-//## Interface "MSS output filter" ##
-//## ##
-//############################################################################
-
-typedef S32 (AILCALL * VFLT_ASSIGN_SAMPLE_VOICE) (HDRIVERSTATE driver,
- HSAMPLE S);
-
-typedef void (AILCALL * VFLT_RELEASE_SAMPLE_VOICE) (HDRIVERSTATE driver,
- HSAMPLE S);
-
-typedef S32 (AILCALL * VFLT_START_SAMPLE_VOICE) (HDRIVERSTATE driver,
- HSAMPLE S);
-
-//############################################################################
-//## ##
-//## Interface "Voice filter driver services" ##
-//## ##
-//############################################################################
-
-typedef S32 (AILCALL * VDRV_DRIVER_PROPERTY) (HDRIVERSTATE driver,
- HPROPERTY property,
- void* before_value,
- void const* new_value,
- void* after_value
- );
-
-typedef S32 (AILCALL * VDRV_FORCE_UPDATE) (HDRIVERSTATE driver);
-
-//############################################################################
-//## ##
-//## Interface "Voice filter sample services" ##
-//## ##
-//############################################################################
-
-typedef S32 (AILCALL * VSMP_SAMPLE_PROPERTY) (HSAMPLE S,
- HPROPERTY property,
- void* before_value,
- void const* new_value,
- void* after_value
- );
-
-//
-// Pipeline filter calls
-//
-
-DXDEC HPROVIDER AILCALL AIL_digital_output_filter (HDIGDRIVER dig);
-
-DXDEC S32 AILCALL AIL_enumerate_filters (HMSSENUM *next,
- HPROVIDER *dest,
- C8 * *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,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-DXDEC S32 AILCALL AIL_filter_property (HPROVIDER lib,
- C8 const* name,
- void* before_value,
- void const* new_value,
- void* after_value
- );
-
-DXDEC S32 AILCALL AIL_enumerate_output_filter_driver_properties
- (HPROVIDER lib,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-DXDEC S32 AILCALL AIL_output_filter_driver_property
- (HDIGDRIVER dig,
- C8 const * name,
- void* before_value,
- void const* new_value,
- void* after_value
- );
-
-DXDEC S32 AILCALL AIL_enumerate_output_filter_sample_properties
- (HPROVIDER lib,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-DXDEC S32 AILCALL AIL_enumerate_filter_sample_properties
- (HPROVIDER lib,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-DXDEC S32 AILCALL AIL_enumerate_sample_stage_properties
- (HSAMPLE S,
- SAMPLESTAGE stage,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-DXDEC S32 AILCALL AIL_sample_stage_property
- (HSAMPLE S,
- SAMPLESTAGE stage,
- C8 const * name,
- S32 channel,
- void* before_value,
- void const* new_value,
- void* after_value
- );
-
-#define AIL_filter_sample_property(S,name,beforev,newv,afterv) AIL_sample_stage_property((S),SP_FILTER_0,(name),-1,(beforev),(newv),(afterv))
-
-typedef struct _FLTPROVIDER
-{
- S32 provider_flags;
- S32 driver_size;
- S32 sample_size;
-
- 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;
-
- struct _FLTPROVIDER *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
-#define FPROV_SIDECHAIN 0x0080 // Filter has an "Input" property on the 3rd index for side chaining.
-
-#define FPROV_SPU_MASK 0xff0000 // Mask here the SPU INDEX STARTS
-#define FPROV_SPU_INDEX( val ) ( ( val >> 16 ) & 0xff )
-#define FPROV_MAKE_SPU_INDEX( val ) ( val << 16 )
-
-
-
-#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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 // MSS_FLT_SUPPORTED
-
-typedef struct _FLTPROVIDER
-{
- U32 junk;
-} FLTPROVIDER;
-
-#endif // MSS_FLT_SUPPORTED
-
-#endif // MSS_BASIC
-
-RADDEFEND
-
-#endif // MSS_H