aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Client/Windows64/Miles/include/imssapi.h
diff options
context:
space:
mode:
authordaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
committerdaoge_cmd <3523206925@qq.com>2026-03-01 12:16:08 +0800
commitb691c43c44ff180d10e7d4a9afc83b98551ff586 (patch)
tree3e9849222cbc6ba49f2f1fc6e5fe7179632c7390 /Minecraft.Client/Windows64/Miles/include/imssapi.h
parentdef8cb415354ac390b7e89052a50605285f1aca9 (diff)
Initial commit
Diffstat (limited to 'Minecraft.Client/Windows64/Miles/include/imssapi.h')
-rw-r--r--Minecraft.Client/Windows64/Miles/include/imssapi.h3267
1 files changed, 3267 insertions, 0 deletions
diff --git a/Minecraft.Client/Windows64/Miles/include/imssapi.h b/Minecraft.Client/Windows64/Miles/include/imssapi.h
new file mode 100644
index 00000000..883a6fc1
--- /dev/null
+++ b/Minecraft.Client/Windows64/Miles/include/imssapi.h
@@ -0,0 +1,3267 @@
+#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
+