aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Windows64/Miles/include
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
parentf012250219abcdb0d07cd60ca2089fbb63dc222c (diff)
Miniaudio Implementation (+stb_vorbis) (#624)
* Miniaudio Implementation * Do not link miles + remove miles lib
Diffstat (limited to 'Minecraft.Client/Windows64/Miles/include')
-rw-r--r--Minecraft.Client/Windows64/Miles/include/imssapi.h3267
-rw-r--r--Minecraft.Client/Windows64/Miles/include/mss.h8429
-rw-r--r--Minecraft.Client/Windows64/Miles/include/rrcore.h2322
-rw-r--r--Minecraft.Client/Windows64/Miles/include/tmapi.h36
4 files changed, 0 insertions, 14054 deletions
diff --git a/Minecraft.Client/Windows64/Miles/include/imssapi.h b/Minecraft.Client/Windows64/Miles/include/imssapi.h
deleted file mode 100644
index 883a6fc1..00000000
--- a/Minecraft.Client/Windows64/Miles/include/imssapi.h
+++ /dev/null
@@ -1,3267 +0,0 @@
-#ifndef IMSSAPI_H
-#define IMSSAPI_H
-
-// Internal API file
-
-#if defined(IS_PS3) || defined(IS_PSP)
-#include <string.h>
-#endif
-
-#if defined(IS_WII)
-#include <string.h>
-#include <math.h>
-#endif
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if defined(IS_WIN32API) || defined(IS_WII)
- #pragma pack(push, 1)
-#endif
-#ifdef IS_32
- #if !defined(IS_WIN32API)
- #define ASMLINK
- #define ASMPARM
- #else
- #if defined(IS_XENON)
- #define ASMLINK __cdecl
- #define ASMPARM register
- #else
- #define ASMLINK __cdecl
- #define ASMPARM
- #endif
- #endif
-#else
- #define ASMLINK WINAPI
- #define ASMPARM
-#endif
-
-#ifndef YES
-#define YES 1
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#define MSSHIWORD(ptr) (((U32)ptr)>>16)
-#define MSSLOWORD(ptr) ((U16)((U32)ptr))
-
-#ifndef NO
-#define NO 0
-#endif
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifdef IS_MAC
-
-#if !defined(max)
-#define max(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-#if !defined(min)
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-#endif
-
-#ifdef IS_WATCOM
-
-#if !defined(max) // Watcom stdlib.h doesn't define these for C++
-#define max(a,b) (((a) > (b)) ? (a) : (b))
-#endif
-#if !defined(min)
-#define min(a,b) (((a) < (b)) ? (a) : (b))
-#endif
-
-#endif
-
-#ifdef IS_WIN64
-
- #define PTRFMT "0x%I64X"
- #define SINTFMT "%I64d"
- #define HPFMT "%ld"
-
-#else
-
- #if defined(IS_PS3) || defined(IS_PSP) || defined(IS_3DS)
-
- #define PTRFMT "0x%lX"
- #define SINTFMT "%d" // (GCC warns when ints printed with %ld)
- #define HPFMT "%ld"
-
- #else
-
- #define PTRFMT "0x%lX"
- #define SINTFMT "%ld"
- #define HPFMT "%ld"
-
- #endif
-
-#endif
-
-U32 AILCALL XMI_read_VLN(U8 const* *ptr);
-S32 AILCALL XMI_message_size(S32 status);
-void const * AILCALL XMI_find_sequence(U8 const *image, S32 sequence);
-S32 AIL_process_WAV_image( AILSOUNDINFO const * info, HSAMPLE sample );
-
-#ifdef IS_SPU
-#define NTELEMETRY
-#endif
-
-#include "tmapi.h"
-
-#ifdef NTELEMETRY
- #define miles_context 0
-#else
- extern HTELEMETRY g_Miles_Tm;
- extern S32 g_tm_log;
- #define miles_context g_Miles_Tm
-#endif
-
-//############################################################################
-//## ##
-//## API function prototypes ##
-//## ##
-//############################################################################
-
-#define check_hardware_buffer( S, flags )
-#define hardware_stop( S )
-#define set_hardware_position( S )
-#define hardware_spin_until_stopped( S )
-#define set_hardware_volume( S )
-#define set_master_hardware_volume( dig )
-#define set_hardware_loop_region( S )
-#define set_hardware_low_pass( S )
-
-extern void AILCALL InMilesMutex(void);
-extern void AILCALL OutMilesMutex(void);
-
-#ifdef IS_WIN32API
-
-#ifdef NTAPI
-extern HWND AILCALL AIL_API_HWND (void);
-
-void AILEXPORT API_timer (UINT IDEvent,
- UINT uReserved,
- DWORD dwUser,
- DWORD dwReserved1,
- DWORD dwReserved2);
-
-#endif
-
-extern S32 MilesCount;
-extern U32 lastapitimerms;
-
- void AILCALL Set_thread_name( U32 thread_id, char const * thread_name );
-
-#endif
-
-
-#ifdef IS_MAC
- #if defined(__CARBON__)
- ProcessSerialNumber AILCALL AIL_API_Process(void);
- #endif
-#endif
-
-
-#ifdef _DEBUG
-
-DXDEC void AILEXPORT AIL_debug_printf( char const *fmt, ...);
-
-#else
-
-#define AIL_debug_printf(...)
-
-#endif
-
-#ifndef MSS_SPU_PROCESS
-
-//
-// Global preference array
-//
-extern SINTa AIL_preference [N_PREFS];
-
-#endif
-
-extern char AIL_redist_directory[260];
-
-extern S32 AILCALL match_suffix(char const* suffix,char const* file_suffix);
-
-#if !defined(IS_X86) || !defined(IS_MAC) // use mix rib on x86 mac
-DXDEC S32 AILCALL MIX_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
-
-//
-// High-level support services
-//
-
-extern void AILCALL AIL_API_startup (void);
-extern void AILCALL AIL_API_shutdown (void);
-
-extern SINTa AILCALL AIL_API_set_preference (U32 number,
- SINTa value);
-
-//
-// Low-level support services
-//
-
-extern void AILCALL AIL_API_sleep (U32 ms);
-
-extern S32 AILCALL AIL_API_background (void);
-
-extern void AILCALL AIL_API_mem_free_lock (void *ptr);
-
-extern void* AILCALL AIL_API_mem_alloc_lock (UINTa size);
-
-//
-// Process services
-//
-
-extern HTIMER AILCALL AIL_API_register_timer (AILTIMERCB fn);
-
-extern UINTa AILCALL AIL_API_set_timer_user (HTIMER timer,
- UINTa user);
-
-extern void AILCALL AIL_API_set_timer_period (HTIMER timer,
- U32 microseconds);
-
-extern void AILCALL AIL_API_set_timer_frequency (HTIMER timer,
- U32 hertz) ;
-
-extern void AILCALL AIL_API_set_timer_divisor (HTIMER timer,
- U32 PIT_divisor);
-
-extern void AILCALL AIL_API_start_timer (HTIMER timer) ;
-extern void AILCALL AIL_API_start_all_timers (void);
-
-extern void AILCALL AIL_API_stop_timer (HTIMER timer);
-extern void AILCALL AIL_API_stop_all_timers (void);
-
-extern void AILCALL AIL_API_release_timer_handle(HTIMER timer);
-extern void AILCALL AIL_API_release_all_timers (void);
-
-extern void Container_FreeAll();
-extern void* Container_GetPreset(char const* i_PresetName);
-extern void* Container_GetEnvironment(char const* i_EnvironmentName);
-extern S32 Container_GetSound(char const* i_SoundName, char* o_SoundFileName, MILESBANKSOUNDINFO* o_SoundInfo);
-extern void* Container_GetEvent(char const* i_EventName);
-extern void* Container_GetMarkerList(char const* i_SoundName);
-extern S32 Container_GetLoadedCount();
-extern S32 Container_GetMemUsage();
-extern char const* Container_GetLoadedName(S32 i_Index);
-
-extern const U8* AILCALL MilesFindEventInternal(HMSOUNDBANK i_Bank, const char* i_EventName);
-extern void AILCALL MilesClearEventQueueInternal();
-extern void AILCALL MilesRegisterRandInternal(MSS_USER_RAND * rand);
-extern U64 AILCALL MilesEnqueueEventInternal(const U8* i_Event, void* i_UserBuffer, S32 i_UserBufferLen, S32 i_EnqueueFlags, U64 i_EventFilter);
-extern U64 AILCALL MilesEnqueueEventByNameInternal(char const* i_Name);
-extern U64 AILCALL MilesEnqueueEventContextInternal(HEVENTSYSTEM i_Context, const U8* i_Event, void* i_UserBuffer, S32 i_UserBufferLen, S32 i_EnqueueFlags, U64 i_EventFilter);
-
-extern S32 AILCALL MilesBeginEventQueueProcessingInternal();
-extern S32 AILCALL MilesCompleteEventQueueProcessingInternal();
-
-extern S32 AILCALL MilesEnumerateSoundInstancesInternal(HEVENTSYSTEM i_System, HMSSENUM* io_Next, S32 i_Status, const char* i_Labels, U64 search_for_ID, MILESEVENTSOUNDINFO* o_Info);
-extern S32 AILCALL MilesEnumeratePresetPersistsInternal(HEVENTSYSTEM i_System, HMSSENUM* io_Next, const char** o_Name);
-extern HEVENTSYSTEM AILCALL MilesStartupEventSystemInternal(HDIGDRIVER i_Driver, S32 i_CommandBufferSize, char* i_Memory, S32 i_MemoryLen);
-extern HEVENTSYSTEM AILCALL MilesAddEventSystemInternal(HDIGDRIVER i_Driver);
-extern S32 AILCALL MilesSetSoundLabelLimitsInternal(HEVENTSYSTEM i_System, U64 i_Id, const char* i_SoundLimits, char const* i_Name);
-
-
-extern void AILCALL MilesShutdownEventSystemInternal();
-extern HMSOUNDBANK AILCALL MilesAddSoundBankInternal(const char* i_FileName, char const* i_Name);
-extern S32 AILCALL MilesReleaseSoundBankInternal(HMSOUNDBANK i_Bank);
-extern char* AILCALL MilesTextDumpEventSystemInternal();
-extern void AILCALL MilesSetEventErrorCallbackInternal(AILEVENTERRORCB i_Callback);
-
-extern void AILCALL MilesSetVarIInternal(UINTa i_System, char const* i_Name, S32 i_Value);
-extern void AILCALL MilesSetVarFInternal(UINTa i_System, char const* i_Name, F32 i_Value);
-extern S32 AILCALL MilesGetVarFInternal(UINTa i_Context, char const* i_Name, F32* o_Value);
-extern S32 AILCALL MilesGetVarIInternal(UINTa i_Context, char const* i_Name, S32* o_Value);
-extern void AILCALL MilesSetSoundStartOffsetInternal(HMSSENUM i_Instance, S32 i_Offset, S32 i_IsMs);
-extern void AILCALL MilesRequeueAsyncsInternal();
-
-extern AIL_file_open_callback MSS_open;
-extern AIL_file_close_callback MSS_close;
-extern AIL_file_seek_callback MSS_seek;
-extern AIL_file_read_callback MSS_read;
-
-extern S32 disk_err;
-extern char MSS_Directory[260];
-
-
-extern void stream_background(void); // background service for streaming
-
-#define call_fetch_CB( ASI,usr,dest,bytes,offset ) ((AILASIFETCHCB)((ASI)->fetch_CB))(usr,dest,bytes,offset)
-
-extern HPROVIDER find_ASI_provider(const C8 *attrib, const C8 *filename);
-
-
-//
-// M3D services
-//
-
-extern HDIGDRIVER AILCALL AIL_API_primary_digital_driver (HDIGDRIVER new_primary);
-
-extern void AILCALL AIL_API_set_sample_3D_distances (HSAMPLE samp,
- F32 max_dist,
- F32 min_dist,
- S32 auto_3D_wet_atten);
-
-extern void AILCALL AIL_API_sample_3D_distances (HSAMPLE samp,
- F32 * max_dist,
- F32 * min_dist,
- S32 * auto_3D_wet_atten);
-
-extern void AILCALL AIL_API_set_sample_obstruction (HSAMPLE S,
- F32 obstruction);
-
-extern void AILCALL AIL_API_set_sample_exclusion (HSAMPLE S,
- F32 exclusion);
-
-extern void AILCALL AIL_API_set_sample_occlusion (HSAMPLE S,
- F32 occlusion);
-
-extern void AILCALL AIL_API_set_sample_3D_cone (HSAMPLE S,
- F32 inner_angle,
- F32 outer_angle,
- F32 outer_volume);
-
-extern F32 AILCALL AIL_API_sample_obstruction (HSAMPLE S);
-
-extern F32 AILCALL AIL_API_sample_occlusion (HSAMPLE S);
-
-extern F32 AILCALL AIL_API_sample_exclusion (HSAMPLE S);
-
-extern void AILCALL AIL_API_sample_3D_cone (HSAMPLE S,
- F32 *inner_angle,
- F32 *outer_angle,
- F32 *outer_volume);
-
-extern S32 AILCALL AIL_API_room_type (HDIGDRIVER dig,
- S32 bus_index);
-
-extern void AILCALL AIL_API_set_room_type (HDIGDRIVER dig,
- S32 bus_index,
- S32 EAX_room_type);
-
-extern F32 AILCALL AIL_API_3D_rolloff_factor (HDIGDRIVER dig);
-
-extern void AILCALL AIL_API_set_3D_rolloff_factor (HDIGDRIVER dig,
- F32 factor );
-
-extern F32 AILCALL AIL_API_3D_doppler_factor (HDIGDRIVER dig);
-
-extern void AILCALL AIL_API_set_3D_doppler_factor (HDIGDRIVER dig,
- F32 factor );
-
-extern F32 AILCALL AIL_API_3D_distance_factor (HDIGDRIVER dig);
-
-extern void AILCALL AIL_API_set_3D_distance_factor (HDIGDRIVER dig,
- F32 factor );
-
-extern void AILCALL AIL_API_set_sample_3D_position (HSAMPLE S,
- F32 X,
- F32 Y,
- F32 Z);
-
-extern void AILCALL AIL_API_set_sample_3D_velocity (HSAMPLE S,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
-
-extern void AILCALL AIL_API_set_sample_3D_velocity_vector (HSAMPLE S,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
-
-extern void AILCALL AIL_API_set_sample_3D_orientation (HSAMPLE S,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
-
-extern S32 AILCALL AIL_API_sample_3D_position (HSAMPLE S,
- F32 *X,
- F32 *Y,
- F32 *Z);
-
-extern void AILCALL AIL_API_sample_3D_velocity (HSAMPLE S,
- F32 *dX_per_ms,
- F32 *dY_per_ms,
- F32 *dZ_per_ms);
-
-extern void AILCALL AIL_API_sample_3D_orientation (HSAMPLE S,
- F32 *X_face,
- F32 *Y_face,
- F32 *Z_face,
- F32 *X_up,
- F32 *Y_up,
- F32 *Z_up);
-
-extern void AILCALL AIL_API_update_sample_3D_position (HSAMPLE S,
- F32 dt_milliseconds);
-
-extern void AILCALL AIL_API_set_listener_3D_position(HDIGDRIVER dig,
- F32 X,
- F32 Y,
- F32 Z);
-
-extern void AILCALL AIL_API_set_listener_3D_velocity(HDIGDRIVER dig,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms,
- F32 magnitude);
-
-extern void AILCALL AIL_API_set_listener_3D_velocity_vector (HDIGDRIVER dig,
- F32 dX_per_ms,
- F32 dY_per_ms,
- F32 dZ_per_ms);
-
-extern void AILCALL AIL_API_set_listener_3D_orientation (HDIGDRIVER dig,
- F32 X_face,
- F32 Y_face,
- F32 Z_face,
- F32 X_up,
- F32 Y_up,
- F32 Z_up);
-
-extern void AILCALL AIL_API_set_sample_3D_volume_falloff (HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-extern void AILCALL AIL_API_set_sample_3D_lowpass_falloff (HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-extern void AILCALL AIL_API_set_sample_3D_exclusion_falloff (HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-extern void AILCALL AIL_API_set_sample_3D_spread_falloff (HSAMPLE S, MSSGRAPHPOINT* graph, S32 pointcount);
-extern void AILCALL AIL_API_set_sample_3D_position_segments (HSAMPLE S, MSSVECTOR3D* points, S32 pointcount);
-extern void AILCALL AIL_API_set_sample_3D_spread (HSAMPLE S, F32 spread);
-
-extern void AILCALL AIL_API_listener_3D_position (HDIGDRIVER dig,
- F32 *X,
- F32 *Y,
- F32 *Z);
-
-extern void AILCALL AIL_API_listener_3D_velocity (HDIGDRIVER dig,
- F32 *dX_per_ms,
- F32 *dY_per_ms,
- F32 *dZ_per_ms);
-
-extern void AILCALL AIL_API_listener_3D_orientation (HDIGDRIVER dig,
- F32 *X_face,
- F32 *Y_face,
- F32 *Z_face,
- F32 *X_up,
- F32 *Y_up,
- F32 *Z_up);
-
-extern void AILCALL AIL_API_update_listener_3D_position (HDIGDRIVER dig,
- F32 dt_milliseconds);
-
-extern S32 AILCALL AIL_API_calculate_3D_channel_levels (HDIGDRIVER driver, //)
- 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);
-
-
-#ifdef IS_GENERICDIG
-extern HDIGDRIVER AILCALL AIL_API_open_generic_digital_driver( U32 frequency,
- S32 bits,
- S32 channel,
- U32 flags,
- RADSS_OPEN_FUNC dig_open);
-#else
-extern HDIGDRIVER AILCALL AIL_API_open_digital_driver( U32 frequency,
- S32 bits,
- S32 channel,
- U32 flags );
-#endif
-
-extern void AILCALL AIL_API_close_digital_driver( HDIGDRIVER dig );
-
-#if defined(IS_WINDOWS)
-
-extern S32 AILCALL AIL_API_digital_handle_release(HDIGDRIVER drvr);
-
-extern S32 AILCALL AIL_API_digital_handle_reacquire
- (HDIGDRIVER drvr);
-#endif
-
-#if defined(IS_WINDOWS) || (defined(IS_MAC) && !defined(IS_IPHONE))
-
-
-extern HDIGINPUT AILCALL AIL_API_open_input (AIL_INPUT_INFO *info);
-
-extern void AILCALL AIL_API_close_input (HDIGINPUT dig);
-
-extern AIL_INPUT_INFO *
- AILCALL AIL_API_get_input_info (HDIGINPUT dig);
-
-extern S32 AILCALL AIL_API_set_input_state (HDIGINPUT dig,
- S32 enable);
-
-#endif
-
-#ifdef MSS_FLT_SUPPORTED
-
-void * SS_execute_filter_chain(HSAMPLE S, //)
- void * src,
- void * temp_dest,
- S32 src_bytes,
- S32 is_stereo,
- S16 *dest_mono_sample_buffer);
-
-//
-// Internal FLT services
-//
-
-void FLT_init_list(void);
-
-FLTPROVIDER *FLT_find_provider_instance(HPROVIDER provider,
- HDIGDRIVER dig);
-
-void FLT_disconnect_driver(HDIGDRIVER dig);
-
-void FLT_call_premix_processors(HDIGDRIVER dig);
-
-S32 FLT_call_postmix_processors(HDIGDRIVER dig, void *output_buffer);
-
-//
-// FLT services
-//
-
-extern S32 AILCALL AIL_API_enumerate_filters (HMSSENUM *next,
- HPROVIDER *dest,
- C8 * *name);
-
-extern HDRIVERSTATE
- AILCALL AIL_API_open_filter (HPROVIDER lib,
- HDIGDRIVER dig);
-
-extern void AILCALL AIL_API_close_filter (HDRIVERSTATE filter);
-
-
-
-
-
-
-extern S32 AILCALL AIL_API_enumerate_filter_attributes
- (HPROVIDER lib,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-extern void AILCALL AIL_API_filter_attribute (HPROVIDER lib,
- C8 const * name,
- void * val);
-
-extern void AILCALL AIL_API_set_filter_preference
- (HPROVIDER lib,
- C8 const * name,
- void const * val);
-
-
-
-
-
-extern S32 AILCALL AIL_API_enumerate_filter_sample_attributes
- (HPROVIDER lib,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-extern void AILCALL AIL_API_filter_sample_attribute
- (HSAMPLE S,
- C8 const * name,
- void * val);
-
-extern void AILCALL AIL_API_set_filter_sample_preference
- (HSAMPLE S,
- C8 const * name,
- void const * val);
-#endif
-
-extern S32 AILCALL AIL_API_enumerate_digital_driver_attributes
- (HDIGDRIVER dig,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-extern void AILCALL AIL_API_digital_driver_attribute (HDIGDRIVER dig,
- C8 const * name,
- void * val);
-
-extern S32 AILCALL AIL_API_enumerate_digital_driver_preferences
- (HDIGDRIVER dig,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-extern void AILCALL AIL_API_set_digital_driver_preference(HDIGDRIVER dig,
- C8 const * name,
- void const * val);
-
-extern S32 AILCALL AIL_API_enumerate_sample_attributes
- (HSAMPLE S,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-extern void AILCALL AIL_API_sample_attribute (HSAMPLE S,
- C8 const * name,
- void * val);
-
-extern S32 AILCALL AIL_API_enumerate_sample_preferences
- (HSAMPLE S,
- HMSSENUM * next,
- RIB_INTERFACE_ENTRY * dest);
-
-extern void AILCALL AIL_API_set_sample_preference (HSAMPLE S,
- C8 const * name,
- void const * val);
-
-extern S32 AILCALL AIL_API_digital_CPU_percent(HDIGDRIVER dig);
-
-extern S32 AILCALL AIL_API_digital_SPU_percent(HDIGDRIVER dig);
-
-extern S32 AILCALL AIL_API_background_CPU_percent(void);
-
-extern S32 AILCALL AIL_API_digital_latency(HDIGDRIVER dig);
-
-extern HSAMPLE AILCALL AIL_API_allocate_sample_handle
- (HDIGDRIVER dig);
-
-extern HSAMPLE AILCALL AIL_API_allocate_bus(HDIGDRIVER dig);
-extern HSAMPLE AILCALL AIL_API_bus_sample_handle(HDIGDRIVER dig, S32 bus_index);
-extern S32 AILCALL AIL_API_install_bus_compressor(HDIGDRIVER dig, S32 bus_index, SAMPLESTAGE filter_stage, S32 input_bus_index);
-DXDEC void AILCALL AIL_free_all_busses(HDIGDRIVER dig); // For miles studio.
-
-extern HSAMPLE AILCALL AIL_API_allocate_file_sample
- (HDIGDRIVER dig,
- void const *file_image,
- S32 block);
-
-extern void AILCALL AIL_API_set_speaker_configuration
- (HDIGDRIVER dig,
- MSSVECTOR3D *array,
- S32 n_channels,
- F32 falloff_power);
-
-extern MSSVECTOR3D *
- AILCALL AIL_API_speaker_configuration
- (HDIGDRIVER dig,
- S32 *n_physical_channels,
- S32 *n_logical_channels,
- F32 *falloff_power,
- MSS_MC_SPEC *channel_spec);
-
-extern void AILCALL AIL_API_set_listener_relative_receiver_array
- (HDIGDRIVER dig,
- MSS_RECEIVER_LIST *array,
- S32 n_receivers);
-
-extern MSS_RECEIVER_LIST *
- AILCALL AIL_API_listener_relative_receiver_array
- (HDIGDRIVER dig,
- S32 *n_receivers);
-
-extern void AILCALL AIL_API_set_speaker_reverb_levels
- (HDIGDRIVER dig,
- F32 *wet_array,
- F32 *dry_array,
- MSS_SPEAKER const *speaker_index_array,
- S32 n_levels);
-
-extern S32 AILCALL AIL_API_speaker_reverb_levels (HDIGDRIVER dig,
- F32 * *wet_array,
- F32 * *dry_array,
- MSS_SPEAKER const * *speaker_index_array);
-
-extern void AILCALL AIL_API_release_sample_handle (HSAMPLE S);
-
-extern S32 AILCALL AIL_API_set_sample_file (HSAMPLE S,
- void const *file_image,
- S32 block);
-
-extern S32 AILCALL AIL_API_set_sample_info (HSAMPLE S,
- AILSOUNDINFO const * info);
-
-extern S32 AILCALL AIL_API_set_named_sample_file (HSAMPLE S,
- C8 const *file_type_suffix,
- void const *file_image,
- U32 file_size,
- S32 block);
-
-extern HPROVIDER AILCALL AIL_API_set_sample_processor (HSAMPLE S,
- SAMPLESTAGE pipeline_stage,
- HPROVIDER provider);
-
-extern HPROVIDER AILCALL AIL_API_set_digital_driver_processor
- (HDIGDRIVER dig,
- DIGDRVSTAGE pipeline_stage,
- HPROVIDER provider);
-
-extern HPROVIDER AILCALL AIL_API_sample_processor (HSAMPLE S,
- SAMPLESTAGE pipeline_stage);
-
-extern HPROVIDER AILCALL AIL_API_digital_driver_processor
- (HDIGDRIVER dig,
- DIGDRVSTAGE pipeline_stage);
-
-extern void AILCALL AIL_API_set_sample_address (HSAMPLE S,
- void const *start,
- U32 len);
-
-extern S32 AILCALL AIL_API_init_sample (HSAMPLE S,
- S32 format);
-
-extern void AILCALL AIL_API_set_sample_adpcm_block_size
- (HSAMPLE S,
- U32 blocksize);
-
-extern void AILCALL AIL_API_start_sample (HSAMPLE S);
-extern void AILCALL AIL_API_stop_sample (HSAMPLE S);
-extern void AILCALL AIL_API_end_fade_sample (HSAMPLE S);
-extern void AILCALL AIL_API_resume_sample (HSAMPLE S);
-extern void AILCALL AIL_API_end_sample (HSAMPLE S);
-
-extern void AILCALL AIL_API_sample_group_operation (HDIGDRIVER dig, S32 op, S32 start_id, S32 set_to_id);
-extern void AILCALL AIL_API_schedule_start_sample (HSAMPLE S, U64 mix_time_to_start);
-
-extern void AILCALL AIL_API_push_system_state (HDIGDRIVER dig, U32 flags, S16 crossfade_ms);
-extern void AILCALL AIL_API_pop_system_state (HDIGDRIVER dig, S16 crossfade_ms);
-
-extern void AILCALL AIL_API_set_sample_playback_rate
- (HSAMPLE S,
- S32 playback_rate);
-
-extern void AILCALL AIL_API_set_sample_playback_rate_factor
- (HSAMPLE S,
- F32 playback_rate_factor);
-
-extern void AILCALL AIL_API_set_sample_playback_delay
- (HSAMPLE S,
- S32 playback_delay);
-
-extern void AILCALL AIL_API_set_sample_volume_pan (HSAMPLE S,
- F32 volume,
- F32 pan);
-
-extern S32 AILCALL AIL_API_sample_channel_count (HSAMPLE S, U32 *mask);
-
-extern S32 AILCALL AIL_API_set_sample_is_3D (HSAMPLE S, //)
- S32 onoff);
-
-extern void AILCALL AIL_API_set_sample_speaker_scale_factors (HSAMPLE S, //)
- MSS_SPEAKER const * dest_speaker_indexes,
- F32 const * levels,
- S32 n_levels );
-
-extern void AILCALL AIL_API_sample_speaker_scale_factors (HSAMPLE S, //)
- MSS_SPEAKER const * dest_speaker_indexes,
- F32 * levels,
- S32 n_levels );
-
-extern void AILCALL AIL_API_set_sample_channel_levels (HSAMPLE S,
- MSS_SPEAKER const *source_speaker_indexes,
- MSS_SPEAKER const *dest_speaker_indexes,
- F32 const *levels,
- S32 n_levels);
-
-extern void AILCALL AIL_API_sample_channel_levels (HSAMPLE S,
- MSS_SPEAKER const *source_speaker_indexes,
- MSS_SPEAKER const *dest_speaker_indexes,
- F32 *levels,
- S32 n_levels);
-
-extern F32 AILCALL AIL_API_sample_output_levels (HSAMPLE S,
- MSS_SPEAKER const *source_speaker_indexes,
- MSS_SPEAKER const *dest_speaker_indexes,
- F32 *levels,
- S32 n_levels);
-
-extern void AILCALL AIL_API_set_sample_51_volume_pan( HSAMPLE S,
- F32 volume,
- F32 pan,
- F32 fb_pan,
- F32 center_level,
- F32 sub_level );
-
-extern void AILCALL AIL_API_sample_51_volume_pan ( HSAMPLE S,
- F32* volume,
- F32* pan,
- F32* fb_pan,
- F32* center_level,
- F32* sub_level );
-
-extern void AILCALL AIL_API_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 );
-
-extern void AILCALL AIL_API_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 );
-extern void AILCALL AIL_API_set_sample_volume_levels(HSAMPLE S,
- F32 left_level,
- F32 right_level);
-
-extern void AILCALL AIL_API_set_sample_reverb_levels(HSAMPLE S,
- F32 dry_level,
- F32 wet_level);
-
-extern void AILCALL AIL_API_set_sample_low_pass_cut_off( HSAMPLE S,
- S32 /*-1 or MSS_SPEAKER*/ input_channel,
- F32 cutoff );
-
-extern void AILCALL AIL_API_set_sample_loop_count (HSAMPLE S,
- S32 loop_count);
-
-extern void AILCALL AIL_API_set_sample_loop_block (HSAMPLE S,
- S32 loop_start_offset,
- S32 loop_end_offset);
-
-extern S32 AILCALL AIL_API_sample_loop_block (HSAMPLE S,
- S32 *loop_start_offset,
- S32 *loop_end_offset);
-
-extern U32 AILCALL AIL_API_sample_status (HSAMPLE S);
-
-extern S32 AILCALL AIL_API_sample_playback_rate (HSAMPLE S);
-
-extern F32 AILCALL AIL_API_sample_playback_rate_factor (HSAMPLE S);
-
-extern S32 AILCALL AIL_API_sample_playback_delay (HSAMPLE S);
-
-extern void AILCALL AIL_API_sample_volume_pan (HSAMPLE S,
- F32* volume,
- F32* pan);
-
-extern void AILCALL AIL_API_sample_volume_levels(HSAMPLE S,
- F32 * left_level,
- F32 * right_level);
-
-extern void AILCALL AIL_API_sample_reverb_levels(HSAMPLE S,
- F32 * dry_level,
- F32 * wet_level);
-
-extern F32 AILCALL AIL_API_sample_low_pass_cut_off(HSAMPLE S, S32 /*-1 or MSS_SPEAKER*/ channel);
-
-extern S32 AILCALL AIL_API_sample_loop_count (HSAMPLE S);
-
-extern void AILCALL AIL_API_set_digital_master_volume_level
- (HDIGDRIVER dig,
- F32 master_volume);
-
-extern F32 AILCALL AIL_API_digital_master_volume_level (HDIGDRIVER dig);
-
-extern void AILCALL AIL_API_set_digital_master_volume_levels(HDIGDRIVER dig,
- F32 left_level,
- F32 right_level);
-
-extern void AILCALL AIL_API_set_digital_master_reverb_levels(HDIGDRIVER dig,
- S32 bus_index,
- F32 dry_level,
- F32 wet_level);
-
-extern void AILCALL AIL_API_set_digital_master_room_type(HDIGDRIVER dig,
- S32 bus_index,
- S32 room_type);
-
-extern void AILCALL AIL_API_digital_master_reverb_levels(HDIGDRIVER dig,
- S32 bus_index,
- F32 * dry_level,
- F32 * wet_level);
-
-extern void AILCALL AIL_API_set_digital_master_reverb(HDIGDRIVER dig,
- S32 bus_index,
- F32 reverb_time,
- F32 reverb_predelay,
- F32 reverb_damping);
-
-extern void AILCALL AIL_API_digital_master_reverb(HDIGDRIVER dig,
- S32 bus_index,
- F32 * reverb_time,
- F32 * reverb_predelay,
- F32 * reverb_damping);
-
-extern S32 AILCALL AIL_API_minimum_sample_buffer_size
- (HDIGDRIVER dig,
- S32 playback_rate,
- S32 format);
-
-extern S32 AILCALL AIL_API_set_sample_buffer_count
- (HSAMPLE S,
- S32 n_buffers);
-
-extern S32 AILCALL AIL_API_sample_buffer_count (HSAMPLE S);
-
-extern S32 AILCALL AIL_API_sample_buffer_available (HSAMPLE S);
-
-extern S32 AILCALL AIL_API_sample_loaded_len( HSAMPLE S );
-
-extern S32 AILCALL AIL_API_load_sample_buffer (HSAMPLE S,
- S32 buff_num,
- void const *buffer,
- U32 len);
-
-extern S32 AILCALL AIL_API_sample_buffer_info (HSAMPLE S,
- S32 buff_num,
- U32 *pos,
- U32 *len,
- S32 *head,
- S32 *tail);
-
-extern U32 AILCALL AIL_API_sample_granularity (HSAMPLE S);
-
-extern void AILCALL AIL_API_set_sample_position (HSAMPLE S,
- U32 pos);
-
-extern U32 AILCALL AIL_API_sample_position (HSAMPLE S);
-
-extern AILSAMPLECB AILCALL AIL_API_register_SOB_callback
- (HSAMPLE S,
- AILSAMPLECB SOB);
-
-extern AILSAMPLECB AILCALL AIL_API_register_EOB_callback
- (HSAMPLE S,
- AILSAMPLECB EOB);
-
-extern AILSAMPLECB AILCALL AIL_API_register_EOS_callback
- (HSAMPLE S,
- AILSAMPLECB EOS);
-
-extern AILFALLOFFCB AILCALL AIL_API_register_falloff_function_callback
- (HSAMPLE S,
- AILFALLOFFCB falloff_cb);
-
-extern void AILCALL AIL_API_set_sample_user_data (HSAMPLE S,
- U32 index,
- SINTa value);
-
-extern SINTa AILCALL AIL_API_sample_user_data (HSAMPLE S,
- U32 index);
-
-extern S32 AILCALL AIL_API_active_sample_count (HDIGDRIVER dig);
-
-extern void AILCALL AIL_API_digital_configuration (HDIGDRIVER dig,
- S32 *rate,
- S32 *format,
- char *config);
-
-//
-// High-level XMIDI services
-//
-
-#if defined(IS_WINDOWS)
-
-extern S32 AILCALL AIL_API_midiOutOpen (HMDIDRIVER *drvr,
- LPHMIDIOUT *lphMidiOut,
- U32 dwDeviceID);
-
-extern void AILCALL AIL_API_midiOutClose (HMDIDRIVER mdi);
-
-
-extern S32 AILCALL AIL_API_MIDI_handle_release (HMDIDRIVER mdi);
-
-extern S32 AILCALL AIL_API_MIDI_handle_reacquire (HMDIDRIVER mdi);
-
-#else
-
-extern HMDIDRIVER AILCALL AIL_API_open_XMIDI_driver( U32 flags );
-
-extern void AILCALL AIL_API_close_XMIDI_driver( HMDIDRIVER mdi );
-
-#endif
-
-extern HSEQUENCE AILCALL AIL_API_allocate_sequence_handle
- (HMDIDRIVER mdi);
-
-extern void AILCALL AIL_API_release_sequence_handle
- (HSEQUENCE S);
-
-extern S32 AILCALL AIL_API_init_sequence (HSEQUENCE S,
- void const *start,
- S32 sequence_num);
-
-extern void AILCALL AIL_API_start_sequence (HSEQUENCE S);
-extern void AILCALL AIL_API_stop_sequence (HSEQUENCE S);
-extern void AILCALL AIL_API_resume_sequence (HSEQUENCE S);
-extern void AILCALL AIL_API_end_sequence (HSEQUENCE S);
-
-extern void AILCALL AIL_API_set_sequence_tempo (HSEQUENCE S,
- S32 tempo,
- S32 milliseconds);
-
-extern void AILCALL AIL_API_set_sequence_volume (HSEQUENCE S,
- S32 volume,
- S32 milliseconds);
-
-extern void AILCALL AIL_API_set_sequence_loop_count
- (HSEQUENCE S,
- S32 loop_count);
-
-extern U32 AILCALL AIL_API_sequence_status (HSEQUENCE S);
-
-extern S32 AILCALL AIL_API_sequence_tempo (HSEQUENCE S);
-extern S32 AILCALL AIL_API_sequence_volume (HSEQUENCE S);
-extern S32 AILCALL AIL_API_sequence_loop_count (HSEQUENCE S);
-
-extern void AILCALL AIL_API_set_XMIDI_master_volume
- (HMDIDRIVER mdi,
- S32 master_volume);
-
-extern S32 AILCALL AIL_API_XMIDI_master_volume (HMDIDRIVER mdi);
-
-//
-// Low-level XMIDI services
-//
-
-extern S32 AILCALL AIL_API_active_sequence_count (HMDIDRIVER mdi);
-
-extern S32 AILCALL AIL_API_controller_value (HSEQUENCE S,
- S32 channel,
- S32 controller_num);
-
-extern S32 AILCALL AIL_API_channel_notes (HSEQUENCE S,
- S32 channel);
-
-extern void AILCALL AIL_API_sequence_position (HSEQUENCE S,
- S32 *beat,
- S32 *measure);
-
-extern void AILCALL AIL_API_branch_index (HSEQUENCE S,
- U32 marker);
-
-extern AILPREFIXCB AILCALL AIL_API_register_prefix_callback
- (HSEQUENCE S,
- AILPREFIXCB callback);
-
-extern AILTRIGGERCB AILCALL AIL_API_register_trigger_callback
- (HSEQUENCE S,
- AILTRIGGERCB callback);
-
-extern AILSEQUENCECB AILCALL AIL_API_register_sequence_callback
- (HSEQUENCE S,
- AILSEQUENCECB callback);
-
-extern AILEVENTCB AILCALL AIL_API_register_event_callback
- (HMDIDRIVER mdi,
- AILEVENTCB callback);
-
-extern AILBEATCB AILCALL AIL_API_register_beat_callback
- (HSEQUENCE S,
- AILBEATCB callback);
-
-extern AILTIMBRECB AILCALL AIL_API_register_timbre_callback
- (HMDIDRIVER mdi,
- AILTIMBRECB callback);
-
-extern void AILCALL AIL_API_set_sequence_user_data(HSEQUENCE S,
- U32 index,
- SINTa value);
-
-extern SINTa AILCALL AIL_API_sequence_user_data (HSEQUENCE S,
- U32 index);
-
-extern void AILCALL AIL_API_register_ICA_array (HSEQUENCE S,
- U8 *array);
-
-extern S32 AILCALL AIL_API_lock_channel (HMDIDRIVER mdi);
-
-extern void AILCALL AIL_API_release_channel (HMDIDRIVER mdi,
- S32 channel);
-
-extern void AILCALL AIL_API_map_sequence_channel (HSEQUENCE S,
- S32 seq_channel,
- S32 new_channel);
-
-extern S32 AILCALL AIL_API_true_sequence_channel (HSEQUENCE S,
- S32 seq_channel);
-
-extern void AILCALL AIL_API_send_channel_voice_message
- (HMDIDRIVER mdi,
- HSEQUENCE S,
- S32 status,
- S32 data_1,
- S32 data_2);
-
-extern void AILCALL AIL_API_send_sysex_message (HMDIDRIVER mdi,
- void const *buffer);
-
-extern HWAVESYNTH
- AILCALL AIL_API_create_wave_synthesizer (HDIGDRIVER dig,
- HMDIDRIVER mdi,
- void const *wave_lib,
- S32 polyphony);
-
-extern void AILCALL AIL_API_destroy_wave_synthesizer(HWAVESYNTH W);
-
-extern S32 AILCALL AIL_API_MIDI_to_XMI (void const* MIDI,
- U32 MIDI_size,
- void**XMIDI,
- U32 * XMIDI_size,
- S32 flags);
-
-#if defined(IS_WIN32)
-
-extern S32 AILCALL AIL_API_list_MIDI (void const* MIDI,
- U32 MIDI_size,
- char* *list,
- U32 * list_size,
- S32 flags);
-
-extern S32 AILCALL AIL_API_list_DLS (void const* DLS,
- char**list,
- U32 * list_size,
- S32 flags,
- C8 * title);
-
-#endif
-
-extern char* AILCALL AIL_API_last_error ( void );
-
-extern void AILCALL AIL_API_set_error ( char const* error_msg );
-
-extern S32 AILCALL AIL_API_file_error (void);
-
-extern S32 AILCALL AIL_API_file_size (char const *filename,
- char const * caller,
- U32 caller_line);
-
-extern void * AILCALL AIL_API_file_read (char const *filename,
- void *dest,
- char const * caller,
- U32 caller_line);
-
-extern S32 AILCALL AIL_API_file_write (char const *filename,
- void const *buf,
- U32 len);
-
-extern S32 AILCALL AIL_API_WAV_file_write (char const *filename,
- void const *buf,
- U32 len,
- S32 rate,
- S32 format);
-
-extern void AILCALL AIL_API_serve (void);
-
-
-#ifdef IS_WINDOWS
-
-extern HREDBOOK AILCALL AIL_API_redbook_open (U32 which);
-
-extern HREDBOOK AILCALL AIL_API_redbook_open_drive(S32 drive);
-
-extern void AILCALL AIL_API_redbook_close (HREDBOOK hand);
-
-extern void AILCALL AIL_API_redbook_eject (HREDBOOK hand);
-
-extern void AILCALL AIL_API_redbook_retract (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_status (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_tracks (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_track (HREDBOOK hand);
-
-extern void AILCALL AIL_API_redbook_track_info (HREDBOOK hand,
- U32 tracknum,
- U32* startmsec,
- U32* endmsec);
-
-extern U32 AILCALL AIL_API_redbook_id (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_position (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_play (HREDBOOK hand,
- U32 startmsec,
- U32 endmsec);
-
-extern U32 AILCALL AIL_API_redbook_stop (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_pause (HREDBOOK hand);
-
-extern U32 AILCALL AIL_API_redbook_resume (HREDBOOK hand);
-
-extern F32 AILCALL AIL_API_redbook_volume_level (HREDBOOK hand);
-
-extern F32 AILCALL AIL_API_redbook_set_volume_level(HREDBOOK hand,
- F32 volume);
-
-#endif
-
-extern S32 AILCALL AIL_API_quick_startup (S32 use_digital,
- S32 use_MIDI,
- U32 output_rate,
- S32 output_bits,
- S32 output_channels);
-
-extern void AILCALL AIL_API_quick_shutdown (void);
-
-extern void AILCALL AIL_API_quick_handles (HDIGDRIVER* pdig,
- HMDIDRIVER* pmdi,
- HDLSDEVICE* pdls);
-
-extern HAUDIO AILCALL AIL_API_quick_load (char const *filename);
-
-extern HAUDIO AILCALL AIL_API_quick_load_mem (void const *mem,
- U32 size);
-
-extern HAUDIO AILCALL AIL_API_quick_load_named_mem(void const *mem,
- char const *filename,
- U32 size);
-
-extern void AILCALL AIL_API_quick_unload (HAUDIO audio);
-
-extern S32 AILCALL AIL_API_quick_play (HAUDIO audio,
- U32 loop_count);
-
-extern void AILCALL AIL_API_quick_halt (HAUDIO audio);
-
-extern S32 AILCALL AIL_API_quick_status (HAUDIO audio);
-
-extern HAUDIO AILCALL AIL_API_quick_load_and_play (char const *filename,
- U32 loop_count,
- S32 wait_request);
-
-extern void AILCALL AIL_API_quick_set_speed (HAUDIO audio,
- S32 speed);
-
-extern void AILCALL AIL_API_quick_set_volume (HAUDIO audio,
- F32 volume,
- F32 extravol);
-
-extern void AILCALL AIL_API_quick_set_reverb_levels(HAUDIO audio,
- F32 dry_level,
- F32 wet_level);
-
-extern void AILCALL AIL_API_quick_set_low_pass_cut_off(HAUDIO audio,
- S32 channel,
- F32 cut_off);
-
-extern HAUDIO AILCALL AIL_API_quick_copy (HAUDIO hand);
-
-extern void AILCALL AIL_API_quick_set_ms_position (HAUDIO audio,
- S32 milliseconds);
-
-extern S32 AILCALL AIL_API_quick_ms_position (HAUDIO audio);
-
-extern S32 AILCALL AIL_API_quick_ms_length (HAUDIO audio);
-
-extern S32 AILCALL AIL_API_quick_type (HAUDIO audio);
-
-//
-// High-level streaming services
-//
-
-void AILSTRM_shutdown(HDIGDRIVER driver);
-
-extern HSTREAM AILCALL AIL_API_open_stream (HDIGDRIVER dig,
- char const* filename,
- S32 stream_mem);
-
-extern void AILCALL AIL_API_close_stream (HSTREAM stream);
-
-extern S32 AILCALL AIL_API_service_stream (HSTREAM stream,
- S32 fillup);
-
-extern void AILCALL AIL_API_start_stream (HSTREAM stream);
-
-extern void AILCALL AIL_API_pause_stream (HSTREAM stream,
- S32 onoff);
-
-extern void AILCALL AIL_API_set_stream_loop_block (HSTREAM S,
- S32 loop_start_offset,
- S32 loop_end_offset);
-
-extern S32 AILCALL AIL_API_stream_loop_count (HSTREAM stream);
-
-extern void AILCALL AIL_API_set_stream_loop_count (HSTREAM stream,
- S32 count);
-
-extern S32 AILCALL AIL_API_stream_status (HSTREAM stream);
-
-extern F32 AILCALL AIL_API_stream_filled_percent (HSTREAM stream);
-
-extern void AILCALL AIL_API_set_stream_position (HSTREAM stream,
- S32 offset);
-
-extern S32 AILCALL AIL_API_stream_position (HSTREAM stream);
-
-extern void AILCALL AIL_API_stream_info (HSTREAM stream,
- S32* datarate,
- S32* sndtype,
- S32* length,
- S32* memory);
-
-extern void AILCALL AIL_API_auto_service_stream (HSTREAM stream,
- S32 onoff);
-
-extern AILSTREAMCB AILCALL AIL_API_register_stream_callback
- (HSTREAM stream,
- AILSTREAMCB callback);
-
-extern void AILCALL AIL_API_set_stream_user_data (HSTREAM S,
- U32 index,
- SINTa value);
-
-extern SINTa AILCALL AIL_API_stream_user_data (HSTREAM S,
- U32 index);
-
-extern S32 AILCALL AIL_API_size_processed_digital_audio(
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO const* src);
-
-extern S32 AILCALL AIL_API_process_digital_audio(
- void *dest_buffer,
- S32 dest_buffer_size,
- U32 dest_rate,
- U32 dest_format,
- S32 num_srcs,
- AILMIXINFO* src);
-
-extern HDLSDEVICE AILCALL AIL_API_DLS_open (HMDIDRIVER mdi,
- HDIGDRIVER dig,
-#ifdef IS_STATIC
- AILSTATICDLS const* dls,
-#else
- char const* libname,
-#endif
- U32 flags,
- U32 rate,
- S32 bits,
- S32 channels);
-
-
-extern void AILCALL AIL_API_DLS_close (HDLSDEVICE dls,
- U32 flags);
-
-extern HDLSFILEID AILCALL AIL_API_DLS_load_file (HDLSDEVICE dls,
- char const* filename,
- U32 flags);
-
-extern HDLSFILEID AILCALL AIL_API_DLS_load_memory (HDLSDEVICE dls,
- void const* memfile,
- U32 flags);
-
-extern void AILCALL AIL_API_DLS_unload (HDLSDEVICE dls,
- HDLSFILEID dlsid);
-
-extern void AILCALL AIL_API_DLS_compact (HDLSDEVICE dls);
-
-extern void AILEXPORT AIL_API_DLS_set_reverb_levels(HDLSDEVICE dls,
- F32 dry_level,
- F32 wet_level);
-
-extern void AILEXPORT AIL_API_DLS_get_reverb_levels(HDLSDEVICE dls,
- F32* dry_level,
- F32* wet_level);
-
-extern void AILCALL AIL_API_DLS_get_info (HDLSDEVICE dls,
- AILDLSINFO* info,
- S32* PercentCPU);
-
-extern S32 AILCALL AIL_API_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);
-
-extern void AILCALL AIL_API_set_sequence_ms_position
- (HSEQUENCE S, //)
- S32 milliseconds);
-
-extern void AILCALL AIL_API_sequence_ms_position (HSEQUENCE S, //)
- S32 *total_milliseconds,
- S32 *current_milliseconds);
-
-extern void AILCALL AIL_API_set_sample_ms_position(HSAMPLE S, //)
- S32 milliseconds);
-
-extern void AILCALL AIL_API_sample_ms_position (HSAMPLE S, //)
- S32 *total_milliseconds,
- S32 *current_milliseconds);
-
-extern U32 AILCALL AIL_API_sample_ms_lookup (HSAMPLE S, //)
- S32 milliseconds,
- S32* actualms);
-
-extern void AILCALL AIL_API_set_stream_ms_position(HSTREAM S, //)
- S32 milliseconds);
-
-extern void AILCALL AIL_API_stream_ms_position (HSTREAM S, //)
- S32 *total_milliseconds,
- S32 *current_milliseconds);
-
-extern S32 AILCALL AIL_API_WAV_info (void const* data,
- AILSOUNDINFO* info);
-
-extern S32 AILCALL AIL_API_compress_ADPCM (AILSOUNDINFO const* info, //)
- void** outdata, U32* outsize);
-
-extern S32 AILCALL AIL_API_decompress_ADPCM (AILSOUNDINFO const* info,
- void** outdata,
- U32* outsize);
-
-extern S32 AILCALL AIL_API_file_type (void const* data,
- U32 size);
-
-extern S32 AILCALL AIL_API_file_type_named (void const* data,
- char const* filename,
- U32 size);
-
-extern S32 AILCALL AIL_API_find_DLS (void const* data,
- U32 size,
- void**xmi,
- U32* xmisize,
- void**dls,
- U32* dlssize);
-
-//
-// Internal MSS mixer RIB calls
-//
-
-extern U32 AILCALL MSS_MMX_available (void);
-
-extern void AILCALL MSS_mixer_startup (void);
-extern void AILCALL MSS_mixer_shutdown (void);
-
-extern void AILCALL MSS_mixer_flush(S32 *dest,
- S32 len
-#ifdef IS_X86
- ,U32 MMX_available
-#endif
- );
-
-extern void AILCALL MSS_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
- );
-
-extern void AILCALL MSS_mixer_copy(void const *src,
- S32 src_len,
- void *dest,
- U32 operation
-#ifdef IS_BE
- ,S32 big_endian_output
-#else
-#ifdef IS_X86
- ,U32 MMX_available
-#endif
-#endif
- );
-
-extern void AILCALL SS_set_speaker_configuration (D3DSTATE *D3D,
- MSSVECTOR3D *speaker_positions,
- S32 n_channels,
- S32 logical_channels_per_sample);
-
-extern void SS_calculate_3D_channel_levels(D3DSTATE const *D3D,
- S32 logical_channels_per_sample,
- S3DSTATE *S3D,
- F32 *channel_levels);
-
-extern void AILCALL SS_update_driver_reverb_state(HDIGDRIVER dig);
-
-extern void AILCALL SS_update_sample_reverb_state(HSAMPLE S);
-
-extern void AILCALL SS_flush (HDIGDRIVER dig, S32 reverb_index);
-
-extern void AILCALL SS_copy (HDIGDRIVER dig, S32 reverb_index, void *lpWaveAddr);
-
-
-extern F32 AILCALLBACK SS_default_falloff_function_callback(HSAMPLE S, //)
- F32 distance,
- F32 rolloff_factor,
- F32 min_dist,
- F32 max_dist);
-extern S32 AILCALLBACK SS_stream_to_buffer(HSAMPLE S,
- S16 *dest_mono_sample_buffer,
- S32 dest_buffer_size);
-
-
-#ifdef MILES10
-extern void SS_fill(HDIGDRIVER dig);
-#else
-extern void SS_fill(HDIGDRIVER dig, void *lpData);
-#endif
-
-extern void AILCALL SS_start_DIG_driver_playback(HSAMPLE S);
-
-extern S32 AILCALL SS_set_sample_type( HSAMPLE S, S32 format, U32 channel_mask );
-
-extern void AILCALL AIL_apply_reverb( HDIGDRIVER dig );
-
-extern S32 AILCALL AIL_allocate_reverb_buffers( HDIGDRIVER dig, S32 index );
-
-extern void AILCALL AIL_apply_lowpass( void* dest, void const* src, void const* src_end, LOWPASS_INFO* lp_in, S32 op );
-
-
-#if defined(IS_WIN32) || defined(IS_GENERICDIG)
-extern S32 AILCALL get_system_speaker_configuration(MSS_MC_SPEC *channel_spec);
-#endif
-
-
-#ifdef IS_BE
-
- #ifdef IS_PPC
-
- #ifdef IS_XENON
-
- #define LE_SWAP32( ptr ) __loadwordbytereverse(0,ptr)
-
- #define LE_SWAP32_OFS( ptr,ofs ) __loadwordbytereverse(ofs,ptr)
-
- #define STORE_LE_SWAP32( ptr, val ) __storewordbytereverse ( (U32)(val), 0, ptr )
-
- #elif (defined(IS_PS3) && !defined(IS_SPU)) || defined(IS_MAC)
- #define LE_SWAP32( ptr ) ld_le32(ptr)
- #define LE_SWAP32_OFS( ptr, ofs ) ld_le32_ofs(ptr,ofs)
- // the char* is not required, but works around a GCC bug
- #define STORE_LE_SWAP32( ptr, val ) st_le32( (char*)(ptr), (U32)(val) )
- #elif defined(IS_WIIU)
-
- #define LE_SWAP32(ptr) (*(__bytereversed unsigned int *)(ptr))
- #define LE_SWAP32_OFS(ptr, ofs) (*(__bytereversed unsigned int *)AIL_ptr_add(ptr, ofs))
-
- #define STORE_LE_SWAP32( ptr, val ) (*(__bytereversed unsigned int *)(ptr) = (val))
-
- #define STORE_LE_SWAP16_OFS( ptr, val, const_ofs ) (*(__bytereversed unsigned short*)(AIL_ptr_add(ptr, const_ofs))) = (val)
- #else
- #define LE_SWAP32( ptr ) __lwbrx((void*)(ptr),0)
- #define LE_SWAP32_OFS( ptr,ofs ) __lwbrx((void*)(ptr),ofs)
-
- #define STORE_LE_SWAP32( ptr, val ) __stwbrx( (U32)(val), ptr, 0 )
- #endif
-
- #elif defined(IS_SPU)
-
- static U32 inline LE_SWAP32(void const * src) __attribute__((always_inline));
- static U32 inline LE_SWAP32(void const * src)
- {
- U32 i = (*((U32*)src));
- vec_uint4 v = spu_promote( i, 0 );
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 3, 2, 1, 0, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15}));
- i = spu_extract( v, 0 );
- return i;
- }
-
- static U32 inline LE_SWAP32_OFS(void const * src,S32 ofs) __attribute__((always_inline));
- static U32 inline LE_SWAP32_OFS(void const * src,S32 ofs)
- {
- U32 i = (*((U32*)(((char*)src)+ofs)));
- vec_uint4 v = spu_promote( i, 0 );
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 3, 2, 1, 0, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15}));
- i = spu_extract( v, 0 );
- return i;
- }
-
- #define STORE_LE_SWAP32( ptr, val )\
- { \
- U32 tmp = (U32) val; \
- vec_uint4 v = spu_promote( tmp, 0 ); \
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 3, 2, 1, 0, 4, 5, 6, 7, \
- 8, 9, 10, 11, 12, 13, 14, 15})); \
- tmp = spu_extract( v, 0 ); \
- *((U32 *)(((char*)ptr)+0)) = tmp; \
- }
-
- #define STORE_LE_SWAP32_OFS( ptr, val, ofs )\
- { \
- U32 tmp = (U32) val; \
- vec_uint4 v = spu_promote( tmp, 0 ); \
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 3, 2, 1, 0, 4, 5, 6, 7, \
- 8, 9, 10, 11, 12, 13, 14, 15})); \
- tmp = spu_extract( v, 0 ); \
- *((U32 *)(((char*)ptr)+ofs)) = tmp; \
- }
-
- #else
-
- #define LE_SWAP32(ptr) \
- ( ( ( ( *((U32 *)(ptr) ) ) << 24 ) ) | \
- ( ( ( *((U32 *)(ptr) ) ) << 8 ) & 0x00FF0000 ) | \
- ( ( ( *((U32 *)(ptr) ) ) >> 8 ) & 0x0000FF00 ) | \
- ( ( ( *((U32 *)(ptr) ) ) >> 24 ) ) )
-
- #define LE_SWAP32_OFS(ptr,ofs) \
- ( ( ( ( *((U32 *)AIL_ptr_add(ptr,ofs) ) ) << 24 ) ) | \
- ( ( ( *((U32 *)AIL_ptr_add(ptr,ofs) ) ) << 8 ) & 0x00FF0000 ) | \
- ( ( ( *((U32 *)AIL_ptr_add(ptr,ofs) ) ) >> 8 ) & 0x0000FF00 ) | \
- ( ( ( *((U32 *)AIL_ptr_add(ptr,ofs) ) ) >> 24 ) ) )
-
- #define STORE_LE_SWAP32( ptr, val ) { *((U32 *)ptr) = \
- ( ( ( ( ((U32)(val) ) ) << 24 ) ) | \
- ( ( ( ((U32)(val) ) ) << 8 ) & 0x00FF0000 ) | \
- ( ( ( ((U32)(val) ) ) >> 8 ) & 0x0000FF00 ) | \
- ( ( ( ((U32)(val) ) ) >> 24 ) ) ); }
-
- #endif
-
- #if defined( IS_PPC )
-
- #ifdef IS_XENON
- unsigned short __loadshortbytereverse (int offset, const void * base);
- unsigned long __loadwordbytereverse (int offset, const void * base);
-
- void __storeshortbytereverse (unsigned short val, int offset, void * base);
- void __storewordbytereverse (unsigned int val, int offset, void * base);
-
- #define LE_SWAP16( ptr ) __loadshortbytereverse (0,(S16 *)ptr)
-
- #define LE_SWAP16_OFS( ptr, const_ofs ) __loadshortbytereverse (const_ofs,(S16 *)ptr)
-
- #define STORE_LE_SWAP16( ptr, val ) __storeshortbytereverse ( (U16)(val), 0, (S16 *)ptr )
-
- #define STORE_LE_SWAP16_OFS( ptr, val, const_ofs ) __storeshortbytereverse ( (U16)(val), const_ofs, (S16 *)ptr )
- #else
-
- #if (defined(IS_PS3) && !defined(IS_SPU)) || defined(IS_MAC)
-
- #define __fsel( outf, cmp, inf1, inf2 ) \
- __asm__ __volatile__ ("fsel %0,%1,%2,%3" : "=f" (outf) : "f" (cmp), "f" (inf1), "f" (inf2));
-
- static inline float fclip1(float sample )
- {
- float ret;
-
- __fsel( ret, sample + 1.0f, sample, -1.0f );
- __fsel( ret, sample - 1.0f, 1.0f, ret );
- return( ret );
- }
-
- static __inline__ U16 ld_le16(const S16 *addr)
- {
- U16 val;
- __asm__ __volatile__ ("lhbrx %0,0,%1" : "=r" (val) : "r" (addr));
- return val;
- }
-
- static __inline__ U16 ld_le16_ofs(const S16 *addr, U64 const_ofs )
- {
- U16 val;
- __asm__ __volatile__ ("lhbrx %0,%1,%2" : "=r" (val) : "b" (const_ofs), "r" (addr));
- return val;
- }
-
- static __inline__ void st_le16(S16 *addr, const U16 val)
- {
- __asm__ __volatile__ ("sthbrx %1,0,%2" : "=m" (*addr) : "r" (val), "r" (addr));
- }
-
- static __inline__ void st_le16_ofs(S16 *addr, U64 const_ofs, const U16 val)
- {
- __asm__ __volatile__ ("sthbrx %2,%1,%3" : "=m" (*addr) : "b" (const_ofs), "r" (val), "r" (addr));
- }
-
- static __inline__ U32 ld_le32(const void *addr)
- {
- U32 val;
-
- __asm__ __volatile__ ("lwbrx %0,0,%1" : "=r" (val) : "r" ((U32*)addr) );
- return val;
- }
-
- static __inline__ U32 ld_le32_ofs(const void *addr, U64 const_ofs )
- {
- U32 val;
- __asm__ __volatile__ ("lwbrx %0,%1,%2" : "=r" (val) : "b" (const_ofs), "r" (addr));
- return val;
- }
-
-/* static __inline__ void st_le32_ofs(void *addr, U64 const_ofs, const U32 val)
- {
- __asm__ __volatile__ ("stwbrx %2,%1,%3" : "=m" (*(U32*)addr) : "b" (const_ofs), "r" (val), "r" ((U32*)addr));
- }*/
-
- static __inline__ void st_le32(void *addr, const U32 val)
- { //todo, weird hacks to make this work with GCC
- __asm__ __volatile__ ("stwbrx %1,%3,%2" : "=m" (*(U32*)addr) : "r" (val), "r" ((U32*)addr), "O"(0) );
- }
-
- #define LE_SWAP16( ptr ) ld_le16 ((S16 *)ptr)
-
- #define LE_SWAP16_OFS( ptr, const_ofs ) ld_le16_ofs ((S16 *)ptr, const_ofs)
-
- #define STORE_LE_SWAP16( ptr, val ) st_le16( (S16 *)ptr, (U16)(val) )
-
- #define STORE_LE_SWAP16_OFS( ptr, val, const_ofs ) st_le16_ofs( (S16 *)ptr, const_ofs, (U16)(val) )
- #elif defined(IS_WIIU)
-
- #define LE_SWAP16(ptr) (*(__bytereversed unsigned short *)(ptr))
- #define LE_SWAP16_OFS(ptr, ofs) (*(__bytereversed unsigned short *)AIL_ptr_add(ptr, ofs))
-
- #define STORE_LE_SWAP16( ptr, val ) (*(__bytereversed unsigned short *)(ptr) = (val))
-
- #else
- #define LE_SWAP16( ptr ) __lhbrx((S16 *)ptr,0)
-
- #define LE_SWAP16_OFS( ptr, const_ofs ) __lhbrx((S16 *)ptr,const_ofs)
-
- #define STORE_LE_SWAP16( ptr, val ) __sthbrx( (U16)(val), (S16 *)ptr, 0 )
-
- #define STORE_LE_SWAP16_OFS( ptr, val, const_ofs ) __sthbrx( (U16)(val), (S16 *)ptr, const_ofs )
- #endif
- #endif
-
- #elif defined( IS_SPU )
-
- static U32 inline LE_SWAP16(void const * src) __attribute__((always_inline));
- static U32 inline LE_SWAP16(void const * src)
- {
- U32 i = (*((U16*)src));
- vec_uint4 v = spu_promote( i, 0 );
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 0, 1, 3, 2, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15}));
- i = spu_extract( v, 0 );
- return i;
- }
-
- static U32 inline LE_SWAP16_OFS(void const * src, S32 ofs) __attribute__((always_inline));
- static U32 inline LE_SWAP16_OFS(void const * src, S32 ofs)
- {
- U32 i = (*((U16*)(((char*)src)+ofs)));
- vec_uint4 v = spu_promote( i, 0 );
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 0, 1, 3, 2, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15}));
- i = spu_extract( v, 0 );
- return i;
- }
-
- #define STORE_LE_SWAP16( ptr, val )\
- { \
- U32 tmp = (U16) val; \
- vec_uint4 v = spu_promote( tmp, 0 ); \
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 0, 1, 3, 2, 4, 5, 6, 7, \
- 8, 9, 10, 11, 12, 13, 14, 15})); \
- tmp = spu_extract( v, 0 ); \
- *((U16 *)(((char*)ptr)+0)) = tmp; \
- }
-
- #define STORE_LE_SWAP16_OFS( ptr, val, ofs )\
- { \
- U32 tmp = (U16) val; \
- vec_uint4 v = spu_promote( tmp, 0 ); \
- v = (vec_uint4)spu_shuffle( v, v, ((vec_uchar16){ 0, 1, 3, 2, 4, 5, 6, 7, \
- 8, 9, 10, 11, 12, 13, 14, 15})); \
- tmp = spu_extract( v, 0 ); \
- *((U16 *)(((char*)ptr)+ofs)) = tmp;\
- }
-
- #else
-
- #define LE_SWAP16(ptr) \
- ( ( U16 ) \
- ( ( ( ( *((U16 *)(ptr) ) ) << 8 ) ) | \
- ( ( ( *((U16 *)(ptr) ) ) >> 8 ) ) ) \
- )
-
- #define LE_SWAP16_OFS(ptr,const_ofs) \
- ( ( U16 ) \
- ( ( ( ( *((U16 *)(AIL_ptr_add(ptr,const_ofs)) ) ) << 8 ) ) | \
- ( ( ( *((U16 *)(AIL_ptr_add(ptr,const_ofs)) ) ) >> 8 ) ) ) \
- )
-
- #define STORE_LE_SWAP16( ptr, val ) { *((U16*)ptr) = ( \
- ( ( ( ((U16)(val) ) ) << 8 ) ) | \
- ( ( ( ((U16)(val) ) ) >> 8 ) ) ); }
-
- #define STORE_LE_SWAP16_OFS( ptr, val, const_ofs ) { *((U16*)AIL_ptr_add(ptr,const_ofs)) = ( \
- ( ( ( ((U16)(val) ) ) << 8 ) ) | \
- ( ( ( ((U16)(val) ) ) >> 8 ) ) ); }
-
- #endif
-
- #define BE_SWAP32( ptr ) ( *((U32 *)(ptr) ) )
- #define BE_SWAP16( ptr ) ( *((U16 *)(ptr) ) )
-
- #define MEM_LE_SWAP32(n) *((U32*)n) = LE_SWAP32(n);
- #define MEM_LE_SWAP16(n) *((U16*)n) = (U16) LE_SWAP16(n);
-
- #define MEM_BE_SWAP32(n)
- #define MEM_BE_SWAP16(n)
-
- // unaligned versions
- #define BEU_SWAP32( ptr ) ( *((U32 *)(ptr) ) )
- #define BEU_SWAP16( ptr ) ( *((U16 *)(ptr) ) )
-
- #define LEU_SWAP32(ptr) LE_SWAP32(ptr)
- #define LEU_SWAP16(ptr) LE_SWAP16(ptr)
-
- #define STORE_LEU_SWAP32( ptr, val ) STORE_LE_SWAP32( ptr, val )
- #define STORE_LEU_SWAP16( ptr, val ) STORE_LE_SWAP16( ptr, val )
-
- #define MEM_LEU_SWAP32(n) *((U32*)n) = LEU_SWAP32(n);
- #define MEM_LEU_SWAP16(n) *((U32*)n) = LEU_SWAP32(n);
-
-#else // IS_BE
-
- #define LE_SWAP32( ptr ) ( *((U32 *)(ptr) ) )
- #define LE_SWAP32_OFS( ptr,const_ofs ) ( *((U32 *)AIL_ptr_add(ptr,const_ofs) ) )
- #define LE_SWAP16( ptr ) ( *((U16 *)(ptr) ) )
-
- #define LE_SWAP16_OFS( ptr, const_ofs ) ( *((U16 *)(AIL_ptr_add(ptr,const_ofs)) ) )
-
- #define STORE_LE_SWAP32( ptr, val ) { *((U32*)(ptr))=(U32)(val); }
- #define STORE_LE_SWAP16( ptr, val ) { *((U16*)(ptr))=(U16)(val); }
- #define STORE_LE_SWAP16_OFS( ptr, val, const_ofs ) { *((U16*)((((U8*)ptr)+const_ofs)))=(U16)(val); }
-
- #define BE_SWAP32(ptr) \
- ( ( ( ( *((U32 *)(ptr) ) ) << 24 ) ) | \
- ( ( ( *((U32 *)(ptr) ) ) << 8 ) & 0x00FF0000 ) | \
- ( ( ( *((U32 *)(ptr) ) ) >> 8 ) & 0x0000FF00 ) | \
- ( ( ( *((U32 *)(ptr) ) ) >> 24 ) ) )
-
- #define BE_SWAP16(ptr) \
- ( ( U16 ) \
- ( ( ( ( *((U16 *)(ptr) ) ) << 8 ) ) | \
- ( ( ( *((U16 *)(ptr) ) ) >> 8 ) ) ) \
- )
-
-#if defined(IS_PSP)
-
- #define putunaligned4(temp, s ) \
- __asm__("swl %1,3+%0" : "+m"(*(s)): "r"(temp)); \
- __asm__("swr %1,%0" : "+m"(*(s)) : "r"(temp));
-
- #define getunaligned4(temp, s ) \
- __asm__("lwl %0,3+%1" : "=r"(temp) : "o"(*(U32*)(s))); \
- __asm__("lwr %0,%1" : "+r"(temp) : "o"(*(U32*)(s)) );
-
- static inline U32 LEU_SWAP32( void * ptr )
- {
- U32 ret;
- getunaligned4( ret, ptr );
- return( ret );
- }
-
- static inline U32 BEU_SWAP32( void * ptr )
- {
- U32 ret;
-
- getunaligned4( ret, ptr );
- ret = ( ret << 24 ) | ( ( ret << 8 ) & 0x00ff0000 ) | ( ( ret >> 8 ) & 0x0000ff00 ) | ( ret >> 24 );
- return( ret );
- }
-
- #define LEU_SWAP16(ptr) \
- ( ( U16 ) \
- ( ( ( ( ((U32)(((U8 *)(ptr))[1]) ) ) << 8 ) ) | \
- ( ( ( ((U32)(((U8 *)(ptr))[0]) ) ) ) ) ) \
- )
- #define BEU_SWAP16(ptr) \
- ( ( U16 ) \
- ( ( ( ( ((U32)(((U8 *)(ptr))[0]) ) ) << 8 ) ) | \
- ( ( ( ((U32)(((U8 *)(ptr))[1]) ) ) ) ) ) \
- )
-
- #define STORE_LEU_SWAP32( ptr, val ) { register U32 __v = (U32)val; register U32 * __p = (U32*)ptr; putunaligned4( __v, __p ); }
- #define STORE_LEU_SWAP16( ptr, val ) { register U16 __v = (U16)val; ((U8*)(ptr))[0]=(U8)val; ((U8*)(ptr))[1]=(U8)(val>>8);}
-
-#else
-
- #define LEU_SWAP32(ptr) LE_SWAP32(ptr)
- #define LEU_SWAP16(ptr) LE_SWAP16(ptr)
-
- #define BEU_SWAP32(ptr) BE_SWAP32(ptr)
- #define BEU_SWAP16(ptr) BE_SWAP16(ptr)
-
- #define STORE_LEU_SWAP32( ptr, val ) STORE_LE_SWAP32( ptr, val )
- #define STORE_LEU_SWAP16( ptr, val ) STORE_LE_SWAP16( ptr, val )
-
-#endif
-
- #define MEM_LEU_SWAP32(n)
- #define MEM_LEU_SWAP16(n)
-
- #define MEM_LE_SWAP32(n)
- #define MEM_LE_SWAP16(n)
-
- #define MEM_BE_SWAP32(n) *((U32*)n) = BE_SWAP32(n);
- #define MEM_BE_SWAP16(n) *((U16*)n) = BE_SWAP16(n);
-
-#endif
-
-
-
-#if defined(IS_MAC) || defined(IS_WII) || defined(IS_IPHONE)
-
-#ifdef IS_X86
-
-static inline U32 mult64addsubandshift( U32 mt1, U32 mt2, U32 addv, U32 subv, U32 shift )
-{
- U32 retv;
-
- unsigned long long value;
- value = (unsigned long long)mt1 * mt2;
- value += addv;
- value -= subv;
- value = (signed long long )value >> (signed long long )shift;
- retv = (U32)value;
-
- return( retv );
-
-}
-
-
-static U32 __inline mult64anddiv(U32 a,U32 b, U32 c)
-{
- U32 retv;
- unsigned long long value;
- value = (unsigned long long)a * b;
- value /= c;
- retv = (U32)value;
- return( retv );
-}
-
-static U32 __inline shift64addsubanddiv( U32 val, U32 shift,U32 addv, U32 subv, U32 divv)
-{
- U32 retv;
- unsigned long long value;
- value = (unsigned long long)val;
- value <<= shift;
- value += addv;
- value -= subv;
- value = (signed long long ) value / (signed long long ) divv;
- retv = (U32)value;
- return( retv );
-}
-
-#elif defined(IS_IPHONE)
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) *dest++ = 32767; \
- else if (fOut < -32768.0F) *dest++ = -32768; \
- else *dest++ = (S16) fOut; \
-}
-
-static U32 __inline mult64addsubandshift( U32 mt1, U32 mt2, U32 addv, U32 subv, U32 shift )
-{
- U32 retv;
- unsigned long long value;
- value = (unsigned long long)mt1 * mt2;
- value += addv;
- value -= subv;
- value = (signed long long )value >> (signed long long )shift;
- retv = (U32)value;
- return( retv );
-}
-
-static U32 __inline mult64anddiv(U32 a,U32 b, U32 c)
-{
- U32 retv;
- unsigned long long value;
- value = (unsigned long long)a * b;
- value /= c;
- retv = (U32)value;
- return( retv );
-}
-
-static U32 __inline shift64addsubanddiv( U32 val, U32 shift,U32 addv, U32 subv, U32 divv)
-{
- U32 retv;
- unsigned long long value;
- value = (unsigned long long)val;
- value <<= shift;
- value += addv;
- value -= subv;
- value = (signed long long ) value / (signed long long ) divv;
- retv = (U32)value;
- return( retv );
-}
-
-#else
-
-//
-// These three dudes help deal with u64s in hi,lo format
-//
-
-#define mul64hilo(_hi,_lo,_mt1,_mt2) \
- __asm \
- { \
- mulhwu _hi, _mt1, _mt2; \
- mullw _lo, _mt1, _mt2 \
- } \
-
-
-#define imul64hilo(_hi,_lo,_mt1,_mt2) \
- __asm \
- { \
- mulhw _hi, _mt1, _mt2; \
- mullw _lo, _mt1, _mt2 \
- } \
-
-
-#define add64hilo(_hi,_lo,_hisub,_losub) \
- __asm \
- { \
- addc _lo, _losub, _lo; \
- adde _hi, _hisub, _hi \
- } \
-
-
-#define sub64hilo(_hi,_lo,_hisub,_losub) \
- __asm \
- { \
- subfc _lo, _losub, _lo; \
- subfe _hi, _hisub, _hi \
- } \
-
-#define carry_check( q, r, c, d ) \
- if ( r < c ) \
- { \
- --q; \
- r += d; \
- if ( r >= d ) \
- { \
- if ( r < c ) \
- { \
- --q; \
- r += d; \
- } \
- } \
- }
-
-// The PPC mac doesnt' have intrinsics like CW
-#ifdef IS_MAC
-static U32 __cntlzw(U32 in)
-{
- U32 ret;
- asm ("cntlzw %0, %1\n": "=r" (ret): "r" (in));
- return ret;
-}
-#endif
-
-static inline U32 div64with16( U32 nlo, U32 nhi, U32 d )
-{
- U32 dlo, dhi;
- U32 rlo, rhi;
- U32 qhi, qlo;
- U32 carry;
-
- dhi = d >> 16;
- dlo = d & 0xffff;
-
- qhi = nhi / dhi;
- rhi = nhi % dhi;
-
- carry = qhi * dlo;
-
- rhi = ( rhi << 16 ) | ( nlo >> 16 );
-
- carry_check( qhi, rhi, carry, d );
- rhi -= carry;
-
- qlo = rhi / dhi;
- rlo = rhi % dhi;
- carry = qlo * dlo;
-
- qhi <<= 16;
-
- rlo = ( rlo << 16 ) | ( nlo & 0xffff );
- carry_check( qlo, rlo, carry, d );
-
-// rlo -= carry;
-
- return( qhi | qlo );
-}
-
-static U32 inline mult64anddiv( register U32 a, register U32 b,U32 d )
-{
-/* register U32 hi, lo;
- register U32 mt1, mt2, d;
-
- mt1=m1;
- mt2=m2;
- d=dv;
-
- mul64hilo( hi, lo, mt1, mt2 );
-
- return( div64(hi,lo,d) );
-*/
- U32 lz;
- register U32 nhi=0, nlo=0;
-
- mul64hilo( nhi, nlo, a, b );
-
- if ( ( d & ( d - 1 ) ) == 0 )
- {
- lz = (U32) __cntlzw( d );
-
- // Shift for powers of 2.
- return( ( nhi << ( lz + 1 ) ) | ( nlo >> ( 31 - lz ) ) );
- }
-
- if ( nhi == 0 )
- {
- return( nlo / d );
- }
-
- lz = (U32) __cntlzw( d );
-
- d <<= lz;
- nhi = ( nhi << lz ) + ( nlo >> ( 32 - lz ) );
- nlo <<= lz;
-
- return( div64with16( nlo, nhi, d ) );
-
-}
-
-static U32 inline mult64andshift( U32 m1,U32 m2,U32 shift )
-{
- register U32 hi, lo;
- register U32 mt1, mt2;
-
- mt1=m1;
- mt2=m2;
-
- mul64hilo( hi, lo, mt1, mt2 );
-
- return( ( hi << (32 - shift ) ) + ( lo >> shift ) );
-}
-
-static U32 inline mult64addsubandshift( U32 m1, U32 m2, U32 av, U32 sv, U32 shift )
-{
- register U32 hi=0, lo=0;
- register U32 mt1, mt2;
- register U32 addv;
- register U32 subv;
- register U32 zero = 0;
-
- mt1=m1;
- mt2=m2;
- addv=av;
- subv=sv;
-
- mul64hilo(hi,lo,mt1,mt2);
- add64hilo( hi, lo, zero, addv );
- sub64hilo( hi, lo, zero, subv );
-
- return( ( hi << (32 - shift ) ) + ( lo >> shift ) );
-}
-
-static U32 __inline shift64addsubanddiv( U32 val, U32 shift,U32 av, U32 sv, U32 divv)
-{
- register U32 hi, lo;
- register U32 addv;
- register U32 subv;
- register U32 d;
- register U32 zero = 0;
- U32 lz;
-
- addv=av;
- subv=sv;
- d=divv;
-
- hi = val >> ( 32 - shift );
- lo = val << shift;
- add64hilo( hi, lo, zero, addv );
- sub64hilo( hi, lo, zero, subv );
-
- if ( hi & 0x80000000 )
- {
- register U32 ihi = hi;
- register U32 ilo = lo;
- hi = lo = 0;
- sub64hilo( hi, lo, ihi, ilo );
-
- if ( ( d & ( d - 1 ) ) == 0 )
- {
- lz = (U32) __cntlzw( d );
-
- // Shift for powers of 2.
- return( (U32) -(S32) ( ( hi << ( lz + 1 ) ) | ( lo >> ( 31 - lz ) ) ) );
- }
-
- if ( hi == 0 )
- {
- return( (U32) -(S32) ( lo / d ) );
- }
-
- return( (U32) -(S32) div64with16( lo,hi,d ) );
- }
-
- if ( ( d & ( d - 1 ) ) == 0 )
- {
- lz = (U32) __cntlzw( d );
-
- // Shift for powers of 2.
- return( ( hi << ( lz + 1 ) ) | ( lo >> ( 31 - lz ) ) );
- }
-
- if ( hi == 0 )
- {
- return( lo / d );
- }
-
- return( div64with16( lo,hi,d ) );
-}
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) STORE_LE_SWAP16( dest, 32767 ); \
- else if (fOut < -32768.0F) STORE_LE_SWAP16( dest, -32768 ); \
- else STORE_LE_SWAP16( dest, (S16) fOut ); \
- ++dest; \
-}
-
-#endif
-
-#else
-
-#if ( defined(IS_X86) && defined(IS_WIN32API) ) || defined(IS_LINUX) || defined(__RADSEKRIT2__)
-
-//
-// Macros to aid in writing to build buffers
-//
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) *dest++ = 32767; \
- else if (fOut < -32768.0F) *dest++ = -32768; \
- else *dest++ = (S16) fOut; \
-}
-
-static U32 __inline mult64addsubandshift( U32 mt1, U32 mt2, U32 addv, U32 subv, U32 shift )
-{
- U32 retv;
-
-#ifdef __GNUC__
- unsigned long long value;
- value = (unsigned long long)mt1 * mt2;
- value += addv;
- value -= subv;
- value = (signed long long )value >> (signed long long )shift;
- retv = (U32)value;
-#else
-#ifdef IS_WIN64
- U64 value;
- value = (U64) mt1 * mt2;
- value += addv;
- value -= subv;
- value = (S64) value >> (S64) shift;
- retv = (U32) value;
-#else
- __asm
- {
- mov eax,[mt1]
- mov ecx,[mt2]
- mul ecx
- add eax,[addv]
- adc edx,0
- sub eax,[subv]
- sbb edx,0
- mov ecx,[shift]
- shrd eax,edx,cl
- mov [retv], eax
- }
-#endif
-#endif
- return( retv );
-}
-
-static U32 __inline mult64anddiv(U32 a,U32 b, U32 c)
-{
- U32 retv;
-
-#ifdef __GNUC__
- unsigned long long value;
- value = (unsigned long long)a * b;
- value /= c;
- retv = (U32)value;
-#else
-#ifdef IS_WIN64
- U64 value;
- value = (U64) a * b;
- value /= c;
- retv = (U32) value;
-#else
- __asm
- {
- mov eax,[a]
- mov ecx,[b]
- mul ecx
- mov ecx,[c]
- div ecx
- mov [retv], eax
- }
-#endif
-#endif
- return( retv );
-}
-
-static U32 __inline shift64addsubanddiv( U32 val, U32 shift,U32 addv, U32 subv, U32 divv)
-{
- U32 retv;
-#ifdef __GNUC__
- unsigned long long value;
- value = (unsigned long long)val;
- value <<= shift;
- value += addv;
- value -= subv;
- value = (signed long long ) value / (signed long long ) divv;
- retv = (U32)value;
-#else
-#ifdef IS_WIN64
- U64 value;
- value = (U64) val;
- value <<= shift;
- value += addv;
- value -= subv;
- value = (S64) value / (S64) divv;
- retv = (U32) value;
-#else
- __asm
- {
- xor edx, edx
- mov eax, [val]
- mov ecx, [shift]
- shld edx, eax, cl
- shl eax, cl
- add eax, [addv]
- adc edx, 0
- sub eax, [subv]
- sbb edx, 0
- mov ecx, [divv]
- idiv ecx
- mov [retv], eax
- }
-#endif
-#endif
- return( retv );
-}
-
-#else
-
-#ifdef __WATCOMC__
-
-#else
-
-#if defined( IS_XENON )
-
-#define toU64(v) ((U64)((U32)(v)))
-#define toS64(v) ((S64)((S32)(v)))
-
-#define mult64anddiv(mt1,mt2,d) ((U32)((toU64(mt1)*toU64(mt2))/toU64(d)))
-
-#define mult64addsubandshift(mt1,mt2,addv,subv,d) ((U32)((((S64)((toU64(mt1)*toU64(mt2))+toU64(addv)))-toS64(subv))>>toS64(d)))
-
-#define shift64addsubanddiv(val,shift,addv,subv,divv) ((U32)(((S64)((toU64(val)<<toU64(shift))+toU64(addv)-toU64(subv)))/toS64(divv)))
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) STORE_LE_SWAP16( dest, 32767 ); \
- else if (fOut < -32768.0F) STORE_LE_SWAP16( dest, -32768 ); \
- else STORE_LE_SWAP16( dest, (S16) fOut ); \
- ++dest; \
-}
-
-
-#else
-
-#if defined( IS_PSP ) || defined(IS_3DS) || defined(IS_PSP2) || defined(__RADANDROID__)
-
-
-#define toU64(v) ((U64)((U32)(v)))
-#define toS64(v) ((S64)((S32)(v)))
-
-#define mult64anddiv(mt1,mt2,d) ((U32)((toU64(mt1)*toU64(mt2))/toU64(d)))
-
-#define mult64addsubandshift(mt1,mt2,addv,subv,d) ((U32)((((S64)((toU64(mt1)*toU64(mt2))+toU64(addv)))-toS64(subv))>>toS64(d)))
-
-#define shift64addsubanddiv(val,shift,addv,subv,divv) ((U32)(((S64)((toU64(val)<<toU64(shift))+toU64(addv)-toU64(subv)))/toS64(divv)))
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) *dest++ = 32767; \
- else if (fOut < -32768.0F) *dest++ = -32768; \
- else *dest++ = (S16) fOut; \
-}
-
-#elif defined(IS_WIIU)
-
-#define toU64(v) ((U64)((U32)(v)))
-#define toS64(v) ((S64)((S32)(v)))
-
-#define mult64anddiv(mt1,mt2,d) ((U32)((toU64(mt1)*toU64(mt2))/toU64(d)))
-
-#define mult64addsubandshift(mt1,mt2,addv,subv,d) ((U32)((((S64)((toU64(mt1)*toU64(mt2))+toU64(addv)))-toS64(subv))>>toS64(d)))
-
-#define shift64addsubanddiv(val,shift,addv,subv,divv) ((U32)(((S64)((toU64(val)<<toU64(shift))+toU64(addv)-toU64(subv)))/toS64(divv)))
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) STORE_LE_SWAP16( dest, 32767 ); \
- else if (fOut < -32768.0F) STORE_LE_SWAP16( dest, -32768 ); \
- else STORE_LE_SWAP16( dest, (S16) fOut ); \
- ++dest; \
-}
-
-
-
-#elif defined( IS_PS3 ) && !defined( IS_SPU )
-
-#define toU64(v) ((U64)((U32)(v)))
-#define toS64(v) ((S64)((S32)(v)))
-
-#define mult64anddiv(mt1,mt2,d) ((U32)((toU64(mt1)*toU64(mt2))/toU64(d)))
-
-#define mult64addsubandshift(mt1,mt2,addv,subv,d) ((U32)((((S64)((toU64(mt1)*toU64(mt2))+toU64(addv)))-toS64(subv))>>toS64(d)))
-
-#define shift64addsubanddiv(val,shift,addv,subv,divv) ((U32)(((S64)((toU64(val)<<toU64(shift))+toU64(addv)-toU64(subv)))/toS64(divv)))
-
-static inline float fclip32K(float sample )
-{
- float ret;
-
- __fsel( ret, sample + 32767.0f, sample, -32767.0f );
- __fsel( ret, sample - 32767.0f, 32767.0f, ret );
- return( ret );
-}
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- STORE_LE_SWAP16( dest, (S16) fclip32K(fOut) ); \
- ++dest; \
-}
-
-#else
-
-U32 mult64addsubandshift(U32 mt1,U32 mt2,U32 addv, U32 subv, U32 shift);
-U32 shift64addsubanddiv(U32 val,U32 shift,U32 addv, U32 subv, U32 divv);
-
-#if defined( IS_SPU )
-
-#define WRITE_MONO_SAMPLE( dest, fOut ) \
-{ \
- if (fOut > 32767.0F) *dest = (S16)(U16)0xff7f; \
- else if (fOut < -32768.0F) *dest = (S16)(U16)0x0080; \
- else STORE_LE_SWAP16( dest, (S16) fOut ) \
- ++dest; \
-}
-
-#define toU64(v) ((U64)((U32)(v)))
-#define toS64(v) ((S64)((S32)(v)))
-
-#define mult64anddiv(mt1,mt2,d) ((U32)((toU64(mt1)*toU64(mt2))/toU64(d)))
-
-#define mult64addsubandshift(mt1,mt2,addv,subv,d) ((U32)((((S64)((toU64(mt1)*toU64(mt2))+toU64(addv)))-toS64(subv))>>toS64(d)))
-
-#define shift64addsubanddiv(val,shift,addv,subv,divv) ((U32)(((S64)((toU64(val)<<toU64(shift))+toU64(addv)-toU64(subv)))/toS64(divv)))
-
-#endif
-
-#endif
-
-#endif
-
-
-#endif
-
-#endif
-
-#endif
-
-#ifdef MSS_SPU_PROCESS
-
-#define SPU_NAME( flt, name ) extern "C" void AILCALL flt##_##name
-
-//#define DEBUGSPUMEM
-#ifdef DEBUGSPUMEM
-
- void * spu_alloc( U32 bytes );
-
- #ifdef __cplusplus
-
- extern "C" U32 num_mals;
- extern "C" void free_mals( int level );
-
- class stackmark
- {
- public:
- int level;
- stackmark()
- {
- level = num_mals;
- }
- ~stackmark()
- {
- free_mals( level );
- }
- };
- #define addstackmark() stackmark sm;
- #else
- #define addstackmark()
- #endif
-
-#else
-
- #define addstackmark()
-
- #ifdef IS_SPU
- #include <alloca.h>
-
- static int stacksizehas( int v )
- {
- vector signed int val;
- __asm__("or %0,$1,$1" : "=r"(val) );
-
- if ( val[1] < ( v + 2048 ) ) { MSSBreakPoint(); }
- return v;
- }
- #define spu_alloc(bytes) (void*)alloca( stacksizehas( ( ( bytes ) + 15 ) & ~15 ) )
- #else
- #include <malloc.h>
- #define spu_alloc(bytes) (void*)alloca( ( ( bytes ) + 15 ) & ~15 )
- #endif
-
-#endif
-
-#else
-
-#define SPU_NAME( flt, name ) static void AILCALL name
-#define addstackmark()
-
-#endif
-
-//
-// low-level utility memory file routines
-//
-
-typedef struct _MEMDUMP
-{
- void* buffer[1024]; // up to 64 MB
- U8* current;
- U32 size;
- U32 totalsize;
- U32 curbufnum;
- U32 lastbufnum;
- U32 curpos;
- S32 error;
- S32 expandable;
- U32 eachbuf;
- U32 firstbuf;
-} MEMDUMP;
-
-// This typedef occurs in mss.h as well.
-//typedef struct _MEMDUMP* HMEMDUMP;
-
-DXDEC HMEMDUMP AILCALL AIL_mem_open(void* addr,U32 size);
-
-DXDEC HMEMDUMP AILCALL AIL_mem_create(void);
-DXDEC HMEMDUMP AILCALL AIL_mem_create_from_existing(void* addr, U32 size); // do not delete pointer passed in
-
-DXDEC S32 AILCALL AIL_mem_close(HMEMDUMP m, void** buf, U32* size);
-
-DXDEC U32
-#if defined(IS_WIN32API)
-__cdecl
-#endif
-AIL_mem_printf(HMEMDUMP m, char const* fmt, ...);
-
-DXDEC U32 AILCALL AIL_mem_printc(HMEMDUMP m, char c);
-
-DXDEC U32 AILCALL AIL_mem_prints(HMEMDUMP m, char const* s);
-
-DXDEC U32 AILCALL AIL_mem_write(HMEMDUMP m, void const* s, U32 bytes);
-
-DXDEC U32 AILCALL AIL_mem_read(HMEMDUMP m, void* s, U32 bytes);
-
-DXDEC U32 AILCALL AIL_mem_seek(HMEMDUMP m, U32 pos);
-
-DXDEC U32 AILCALL AIL_mem_size(HMEMDUMP m);
-
-DXDEC U32 AILCALL AIL_mem_pos(HMEMDUMP m);
-
-DXDEC S32 AILCALL AIL_mem_error(HMEMDUMP m);
-
-
-
-#define DIG_PROCESS_BUFFER_SIZE 2048
-
-extern U8 *ASI_mem_src_ptr;
-extern S32 ASI_mem_src_len;
-extern S32 ASI_mem_src_pos;
-
-
-extern S32 AILCALLBACK ASI_mem_stream_CB(UINTa user, //)
- void *dest,
- S32 bytes_requested,
- S32 offset);
-
-#if 1
-
-#if 0 //used to be a IS_LINUX
-
-#else
-
-DXDEC S32 AILCALL AIL_stricmp(const char *s1, const char *s2);
-DXDEC S32 AILCALL AIL_strnicmp( const char *s1, const char *s2, U32 maxlen);
-
-#if defined(IS_MAC) || defined(IS_LINUX) || defined(IS_3DS) || defined(IS_IPHONE) || defined(IS_PSP2) || defined(IS_WIIU) || defined(__RADSEKRIT2__) || defined(__RADANDROID__)
-
-#ifdef IS_PSP2
-#ifdef __cplusplus
-}
-#endif
-#endif
-
-#include <string.h>
-#include <stdlib.h> // for abs().
-
-#ifdef IS_PSP2
-#ifdef __cplusplus
-extern "C" {
-#endif
-#endif
-
-
-#define AIL_memcpy memcpy
-#define AIL_memmove memmove
-#define AIL_strcpy strcpy
-#define AIL_strcmp strcmp
-#define AIL_strlen strlen
-#define AIL_strcat strcat
-#define AIL_memset memset
-#define AIL_ptr_add(ptr,off) ((void*)(((U8*)(ptr))+(off)))
-#define AIL_ptr_dif(p1,p2) ((SINTa)((SINTa) p1) - ((SINTa) p2))
-#define AIL_ptr_alloc_clone(x) ((void*)x)
-#define AIL_ptr_free_clone(x)
-
-#ifdef __cplusplus
-}
- template <typename T> inline T AILptradd( T ptr, U32 off ) { return( T(AIL_ptr_add( ptr, off )) ); }
- #define AIL_ptr_inc_clone(x,y) x=AILptradd(x,y)
-extern "C" {
-#endif
-
-#define AIL_ptr_fixup_clone(x)
-#define AIL_ptr_lt(x,y) (((UINTa)x) < ((UINTa)y))
-#define AIL_ptr_ge(x,y) (((UINTa)x) >= ((UINTa)y))
-#define AIL_ptr_eq(x,y) (((UINTa)x) == ((UINTa)y))
-#define AIL_ptr_ne(x,y) (((UINTa)x) != ((UINTa)y))
-#define AIL_ptr_lin_addr(x) ((UINTa)(x))
-
-#define AIL_abs abs
-#define AIL_memcmp memcmp
-
-#else // not mac or linux
-
-#ifdef IS_WIN32API
-
-#define AIL_abs abs
-
-#ifdef IS_XENON
-
-typedef void *PVOID;
-typedef int INT;
-typedef unsigned long ULONG_PTR;
-typedef ULONG_PTR SIZE_T;
-
-PVOID
-__stdcall
-XMemSet(
- PVOID pDest,
- INT c,
- SIZE_T count
- );
-
-PVOID
-__stdcall
-XMemCpy(
- PVOID pDest,
- const void* pSrc,
- SIZE_T count
- );
-
-char * __cdecl strcpy( char *_Dest, const char * _Source);
-
-#define AIL_memcpy XMemCpy
-#define AIL_memset XMemSet
-
-#else
-
-#if defined(_WIN32) || defined(_WIN64) || defined(WIN32) || defined(__NT__) || defined(__WIN32__)
- #include <string.h>
- void * __cdecl memcpy(void *, const void *, size_t);
- void * __cdecl memset(void *, int, size_t);
- char * __cdecl strcpy(char *, const char *);
-#endif
-
-#define AIL_memcpy memcpy
-#define AIL_memset memset
-
-#endif
-
-#if defined(IS_XENON)
-#include <string.h>
-#endif
-
-#define AIL_memmove memmove
-
-#define AIL_memcmp memcmp
-
-#define AIL_strcpy strcpy
-
-#define AIL_strcmp strcmp
-
-#define AIL_strlen strlen
-
-#define AIL_strcat strcat
-
-#define AIL_ptr_add(ptr,off) ((void*)(((U8*)(ptr))+(off)))
-
-#define AIL_ptr_dif(p1,p2) ((SINTa)((SINTa) p1) - ((SINTa) p2))
-
-#define AIL_ptr_alloc_clone(x) ((void*)x)
-
-#define AIL_ptr_free_clone(x)
-
-#ifdef __cplusplus
-}
- template <typename T> inline T AILptradd( T ptr, U32 off ) { return( T(AIL_ptr_add( ptr, off )) ); }
- #define AIL_ptr_inc_clone(x,y) x=AILptradd(x,y)
-extern "C" {
-#endif
-
-#define AIL_ptr_fixup_clone(x)
-
-#define AIL_ptr_lt(x,y) (((UINTa)x) < ((UINTa)y))
-
-#define AIL_ptr_ge(x,y) (((UINTa)x) >= ((UINTa)y))
-
-#define AIL_ptr_eq(x,y) (((UINTa)x) == ((UINTa)y))
-
-#define AIL_ptr_ne(x,y) (((UINTa)x) != ((UINTa)y))
-
-#define AIL_ptr_lin_addr(x) ((UINTa)(x))
-
-#else
-
-#if defined(IS_PSP)
-
-#define AIL_memmove memmove
-
-#define AIL_memcpy memcpy
-
-#define AIL_memset memset
-
-#define AIL_memcmp memcmp
-
-#define AIL_strcpy strcpy
-
-#define AIL_strcmp strcmp
-
-#define AIL_stricmp strcasecmp
-
-#define AIL_strnicmp strncasecmp
-
-#define AIL_strlen strlen
-
-#define AIL_strcat strcat
-
-#define AIL_ptr_add(ptr,off) ((void*)(((U8*)(ptr))+(off)))
-
-#define AIL_ptr_dif(p1,p2) ((SINTa)((SINTa) p1) - ((SINTa) p2))
-
-#define AIL_ptr_alloc_clone(x) ((void*)x)
-
-#define AIL_ptr_free_clone(x)
-
-#ifdef __cplusplus
-}
- template <typename T> inline T AILptradd( T ptr, U32 off ) { return( T(AIL_ptr_add( ptr, off )) ); }
- #define AIL_ptr_inc_clone(x,y) x=AILptradd(x,y)
-extern "C" {
-#endif
-
-#define AIL_ptr_fixup_clone(x)
-
-#define AIL_ptr_lt(x,y) (((UINTa)x) < ((UINTa)y))
-
-#define AIL_ptr_ge(x,y) (((UINTa)x) >= ((UINTa)y))
-
-#define AIL_ptr_eq(x,y) (((UINTa)x) == ((UINTa)y))
-
-#define AIL_ptr_ne(x,y) (((UINTa)x) != ((UINTa)y))
-
-#define AIL_ptr_lin_addr(x) ((UINTa)(x))
-
-static inline S32 AIL_abs(S32 v) { return( ( v >=0 ) ? v : -v ); }
-
-
-#elif defined(IS_PS3)
-
-#define AIL_memmove memmove
-
-#define AIL_memcpy memcpy
-
-#define AIL_memset memset
-
-#define AIL_memcmp memcmp
-
-#define AIL_strcpy strcpy
-
-#define AIL_strcmp strcmp
-
-#define AIL_stricmp strcasecmp_ascii
-
-#define AIL_strnicmp strncasecmp_ascii
-
-#define AIL_strlen strlen
-
-#define AIL_strcat strcat
-
-#define AIL_ptr_add(ptr,off) ((void*)(((U8*)(ptr))+(off)))
-
-#define AIL_ptr_dif(p1,p2) ((SINTa)((SINTa) p1) - ((SINTa) p2))
-
-#define AIL_ptr_alloc_clone(x) ((void*)x)
-
-#define AIL_ptr_free_clone(x)
-
-#ifdef __cplusplus
-}
- template <typename T> inline T AILptradd( T ptr, U32 off ) { return( T(AIL_ptr_add( ptr, off )) ); }
- #define AIL_ptr_inc_clone(x,y) x=AILptradd(x,y)
-extern "C" {
-#endif
-
-#define AIL_ptr_fixup_clone(x)
-
-#define AIL_ptr_lt(x,y) (((UINTa)x) < ((UINTa)y))
-
-#define AIL_ptr_ge(x,y) (((UINTa)x) >= ((UINTa)y))
-
-#define AIL_ptr_eq(x,y) (((UINTa)x) == ((UINTa)y))
-
-#define AIL_ptr_ne(x,y) (((UINTa)x) != ((UINTa)y))
-
-#define AIL_ptr_lin_addr(x) ((UINTa)(x))
-
-static inline S32 AIL_abs(S32 v) { return( ( v >=0 ) ? v : -v ); }
-
-#else
-
-#ifdef IS_WII
-
-#define AIL_memcpy memcpy
-
-#define AIL_memmove memmove
-
-#define AIL_strcpy strcpy
-
-#define AIL_strcmp strcmp
-
-#define AIL_strlen strlen
-
-#define AIL_strcat strcat
-
-#define AIL_memset memset
-
-#define AIL_ptr_add(ptr,off) ((void*)(((U8*)(ptr))+(off)))
-
-#define AIL_ptr_dif(p1,p2) ((SINTa)((SINTa) p1) - ((SINTa) p2))
-
-#define AIL_ptr_alloc_clone(x) ((void*)x)
-
-#define AIL_ptr_free_clone(x)
-
-#ifdef __cplusplus
-}
- template <typename T> inline T AILptradd( T ptr, U32 off ) { return( T(AIL_ptr_add( ptr, off )) ); }
- #define AIL_ptr_inc_clone(x,y) x=AILptradd(x,y)
-extern "C" {
-#endif
-
-#define AIL_ptr_fixup_clone(x)
-
-#define AIL_ptr_lt(x,y) (((UINTa)x) < ((UINTa)y))
-
-#define AIL_ptr_ge(x,y) (((UINTa)x) >= ((UINTa)y))
-
-#define AIL_ptr_eq(x,y) (((UINTa)x) == ((UINTa)y))
-
-#define AIL_ptr_ne(x,y) (((UINTa)x) != ((UINTa)y))
-
-#define AIL_ptr_lin_addr(x) ((UINTa)(x))
-
-#ifndef __cplusplus
-int abs( int );
-#endif
-
-#define AIL_abs abs
-#define AIL_memcmp memcmp
-
-#endif
-
-#endif
-
-#endif
-
-#endif
-
-#endif
-
-#endif
-
-#ifndef AIL_ptr_inc_clone
-#define AIL_ptr_inc_clone(x,y) AIL_ptr_inc_clone_ref((void * *)(void*) &(x),y)
-#endif
-#define AIL_ptr_from_clone(clone,hptr) (AIL_ptr_add(hptr,AIL_ptr_dif(clone,hptr)))
-
-
-#ifdef IS_32
-
-#define MSS_do_cb1(type,addr,ds,param1) \
- (addr)(param1)
-
-#define MSS_do_cb3(type,addr,ds,param1,param2,param3) \
- (addr)(param1,param2,param3)
-
-#define MSS_do_cb4(type,addr,ds,param1,param2,param3,param4) \
- (addr)(param1,param2,param3,param4)
-
-#define MSS_do_cb1_with_ret(ret,type,addr,ds,param1) \
- ret = (addr)(param1)
-
-#define MSS_do_cb3_with_ret(ret,type,addr,ds,param1,param2,param3) \
- ret = (addr)(param1,param2,param3)
-
-#define MSS_do_cb4_with_ret(ret,type,addr,ds,param1,param2,param3,param4) \
- ret = (addr)(param1,param2,param3,param4)
-
-#define MSS_do_cb5_with_ret(ret,type,addr,ds,param1,param2,param3,param4,param5) \
- ret = (addr)(param1,param2,param3,param4,param5)
-
-#endif
-
-#if (defined(IS_MAC) && defined( IS_X86 )) || defined(IS_LINUX)
-
-
-#define MSS_CB_STACK_ALIGN( name ) \
-void MSS_CALLBACK_ALIGNED_NAME(name)(void)\
-{\
- asm (\
- "mov $16,%%eax\n" \
- "sub $64,%%esp\n" \
- "add %%esp, %%eax\n" \
- "and $0xfffffff0,%%eax\n" \
- "movups 8(%%ebp), %%xmm0\n" \
- "movaps %%xmm0, (%%eax)\n" \
- "movl %%esp, 32(%%eax)\n" \
- "mov %%eax,%%esp\n" \
- "call *%0\n" \
- "movl 32(%%esp), %%esp\n" \
- "add $64,%%esp\n" \
- : : "r" (name) : "eax"); \
-}
-
-#define MSS_DEF_CB_STACK_ALIGN( name ) DXDEF MSS_CB_STACK_ALIGN( name )
-#define MSS_CB_STACK_ALIGN_DEC( name ) void MSS_CALLBACK_ALIGNED_NAME(name)(void);
-
-#else
-
-#define MSS_CB_STACK_ALIGN( name )
-#define MSS_DEF_CB_STACK_ALIGN( name )
-#define MSS_CB_STACK_ALIGN_DEC( name )
-
-#endif
-
-#ifdef IS_XENON
-
-#define XWAVE_FORMAT_XMA 0x0165
-
-typedef MSS_STRUCT XXMASTREAMFORMAT
-{
- U32 PsuedoBytesPerSec; // Used by encoder
- U32 SampleRate; // Sample rate for the stream.
- U32 LoopStart; // Loop start offset (in bits).
- U32 LoopEnd; // Loop end offset (in bits).
-
- // Format for SubframeData: eeee ssss.
- // e: Subframe number of loop end point [0,3].
- // s: Number of subframes to skip before decoding and outputting at the loop start point [1,4].
-
- U8 SubframeData; // Data for decoding subframes. See above.
- U8 Channels; // Number of channels in the stream (1 or 2).
- U16 ChannelMask; // Channel assignments for the channels in the stream (same as
- // lower 16 bits of dwChannelMask in WAVEFORMATEXTENSIBLE).
-} XXMASTREAMFORMAT;
-
-typedef MSS_STRUCT XXMAWAVEFORMAT
-{
- U16 FormatTag; // Audio format type (always WAVE_FORMAT_XMA).
- U16 BitsPerSample; // Bit depth (currently required to be 16).
- U16 EncodeOptions; // Options for XMA encoder/decoder.
- U16 LargestSkip; // Largest skip used in interleaving streams.
- U16 NumStreams; // Number of interleaved audio streams.
- U8 LoopCount; // Number of loop repetitions (255 == infinite).
- U8 Version; // Version of the encoder that generated this.
- XXMASTREAMFORMAT XmaStreams[1]; // Format info for each stream (can grow based on wNumStreams).
-} XXMAWAVEFORMAT;
-
-#endif
-
-extern U32 SS_granularity(HSAMPLE S);
-
-extern S32 MC_open_output_filter(C8 const *name, //)
- HDIGDRIVER driver,
- S32 is_matrix_filter);
-
-extern void AILCALL MSS_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 );
-
-extern void AILCALL MSS_mixer_adpcm_decode( void * dest,
- void const * in,
- S32 out_len,
- S32 in_len,
- S32 input_format,
- ADPCMDATA *adpcm_data );
-//
-// Prototypes for ADPCM decode routines
-//
-
-extern void ASMLINK DecodeADPCM_STEREO( ASMPARM void *out,
- ASMPARM void const *in,
- ASMPARM S32 out_len,
- ASMPARM S32 in_len,
- ASMPARM ADPCMDATA *adpcm_data);
-
-extern void ASMLINK DecodeADPCM_MONO( ASMPARM void *out,
- ASMPARM void const *in,
- ASMPARM S32 out_len,
- ASMPARM S32 in_len,
- ASMPARM ADPCMDATA *adpcm_data);
-
-extern void ASMLINK DecodeADPCM_MONO_8( ASMPARM void *out,
- ASMPARM void const *in,
- ASMPARM S32 out_len,
- ASMPARM S32 in_len,
- ASMPARM ADPCMDATA *adpcm_data);
-
-
-//
-// .VOC file header
-//
-
-typedef MSS_STRUCT
-{
- S8 ID_string[20];
-
- U16 data_offset;
- U16 version;
- U16 ID_code;
-}
-VOC;
-
-typedef MSS_STRUCT _ADPCMOUT {
- U32 riffmark;
- U32 rifflen;
- U32 wavemark;
- U32 fmtmark;
- U32 fmtlen;
- U16 fmttag;
- U16 channels;
- U32 sampersec;
- U32 avepersec;
- U16 blockalign;
- U16 bitspersam;
- S16 extra;
- S16 samples_per_block;
- U32 factmark;
- U32 factlen;
- U32 samples;
- U32 datamark;
- U32 datalen;
-} ADPCMOUT;
-
-typedef MSS_STRUCT _WAVEOUT {
- U32 riffmark;
- U32 rifflen;
- U32 wavemark;
- U32 fmtmark;
- U32 fmtlen;
- U16 fmttag;
- U16 channels;
- U32 sampersec;
- U32 avepersec;
- U16 blockalign;
- U16 bitspersam;
- U32 datamark;
- U32 datalen;
-} WAVEOUT;
-
-typedef MSS_STRUCT _WAVEOUTEXT {
- U32 riffmark;
- U32 rifflen;
- U32 wavemark;
- U32 fmtmark;
- U32 fmtlen;
- U16 fmttag;
- U16 channels;
- U32 sampersec;
- U32 avepersec;
- U16 blockalign;
- U16 bitspersam;
- U16 size;
- U16 sampbits;
- U32 chanmask;
- U8 subfmt[16];
- U32 datamark;
- U32 datalen;
-} WAVEOUTEXT;
-
-F32 evaluate_graph(MSSGRAPHPOINT const* graph, S32 cnt, F32 x);
-
-//
-// platform allocators
-//
-
-void * AILCALLBACK platform_alloc(UINTa size);
-void AILCALLBACK platform_free( void * ptr );
-
-
-//
-// Abstracted IO structures.
-//
-
-#ifdef IS_WII
-#define MAX_PLATFILE_SPECIFIC_SIZE 512
-#else
-#define MAX_PLATFILE_SPECIFIC_SIZE 32
-#endif
-typedef struct PLATFORM_FILE
-{
- char plat_specific[MAX_PLATFILE_SPECIFIC_SIZE]; // needs to be at the front for wii
- U32 offset; // current offset in to our "file"
- U32 start_pos; // offset of our "file" from the start of the physical file.
- U32 file_length; // length of our "file"
- S32 dont_close; // nonzero if we don't own the file handle, so when done, don't close.
- U32 raw_length; // length of the entire file that we might be "inside of"
-} PLATFORM_FILE;
-
-typedef struct FNVALUES
-{
- char const * filename;
- U32 size;
- U32 start;
-} FNVALUES;
-
-typedef struct FHVALUES
-{
- S32 hand;
- S32 length;
- S32 pos;
-} FHVALUES;
-
-//
-// Functions implemented per platform.
-//
-extern int Platform_OpenFile(struct PLATFORM_FILE* i_File, char const * fn);
-extern void Platform_SeekFromBeginning(PLATFORM_FILE* i_File, S32 i_Offset);
-extern U32 Platform_ReadFile(PLATFORM_FILE* i_File, void* o_Buffer, U32 i_ReadBytes);
-extern void Platform_CloseFile(PLATFORM_FILE* i_File);
-
-DXDEC void AILCALL AIL_set_event_settings(void* i_Settings);
-
-// Auditioner Declarations
-//-----------------------------------------------------------------------------
-S32 Audition_Status();
-S32 Audition_Pump();
-void* Audition_OpenBank(char const* i_FileName);
-S32 Audition_OpenComplete(void* i_Bank);
-void Audition_CloseBank(void* i_Bank);
-
-void Audition_Suppress(S32 i_IsSuppressed);
-void Audition_FrameStart();
-void Audition_FrameEnd();
-void Audition_DefragStart();
-void Audition_SetBlend(U64 i_EventId, char const* i_Name);
-void Audition_SetPersist(U64 i_EventId, char const* i_Name, char const* i_Preset);
-void Audition_Event(char const* i_EventName, U64 i_EventId, U64 i_Filter, S32 i_Exists, void* i_InitBlock, S32 i_InitBlockLen);
-void Audition_Sound(U64 i_EventId, U64 i_SoundId, char const* i_Sound, char const* i_Label, float i_Volume, S32 i_Delay, float i_Pitch);
-void Audition_SoundComplete(U64 i_SoundId);
-void Audition_SoundPlaying(U64 i_SoundId);
-void Audition_SoundFlags(U64 i_SoundId, S32 i_Flags);
-void Audition_SoundLimited(U64 i_SoundId, char const* i_Label);
-void Audition_SoundEvicted(U64 i_SoundId, U64 i_ForSound, S32 i_Reason);
-void Audition_Control(U64 i_EventId, char const* i_Labels, U8 i_ControlType, U64 i_Filter);
-void Audition_SoundBus(U64 i_SoundId, U8 i_BusIndex);
-
-void Audition_Error(U64 i_Id, char const* i_Details);
-
-void Audition_AsyncQueued(U64 i_RelevantId, S32 i_AsyncId, char const* i_Asset);
-void Audition_AsyncLoad(S32 i_AsyncId, S32 i_ExpectedData);
-void Audition_AsyncError(S32 i_AsyncId);
-void Audition_AsyncComplete(S32 i_AsyncId, S32 i_DataLoaded);
-void Audition_AsyncCancel(S32 i_AsyncId);
-void Audition_ListenerPosition(float x, float y, float z);
-void Audition_SoundPosition(U64 i_Sound, float x, float y, float z);
-void Audition_SendCPU(HDIGDRIVER i_Driver);
-void Audition_UpdateDataCount(S32 i_CurrentDataLoaded);
-void Audition_SendCount(S32 i_SoundCount);
-void Audition_HandleSystemLoad(S32 i_Avail, S32 i_Total);
-void Audition_VarState(char const* i_Var, U64 i_SoundId, S32 i_Int, void* i_4ByteValue);
-void Audition_RampState(char const* i_Ramp, U64 i_SoundId, S32 i_Type, float i_Current);
-void Audition_SoundState(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);
-void Audition_ClearState();
-void Audition_CompletionEvent(U64 i_CompletionEventId, U64 i_ParentSoundId);
-void Audition_AddRamp(U64 i_ParentSoundId, S32 i_Type, char const* i_Name, char const* i_LabelQuery, U64 i_EventId);
-
-#if defined(IS_WIN32API) || defined(IS_WII)
- #pragma pack(pop)
-#endif
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
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
diff --git a/Minecraft.Client/Windows64/Miles/include/rrcore.h b/Minecraft.Client/Windows64/Miles/include/rrcore.h
deleted file mode 100644
index e88b5f8c..00000000
--- a/Minecraft.Client/Windows64/Miles/include/rrcore.h
+++ /dev/null
@@ -1,2322 +0,0 @@
-/// ========================================================================
-// (C) Copyright 1994- 2014 RAD Game Tools, Inc. Global types header file
-// ========================================================================
-
-#ifndef __RADRR_COREH__
-#define __RADRR_COREH__
-#define RADCOPYRIGHT "Copyright (C) 1994-2014, RAD Game Tools, Inc."
-
-// __RAD16__ means 16 bit code (Win16)
-// __RAD32__ means 32 bit code (DOS, Win386, Win32s, Mac AND Win64)
-// __RAD64__ means 64 bit code (x64)
-
-// Note oddness - __RAD32__ essentially means "at *least* 32-bit code".
-// So, on 64-bit systems, both __RAD32__ and __RAD64__ will be defined.
-
-// __RADDOS__ means DOS code (16 or 32 bit)
-// __RADWIN__ means Windows API (Win16, Win386, Win32s, Win64, Xbox, Xenon)
-// __RADWINEXT__ means Windows 386 extender (Win386)
-// __RADNT__ means Win32 or Win64 code
-// __RADWINRTAPI__ means Windows RT API (Win 8, Win Phone, ARM, Durango)
-// __RADMAC__ means Macintosh
-// __RADCARBON__ means Carbon
-// __RADMACH__ means MachO
-// __RADXBOX__ means the XBox console
-// __RADXENON__ means the Xenon console
-// __RADDURANGO__ or __RADXBOXONE__ means Xbox One
-// __RADNGC__ means the Nintendo GameCube
-// __RADWII__ means the Nintendo Wii
-// __RADWIIU__ means the Nintendo Wii U
-// __RADNDS__ means the Nintendo DS
-// __RADTWL__ means the Nintendo DSi (__RADNDS__ also defined)
-// __RAD3DS__ means the Nintendo 3DS
-// __RADPS2__ means the Sony PlayStation 2
-// __RADPSP__ means the Sony PlayStation Portable
-// __RADPS3__ means the Sony PlayStation 3
-// __RADPS4__ means the Sony PlayStation 4
-// __RADANDROID__ means Android NDK
-// __RADNACL__ means Native Client SDK
-// __RADNTBUILDLINUX__ means building Linux on NT
-// __RADLINUX__ means actually building on Linux (most likely with GCC)
-// __RADPSP2__ means NGP
-// __RADBSD__ means a BSD-style UNIX (OS X, FreeBSD, OpenBSD, NetBSD)
-// __RADPOSIX__ means POSIX-compliant
-// __RADQNX__ means QNX
-// __RADIPHONE__ means iphone
-// __RADIPHONESIM__ means iphone simulator
-
-// __RADX86__ means Intel x86
-// __RADMMX__ means Intel x86 MMX instructions are allowed
-// __RADX64__ means Intel/AMD x64 (NOT IA64=Itanium)
-// __RAD68K__ means 68K
-// __RADPPC__ means PowerPC
-// __RADMIPS__ means Mips (only R5900 right now)
-// __RADARM__ mean ARM processors
-
-// __RADLITTLEENDIAN__ means processor is little-endian (x86)
-// __RADBIGENDIAN__ means processor is big-endian (680x0, PPC)
-
-// __RADNOVARARGMACROS__ means #defines can't use ...
-
- #ifdef WINAPI_FAMILY
- // If this is #defined, we might be in a Windows Store App. But
- // VC++ by default #defines this to a symbolic name, not an integer
- // value, and those names are defined in "winapifamily.h". So if
- // WINAPI_FAMILY is #defined, #include the header so we can parse it.
- #include <winapifamily.h>
- #define RAD_WINAPI_IS_APP (!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP))
- #else
- #define RAD_WINAPI_IS_APP 0
- #endif
-
- #ifndef __RADRES__
- // Theoretically, this is to pad structs on platforms that don't support pragma pack or do it poorly. (PS3, PS2)
- // In general it is assumed that your padding is set via pragma, so this is just a struct.
- #define RADSTRUCT struct
-
- #ifdef __GNUC_MINOR__
- // make a combined GCC version for testing :
-
- #define __RAD_GCC_VERSION__ (__GNUC__ * 10000 \
- + __GNUC_MINOR__ * 100 \
- + __GNUC_PATCHLEVEL__)
-
- /* Test for GCC > 3.2.0 */
- // #if GCC_VERSION > 30200
- #endif
-
- #if defined(__RADX32__)
-
- #define __RADX86__
- #define __RADMMX__
- #define __RAD32__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- // known platforms under the RAD generic build type
- #if defined(_WIN32) || defined(_Windows) || defined(WIN32) || defined(__WINDOWS__) || defined(_WINDOWS)
- #define __RADNT__
- #define __RADWIN__
- #elif (defined(__MWERKS__) && !defined(__INTEL__)) || defined(__MRC__) || defined(THINK_C) || defined(powerc) || defined(macintosh) || defined(__powerc) || defined(__APPLE__) || defined(__MACH__)
- #define __RADMAC__
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
- #elif defined(__linux__)
- #define __RADLINUX__
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
- #endif
-
-#elif defined(ANDROID)
- #define __RADANDROID__
- #define __RAD32__
- #define __RADLITTLEENDIAN__
- #ifdef __i386__
- #define __RADX86__
- #else
- #define __RADARM__
- #endif
- #define RADINLINE inline
- #define RADRESTRICT __restrict
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
-#elif defined(__QNX__)
- #define __RAD32__
- #define __RADQNX__
-
-#ifdef __arm__
- #define __RADARM__
-#elif defined __i386__
- #define __RADX86__
-#else
- #error Unknown processor
-#endif
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-#elif defined(__linux__) && defined(__arm__) //This should pull in Raspberry Pi as well
-
- #define __RAD32__
- #define __RADLINUX__
- #define __RADARM__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
-#elif defined(__native_client__)
- #define __RADNACL__
- #define __RAD32__
- #define __RADLITTLEENDIAN__
- #define __RADX86__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #elif defined(_DURANGO) || defined(_SEKRIT) || defined(_SEKRIT1) || defined(_XBOX_ONE)
-
- #define __RADDURANGO__ 1
- #define __RADXBOXONE__ 1
- #if !defined(__RADSEKRIT__) // keep sekrit around for a bit for compat
- #define __RADSEKRIT__ 1
- #endif
-
- #define __RADWIN__
- #define __RAD32__
- #define __RAD64__
- #define __RADX64__
- #define __RADMMX__
- #define __RADX86__
- #define __RAD64REGS__
- #define __RADLITTLEENDIAN__
- #define RADINLINE __inline
- #define RADRESTRICT __restrict
- #define __RADWINRTAPI__
-
- #elif defined(__ORBIS__)
-
- #define __RADPS4__
- #if !defined(__RADSEKRIT2__) // keep sekrit2 around for a bit for compat
- #define __RADSEKRIT2__ 1
- #endif
- #define __RAD32__
- #define __RAD64__
- #define __RADX64__
- #define __RADMMX__
- #define __RADX86__
- #define __RAD64REGS__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #elif defined(WINAPI_FAMILY) && RAD_WINAPI_IS_APP
-
- #define __RADWINRTAPI__
- #define __RADWIN__
- #define RADINLINE __inline
- #define RADRESTRICT __restrict
-
- #if defined(_M_IX86) // WinRT on x86
-
- #define __RAD32__
- #define __RADX86__
- #define __RADMMX__
- #define __RADLITTLEENDIAN__
-
- #elif defined(_M_X64) // WinRT on x64
- #define __RAD32__
- #define __RAD64__
- #define __RADX86__
- #define __RADX64__
- #define __RADMMX__
- #define __RAD64REGS__
- #define __RADLITTLEENDIAN__
-
- #elif defined(_M_ARM) // WinRT on ARM
-
- #define __RAD32__
- #define __RADARM__
- #define __RADLITTLEENDIAN__
-
- #else
-
- #error Unrecognized WinRT platform!
-
- #endif
-
- #elif defined(_WIN64)
-
- #define __RADWIN__
- #define __RADNT__
- // See note at top for why both __RAD32__ and __RAD64__ are defined.
- #define __RAD32__
- #define __RAD64__
- #define __RADX64__
- #define __RADMMX__
- #define __RADX86__
- #define __RAD64REGS__
- #define __RADLITTLEENDIAN__
- #define RADINLINE __inline
- #define RADRESTRICT __restrict
-
- #elif defined(GENERIC_ARM)
-
- #define __RAD32__
- #define __RADARM__
- #define __RADLITTLEENDIAN__
- #define __RADFIXEDPOINT__
- #define RADINLINE inline
- #if (defined(__GCC__) || defined(__GNUC__))
- #define RADRESTRICT __restrict
- #else
- #define RADRESTRICT // __restrict not supported on cw
- #endif
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #elif defined(CAFE) // has to be before HOLLYWOOD_REV since it also defines it
-
- #define __RADWIIU__
- #define __RAD32__
- #define __RADPPC__
- #define __RADBIGENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
-
- #elif defined(HOLLYWOOD_REV) || defined(REVOLUTION)
-
- #define __RADWII__
- #define __RAD32__
- #define __RADPPC__
- #define __RADBIGENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #elif defined(NN_PLATFORM_CTR)
-
- #define __RAD3DS__
- #define __RAD32__
- #define __RADARM__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #elif defined(GEKKO)
-
- #define __RADNGC__
- #define __RAD32__
- #define __RADPPC__
- #define __RADBIGENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT // __restrict not supported on cw
-
- #elif defined(SDK_ARM9) || defined(SDK_TWL) || (defined(__arm) && defined(__MWERKS__))
-
- #define __RADNDS__
- #define __RAD32__
- #define __RADARM__
- #define __RADLITTLEENDIAN__
- #define __RADFIXEDPOINT__
- #define RADINLINE inline
- #if (defined(__GCC__) || defined(__GNUC__))
- #define RADRESTRICT __restrict
- #else
- #define RADRESTRICT // __restrict not supported on cw
- #endif
-
- #if defined(SDK_TWL)
- #define __RADTWL__
- #endif
-
- #elif defined(R5900)
-
- #define __RADPS2__
- #define __RAD32__
- #define __RADMIPS__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
- #define __RAD64REGS__
- #define U128 u_long128
-
- #if !defined(__MWERKS__)
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
- #endif
-
- #elif defined(__psp__)
-
- #define __RADPSP__
- #define __RAD32__
- #define __RADMIPS__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #elif defined(__psp2__)
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #define __RADPSP2__
- #define __RAD32__
- #define __RADARM__
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- // need packed attribute for struct with snc?
- #elif defined(__CELLOS_LV2__)
-
- // CB change : 10-29-10 : RAD64REGS on PPU but NOT SPU
-
- #ifdef __SPU__
- #define __RADSPU__
- #define __RAD32__
- #define __RADCELL__
- #define __RADBIGENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
- #else
- #define __RAD64REGS__
- #define __RADPS3__
- #define __RADPPC__
- #define __RAD32__
- #define __RADCELL__
- #define __RADBIGENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
- #define __RADALTIVEC__
- #endif
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #ifndef __LP32__
- #error "PS3 32bit ABI support only"
- #endif
- #elif (defined(__MWERKS__) && !defined(__INTEL__)) || defined(__MRC__) || defined(THINK_C) || defined(powerc) || defined(macintosh) || defined(__powerc) || defined(__APPLE__) || defined(__MACH__)
- #ifdef __APPLE__
- #include "TargetConditionals.h"
- #endif
-
- #if ((defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE) || (defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR))
-
- // iPhone/iPad/iOS
- #define __RADIPHONE__
- #define __RADMACAPI__
-
- #define __RAD32__
- #if defined(__x86_64__)
- #define __RAD64__
- #endif
-
- #define __RADLITTLEENDIAN__
- #define RADINLINE inline
- #define RADRESTRICT __restrict
- #define __RADMACH__
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #if defined(TARGET_IPHONE_SIMULATOR) && TARGET_IPHONE_SIMULATOR
- #if defined( __x86_64__)
- #define __RADX64__
- #else
- #define __RADX86__
- #endif
- #define __RADIPHONESIM__
- #elif defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE
- #define __RADARM__
- #endif
- #else
-
- // An actual MacOSX machine
- #define __RADMAC__
- #define __RADMACAPI__
-
- #if defined(powerc) || defined(__powerc) || defined(__ppc__)
- #define __RADPPC__
- #define __RADBIGENDIAN__
- #define __RADALTIVEC__
- #define RADRESTRICT
- #elif defined(__i386__)
- #define __RADX86__
- #define __RADMMX__
- #define __RADLITTLEENDIAN__
- #define RADRESTRICT __restrict
- #elif defined(__x86_64__)
- #define __RAD32__
- #define __RAD64__
- #define __RADX86__
- #define __RADX64__
- #define __RAD64REGS__
- #define __RADMMX__
- #define __RADLITTLEENDIAN__
- #define RADRESTRICT __restrict
- #else
- #define __RAD68K__
- #define __RADBIGENDIAN__
- #define __RADALTIVEC__
- #define RADRESTRICT
- #endif
-
- #define __RAD32__
-
- #if defined(__MWERKS__)
- #if (defined(__cplusplus) || ! __option(only_std_keywords))
- #define RADINLINE inline
- #endif
- #ifdef __MACH__
- #define __RADMACH__
- #endif
- #elif defined(__MRC__)
- #if defined(__cplusplus)
- #define RADINLINE inline
- #endif
- #elif defined(__GNUC__) || defined(__GNUG__) || defined(__MACH__)
- #define RADINLINE inline
- #define __RADMACH__
-
- #undef RADRESTRICT /* could have been defined above... */
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
- #endif
-
- #ifdef __RADX86__
- #ifndef __RADCARBON__
- #define __RADCARBON__
- #endif
- #endif
-
- #ifdef TARGET_API_MAC_CARBON
- #if TARGET_API_MAC_CARBON
- #ifndef __RADCARBON__
- #define __RADCARBON__
- #endif
- #endif
- #endif
- #endif
- #elif defined(__linux__)
-
- #define __RADLINUX__
- #define __RADMMX__
- #define __RADLITTLEENDIAN__
- #define __RADX86__
- #ifdef __x86_64
- #define __RAD32__
- #define __RAD64__
- #define __RADX64__
- #define __RAD64REGS__
- #else
- #define __RAD32__
- #endif
- #define RADINLINE inline
- #define RADRESTRICT __restrict
-
- #undef RADSTRUCT
- #define RADSTRUCT struct __attribute__((__packed__))
-
- #else
-
- #if _MSC_VER >= 1400
- #undef RADRESTRICT
- #define RADRESTRICT __restrict
- #else
- #define RADRESTRICT
- #define __RADNOVARARGMACROS__
- #endif
-
- #if defined(_XENON) || ( defined(_XBOX_VER) && (_XBOX_VER == 200) )
- // Remember that Xenon also defines _XBOX
- #define __RADPPC__
- #define __RADBIGENDIAN__
- #define __RADALTIVEC__
- #else
- #define __RADX86__
- #define __RADMMX__
- #define __RADLITTLEENDIAN__
- #endif
-
- #ifdef __MWERKS__
- #define _WIN32
- #endif
-
- #ifdef __DOS__
- #define __RADDOS__
- #define S64_DEFINED // turn off these types
- #define U64_DEFINED
- #define S64 double //should error
- #define U64 double //should error
- #define __RADNOVARARGMACROS__
- #endif
-
- #ifdef __386__
- #define __RAD32__
- #endif
-
- #ifdef _Windows //For Borland
- #ifdef __WIN32__
- #define WIN32
- #else
- #define __WINDOWS__
- #endif
- #endif
-
- #ifdef _WINDOWS //For MS
- #ifndef _WIN32
- #define __WINDOWS__
- #endif
- #endif
-
- #ifdef _WIN32
- #if defined(_XENON) || ( defined(_XBOX_VER) && (_XBOX_VER == 200) )
- // Remember that Xenon also defines _XBOX
- #define __RADXENON__
- #define __RAD64REGS__
- #elif defined(_XBOX)
- #define __RADXBOX__
- #elif !defined(__RADWINRTAPI__)
- #define __RADNT__
- #endif
- #define __RADWIN__
- #define __RAD32__
- #else
- #ifdef __NT__
- #if defined(_XENON) || (_XBOX_VER == 200)
- // Remember that Xenon also defines _XBOX
- #define __RADXENON__
- #define __RAD64REGS__
- #elif defined(_XBOX)
- #define __RADXBOX__
- #else
- #define __RADNT__
- #endif
- #define __RADWIN__
- #define __RAD32__
- #else
- #ifdef __WINDOWS_386__
- #define __RADWIN__
- #define __RADWINEXT__
- #define __RAD32__
- #define S64_DEFINED // turn off these types
- #define U64_DEFINED
- #define S64 double //should error
- #define U64 double //should error
- #else
- #ifdef __WINDOWS__
- #define __RADWIN__
- #define __RAD16__
- #else
- #ifdef WIN32
- #if defined(_XENON) || (_XBOX_VER == 200)
- // Remember that Xenon also defines _XBOX
- #define __RADXENON__
- #elif defined(_XBOX)
- #define __RADXBOX__
- #else
- #define __RADNT__
- #endif
- #define __RADWIN__
- #define __RAD32__
- #endif
- #endif
- #endif
- #endif
- #endif
-
- #ifdef __WATCOMC__
- #define RADINLINE
- #else
- #define RADINLINE __inline
- #endif
- #endif
-
- #if defined __RADMAC__ || defined __RADIPHONE__
- #define __RADBSD__
- #endif
-
- #if defined __RADBSD__ || defined __RADLINUX__
- #define __RADPOSIX__
- #endif
-
- #if (!defined(__RADDOS__) && !defined(__RADWIN__) && !defined(__RADMAC__) && \
- !defined(__RADNGC__) && !defined(__RADNDS__) && !defined(__RADXBOX__) && \
- !defined(__RADXENON__) && !defined(__RADDURANGO__) && !defined(__RADPS4__) && !defined(__RADLINUX__) && !defined(__RADPS2__) && \
- !defined(__RADPSP__) && !defined(__RADPSP2__) && !defined(__RADPS3__) && !defined(__RADSPU__) && \
- !defined(__RADWII__) && !defined(__RADIPHONE__) && !defined(__RADX32__) && !defined(__RADARM__) && \
- !defined(__RADWIIU__) && !defined(__RADANDROID__) && !defined(__RADNACL__) && !defined (__RADQNX__) )
- #error "RAD.H did not detect your platform. Define DOS, WINDOWS, WIN32, macintosh, powerpc, or appropriate console."
- #endif
-
-
- #ifdef __RADFINAL__
- #define RADTODO(str) { char __str[0]=str; }
- #else
- #define RADTODO(str)
- #endif
-
- #ifdef __RADX32__
- #if defined(_MSC_VER)
- #define RADLINK __stdcall
- #define RADEXPLINK __stdcall
- #else
- #define RADLINK __attribute__((stdcall))
- #define RADEXPLINK __attribute__((stdcall))
- #endif
- #define RADEXPFUNC RADDEFFUNC
-
- #elif (defined(__RADNGC__) || defined(__RADWII__) || defined( __RADPS2__) || \
- defined(__RADPSP__) || defined(__RADPSP2__) || defined(__RADPS3__) || \
- defined(__RADSPU__) || defined(__RADNDS__) || defined(__RADIPHONE__) || \
- (defined(__RADARM__) && !defined(__RADWINRTAPI__)) || defined(__RADWIIU__) || defined(__RADPS4__) )
-
- #define RADLINK
- #define RADEXPLINK
- #define RADEXPFUNC RADDEFFUNC
- #define RADASMLINK
-
- #elif defined(__RADANDROID__)
- #define RADLINK
- #define RADEXPLINK
- #define RADEXPFUNC RADDEFFUNC
- #define RADASMLINK
- #elif defined(__RADNACL__)
- #define RADLINK
- #define RADEXPLINK
- #define RADEXPFUNC RADDEFFUNC
- #define RADASMLINK
- #elif defined(__RADLINUX__) || defined (__RADQNX__)
-
- #ifdef __RAD64__
- #define RADLINK
- #define RADEXPLINK
- #else
- #define RADLINK __attribute__((cdecl))
- #define RADEXPLINK __attribute__((cdecl))
- #endif
-
- #define RADEXPFUNC RADDEFFUNC
- #define RADASMLINK
-
- #elif defined(__RADMAC__)
-
- // this define is for CodeWarrior 11's stupid new libs (even though
- // we don't use longlong's).
-
- #define __MSL_LONGLONG_SUPPORT__
-
- #define RADLINK
- #define RADEXPLINK
-
- #if defined(__CFM68K__) || defined(__MWERKS__)
- #ifdef __RADINDLL__
- #define RADEXPFUNC RADDEFFUNC __declspec(export)
- #else
- #define RADEXPFUNC RADDEFFUNC __declspec(import)
- #endif
- #else
- #if defined(__RADMACH__) && !defined(__MWERKS__)
- #ifdef __RADINDLL__
- #define RADEXPFUNC RADDEFFUNC __attribute__((visibility("default")))
- #else
- #define RADEXPFUNC RADDEFFUNC
- #endif
- #else
- #define RADEXPFUNC RADDEFFUNC
- #endif
- #endif
- #define RADASMLINK
-
- #else
-
- #ifdef __RADNT__
- #ifndef _WIN32
- #define _WIN32
- #endif
- #ifndef WIN32
- #define WIN32
- #endif
- #endif
-
- #ifdef __RADWIN__
- #ifdef __RAD32__
-
- #ifdef __RADXBOX__
-
- #define RADLINK __stdcall
- #define RADEXPLINK __stdcall
- #define RADEXPFUNC RADDEFFUNC
-
- #elif defined(__RADXENON__) || defined(__RADDURANGO__)
-
- #define RADLINK __stdcall
- #define RADEXPLINK __stdcall
-
- #define RADEXPFUNC RADDEFFUNC
-
- #elif defined(__RADWINRTAPI__)
-
- #define RADLINK __stdcall
- #define RADEXPLINK __stdcall
-
- #if ( defined(__RADINSTATICLIB__) || defined(__RADNOEXPORTS__ ) || ( defined(__RADNOEXEEXPORTS__) && ( !defined(__RADINDLL__) ) && ( !defined(__RADINSTATICLIB__) ) ) )
- #define RADEXPFUNC RADDEFFUNC
- #else
- #ifndef __RADINDLL__
- #define RADEXPFUNC RADDEFFUNC __declspec(dllimport)
- #else
- #define RADEXPFUNC RADDEFFUNC __declspec(dllexport)
- #endif
- #endif
-
- #elif defined(__RADNTBUILDLINUX__)
-
- #define RADLINK __cdecl
- #define RADEXPLINK __cdecl
- #define RADEXPFUNC RADDEFFUNC
-
- #else
- #ifdef __RADNT__
-
- #define RADLINK __stdcall
- #define RADEXPLINK __stdcall
-
- #if ( defined(__RADINSTATICLIB__) || defined(__RADNOEXPORTS__ ) || ( defined(__RADNOEXEEXPORTS__) && ( !defined(__RADINDLL__) ) && ( !defined(__RADINSTATICLIB__) ) ) )
- #define RADEXPFUNC RADDEFFUNC
- #else
- #ifndef __RADINDLL__
- #define RADEXPFUNC RADDEFFUNC __declspec(dllimport)
- #ifdef __BORLANDC__
- #if __BORLANDC__<=0x460
- #undef RADEXPFUNC
- #define RADEXPFUNC RADDEFFUNC
- #endif
- #endif
- #else
- #define RADEXPFUNC RADDEFFUNC __declspec(dllexport)
- #endif
- #endif
- #else
- #define RADLINK __pascal
- #define RADEXPLINK __far __pascal
- #define RADEXPFUNC RADDEFFUNC
- #endif
- #endif
- #else
- #define RADLINK __pascal
- #define RADEXPLINK __far __pascal __export
- #define RADEXPFUNC RADDEFFUNC
- #endif
- #else
- #define RADLINK __pascal
- #define RADEXPLINK __pascal
- #define RADEXPFUNC RADDEFFUNC
- #endif
-
- #define RADASMLINK __cdecl
-
- #endif
-
- #if !defined(__RADXBOX__) && !defined(__RADXENON__) && !defined(__RADDURANGO__) && !defined(__RADXBOXONE__)
- #ifdef __RADWIN__
- #ifndef _WINDOWS
- #define _WINDOWS
- #endif
- #endif
- #endif
-
- #ifdef __RADLITTLEENDIAN__
- #ifdef __RADBIGENDIAN__
- #error both endians !?
- #endif
- #endif
-
- #if !defined(__RADLITTLEENDIAN__) && !defined(__RADBIGENDIAN__)
- #error neither endian!
- #endif
-
-
- //-----------------------------------------------------------------
-
- #ifndef RADDEFFUNC
-
- #ifdef __cplusplus
- #define RADDEFFUNC extern "C"
- #define RADDEFSTART extern "C" {
- #define RADDEFEND }
- #define RADDEFINEDATA extern "C"
- #define RADDECLAREDATA extern "C"
- #define RADDEFAULT( val ) =val
-
- #define RR_NAMESPACE rr
- #define RR_NAMESPACE_START namespace RR_NAMESPACE {
- #define RR_NAMESPACE_END };
- #define RR_NAMESPACE_USE using namespace RR_NAMESPACE;
-
- #else
- #define RADDEFFUNC
- #define RADDEFSTART
- #define RADDEFEND
- #define RADDEFINEDATA
- #define RADDECLAREDATA extern
- #define RADDEFAULT( val )
-
- #define RR_NAMESPACE
- #define RR_NAMESPACE_START
- #define RR_NAMESPACE_END
- #define RR_NAMESPACE_USE
-
- #endif
-
- #endif
-
- // probably s.b: RAD_DECLARE_ALIGNED(type, name, alignment)
- #if (defined(__RADWII__) || defined(__RADWIIU__) || defined(__RADPSP__) || defined(__RADPSP2__) || \
- defined(__RADPS3__) || defined(__RADSPU__) || defined(__RADPS4__) || \
- defined(__RADLINUX__) || defined(__RADMAC__)) || defined(__RADNDS__) || defined(__RAD3DS__) || \
- defined(__RADIPHONE__) || defined(__RADANDROID__) || defined (__RADQNX__)
- #define RAD_ALIGN(type,var,num) type __attribute__ ((aligned (num))) var
- #elif (defined(__RADNGC__) || defined(__RADPS2__))
- #define RAD_ALIGN(type,var,num) __attribute__ ((aligned (num))) type var
- #elif (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__RADWINRTAPI__)
- #define RAD_ALIGN(type,var,num) type __declspec(align(num)) var
- #else
- // NOTE: / / is a guaranteed parse error in C/C++.
- #define RAD_ALIGN(type,var,num) RAD_ALIGN_USED_BUT_NOT_DEFINED / /
- #endif
-
- // WARNING : RAD_TLS should really only be used for debug/tools stuff
- // it's not reliable because even if we are built as a lib, our lib can
- // be put into a DLL and then it doesn't work
- #if defined(__RADNT__) || defined(__RADXENON__)
- #ifndef __RADINDLL__
- // note that you can't use this in windows DLLs
- #define RAD_TLS(type,var) __declspec(thread) type var
- #endif
- #elif defined(__RADPS3__) || defined(__RADLINUX__) || defined(__RADMAC__)
- // works on PS3/gcc I believe :
- #define RAD_TLS(type,var) __thread type var
- #else
- // RAD_TLS not defined
- #endif
-
- // Note that __RAD16__/__RAD32__/__RAD64__ refers to the size of a pointer.
- // The size of integers is specified explicitly in the code, i.e. u32 or whatever.
-
- #define RAD_S8 signed char
- #define RAD_U8 unsigned char
-
- #if defined(__RAD64__)
- // Remember that __RAD32__ will also be defined!
- #if defined(__RADX64__)
- // x64 still has 32-bit ints!
- #define RAD_U32 unsigned int
- #define RAD_S32 signed int
- // But pointers are 64 bits.
- #if (_MSC_VER >= 1300 && defined(_Wp64) && _Wp64 )
- #define RAD_SINTa __w64 signed __int64
- #define RAD_UINTa __w64 unsigned __int64
- #else // non-vc.net compiler or /Wp64 turned off
- #define RAD_UINTa unsigned long long
- #define RAD_SINTa signed long long
- #endif
- #else
- #error Unknown 64-bit processor (see radbase.h)
- #endif
- #elif defined(__RAD32__)
- #define RAD_U32 unsigned int
- #define RAD_S32 signed int
- // Pointers are 32 bits.
-
- #if ( ( defined(_MSC_VER) && (_MSC_VER >= 1300 ) ) && ( defined(_Wp64) && ( _Wp64 ) ) )
- #define RAD_SINTa __w64 signed long
- #define RAD_UINTa __w64 unsigned long
- #else // non-vc.net compiler or /Wp64 turned off
- #ifdef _Wp64
- #define RAD_SINTa signed long
- #define RAD_UINTa unsigned long
- #else
- #define RAD_SINTa signed int
- #define RAD_UINTa unsigned int
- #endif
- #endif
- #else
- #define RAD_U32 unsigned long
- #define RAD_S32 signed long
- // Pointers in 16-bit land are still 32 bits.
- #define RAD_UINTa unsigned long
- #define RAD_SINTa signed long
- #endif
-
- #define RAD_F32 float
- #if defined(__RADPS2__) || defined(__RADPSP__)
- typedef RADSTRUCT RAD_F64 // do this so that we don't accidentally use doubles
- { // while using the same space
- RAD_U32 vals[ 2 ];
- } RAD_F64;
- #define RAD_F64_OR_32 float // type is F64 if available, otherwise F32
- #else
- #define RAD_F64 double
- #define RAD_F64_OR_32 double // type is F64 if available, otherwise F32
- #endif
-
- #if (defined(__RADMAC__) || defined(__MRC__) || defined( __RADNGC__ ) || \
- defined(__RADLINUX__) || defined( __RADWII__ ) || defined(__RADWIIU__) || \
- defined(__RADNDS__) || defined(__RADPSP__) || defined(__RADPS3__) || defined(__RADPS4__) || \
- defined(__RADSPU__) || defined(__RADIPHONE__) || defined(__RADNACL__) || defined( __RADANDROID__) || defined( __RADQNX__ ) )
- #define RAD_U64 unsigned long long
- #define RAD_S64 signed long long
- #elif defined(__RADPS2__)
- #define RAD_U64 unsigned long
- #define RAD_S64 signed long
- #elif defined(__RADARM__)
- #define RAD_U64 unsigned long long
- #define RAD_S64 signed long long
- #elif defined(__RADX64__) || defined(__RAD32__)
- #define RAD_U64 unsigned __int64
- #define RAD_S64 signed __int64
- #else
- // 16-bit
- typedef RADSTRUCT RAD_U64 // do this so that we don't accidentally use U64s
- { // while using the same space
- RAD_U32 vals[ 2 ];
- } RAD_U64;
- typedef RADSTRUCT RAD_S64 // do this so that we don't accidentally use S64s
- { // while using the same space
- RAD_S32 vals[ 2 ];
- } RAD_S64;
- #endif
-
- #if defined(__RAD32__)
- #define PTR4
- #define RAD_U16 unsigned short
- #define RAD_S16 signed short
- #else
- #define PTR4 __far
- #define RAD_U16 unsigned int
- #define RAD_S16 signed int
- #endif
-
- //-------------------------------------------------
- // RAD_PTRBITS and such defined here without using sizeof()
- // so that they can be used in align() and other macros
-
- #ifdef __RAD64__
-
- #define RAD_PTRBITS 64
- #define RAD_PTRBYTES 8
- #define RAD_TWOPTRBYTES 16
-
- #else
-
- #define RAD_PTRBITS 32
- #define RAD_PTRBYTES 4
- #define RAD_TWOPTRBYTES 8
-
- #endif
-
-
- //-------------------------------------------------
- // UINTr = int the size of a register
-
- #ifdef __RAD64REGS__
-
- #define RAD_UINTr RAD_U64
- #define RAD_SINTr RAD_S64
-
- #else
-
- #define RAD_UINTr RAD_U32
- #define RAD_SINTr RAD_S32
-
- #endif
-
- //===========================================================================
-
- /*
- // CB : meh this is enough of a mess that it's probably best to just let each
- #if defined(__RADX86__) && defined(_MSC_VER) && _MSC_VER >= 1300
- #define __RADX86INTRIN2003__
- #endif
- */
-
- // RADASSUME(expr) tells the compiler that expr is always true
- // RADUNREACHABLE must never be reachable - even in event of error
- // eg. it's okay for compiler to generate completely invalid code after RADUNREACHABLE
-
- #ifdef _MSC_VER
- #define RADFORCEINLINE __forceinline
- #if _MSC_VER >= 1300
- #define RADNOINLINE __declspec(noinline)
- #else
- #define RADNOINLINE
- #endif
- #define RADUNREACHABLE __assume(0)
- #define RADASSUME(exp) __assume(exp)
- #elif defined(__clang__)
- #ifdef _DEBUG
- #define RADFORCEINLINE inline
- #else
- #define RADFORCEINLINE inline __attribute((always_inline))
- #endif
- #define RADNOINLINE __attribute__((noinline))
-
- #define RADUNREACHABLE __builtin_unreachable()
-
- #if __has_builtin(__builtin_assume)
- #define RADASSUME(exp) __builtin_assume(exp)
- #else
- #define RADASSUME(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) __builtin_unreachable(); )
- #endif
- #elif (defined(__GCC__) || defined(__GNUC__)) || defined(ANDROID)
- #ifdef _DEBUG
- #define RADFORCEINLINE inline
- #else
- #define RADFORCEINLINE inline __attribute((always_inline))
- #endif
- #define RADNOINLINE __attribute__((noinline))
-
- #if __RAD_GCC_VERSION__ >= 40500
- #define RADUNREACHABLE __builtin_unreachable()
- #define RADASSUME(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) __builtin_unreachable(); )
- #else
- #define RADUNREACHABLE RAD_INFINITE_LOOP( RR_BREAK(); )
- #define RADASSUME(exp)
- #endif
- #elif defined(__CWCC__)
- #define RADFORCEINLINE inline
- #define RADNOINLINE __attribute__((never_inline))
- #define RADUNREACHABLE
- #define RADASSUME(x) (void)0
- #else
- // ? #define RADFORCEINLINE ?
- #define RADFORCEINLINE inline
- #define RADNOINLINE
- #define RADASSUME(x) (void)0
- #endif
-
- //===========================================================================
-
- // RAD_ALIGN_HINT tells the compiler how a given pointer is aligned
- // it *must* be true, but the compiler may or may not use that information
- // it is not for cases where the pointer is to an inherently aligned data type,
- // it's when the compiler cannot tell the alignment but you have extra information.
- // eg :
- // U8 * ptr = rrMallocAligned(256,16);
- // RAD_ALIGN_HINT(ptr,16,0);
-
- #ifdef __RADSPU__
- #define RAD_ALIGN_HINT(ptr,alignment,offset) __align_hint(ptr,alignment,offset); RR_ASSERT( ((UINTa)(ptr) & ((alignment)-1)) == (UINTa)(offset) )
- #else
- #define RAD_ALIGN_HINT(ptr,alignment,offset) RADASSUME( ((UINTa)(ptr) & ((alignment)-1)) == (UINTa)(offset) )
- #endif
-
- //===========================================================================
-
- // RAD_EXPECT is to tell the compiler the *likely* value of an expression
- // different than RADASSUME in that expr might not have that value
- // it's use for branch code layout and static branch prediction
- // condition can technically be a variable but should usually be 0 or 1
-
- #if (defined(__GCC__) || defined(__GNUC__)) || defined(__clang__)
-
- // __builtin_expect returns value of expr
- #define RAD_EXPECT(expr,cond) __builtin_expect(expr,cond)
-
- #else
-
- #define RAD_EXPECT(expr,cond) (expr)
-
- #endif
-
- // helpers for doing an if ( ) with expect :
- // if ( RAD_LIKELY(expr) ) { ... }
-
- #define RAD_LIKELY(expr) RAD_EXPECT(expr,1)
- #define RAD_UNLIKELY(expr) RAD_EXPECT(expr,0)
-
- //===========================================================================
-
- // __RADX86ASM__ means you can use __asm {} style inline assembly
- #if defined(__RADX86__) && !defined(__RADX64__) && defined(_MSC_VER)
- #define __RADX86ASM__
- #endif
-
- //-------------------------------------------------
- // typedefs :
-
- #ifndef RADNOTYPEDEFS
-
- #ifndef S8_DEFINED
- #define S8_DEFINED
- typedef RAD_S8 S8;
- #endif
-
- #ifndef U8_DEFINED
- #define U8_DEFINED
- typedef RAD_U8 U8;
- #endif
-
- #ifndef S16_DEFINED
- #define S16_DEFINED
- typedef RAD_S16 S16;
- #endif
-
- #ifndef U16_DEFINED
- #define U16_DEFINED
- typedef RAD_U16 U16;
- #endif
-
- #ifndef S32_DEFINED
- #define S32_DEFINED
- typedef RAD_S32 S32;
- #endif
-
- #ifndef U32_DEFINED
- #define U32_DEFINED
- typedef RAD_U32 U32;
- #endif
-
- #ifndef S64_DEFINED
- #define S64_DEFINED
- typedef RAD_S64 S64;
- #endif
-
- #ifndef U64_DEFINED
- #define U64_DEFINED
- typedef RAD_U64 U64;
- #endif
-
- #ifndef F32_DEFINED
- #define F32_DEFINED
- typedef RAD_F32 F32;
- #endif
-
- #ifndef F64_DEFINED
- #define F64_DEFINED
- typedef RAD_F64 F64;
- #endif
-
- #ifndef F64_OR_32_DEFINED
- #define F64_OR_32_DEFINED
- typedef RAD_F64_OR_32 F64_OR_32;
- #endif
-
- // UINTa and SINTa are the ints big enough for an address
-
- #ifndef SINTa_DEFINED
- #define SINTa_DEFINED
- typedef RAD_SINTa SINTa;
- #endif
-
- #ifndef UINTa_DEFINED
- #define UINTa_DEFINED
- typedef RAD_UINTa UINTa;
- #endif
-
- #ifndef UINTr_DEFINED
- #define UINTr_DEFINED
- typedef RAD_UINTr UINTr;
- #endif
-
- #ifndef SINTr_DEFINED
- #define SINTr_DEFINED
- typedef RAD_SINTr SINTr;
- #endif
-
- #elif !defined(RADNOTYPEDEFINES)
-
- #ifndef S8_DEFINED
- #define S8_DEFINED
- #define S8 RAD_S8
- #endif
-
- #ifndef U8_DEFINED
- #define U8_DEFINED
- #define U8 RAD_U8
- #endif
-
- #ifndef S16_DEFINED
- #define S16_DEFINED
- #define S16 RAD_S16
- #endif
-
- #ifndef U16_DEFINED
- #define U16_DEFINED
- #define U16 RAD_U16
- #endif
-
- #ifndef S32_DEFINED
- #define S32_DEFINED
- #define S32 RAD_S32
- #endif
-
- #ifndef U32_DEFINED
- #define U32_DEFINED
- #define U32 RAD_U32
- #endif
-
- #ifndef S64_DEFINED
- #define S64_DEFINED
- #define S64 RAD_S64
- #endif
-
- #ifndef U64_DEFINED
- #define U64_DEFINED
- #define U64 RAD_U64
- #endif
-
- #ifndef F32_DEFINED
- #define F32_DEFINED
- #define F32 RAD_F32
- #endif
-
- #ifndef F64_DEFINED
- #define F64_DEFINED
- #define F64 RAD_F64
- #endif
-
- #ifndef F64_OR_32_DEFINED
- #define F64_OR_32_DEFINED
- #define F64_OR_32 RAD_F64_OR_32
- #endif
-
- // UINTa and SINTa are the ints big enough for an address (pointer)
- #ifndef SINTa_DEFINED
- #define SINTa_DEFINED
- #define SINTa RAD_SINTa
- #endif
-
- #ifndef UINTa_DEFINED
- #define UINTa_DEFINED
- #define UINTa RAD_UINTa
- #endif
-
- #ifndef UINTr_DEFINED
- #define UINTr_DEFINED
- #define UINTr RAD_UINTr
- #endif
-
- #ifndef SINTr_DEFINED
- #define SINTr_DEFINED
- #define SINTr RAD_SINTr
- #endif
-
- #endif
-
- /// Some error-checking.
- #if defined(__RAD64__) && !defined(__RAD32__)
- // See top of file for why this is.
- #error __RAD64__ must not be defined without __RAD32__ (see radbase.h)
- #endif
-
-#ifdef _MSC_VER
- // microsoft compilers
-
- #if _MSC_VER >= 1400
- #define RAD_STATEMENT_START \
- do {
-
- #define RAD_STATEMENT_END_FALSE \
- __pragma(warning(push)) \
- __pragma(warning(disable:4127)) \
- } while(0) \
- __pragma(warning(pop))
-
- #define RAD_STATEMENT_END_TRUE \
- __pragma(warning(push)) \
- __pragma(warning(disable:4127)) \
- } while(1) \
- __pragma(warning(pop))
-
- #else
- #define RAD_USE_STANDARD_LOOP_CONSTRUCT
- #endif
-#else
- #define RAD_USE_STANDARD_LOOP_CONSTRUCT
-#endif
-
-#ifdef RAD_USE_STANDARD_LOOP_CONSTRUCT
- #define RAD_STATEMENT_START \
- do {
-
- #define RAD_STATEMENT_END_FALSE \
- } while ( (void)0,0 )
-
- #define RAD_STATEMENT_END_TRUE \
- } while ( (void)1,1 )
-
-#endif
-
-#define RAD_STATEMENT_WRAPPER( code ) \
- RAD_STATEMENT_START \
- code \
- RAD_STATEMENT_END_FALSE
-
-#define RAD_INFINITE_LOOP( code ) \
- RAD_STATEMENT_START \
- code \
- RAD_STATEMENT_END_TRUE
-
-
-// Must be placed after variable declarations for code compiled as .c
-#if defined(_MSC_VER) && _MSC_VER >= 1700 // in 2012 aka 11.0 and later
-# define RR_UNUSED_VARIABLE(x) (void) x
-#else
-# define RR_UNUSED_VARIABLE(x) (void)(sizeof(x))
-#endif
-
-//-----------------------------------------------
-// RR_UINT3264 is a U64 in 64-bit code and a U32 in 32-bit code
-// eg. it's pointer sized and the same type as a U32/U64 of the same size
-//
-// @@ CB 05/21/2012 : I think RR_UINT3264 may be deprecated
-// it was useful back when UINTa was /Wp64
-// but since we removed that maybe it's not anymore ?
-//
-
-#ifdef __RAD64__
-#define RR_UINT3264 U64
-#else
-#define RR_UINT3264 U32
-#endif
-
-//RR_COMPILER_ASSERT( sizeof(RR_UINT3264) == sizeof(UINTa) );
-
-//--------------------------------------------------
-
-// RR_LINESTRING is the current line number as a string
-#define RR_STRINGIZE( L ) #L
-#define RR_DO_MACRO( M, X ) M(X)
-#define RR_STRINGIZE_DELAY( X ) RR_DO_MACRO( RR_STRINGIZE, X )
-#define RR_LINESTRING RR_STRINGIZE_DELAY( __LINE__ )
-
-#define RR_CAT(X,Y) X ## Y
-
-// RR_STRING_JOIN joins strings in the preprocessor and works with LINESTRING
-#define RR_STRING_JOIN(arg1, arg2) RR_STRING_JOIN_DELAY(arg1, arg2)
-#define RR_STRING_JOIN_DELAY(arg1, arg2) RR_STRING_JOIN_IMMEDIATE(arg1, arg2)
-#define RR_STRING_JOIN_IMMEDIATE(arg1, arg2) arg1 ## arg2
-
-// RR_NUMBERNAME is a macro to make a name unique, so that you can use it to declare
-// variable names and they won't conflict with each other
-// using __LINE__ is broken in MSVC with /ZI , but __COUNTER__ is an MSVC extension that works
-
-#ifdef _MSC_VER
- #define RR_NUMBERNAME(name) RR_STRING_JOIN(name,__COUNTER__)
-#else
- #define RR_NUMBERNAME(name) RR_STRING_JOIN(name,__LINE__)
-#endif
-
-//--------------------------------------------------
-// current plan is to use "rrbool" with plain old "true" and "false"
-// if true and false give us trouble we might have to go to rrtrue and rrfalse
-// BTW there's a danger for evil bugs here !! If you're checking == true
-// then the rrbool must be set to exactly "1" not just "not zero" !!
-
-#ifndef RADNOTYPEDEFS
- #ifndef RRBOOL_DEFINED
- #define RRBOOL_DEFINED
- typedef S32 rrbool;
- typedef S32 RRBOOL;
- #endif
-#elif !defined(RADNOTYPEDEFINES)
- #ifndef RRBOOL_DEFINED
- #define RRBOOL_DEFINED
- #define rrbool S32
- #define RRBOOL S32
- #endif
-#endif
-
-//--------------------------------------------------
-// Range macros
-
- #ifndef RR_MIN
- #define RR_MIN(a,b) ( (a) < (b) ? (a) : (b) )
- #endif
-
- #ifndef RR_MAX
- #define RR_MAX(a,b) ( (a) > (b) ? (a) : (b) )
- #endif
-
- #ifndef RR_ABS
- #define RR_ABS(a) ( ((a) < 0) ? -(a) : (a) )
- #endif
-
- #ifndef RR_CLAMP
- #define RR_CLAMP(val,lo,hi) RR_MAX( RR_MIN(val,hi), lo )
- #endif
-
-//--------------------------------------------------
-// Data layout macros
-
- #define RR_ARRAY_SIZE(array) ( sizeof(array)/sizeof(array[0]) )
-
- // MEMBER_OFFSET tells you the offset of a member in a type
- #ifdef __RAD3DS__
- #define RR_MEMBER_OFFSET(type,member) (unsigned int)(( (char *) &(((type *)0)->member) - (char *) 0 ))
- #elif defined(__RADANDROID__) || defined(__RADPSP__) || defined(__RADPS3__) || defined(__RADSPU__)
- // offsetof() gets mucked with by system headers on android, making things dependent on #include order.
- #define RR_MEMBER_OFFSET(type,member) __builtin_offsetof(type, member)
- #elif defined(__RADLINUX__)
- #define RR_MEMBER_OFFSET(type,member) (offsetof(type, member))
- #else
- #define RR_MEMBER_OFFSET(type,member) ( (size_t) (UINTa) &(((type *)0)->member) )
- #endif
-
- // MEMBER_SIZE tells you the size of a member in a type
- #define RR_MEMBER_SIZE(type,member) ( sizeof( ((type *) 0)->member) )
-
- // just to make gcc shut up about derefing null :
- #define RR_MEMBER_OFFSET_PTR(type,member,ptr) ( (SINTa) &(((type *)(ptr))->member) - (SINTa)(ptr) )
- #define RR_MEMBER_SIZE_PTR(type,member,ptr) ( sizeof( ((type *) (ptr))->member) )
-
- // MEMBER_TO_OWNER takes a pointer to a member and gives you back the base of the object
- // you should then RR_ASSERT( &(ret->member) == ptr );
- #define RR_MEMBER_TO_OWNER(type,member,ptr) (type *)( ((char *)(ptr)) - RR_MEMBER_OFFSET_PTR(type,member,ptr) )
-
-//--------------------------------------------------
-// Cache / prefetch macros :
-
-// RR_PREFETCH for various platforms :
-//
-// RR_PREFETCH_SEQUENTIAL : prefetch memory for reading in a sequential scan
-// platforms that automatically prefetch sequential (eg. PC) should be a no-op here
-// RR_PREFETCH_WRITE_INVALIDATE : prefetch memory for writing - contents of memory are undefined
-// (may be a no-op, may be a normal prefetch, may zero memory)
-// warning : RR_PREFETCH_WRITE_INVALIDATE may write memory so don't do it past the end of buffers
-
-#ifdef __RADX86__
-
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) // nop
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) // nop
-
-#elif defined(__RADXENON__)
-
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) __dcbt((int)(offset),(void *)(ptr))
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) __dcbz128((int)(offset),(void *)(ptr))
-
-#elif defined(__RADPS3__)
-
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) __dcbt((char *)(ptr) + (int)(offset))
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) __dcbz((char *)(ptr) + (int)(offset))
-
-#elif defined(__RADSPU__)
-
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) // intentional NOP
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) // nop
-
-#elif defined(__RADWII__) || defined(__RADWIIU__)
-
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) // intentional NOP for now
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) // nop
-
-#elif defined(__RAD3DS__)
-
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) __pld((char *)(ptr) + (int)(offset))
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) __pldw((char *)(ptr) + (int)(offset))
-
-#else
-
-// other platform
-#define RR_PREFETCH_SEQUENTIAL(ptr,offset) // need_prefetch // compile error
-#define RR_PREFETCH_WRITE_INVALIDATE(ptr,offset) // need_writezero // error
-
-#endif
-
-//--------------------------------------------------
-// LIGHTWEIGHT ASSERTS without rrAssert.h
-
-RADDEFSTART
-
-// set up RR_BREAK :
-
- #ifdef __RADNGC__
-
- #define RR_BREAK() asm(" .long 0x00000001")
- #define RR_CACHE_LINE_SIZE xxx
-
- #elif defined(__RADWII__)
-
- #define RR_BREAK() __asm__ volatile("trap")
- #define RR_CACHE_LINE_SIZE 32
-
- #elif defined(__RADWIIU__)
-
- #define RR_BREAK() asm("trap")
- #define RR_CACHE_LINE_SIZE 32
-
- #elif defined(__RAD3DS__)
-
- #define RR_BREAK() *((int volatile*)0)=0
- #define RR_CACHE_LINE_SIZE 32
-
- #elif defined(__RADNDS__)
-
- #define RR_BREAK() asm("BKPT 0")
- #define RR_CACHE_LINE_SIZE xxx
-
- #elif defined(__RADPS2__)
-
- #define RR_BREAK() __asm__ volatile("break")
- #define RR_CACHE_LINE_SIZE 64
-
- #elif defined(__RADPSP__)
-
- #define RR_BREAK() __asm__("break 0")
- #define RR_CACHE_LINE_SIZE 64
-
- #elif defined(__RADPSP2__)
-
- #define RR_BREAK() { __asm__ volatile("bkpt 0x0000"); }
- #define RR_CACHE_LINE_SIZE 32
-
- #elif defined (__RADQNX__)
- #define RR_BREAK() __builtin_trap()
- #define RR_CACHE_LINE_SIZE 32
- #elif defined (__RADARM__) && defined (__RADLINUX__)
- #define RR_BREAK() __builtin_trap()
- #define RR_CACHE_LINE_SIZE 32
- #elif defined(__RADSPU__)
-
- #define RR_BREAK() __asm volatile ("stopd 0,1,1")
- #define RR_CACHE_LINE_SIZE 128
-
- #elif defined(__RADPS3__)
-
- // #ifdef snPause // in LibSN.h
- // snPause
- // __asm__ volatile ( "tw 31,1,1" )
-
- #define RR_BREAK() __asm__ volatile ( "tw 31,1,1" )
- //#define RR_BREAK() __asm__ volatile("trap");
-
- #define RR_CACHE_LINE_SIZE 128
-
- #elif defined(__RADMAC__)
-
- #if defined(__GNUG__) || defined(__GNUC__)
- #ifdef __RADX86__
- #define RR_BREAK() __asm__ volatile ( "int $3" )
- #else
- #define RR_BREAK() __builtin_trap()
- #endif
- #else
- #ifdef __RADMACH__
- void DebugStr(unsigned char const *);
- #else
- void pascal DebugStr(unsigned char const *);
- #endif
- #define RR_BREAK() DebugStr("\pRR_BREAK() was called")
- #endif
-
- #define RR_CACHE_LINE_SIZE 64
-
- #elif defined(__RADIPHONE__)
- #define RR_BREAK() __builtin_trap()
- #define RR_CACHE_LINE_SIZE 32
- #elif defined(__RADXENON__)
- #define RR_BREAK() __debugbreak()
- #define RR_CACHE_LINE_SIZE 128
- #elif defined(__RADANDROID__)
- #define RR_BREAK() __builtin_trap()
- #define RR_CACHE_LINE_SIZE 32
- #elif defined(__RADPS4__)
- #define RR_BREAK() __builtin_trap()
- #define RR_CACHE_LINE_SIZE 64
- #elif defined(__RADNACL__)
- #define RR_BREAK() __builtin_trap()
- #define RR_CACHE_LINE_SIZE 64
- #else
- // x86 :
- #define RR_CACHE_LINE_SIZE 64
-
- #ifdef __RADLINUX__
- #define RR_BREAK() __asm__ volatile ( "int $3" )
- #elif defined(__WATCOMC__)
-
- void RR_BREAK( void );
- #pragma aux RR_BREAK = "int 0x3";
-
- #elif defined(__RADWIN__) && defined(_MSC_VER) && _MSC_VER >= 1300
-
- #define RR_BREAK __debugbreak
-
- #else
-
- #define RR_BREAK() RAD_STATEMENT_WRAPPER( __asm {int 3} )
-
- #endif
-
- #endif
-
-// simple RR_ASSERT :
-
-// CB 5-27-10 : use RR_DO_ASSERTS to toggle asserts on and off :
-#if (defined(_DEBUG) && !defined(NDEBUG)) || defined(ASSERT_IN_RELEASE)
- #define RR_DO_ASSERTS
-#endif
-
-/*********
-
-rrAsserts :
-
-RR_ASSERT(exp) - the normal assert thing, toggled with RR_DO_ASSERTS
-RR_ASSERT_ALWAYS(exp) - assert that you want to test even in ALL builds (including final!)
-RR_ASSERT_RELEASE(exp) - assert that you want to test even in release builds (not for final!)
-RR_ASSERT_LITE(exp) - normal assert is not safe from threads or inside malloc; use this instead
-RR_DURING_ASSERT(exp) - wrap operations that compute stuff for assert in here
-RR_DO_ASSERTS - toggle tells you if asserts are enabled or not
-
-RR_BREAK() - generate a debug break - always !
-RR_ASSERT_BREAK() - RR_BREAK for asserts ; disable with RAD_NO_BREAK
-
-RR_ASSERT_FAILURE(str) - just break with a messsage; like assert with no condition
-RR_ASSERT_FAILURE_ALWAYS(str) - RR_ASSERT_FAILURE in release builds too
-RR_CANT_GET_HERE() - put in spots execution should never go
-RR_COMPILER_ASSERT(exp) - checks constant conditions at compile time
-
-RADTODO - note to search for nonfinal stuff
-RR_PRAGMA_MESSAGE - message dealy, use with #pragma in MSVC
-
-*************/
-
-//-----------------------------------------------------------
-
-
-#if defined(__GNUG__) || defined(__GNUC__) || (defined(_MSC_VER) && _MSC_VER > 1200)
- #define RR_FUNCTION_NAME __FUNCTION__
-#else
- #define RR_FUNCTION_NAME 0
-
- // __func__ is in the C99 standard
-#endif
-
-//-----------------------------------------------------------
-
-// rrDisplayAssertion might just log, or it might pop a message box, depending on settings
-// rrDisplayAssertion returns whether you should break or not
-typedef rrbool (RADLINK fp_rrDisplayAssertion)(int * Ignored, const char * fileName,const int line,const char * function,const char * message);
-
-extern fp_rrDisplayAssertion * g_fp_rrDisplayAssertion;
-
-// if I have func pointer, call it, else true ; true = do int 3
-#define rrDisplayAssertion(i,n,l,f,m) ( ( g_fp_rrDisplayAssertion ) ? (*g_fp_rrDisplayAssertion)(i,n,l,f,m) : 1 )
-
-//-----------------------------------------------------------
-
-// RAD_NO_BREAK : option if you don't like your assert to break
-// CB : RR_BREAK is *always* a break ; RR_ASSERT_BREAK is optional
-#ifdef RAD_NO_BREAK
-#define RR_ASSERT_BREAK() 0
-#else
-#define RR_ASSERT_BREAK() RR_BREAK()
-#endif
-
-// assert_always is on FINAL !
-#define RR_ASSERT_ALWAYS(exp) RAD_STATEMENT_WRAPPER( static int Ignored=0; if ( ! (exp) ) { if ( rrDisplayAssertion(&Ignored,__FILE__,__LINE__,RR_FUNCTION_NAME,#exp) ) RR_ASSERT_BREAK(); } )
-
-// RR_ASSERT_FAILURE is like an assert without a condition - if you hit it, you're bad
-#define RR_ASSERT_FAILURE_ALWAYS(str) RAD_STATEMENT_WRAPPER( static int Ignored=0; if ( rrDisplayAssertion(&Ignored,__FILE__,__LINE__,RR_FUNCTION_NAME,str) ) RR_ASSERT_BREAK(); )
-
-#define RR_ASSERT_LITE_ALWAYS(exp) RAD_STATEMENT_WRAPPER( if ( ! (exp) ) { RR_ASSERT_BREAK(); } )
-
-//-----------------------------------
-#ifdef RR_DO_ASSERTS
-
-#define RR_ASSERT(exp) RR_ASSERT_ALWAYS(exp)
-#define RR_ASSERT_LITE(exp) RR_ASSERT_LITE_ALWAYS(exp)
-#define RR_ASSERT_NO_ASSUME(exp) RR_ASSERT_ALWAYS(exp)
-// RR_DURING_ASSERT is to set up expressions or declare variables that are only used in asserts
-#define RR_DURING_ASSERT(exp) exp
-
-#define RR_ASSERT_FAILURE(str) RR_ASSERT_FAILURE_ALWAYS(str)
-
-// RR_CANT_GET_HERE is for like defaults in switches that should never be hit
-#define RR_CANT_GET_HERE() RAD_STATEMENT_WRAPPER( RR_ASSERT_FAILURE("can't get here"); RADUNREACHABLE; )
-
-
-#else // RR_DO_ASSERTS //-----------------------------------
-
-#define RR_ASSERT(exp) (void)0
-#define RR_ASSERT_LITE(exp) (void)0
-#define RR_ASSERT_NO_ASSUME(exp) (void)0
-
-#define RR_DURING_ASSERT(exp) (void)0
-
-#define RR_ASSERT_FAILURE(str) (void)0
-
-#define RR_CANT_GET_HERE() RADUNREACHABLE
-
-#endif // RR_DO_ASSERTS //-----------------------------------
-
-//=================================================================
-
-// RR_ASSERT_RELEASE is on in release build, but not final
-
-#ifndef __RADFINAL__
-
-#define RR_ASSERT_RELEASE(exp) RR_ASSERT_ALWAYS(exp)
-#define RR_ASSERT_LITE_RELEASE(exp) RR_ASSERT_LITE_ALWAYS(exp)
-
-#else
-
-#define RR_ASSERT_RELEASE(exp) (void)0
-#define RR_ASSERT_LITE_RELEASE(exp) (void)0
-
-#endif
-
-// BH: This never gets compiled away except for __RADFINAL__
-#define RR_ASSERT_ALWAYS_NO_SHIP RR_ASSERT_RELEASE
-
-#define rrAssert RR_ASSERT
-#define rrassert RR_ASSERT
-
-#ifdef _MSC_VER
- // without this, our assert errors...
- #if _MSC_VER >= 1300
- #pragma warning( disable : 4127) // conditional expression is constant
- #endif
-#endif
-
-//---------------------------------------
-// Get/Put from memory in little or big endian :
-//
-// val = RR_GET32_BE(ptr)
-// RR_PUT32_BE(ptr,val)
-//
-// available here :
-// RR_[GET/PUT][16/32]_[BE/LE][_UNALIGNED][_OFFSET]
-//
-// if you don't specify _UNALIGNED , then ptr & offset shoud both be aligned to type size
-// _OFFSET is in *bytes* !
-
-// you can #define RR_GET_RESTRICT to make all RR_GETs be RESTRICT
-// if you set nothing they are not
-
-#ifdef RR_GET_RESTRICT
-#define RR_GET_PTR_POST RADRESTRICT
-#endif
-#ifndef RR_GET_PTR_POST
-#define RR_GET_PTR_POST
-#endif
-
-// native version of get/put is always trivial :
-
-#define RR_GET16_NATIVE(ptr) *((const U16 * RR_GET_PTR_POST)(ptr))
-#define RR_PUT16_NATIVE(ptr,val) *((U16 * RR_GET_PTR_POST)(ptr)) = (val)
-
-// offset is in bytes
-#define RR_U16_PTR_OFFSET(ptr,offset) ((U16 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-#define RR_GET16_NATIVE_OFFSET(ptr,offset) *( RR_U16_PTR_OFFSET((ptr),offset) )
-#define RR_PUT16_NATIVE_OFFSET(ptr,val,offset) *( RR_U16_PTR_OFFSET((ptr),offset)) = (val)
-
-#define RR_GET32_NATIVE(ptr) *((const U32 * RR_GET_PTR_POST)(ptr))
-#define RR_PUT32_NATIVE(ptr,val) *((U32 * RR_GET_PTR_POST)(ptr)) = (val)
-
-// offset is in bytes
-#define RR_U32_PTR_OFFSET(ptr,offset) ((U32 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-#define RR_GET32_NATIVE_OFFSET(ptr,offset) *( RR_U32_PTR_OFFSET((ptr),offset) )
-#define RR_PUT32_NATIVE_OFFSET(ptr,val,offset) *( RR_U32_PTR_OFFSET((ptr),offset)) = (val)
-
-#define RR_GET64_NATIVE(ptr) *((const U64 * RR_GET_PTR_POST)(ptr))
-#define RR_PUT64_NATIVE(ptr,val) *((U64 * RR_GET_PTR_POST)(ptr)) = (val)
-
-// offset is in bytes
-#define RR_U64_PTR_OFFSET(ptr,offset) ((U64 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-#define RR_GET64_NATIVE_OFFSET(ptr,offset) *( RR_U64_PTR_OFFSET((ptr),offset) )
-#define RR_PUT64_NATIVE_OFFSET(ptr,val,offset) *( RR_U64_PTR_OFFSET((ptr),offset)) = (val)
-
-//---------------------------------------------------
-
-#ifdef __RADLITTLEENDIAN__
-
-#define RR_GET16_LE RR_GET16_NATIVE
-#define RR_PUT16_LE RR_PUT16_NATIVE
-#define RR_GET16_LE_OFFSET RR_GET16_NATIVE_OFFSET
-#define RR_PUT16_LE_OFFSET RR_PUT16_NATIVE_OFFSET
-
-#define RR_GET32_LE RR_GET32_NATIVE
-#define RR_PUT32_LE RR_PUT32_NATIVE
-#define RR_GET32_LE_OFFSET RR_GET32_NATIVE_OFFSET
-#define RR_PUT32_LE_OFFSET RR_PUT32_NATIVE_OFFSET
-
-#define RR_GET64_LE RR_GET64_NATIVE
-#define RR_PUT64_LE RR_PUT64_NATIVE
-#define RR_GET64_LE_OFFSET RR_GET64_NATIVE_OFFSET
-#define RR_PUT64_LE_OFFSET RR_PUT64_NATIVE_OFFSET
-
-#else
-
-#define RR_GET16_BE RR_GET16_NATIVE
-#define RR_PUT16_BE RR_PUT16_NATIVE
-#define RR_GET16_BE_OFFSET RR_GET16_NATIVE_OFFSET
-#define RR_PUT16_BE_OFFSET RR_PUT16_NATIVE_OFFSET
-
-#define RR_GET32_BE RR_GET32_NATIVE
-#define RR_PUT32_BE RR_PUT32_NATIVE
-#define RR_GET32_BE_OFFSET RR_GET32_NATIVE_OFFSET
-#define RR_PUT32_BE_OFFSET RR_PUT32_NATIVE_OFFSET
-
-#define RR_GET64_BE RR_GET64_NATIVE
-#define RR_PUT64_BE RR_PUT64_NATIVE
-#define RR_GET64_BE_OFFSET RR_GET64_NATIVE_OFFSET
-#define RR_PUT64_BE_OFFSET RR_PUT64_NATIVE_OFFSET
-
-#endif
-
-//-------------------------
-// non-native Get/Put implementations go here :
-
-#if defined(__RADX86__)
-// good implementation for X86 :
-
-#if (_MSC_VER >= 1300)
-
-unsigned short __cdecl _byteswap_ushort (unsigned short _Short);
-unsigned long __cdecl _byteswap_ulong (unsigned long _Long);
-#pragma intrinsic(_byteswap_ushort, _byteswap_ulong)
-
-#define RR_BSWAP16 _byteswap_ushort
-#define RR_BSWAP32 _byteswap_ulong
-
-unsigned __int64 __cdecl _byteswap_uint64 (unsigned __int64 val);
-#pragma intrinsic(_byteswap_uint64)
-#define RR_BSWAP64 _byteswap_uint64
-
-#elif defined(_MSC_VER) // VC6
-
-RADFORCEINLINE unsigned long RR_BSWAP16 (unsigned long _Long)
-{
- __asm {
- mov eax, [_Long]
- rol ax, 8
- mov [_Long], eax;
- }
- return _Long;
-}
-
-RADFORCEINLINE unsigned long RR_BSWAP32 (unsigned long _Long)
-{
- __asm {
- mov eax, [_Long]
- bswap eax
- mov [_Long], eax
- }
- return _Long;
-}
-
-RADFORCEINLINE unsigned __int64 RR_BSWAP64 (unsigned __int64 _Long)
-{
- __asm {
- mov eax, DWORD PTR _Long
- mov edx, DWORD PTR _Long+4
- bswap eax
- bswap edx
- mov DWORD PTR _Long, edx
- mov DWORD PTR _Long+4, eax
- }
- return _Long;
-}
-
-#elif defined(__GNUC__) || defined(__clang__)
-
-// GCC has __builtin_bswap16, but Clang only seems to have added it recently.
-// We use __builtin_bswap32/64 but 16 just uses the macro version. (No big
-// deal if that turns into shifts anyway)
-#define RR_BSWAP16(u16) ( (U16) ( ((u16) >> 8) | ((u16) << 8) ) )
-#define RR_BSWAP32 __builtin_bswap32
-#define RR_BSWAP64 __builtin_bswap64
-
-#endif
-
-#define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
-#define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = (U16) RR_BSWAP16(val)
-#define RR_GET16_BE_OFFSET(ptr,offset) RR_BSWAP16(*RR_U16_PTR_OFFSET(ptr,offset))
-#define RR_PUT16_BE_OFFSET(ptr,val,offset) *RR_U16_PTR_OFFSET(ptr,offset) = RR_BSWAP16(val)
-
-#define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
-#define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
-#define RR_GET32_BE_OFFSET(ptr,offset) RR_BSWAP32(*RR_U32_PTR_OFFSET(ptr,offset))
-#define RR_PUT32_BE_OFFSET(ptr,val,offset) *RR_U32_PTR_OFFSET(ptr,offset) = RR_BSWAP32(val)
-
-#define RR_GET64_BE(ptr) RR_BSWAP64(*((U64 *)(ptr)))
-#define RR_PUT64_BE(ptr,val) *((U64 *)(ptr)) = RR_BSWAP64(val)
-#define RR_GET64_BE_OFFSET(ptr,offset) RR_BSWAP64(*RR_U64_PTR_OFFSET(ptr,offset))
-#define RR_PUT64_BE_OFFSET(ptr,val,offset) *RR_U64_PTR_OFFSET(ptr,offset) = RR_BSWAP64(val)
-
-// end _MSC_VER
-
-#elif defined(__RADXENON__) // Xenon has built-in funcs for this
-
-unsigned short __loadshortbytereverse(int offset, const void *base);
-unsigned long __loadwordbytereverse (int offset, const void *base);
-
-void __storeshortbytereverse(unsigned short val, int offset, void *base);
-void __storewordbytereverse (unsigned int val, int offset, void *base);
-
-#define RR_GET16_LE(ptr) __loadshortbytereverse(0, ptr)
-#define RR_PUT16_LE(ptr,val) __storeshortbytereverse((U16) (val), 0, ptr)
-
-#define RR_GET16_LE_OFFSET(ptr,offset) __loadshortbytereverse(offset, ptr)
-#define RR_PUT16_LE_OFFSET(ptr,val,offset) __storeshortbytereverse((U16) (val), offset, ptr)
-
-#define RR_GET32_LE(ptr) __loadwordbytereverse(0, ptr)
-#define RR_PUT32_LE(ptr,val) __storewordbytereverse((U32) (val), 0, ptr)
-
-#define RR_GET32_LE_OFFSET(ptr,offset) __loadwordbytereverse(offset, ptr)
-#define RR_PUT32_LE_OFFSET(ptr,val,offset) __storewordbytereverse((U32) (val), offset, ptr)
-
-#define RR_GET64_LE(ptr) ( ((U64)RR_GET32_OFFSET_LE(ptr,4)<<32) | RR_GET32_LE(ptr) )
-#define RR_PUT64_LE(ptr,val) RR_PUT32_LE(ptr, (U32) (val)), RR_PUT32_OFFSET_LE(ptr, (U32) ((val)>>32),4)
-
-#elif defined(__RADPS3__)
-
-#include <ppu_intrinsics.h>
-
-#define RR_GET16_LE(ptr) __lhbrx(ptr)
-#define RR_PUT16_LE(ptr,val) __sthbrx(ptr, (U16) (val))
-
-#define RR_GET16_LE_OFFSET(ptr,offset) __lhbrx(RR_U16_PTR_OFFSET(ptr, offset))
-#define RR_PUT16_LE_OFFSET(ptr,val,offset) __sthbrx(RR_U16_PTR_OFFSET(ptr, offset), (U16) (val))
-
-#define RR_GET32_LE(ptr) __lwbrx(ptr)
-#define RR_PUT32_LE(ptr,val) __stwbrx(ptr, (U32) (val))
-
-#define RR_GET64_LE(ptr) __ldbrx(ptr)
-#define RR_PUT64_LE(ptr,val) __stdbrx(ptr, (U32) (val))
-
-#define RR_GET32_LE_OFFSET(ptr,offset) __lwbrx(RR_U32_PTR_OFFSET(ptr, offset))
-#define RR_PUT32_LE_OFFSET(ptr,val,offset) __stwbrx(RR_U32_PTR_OFFSET(ptr, offset), (U32) (val))
-
-#elif defined(__RADWII__)
-
-#define RR_GET16_LE(ptr) __lhbrx(ptr, 0)
-#define RR_PUT16_LE(ptr,val) __sthbrx((U16) (val), ptr, 0)
-
-#define RR_GET16_LE_OFFSET(ptr,offset) __lhbrx(ptr, offset)
-#define RR_PUT16_LE_OFFSET(ptr,val,offset) __sthbrx((U16) (val), ptr, offset)
-
-#define RR_GET32_LE(ptr) __lwbrx(ptr, 0)
-#define RR_PUT32_LE(ptr,val) __stwbrx((U32) (val), ptr, 0)
-
-#define RR_GET32_LE_OFFSET(ptr,offset) __lwbrx(ptr, offset)
-#define RR_PUT32_LE_OFFSET(ptr,val,offset) __stwbrx((U32) (val), ptr, offset)
-
-#elif defined(__RAD3DS__)
-
-#define RR_GET16_BE(ptr) __rev16(*(U16 *) (ptr))
-#define RR_PUT16_BE(ptr,val) *(U16 *) (ptr) = __rev16(val)
-
-#define RR_GET16_BE_OFFSET(ptr,offset) __rev16(*RR_U16_PTR_OFFSET(ptr,offset))
-#define RR_PUT16_BE_OFFSET(ptr,offset,val) *RR_U16_PTR_OFFSET(ptr,offset) = __rev16(val)
-
-#define RR_GET32_BE(ptr) __rev(*(U32 *) (ptr))
-#define RR_PUT32_BE(ptr,val) *(U32 *) (ptr) = __rev(val)
-
-#define RR_GET32_BE_OFFSET(ptr,offset) __rev(*RR_U32_PTR_OFFSET(ptr,offset))
-#define RR_PUT32_BE_OFFSET(ptr,offset,val) *RR_U32_PTR_OFFSET(ptr,offset) = __rev(val)
-
-#elif defined(__RADIPHONE__)
-
-// iPhone does not seem to have intrinsics for this, so use generic fallback!
-
-// Bswap is just here for use of implementing get/put
-// caller should use Get/Put , not bswap
-#define RR_BSWAP16(u16) ( (U16) ( ((u16) >> 8) | ((u16) << 8) ) )
-#define RR_BSWAP32(u32) ( (U32) ( ((u32) >> 24) | (((u32)<<8) & 0x00FF0000) | (((u32)>>8) & 0x0000FF00) | ((u32) << 24) ) )
-
-#define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
-#define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
-
-#define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
-#define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
-
-#elif defined(__RADWIIU__)
-
-#include <ppc_ghs.h>
-
-#define RR_GET16_LE(ptr) (*(__bytereversed U16 *) (ptr))
-#define RR_PUT16_LE(ptr,val) *(__bytereversed U16 *) (ptr) = val
-
-#define RR_GET16_LE_OFFSET(ptr,offset) (*(__bytereversed U16 *)RR_U16_PTR_OFFSET(ptr,offset))
-#define RR_PUT16_LE_OFFSET(ptr,val,offset) *(__bytereversed U16 *)RR_U16_PTR_OFFSET(ptr,offset) = val
-
-#define RR_GET32_LE(ptr) (*(__bytereversed U32 *) (ptr))
-#define RR_PUT32_LE(ptr,val) *(__bytereversed U32 *) (ptr) = val
-
-#define RR_GET32_LE_OFFSET(ptr,offset) (*(__bytereversed U32 *)RR_U32_PTR_OFFSET(ptr,offset))
-#define RR_PUT32_LE_OFFSET(ptr,val,offset) *(__bytereversed U32 *)RR_U32_PTR_OFFSET(ptr,offset) = val
-
-#define RR_GET64_LE(ptr) (*(__bytereversed U64 *) (ptr))
-#define RR_PUT64_LE(ptr,val) *(__bytereversed U64 *) (ptr) = val
-
-#define RR_GET64_LE_OFFSET(ptr,offset) (*(__bytereversed U64 *)RR_U32_PTR_OFFSET(ptr,offset))
-#define RR_PUT64_LE_OFFSET(ptr,val,offset) *(__bytereversed U64 *)RR_U32_PTR_OFFSET(ptr,offset) = val
-
-#elif defined(__RADWINRTAPI__) && defined(__RADARM__)
-
-#include <intrin.h>
-
-#define RR_BSWAP16(u16) _arm_rev16(u16)
-#define RR_BSWAP32(u32) _arm_rev(u32)
-
-#define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
-#define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
-
-#define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
-#define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
-
-#elif defined(__RADPSP2__)
-
-// no rev16 exposed
-#define RR_BSWAP16(u16) ( (U16) ( ((u16) >> 8) | ((u16) << 8) ) )
-#define RR_BSWAP32(u32) __builtin_rev(u32)
-
-#define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
-#define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
-
-#define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
-#define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
-
-#else // other platforms ?
-
-// fall back :
-
-// Bswap is just here for use of implementing get/put
-// caller should use Get/Put , not bswap
-#define RR_BSWAP16(u16) ( (U16) ( ((u16) >> 8) | ((u16) << 8) ) )
-#define RR_BSWAP32(u32) ( (U32) ( ((u32) >> 24) | (((u32)<<8) & 0x00FF0000) | (((u32)>>8) & 0x0000FF00) | ((u32) << 24) ) )
-#define RR_BSWAP64(u64) ( ((U64) RR_BSWAP32((U32) (u64)) << 32) | (U64) RR_BSWAP32((U32) ((u64) >> 32)) )
-
-#ifdef __RADLITTLEENDIAN__
-
-// comment out fallbacks so users will get errors
-//#define RR_GET16_BE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
-//#define RR_PUT16_BE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
-//#define RR_GET32_BE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
-//#define RR_PUT32_BE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
-
-#else
-
-// comment out fallbacks so users will get errors
-//#define RR_GET16_LE(ptr) RR_BSWAP16(*((U16 *)(ptr)))
-//#define RR_PUT16_LE(ptr,val) *((U16 *)(ptr)) = RR_BSWAP16(val)
-//#define RR_GET32_LE(ptr) RR_BSWAP32(*((U32 *)(ptr)))
-//#define RR_PUT32_LE(ptr,val) *((U32 *)(ptr)) = RR_BSWAP32(val)
-
-#endif
-
-#endif
-
-//===================================================================
-// @@ TEMP : Aliases for old names : remove me when possible :
-
-#define RR_GET32_OFFSET_LE RR_GET32_LE_OFFSET
-#define RR_GET32_OFFSET_BE RR_GET32_BE_OFFSET
-#define RR_PUT32_OFFSET_LE RR_PUT32_LE_OFFSET
-#define RR_PUT32_OFFSET_BE RR_PUT32_BE_OFFSET
-#define RR_GET16_OFFSET_LE RR_GET16_LE_OFFSET
-#define RR_GET16_OFFSET_BE RR_GET16_BE_OFFSET
-#define RR_PUT16_OFFSET_LE RR_PUT16_LE_OFFSET
-#define RR_PUT16_OFFSET_BE RR_PUT16_BE_OFFSET
-
-
-//===================================================================
-// UNALIGNED VERSIONS :
-
-#if defined(__RADX86__) || defined(__RADPPC__) // platforms where unaligned is fast :
-
-#define RR_GET32_BE_UNALIGNED(ptr) RR_GET32_BE(ptr)
-#define RR_GET32_BE_UNALIGNED_OFFSET(ptr,offset) RR_GET32_BE_OFFSET(ptr,offset)
-#define RR_GET16_BE_UNALIGNED(ptr) RR_GET16_BE(ptr)
-#define RR_GET16_BE_UNALIGNED_OFFSET(ptr,offset) RR_GET16_BE_OFFSET(ptr,offset)
-
-#define RR_GET32_LE_UNALIGNED(ptr) RR_GET32_LE(ptr)
-#define RR_GET32_LE_UNALIGNED_OFFSET(ptr,offset) RR_GET32_LE_OFFSET(ptr,offset)
-#define RR_GET16_LE_UNALIGNED(ptr) RR_GET16_LE(ptr)
-#define RR_GET16_LE_UNALIGNED_OFFSET(ptr,offset) RR_GET16_LE_OFFSET(ptr,offset)
-
-#elif defined(__RAD3DS__)
-
-// arm has a "__packed" qualifier to tell the compiler to do unaligned accesses
-#define RR_U16_PTR_OFFSET_UNALIGNED(ptr,offset) ((__packed U16 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-#define RR_U32_PTR_OFFSET_UNALIGNED(ptr,offset) ((__packed U32 * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-
-#define RR_GET32_BE_UNALIGNED(ptr) __rev(*RR_U32_PTR_OFFSET_UNALIGNED(ptr,0))
-#define RR_GET32_BE_UNALIGNED_OFFSET(ptr,offset) __rev(*RR_U32_PTR_OFFSET_UNALIGNED(ptr,offset))
-#define RR_GET16_BE_UNALIGNED(ptr) __rev16(*RR_U16_PTR_OFFSET_UNALIGNED(ptr,0))
-#define RR_GET16_BE_UNALIGNED_OFFSET(ptr,offset) __rev16(*RR_U16_PTR_OFFSET_UNALIGNED(ptr,offset))
-
-#define RR_GET32_LE_UNALIGNED(ptr) *RR_U32_PTR_OFFSET_UNALIGNED(ptr,0)
-#define RR_GET32_LE_UNALIGNED_OFFSET(ptr,offset) *RR_U32_PTR_OFFSET_UNALIGNED(ptr,offset)
-#define RR_GET16_LE_UNALIGNED(ptr) *RR_U16_PTR_OFFSET_UNALIGNED(ptr,0)
-#define RR_GET16_LE_UNALIGNED_OFFSET(ptr,offset) *RR_U16_PTR_OFFSET_UNALIGNED(ptr,offset)
-
-#elif defined(__RADPSP2__)
-
-#define RR_U16_PTR_OFFSET_UNALIGNED(ptr,offset) ((U16 __unaligned * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-#define RR_U32_PTR_OFFSET_UNALIGNED(ptr,offset) ((U32 __unaligned * RR_GET_PTR_POST)((char *)(ptr) + (offset)))
-
-#define RR_GET32_BE_UNALIGNED(ptr) RR_BSWAP32(*RR_U32_PTR_OFFSET_UNALIGNED(ptr,0))
-#define RR_GET32_BE_UNALIGNED_OFFSET(ptr,offset) RR_BSWAP32(*RR_U32_PTR_OFFSET_UNALIGNED(ptr,offset))
-#define RR_GET16_BE_UNALIGNED(ptr) RR_BSWAP16(*RR_U16_PTR_OFFSET_UNALIGNED(ptr,0))
-#define RR_GET16_BE_UNALIGNED_OFFSET(ptr,offset) RR_BSWAP16(*RR_U16_PTR_OFFSET_UNALIGNED(ptr,offset))
-
-#define RR_GET32_LE_UNALIGNED(ptr) *RR_U32_PTR_OFFSET_UNALIGNED(ptr,0)
-#define RR_GET32_LE_UNALIGNED_OFFSET(ptr,offset) *RR_U32_PTR_OFFSET_UNALIGNED(ptr,offset)
-#define RR_GET16_LE_UNALIGNED(ptr) *RR_U16_PTR_OFFSET_UNALIGNED(ptr,0)
-#define RR_GET16_LE_UNALIGNED_OFFSET(ptr,offset) *RR_U16_PTR_OFFSET_UNALIGNED(ptr,offset)
-
-#else
-// Unaligned via bytes :
-
-#define RR_GET32_BE_UNALIGNED(ptr) ( \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 24 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 16 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[2] << 8 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[3] << 0 ) )
-
-#define RR_GET32_BE_UNALIGNED_OFFSET(ptr,offset) ( \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 24 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 16 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[2] << 8 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[3] << 0 ) )
-
-#define RR_GET16_BE_UNALIGNED(ptr) ( \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 8 ) | \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 0 ) )
-
-#define RR_GET16_BE_UNALIGNED_OFFSET(ptr,offset) ( \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 8 ) | \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 0 ) )
-
-#define RR_GET32_LE_UNALIGNED(ptr) ( \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[3] << 24 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[2] << 16 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 8 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 0 ) )
-
-#define RR_GET32_LE_UNALIGNED_OFFSET(ptr,offset) ( \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[3] << 24 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[2] << 16 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 8 ) | \
- ( (U32)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 0 ) )
-
-#define RR_GET16_LE_UNALIGNED(ptr) ( \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[1] << 8 ) | \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr)))[0] << 0 ) )
-
-#define RR_GET16_LE_UNALIGNED_OFFSET(ptr,offset) ( \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[1] << 8 ) | \
- ( (U16)(((const U8 * RR_GET_PTR_POST)(ptr))+(offset))[0] << 0 ) )
-
-#endif
-
-//===================================================================
-// RR_ROTL32 : 32-bit rotate
-//
-
-#ifdef _MSC_VER
-
- unsigned long __cdecl _lrotl(unsigned long, int);
- #pragma intrinsic(_lrotl)
-
- #define RR_ROTL32(x,k) _lrotl((unsigned long)(x),(int)(k))
-
-#elif defined(__RADCELL__) || defined(__RADLINUX__) || defined(__RADWII__) || defined(__RADMACAPI__) || defined(__RADWIIU__) || defined(__RADPS4__) || defined(__RADPSP2__)
-
- // Compiler turns this into rotate correctly :
- #define RR_ROTL32(u32,num) ( ( (u32) << (num) ) | ( (u32) >> (32 - (num))) )
-
-#elif defined(__RAD3DS__)
-
- #define RR_ROTL32(u32,num) __ror(u32, (-(num))&31)
-
-#else
-
-// comment out fallbacks so users will get errors
-// fallback implementation using shift and or :
-//#define RR_ROTL32(u32,num) ( ( (u32) << (num) ) | ( (u32) >> (32 - (num))) )
-
-#endif
-
-
-//===================================================================
-// RR_ROTL64 : 64-bit rotate
-
-#if ( defined(_MSC_VER) && _MSC_VER >= 1300)
-
-unsigned __int64 __cdecl _rotl64(unsigned __int64 _Val, int _Shift);
-#pragma intrinsic(_rotl64)
-
-#define RR_ROTL64(x,k) _rotl64((unsigned __int64)(x),(int)(k))
-
-#elif defined(__RADCELL__)
-
-// PS3 GCC turns this into rotate correctly :
-#define RR_ROTL64(u64,num) ( ( (u64) << (num) ) | ( (u64) >> (64 - (num))) )
-
-#elif defined(__RADLINUX__) || defined(__RADMACAPI__)
-
-//APTODO: Just to compile linux. Should we be doing better than this? If not, combine with above.
-#define RR_ROTL64(u64,num) ( ( (u64) << (num) ) | ( (u64) >> (64 - (num))) )
-
-#else
-
-// comment out fallbacks so users will get errors
-// fallback implementation using shift and or :
-//#define RR_ROTL64(u64,num) ( ( (u64) << (num) ) | ( (u64) >> (64 - (num))) )
-
-#endif
-
-//===================================================================
-
-RADDEFEND
-
-//===================================================================
-
-// RR_COMPILER_ASSERT
-#if defined(__cplusplus) && !defined(RR_COMPILER_ASSERT)
- #if defined(_MSC_VER) && (_MSC_VER >=1400)
-
- // better version of COMPILER_ASSERT using boost technique
- template <int x> struct RR_COMPILER_ASSERT_FAILURE;
-
- template <> struct RR_COMPILER_ASSERT_FAILURE<1> { enum { value = 1 }; };
-
- template<int x> struct rr_compiler_assert_test{};
-
- // __LINE__ macro broken when -ZI is used see Q199057
- #define RR_COMPILER_ASSERT( B ) \
- typedef rr_compiler_assert_test<\
- sizeof(RR_COMPILER_ASSERT_FAILURE< (B) ? 1 : 0 >)\
- > rr_compiler_assert_typedef_
-
- #endif
-#endif
-
-#ifndef RR_COMPILER_ASSERT
- // this happens at declaration time, so if it's inside a function in a C file, drop {} around it
- #define RR_COMPILER_ASSERT(exp) typedef char RR_STRING_JOIN(_dummy_array, __LINE__) [ (exp) ? 1 : -1 ]
-#endif
-
-//===================================================================
-// some error checks :
-
- RR_COMPILER_ASSERT( sizeof(RAD_UINTa) == sizeof( RR_STRING_JOIN(RAD_U,RAD_PTRBITS) ) );
- RR_COMPILER_ASSERT( sizeof(RAD_UINTa) == RAD_PTRBYTES );
- RR_COMPILER_ASSERT( RAD_TWOPTRBYTES == 2* RAD_PTRBYTES );
-
-//===================================================================
-
- #endif // __RADRES__
-
-//include "testconstant.inl" // uncomment and include to test statement constants
-
-#endif // __RADRR_COREH__
-
-
diff --git a/Minecraft.Client/Windows64/Miles/include/tmapi.h b/Minecraft.Client/Windows64/Miles/include/tmapi.h
deleted file mode 100644
index c1b56183..00000000
--- a/Minecraft.Client/Windows64/Miles/include/tmapi.h
+++ /dev/null
@@ -1,36 +0,0 @@
-// This is the null header file used to remove Telemetry calls.
-
-#define TMERR_DISABLED 1
-
-#define tmTick(...)
-#define tmPause(...)
-#define tmEnter(...)
-#define tmLeave(...)
-#define tmThreadName(...) TMERR_DISABLED
-#define tmMutexName(...) TMERR_DISABLED
-#define tmTryLock(...) TMERR_DISABLED
-#define tmEndTryLock(...)
-#define tmSetMutexState(...)
-#define tmAlloc(...)
-#define tmRealloc(...)
-#define tmFree(...)
-#define tmPlot(...)
-#define tmBlob(...) TMERR_DISABLED
-#define tmBlobEx(...) TMERR_DISABLED
-#define tmMessage(...)
-#define tmEmitAccumulationZones(...) TMERR_DISABLED
-#define tmEnterAccumulationZone(...) TMERR_DISABLED
-#define tmLeaveAccumulationZone(...) TMERR_DISABLED
-#define tmZone(...)
-#define tmSetLockState(...)
-#define tmLockName(...)
-#define tmSendCallStack(...)
-#define tmAllocEx(...)
-
-#define NTELEMETRY 1
-
-#define TM_CONTEXT_LITE(val) ((char*)(val))
-#define TM_CONTEXT_FULL(val) ((char*)(val))
-
-typedef char *HTELEMETRY;
-