
/' ============================================================================================ '/
/' Fmod Ex - Main C/c++ Header File. Copyright (c), Firelight Technologies Pty, Ltd. 2004-2011. '/
/'                                                                                              '/
/' This Header Is The Base Header For All Other Fmod Headers.  If You Are Programming In C      '/
/' Use This Exclusively, Or If You Are Programming C++ Use This In Conjunction With Fmod.hpp    '/
/'                                                                                              '/
/' ============================================================================================ '/
' *** Adapted For FreeBasic By Electrik

#ifndef _fmod_bi
#define _fmod_bi
#inclib "fmodex"

/'
    Fmod Version Number.  Check This Against FMOD_System_GetVersion.
    &haaaabbcc -> Aaaa = Major Version Number.  Bb = Minor Version Number.  Cc = Development Version Number.
'/

#define Fmod_version    &h00044408

/'
    Compiler Specific Settings.
'/

#ifdef __fb_win32__
Extern "windows"
#else
Extern "c"
#endif

#ifndef Float
Type Float As Single
#endif

/'
    Fmod Types.
'/
Type As Integer                       Fmod_bool
Type As Fmod_system_        Fmod_system
Type As Fmod_sound_         Fmod_sound
Type As Fmod_channel_       Fmod_channel
Type As Fmod_channelgroup_  Fmod_channelgroup
Type As Fmod_soundgroup_    Fmod_soundgroup
Type As Fmod_reverb_        Fmod_reverb
Type As Fmod_dsp_           Fmod_dsp
Type As Fmod_dspconnection_ Fmod_dspconnection
Type As Fmod_polygon_	  Fmod_polygon
Type As Fmod_geometry_	  Fmod_geometry
Type As Fmod_syncpoint_	  Fmod_syncpoint
Type As Uinteger              Fmod_mode
Type As Uinteger              Fmod_timeunit
Type As Uinteger              Fmod_initflags
Type As Uinteger              Fmod_caps
Type As Uinteger              Fmod_debuglevel
Type As Uinteger              Fmod_memory_type

/'
[enum]
[
    [description]   
    Error Codes.  Returned From Every Function.

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
]
'/
Enum Fmod_result

    Fmod_ok                        /' No Errors. '/
    Fmod_err_alreadylocked         /' Tried To Call Lock A Second Time Before Unlock Was Called. '/
    Fmod_err_badcommand            /' Tried To Call A Function On A Data Type That Does Not Allow This Type Of Functionality (ie Calling FMOD_Sound_Lock On A Streaming Sound). '/
    Fmod_err_cdda_drivers          /' Neither Ntscsi Nor Aspi Could Be Initialised. '/
    Fmod_err_cdda_init             /' An Error Occurred While Initialising The Cdda Subsystem. '/
    Fmod_err_cdda_invalid_device   /' Couldn't Find The Specified Device. '/
    Fmod_err_cdda_noaudio          /' No Audio Tracks On The Specified Disc. '/
    Fmod_err_cdda_nodevices        /' No Cd/dvd Devices Were Found. '/ 
    Fmod_err_cdda_nodisc           /' No Disc Present In The Specified Drive. '/
    Fmod_err_cdda_read             /' A Cdda Read Error Occurred. '/
    Fmod_err_channel_alloc         /' Error Trying To Allocate A Channel. '/
    Fmod_err_channel_stolen        /' The Specified Channel Has Been Reused To Play Another Sound. '/
    Fmod_err_com                   /' A Win32 Com Related Error Occured. Com Failed To Initialize Or A Queryinterface Failed Meaning A Windows Codec Or Driver Was Not Installed Properly. '/
    Fmod_err_dma                   /' Dma Failure.  See Debug Output For More Information. '/
    Fmod_err_dsp_connection        /' Dsp Connection Error.  Connection Possibly Caused A Cyclic Dependancy.  Or Tried To Connect A Tree Too Many Units Deep (more Than 128). '/
    Fmod_err_dsp_format            /' Dsp Format Error.  A Dsp Unit May Have Attempted To Connect To This Network With The Wrong Format. '/
    Fmod_err_dsp_notfound          /' Dsp Connection Error.  Couldn't Find The Dsp Unit Specified. '/
    Fmod_err_dsp_running           /' Dsp Error.  Cannot Perform This Operation While The Network Is In The Middle Of Running.  This Will Most Likely Happen If A Connection Or Disconnection Is Attempted In A Dsp Callback. '/
    Fmod_err_dsp_toomanyconnections /' Dsp Connection Error.  The Unit Being Connected To Or Disconnected Should Only Have 1 Input Or Output. '/
    Fmod_err_file_bad              /' Error Loading File. '/
    Fmod_err_file_couldnotseek     /' Couldn't Perform Seek Operation.  This Is A Limitation Of The Medium (ie Netstreams) Or The File Format. '/
    Fmod_err_file_diskejected      /' Media Was Ejected While Reading. '/
    Fmod_err_file_eof              /' End Of File Unexpectedly Reached While Trying To Read Essential Data (truncated Data?). '/
    Fmod_err_file_notfound         /' File Not Found. '/
    Fmod_err_file_unwanted         /' Unwanted File Access Occured. '/
    Fmod_err_format                /' Unsupported File Or Audio Format. '/
    Fmod_err_http                  /' A Http Error Occurred. This Is A Catch-all For Http Errors Not Listed Elsewhere. '/
    Fmod_err_http_access           /' The Specified Resource Requires Authentication Or Is Forbidden. '/
    Fmod_err_http_proxy_auth       /' Proxy Authentication Is Required To Access The Specified Resource. '/
    Fmod_err_http_server_error     /' A Http Server Error Occurred. '/
    Fmod_err_http_timeout          /' The Http Request Timed Out. '/
    Fmod_err_initialization        /' Fmod Was Not Initialized Correctly To Support This Function. '/
    Fmod_err_initialized           /' Cannot Call This Command After FMOD_System_Init. '/
    Fmod_err_internal              /' An Error Occured That Wasn't Supposed To.  Contact Support. '/
    Fmod_err_invalid_address       /' On Xbox 360, This Memory Address Passed To Fmod Must Be Physical, (ie Allocated With Xphysicalalloc.) '/
    Fmod_err_invalid_float         /' Value Passed In Was A Nan, Inf Or Denormalized Float. '/
    Fmod_err_invalid_handle        /' An Invalid Object Handle Was Used. '/
    Fmod_err_invalid_param         /' An Invalid Parameter Was Passed To This Function. '/
    Fmod_err_invalid_position      /' An Invalid Seek Position Was Passed To This Function. '/
    Fmod_err_invalid_speaker       /' An Invalid Speaker Was Passed To This Function Based On The Current Speaker Mode. '/
    Fmod_err_invalid_syncpoint     /' The Syncpoint Did Not Come From This Sound Handle. '/
    Fmod_err_invalid_vector        /' The Vectors Passed In Are Not Unit Length, Or Perpendicular. '/
    Fmod_err_maxaudible            /' Reached Maximum Audible Playback Count For This Sound's Soundgroup. '/
    Fmod_err_memory                /' Not Enough Memory Or Resources. '/
    Fmod_err_memory_cantpoint      /' Can't Use Fmod_openmemory_point On Non Pcm Source Data, Or Non Mp3/xma/adpcm Data If Fmod_createcompressedsample Was Used. '/
    Fmod_err_memory_sram           /' Not Enough Memory Or Resources On Console Sound Ram. '/
    Fmod_err_needs2d               /' Tried To Call A Command On A 3d Sound When The Command Was Meant For 2d Sound. '/
    Fmod_err_needs3d               /' Tried To Call A Command On A 2d Sound When The Command Was Meant For 3d Sound. '/
    Fmod_err_needshardware         /' Tried To Use A Feature That Requires Hardware Support.  (ie Trying To Play A Gcadpcm Compressed Sound In Software On Wii). '/
    Fmod_err_needssoftware         /' Tried To Use A Feature That Requires The Software Engine.  Software Engine Has Either Been Turned Off, Or Command Was Executed On A Hardware Channel Which Does Not Support This Feature. '/
    Fmod_err_net_connect           /' Couldn't Connect To The Specified Host. '/
    Fmod_err_net_socket_error      /' A Socket Error Occurred.  This Is A Catch-all For Socket-related Errors Not Listed Elsewhere. '/
    Fmod_err_net_url               /' The Specified Url Couldn't Be Resolved. '/
    Fmod_err_net_would_block       /' Operation On A Non-blocking Socket Could Not Complete Immediately. '/
    Fmod_err_notready              /' Operation Could Not Be Performed Because Specified Sound/dsp Connection Is Not Ready. '/
    Fmod_err_output_allocated      /' Error Initializing Output Device, But More Specifically, The Output Device Is Already In Use And Cannot Be Reused. '/
    Fmod_err_output_createbuffer   /' Error Creating Hardware Sound Buffer. '/
    Fmod_err_output_drivercall     /' A Call To A Standard Soundcard Driver Failed, Which Could Possibly Mean A Bug In The Driver Or Resources Were Missing Or Exhausted. '/
    Fmod_err_output_enumeration    /' Error Enumerating The Available Driver List. List May Be Inconsistent Due To A Recent Device Addition Or Removal. '/
    Fmod_err_output_format         /' Soundcard Does Not Support The Minimum Features Needed For This Soundsystem (16bit Stereo Output). '/
    Fmod_err_output_init           /' Error Initializing Output Device. '/
    Fmod_err_output_nohardware     /' Fmod_hardware Was Specified But The Sound Card Does Not Have The Resources Necessary To Play It. '/
    Fmod_err_output_nosoftware     /' Attempted To Create A Software Sound But No Software Channels Were Specified In FMOD_System_Init. '/
    Fmod_err_pan                   /' Panning Only Works With Mono Or Stereo Sound Sources. '/
    Fmod_err_plugin                /' An Unspecified Error Has Been Returned From A 3rd Party Plugin. '/
    Fmod_err_plugin_instances      /' The Number Of Allowed Instances Of A Plugin Has Been Exceeded. '/
    Fmod_err_plugin_missing        /' A Requested Output, Dsp Unit Type Or Codec Was Not Available. '/
    Fmod_err_plugin_resource       /' A Resource That The Plugin Requires Cannot Be Found. (ie The Dls File For Midi Playback) '/
    Fmod_err_preloaded             /' The Specified Sound Is Still In Use By The Event System, Call Fmod_eventsystem_unloadfsb Before Trying To Release It. '/
    Fmod_err_programmersound       /' The Specified Sound Is Still In Use By The Event System, Wait For The Event Which Is Using It Finish With It. '/
    Fmod_err_record                /' An Error Occured Trying To Initialize The Recording Device. '/
    Fmod_err_reverb_instance       /' Specified Instance In Fmod_reverb_properties Couldn't Be Set. Most Likely Because It Is An Invalid Instance Number Or The Reverb Doesnt Exist. '/
    Fmod_err_subsound_allocated    /' This Subsound Is Already Being Used By Another Sound, You Cannot Have More Than One Parent To A Sound.  Null Out The Other Parent's Entry First. '/
    Fmod_err_subsound_cantmove     /' Shared Subsounds Cannot Be Replaced Or Moved From Their Parent Stream, Such As When The Parent Stream Is An Fsb File. '/
    Fmod_err_subsound_mode         /' The Subsound's Mode Bits Do Not Match With The Parent Sound's Mode Bits.  See Documentation For Function That It Was Called With. '/
    Fmod_err_subsounds             /' The Error Occured Because The Sound Referenced Contains Subsounds When It Shouldn't Have, Or It Doesn't Contain Subsounds When It Should Have.  The Operation May Also Not Be Able To Be Performed On A Parent Sound, Or A Parent Sound Was Played Without Setting Up A Sentence First. '/
    Fmod_err_tagnotfound           /' The Specified Tag Could Not Be Found Or There Are No Tags. '/
    Fmod_err_toomanychannels       /' The Sound Created Exceeds The Allowable Input Channel Count.  This Can Be Increased Using The Maxinputchannels Parameter In FMOD_System_SetSoftwareFormat. '/
    Fmod_err_unimplemented         /' Something In Fmod Hasn't Been Implemented When It Should Be! Contact Support! '/
    Fmod_err_uninitialized         /' This Command Failed Because FMOD_System_Init Or FMOD_System_SetDriver Was Not Called. '/
    Fmod_err_unsupported           /' A Command Issued Was Not Supported By This Object.  Possibly A Plugin Without Certain Callbacks Specified. '/
    Fmod_err_update                /' An Error Caused By FMOD_System_Update Occured. '/
    Fmod_err_version               /' The Version Number Of This File Format Is Not Supported. '/

    Fmod_err_event_failed          /' An Event Failed To Be Retrieved, Most Likely Due To 'just Fail' Being Specified As The Max Playbacks Behavior. '/
    Fmod_err_event_infoonly        /' Can't Execute This Command On An Event_infoonly Event. '/
    Fmod_err_event_internal        /' An Error Occured That Wasn't Supposed To.  See Debug Log For Reason. '/
    Fmod_err_event_maxstreams      /' Event Failed Because 'max Streams' Was Hit When Fmod_event_init_fail_on_maxstreams Was Specified. '/
    Fmod_err_event_mismatch        /' Fsb Mismatches The Fev It Was Compiled With, The Stream/sample Mode It Was Meant To Be Created With Was Different, Or The Fev Was Built For A Different Platform. '/
    Fmod_err_event_nameconflict    /' A Category With The Same Name Already Exists. '/
    Fmod_err_event_notfound        /' The Requested Event, Event Group, Event Category Or Event Property Could Not Be Found. '/
    Fmod_err_event_needssimple     /' Tried To Call A Function On A Complex Event That's Only Supported By Simple Events. '/
    Fmod_err_event_guidconflict    /' An Event With The Same Guid Already Exists. '/
    Fmod_err_event_already_loaded  /' The Specified Project Or Bank Has Already Been Loaded. Having Multiple Copies Of The Same Project Loaded Simultaneously Is Forbidden. '/

    Fmod_err_music_uninitialized   /' Music System Is Not Initialized Probably Because No Music Data Is Loaded. '/
    Fmod_err_music_notfound        /' The Requested Music Entity Could Not Be Found. '/
    Fmod_err_music_nocallback      /' The Music Callback Is Required, But It Has Not Been Set. '/

    Fmod_result_forceint = 65536    /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[structure] 
[
    [description]   
    Structure Describing A Point In 3d Space.

    [remarks]
    Fmod Uses A Left Handed Co-ordinate System By Default.
    To Use A Right Handed Co-ordinate System Specify Fmod_init_3d_righthanded From Fmod_initflags In  FMOD_System_Init.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_System_Set3DListenerAttributes
    FMOD_System_Get3DListenerAttributes
    FMOD_Channel_Set3DAttributes
    FMOD_Channel_Get3DAttributes
        FMOD_Channel_Set3DCustomRolloff
    FMOD_Channel_Get3DCustomRolloff
    FMOD_Sound_Set3DCustomRolloff
    FMOD_Sound_Get3DCustomRolloff
    FMOD_Geometry_AddPolygon
    FMOD_Geometry_SetPolygonVertex
    FMOD_Geometry_GetPolygonVertex
    FMOD_Geometry_SetRotation
    FMOD_Geometry_GetRotation
    FMOD_Geometry_SetPosition
    FMOD_Geometry_GetPosition
    FMOD_Geometry_SetScale
    FMOD_Geometry_GetScale
    Fmod_initflags
]
'/
Type Fmod_vector
	As Float X        /' X Co-ordinate In 3d Space. '/
    As Float Y        /' Y Co-ordinate In 3d Space. '/
    As Float Z        /' Z Co-ordinate In 3d Space. '/
End Type

/'
[structure] 
[
    [description]   
    Structure Describing A Globally Unique Identifier.

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_System_GetDriverInfo
]
'/
Type Fmod_guid field = 1
    As Uinteger   Data1       /' Specifies The First 8 Hexadecimal Digits Of The Guid '/
    As Ushort Data2       /' Specifies The First Group Of 4 Hexadecimal Digits.   '/
    As Ushort Data3       /' Specifies The Second Group Of 4 Hexadecimal Digits.  '/
     As Ubyte Data4(0 To 7)    /' Array Of 8 Bytes. The First 2 Bytes Contain The Third Group Of 4 Hexadecimal Digits. The Remaining 6 Bytes Contain The Final 12 Hexadecimal Digits. '/
End Type

/'
[structure] 
[
    [description]
    Structure That Is Passed Into Fmod_file_asyncreadcallback.  Use The Information In This Structure To Perform

    [remarks]
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.
    
    Instructions: Write To 'buffer', And 'bytesread' <b>before</b> Setting 'result'.  
    As Soon As Result Is Set, Fmod Will Asynchronously Continue Internally Using The Data Provided In This Structure.
    
    Set 'result' To The Result Expected From A Normal File Read Callback.
    If The Read Was Successful, Set It To Fmod_ok.
    If It Read Some Data But Hit The End Of The File, Set It To Fmod_err_file_eof.
    If A Bad Error Occurred, Return Fmod_err_file_bad
    If A Disk Was Ejected, Return Fmod_err_file_diskejected.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Fmod_file_asyncreadcallback
    Fmod_file_asynccancelcallback
]
'/
Type Fmod_asyncreadinfo
    As Any Ptr           Handle         /' [r] The File Handle That Was Filled Out In The Open Callback. '/
    As Uinteger    Offset         /' [r] Seek Position, Make Sure You Read From This File Offset. '/
    As Uinteger    Sizebytes      /' [r] How Many Bytes Requested For Read. '/
    As Integer             Priority       /' [r] 0 = Low Importance.  100 = Extremely Important (ie 'must Read Now Or Stuttering May Occur') '/

    As Any Ptr           Buffer         /' [w] Buffer To Read File Data Into. '/
    As Uinteger    Bytesread      /' [w] Fill This In Before Setting Result Code To Tell Fmod How Many Bytes Were Read. '/
    As Fmod_result     Result         /' [r/w] Result Code, Fmod_ok Tells The System It Is Ready To Consume The Data.  Set This Last!  Default Value = Fmod_err_notready. '/

    As Any Ptr           Userdata       /' [r] User Data Pointer. '/
End Type


/'
[enum]
[
    [description]   
    These Output Types Are Used With FMOD_System_SetOutput / FMOD_System_GetOutput, To Choose Which Output Method To Use.
  
    [remarks]
    To Pass Information To The Driver When Initializing Fmod Use The Extradriverdata Parameter In FMOD_System_Init For The Following Reasons.
    - Fmod_outputtype_wavwriter - Extradriverdata Is A Pointer To A zstring ptr Filename That The Wav Writer Will Output To.
    - Fmod_outputtype_wavwriter_nrt - Extradriverdata Is A Pointer To A Char * Filename That The Wav Writer Will Output To.
    - Fmod_outputtype_dsound - Extradriverdata Is A Pointer To A Hwnd So That Fmod Can Set The Focus On The Audio For A Particular Window.
    - Fmod_outputtype_ps3 - Extradriverdata Is A Pointer To A Fmod_ps3_extradriverdata Struct. This Can Be Found In Fmodps3.h.
    - Fmod_outputtype_gc - Extradriverdata Is A Pointer To A Fmod_gc_info Struct. This Can Be Found In Fmodgc.h.
    - Fmod_outputtype_wii - Extradriverdata Is A Pointer To A Fmod_wii_info Struct. This Can Be Found In Fmodwii.h.
    - Fmod_outputtype_alsa - Extradriverdata Is A Pointer To A Fmod_linux_extradriverdata Struct. This Can Be Found In Fmodlinux.h.
    
    Currently These Are The Only Fmod Drivers That Take Extra Information.  Other Unknown Plugins May Have Different Requirements.
    
    Note! If Fmod_outputtype_wavwriter_nrt Or Fmod_outputtype_nosound_nrt Are Used, And If The FMOD_System_Update Function Is Being Called
    Very Quickly (ie For A Non Realtime Decode) It May Be Being Called Too Quickly For The Fmod Streamer Thread To Respond To.  
    The Result Will Be A Skipping/stuttering Output In The Captured Audio.
    
    To Remedy This, Disable The Fmod Ex Streamer Thread, And Use Fmod_init_stream_from_update To Avoid Skipping In The Output Stream,
    As It Will Lock The Mixer And The Streamer Together In The Same Thread.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_System_SetOutput
    FMOD_System_GetOutput
    FMOD_System_SetSoftwareFormat
    FMOD_System_GetSoftwareFormat
    FMOD_System_Init
    FMOD_System_Update
    Fmod_initflags
]
'/
Enum Fmod_outputtype
    Fmod_outputtype_autodetect      /' Picks The Best Output Mode For The Platform.  This Is The Default. '/
                                     
    Fmod_outputtype_unknown         /' All             - 3rd Party Plugin, Unknown.  This Is For Use With FMOD_System_GetOutput Only. '/
    Fmod_outputtype_nosound         /' All             - All Calls In This Mode Succeed But Make No Sound. '/
    Fmod_outputtype_wavwriter       /' All             - Writes Output To Fmodoutput.wav By Default.  Use The 'extradriverdata' Parameter In FMOD_System_Init, By Simply Passing The Filename As A String, To Set The Wav Filename. '/
    Fmod_outputtype_nosound_nrt     /' All             - Non-realtime Version Of Fmod_outputtype_nosound.  User Can Drive Mixer With FMOD_System_Update At Whatever Rate They Want. '/
    Fmod_outputtype_wavwriter_nrt   /' All             - Non-realtime Version Of Fmod_outputtype_wavwriter.  User Can Drive Mixer With FMOD_System_Update At Whatever Rate They Want. '/
                                     
    Fmod_outputtype_dsound          /' Win32/win64     - Directsound Output.                       (default On Windows Xp And Below) '/
    Fmod_outputtype_winmm           /' Win32/win64     - Windows Multimedia Output. '/
    Fmod_outputtype_wasapi          /' Win32           - Windows Audio Session Api.                (default On Windows Vista And Above) '/
    Fmod_outputtype_asio            /' Win32           - Low Latency Asio 2.0 Driver. '/
    Fmod_outputtype_oss             /' Linux/linux64   - Open Sound System Output.                 (default On Linux, Third Preference) '/
    Fmod_outputtype_alsa            /' Linux/linux64   - Advanced Linux Sound Architecture Output. (default On Linux, Second Preference If Available) '/
    Fmod_outputtype_esd             /' Linux/linux64   - Enlightment Sound Daemon Output. '/
    Fmod_outputtype_pulseaudio      /' Linux/linux64   - Pulseaudio Output.                        (default On Linux, First Preference If Available) '/
    Fmod_outputtype_coreaudio       /' Mac             - Macintosh Coreaudio Output.               (default On Mac) '/
    Fmod_outputtype_xbox360         /' Xbox 360        - Native Xbox360 Output.                    (default On Xbox 360) '/
    Fmod_outputtype_psp             /' Psp             - Native Psp Output.                        (default On Psp) '/
    Fmod_outputtype_ps3             /' Ps3             - Native Ps3 Output.                        (default On Ps3) '/
    Fmod_outputtype_ngp             /' Ngp             - Native Ngp Output.                        (default On Ngp) '/
	Fmod_outputtype_wii			 /' Wii			    - Native Wii Output.                        (default On Wii) '/
    Fmod_outputtype_3ds             /' 3ds             - Native 3ds Output                         (default On 3ds) '/
    Fmod_outputtype_audiotrack      /' Android         - Java Audio Track Output.                  (default On Android 2.2 And Below) '/
    Fmod_outputtype_opensl          /' Android         - Opensl Es Output.                         (default On Android 2.3 And Above) '/   
    Fmod_outputtype_nacl            /' Native Client   - Native Client Output.                     (default On Native Client) '/
    Fmod_outputtype_wiiu            /' Wii U           - Native Wii U Output.                      (default On Wii U) '/
	Fmod_outputtype_asound		 	 /' Blackberry      - Native Blackberry Asound Output.          (default On Blackberry) '/

    Fmod_outputtype_max             /' Maximum Number Of Output Types Supported. '/
    Fmod_outputtype_forceint = 65536 /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[define] 
[
    [name]
    Fmod_caps

    [description]   
    Bit Fields To Use With FMOD_System_GetDriverCaps To Determine The Capabilities Of A Card / Output Device.

    [remarks]
    It Is Important To Check Fmod_caps_hardware_emulated On Windows Machines, To Then Adjust FMOD_System_SetDSPBufferSize To (1024, 10) To Compensate For The Higher Latency.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_GetDriverCaps
    FMOD_System_SetDSPBufferSize
]
'/
#define Fmod_caps_none                  &h00000000  /' Device Has No Special Capabilities. '/
#define Fmod_caps_hardware              &h00000001  /' Device Supports Hardware Mixing. '/
#define Fmod_caps_hardware_emulated     &h00000002  /' User Has Device Set To 'hardware Acceleration = Off' In Control Panel, And Now Extra 200ms Latency Is Incurred. '/
#define Fmod_caps_output_multichannel   &h00000004  /' Device Can Do Multichannel Output, Ie Greater Than 2 Channels. '/
#define Fmod_caps_output_format_pcm8    &h00000008  /' Device Can Output To 8bit Integer Pcm. '/
#define Fmod_caps_output_format_pcm16   &h00000010  /' Device Can Output To 16bit Integer Pcm. '/
#define Fmod_caps_output_format_pcm24   &h00000020  /' Device Can Output To 24bit Integer Pcm. '/
#define Fmod_caps_output_format_pcm32   &h00000040  /' Device Can Output To 32bit Integer Pcm. '/
#define Fmod_caps_output_format_pcmfloat&h00000080  /' Device Can Output To 32bit Floating Point Pcm. '/
#define Fmod_caps_reverb_limited        &h00002000  /' Device Supports Some Form Of Limited Hardware Reverb, Maybe Parameterless And Only Selectable By Environment. '/
#define Fmod_caps_loopback              &h00004000  /' Device Is A Loopback Recording Device '/
/' [define_end] '/

/'
[define] 
[
    [name]
    Fmod_debuglevel

    [description]   
    Bit Fields To Use With FMOD_Debug_SetLevel / FMOD_Debug_GetLevel To Control The Level Of Tty Debug Output With Logging Versions Of Fmod (fmodl).

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Debug_setlevel 
    Debug_getlevel
]
'/
#define Fmod_debug_level_none          &h00000000
#define Fmod_debug_level_log           &h00000001      /' Will Display Generic Logging Messages. '/
#define Fmod_debug_level_error         &h00000002      /' Will Display Errors. '/
#define Fmod_debug_level_warning       &h00000004      /' Will Display Warnings That Are Not Fatal. '/
#define Fmod_debug_level_hint          &h00000008      /' Will Hint To You If There Is Something Possibly Better You Could Be Doing. '/
#define Fmod_debug_level_all           &h000000ff    
#define Fmod_debug_type_memory         &h00000100      /' Show Fmod Memory Related Logging Messages. '/
#define Fmod_debug_type_thread         &h00000200      /' Show Fmod Thread Related Logging Messages. '/
#define Fmod_debug_type_file           &h00000400      /' Show Fmod File System Related Logging Messages. '/
#define Fmod_debug_type_net            &h00000800      /' Show Fmod Network Related Logging Messages. '/
#define Fmod_debug_type_event          &h00001000      /' Show Fmod Event Related Logging Messages. '/
#define Fmod_debug_type_all            &h0000ffff                      
#define Fmod_debug_display_timestamps  &h01000000      /' Display The Timestamp Of The Log Entry In Milliseconds. '/
#define Fmod_debug_display_linenumbers &h02000000      /' Display The Fmod Ex Source Code Line Numbers, For Debugging Purposes. '/
#define Fmod_debug_display_compress    &h04000000      /' If A Message Is Repeated More Than 5 Times It Will Stop Displaying It And Instead Display The Number Of Times The Message Was Logged. '/
#define Fmod_debug_display_thread      &h08000000      /' Display The Thread Id Of The Calling Function That Caused This Log Entry To Appear. '/
#define Fmod_debug_display_all         &h0f000000
#define Fmod_debug_all                 &hffffffff
/' [define_end] '/


/'
[define] 
[
    [name]
    Fmod_memory_type

    [description]   
    Bit Fields For Memory Allocation Type Being Passed Into Fmod Memory Callbacks.

    [remarks]
    Remember This Is A Bitfield.  You May Get More Than 1 Bit Set (ie Physical + Persistent) So Do Not Simply Switch On The Types!  You Must Check Each Bit Individually Or Clear Out The Bits That You Do Not Want Within The Callback.
    Bits Can Be Excluded If You Want During Memory_initialize So That You Never Get Them.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Fmod_memory_alloccallback
    Fmod_memory_realloccallback
    Fmod_memory_freecallback
    Memory_initialize
    
]
'/
#define Fmod_memory_normal            &h00000000       /' Standard Memory. '/
#define Fmod_memory_stream_file       &h00000001       /' Stream File Buffer, Size Controllable With FMOD_System_SetStreamBufferSize. '/
#define Fmod_memory_stream_decode     &h00000002       /' Stream Decode Buffer, Size Controllable With Fmod_createsoundexinfo.decodebuffersize. '/
#define Fmod_memory_sampledata        &h00000004       /' Sample Data Buffer.  Raw Audio Data, Usually Pcm/mpeg/adpcm/xma Data. '/
#define Fmod_memory_dsp_outputbuffer  &h00000008       /' Dsp Memory Block Allocated When More Than 1 Output Exists On A Dsp Node. '/
#define Fmod_memory_xbox360_physical  &h00100000       /' Requires Xphysicalalloc / Xphysicalfree. '/
#define Fmod_memory_persistent        &h00200000       /' Persistent Memory. Memory Will Be Freed When FMOD_System_Release Is Called. '/
#define Fmod_memory_secondary         &h00400000       /' Secondary Memory. Allocation Should Be In Secondary Memory. For Example Rsx On The Ps3. '/
#define Fmod_memory_all               &hffffffff
/' [define_end] '/


/'
[enum]
[
    [description]   
    These Are Speaker Types Defined For Use With The FMOD_System_SetSpeakerMode Or FMOD_System_GetSpeakerMode Command.

    [remarks]
    These Are Important Notes On Speaker Modes In Regards To Sounds Created With Fmod_software.
    Note Below The Phrase 'sound Channels' Is Used.  These Are The Subchannels Inside A Sound, They Are Not Related And 
    Have Nothing To Do With The Fmod Class "channel".
    For Example A Mono Sound Has 1 Sound Channel, A Stereo Sound Has 2 Sound Channels, And An Ac3 Or 6 Channel Wav File Have 6 "sound Channels".
    
    Fmod_speakermode_raw
    ---------------------
    This Mode Is For Output Devices That Are Not Specifically Mono/stereo/quad/surround/5.1 Or 7.1, But Are Multichannel.
    Use FMOD_System_SetSoftwareFormat To Specify The Number Of Speakers You Want To Address, Otherwise It Will Default To 2 (stereo).
    Sound Channels Map To Speakers Sequentially, So A Mono Sound Maps To Output Speaker 0, Stereo Sound Maps To Output Speaker 0 & 1.
    The User Assumes Knowledge Of The Speaker Order.  Fmod_speaker Enumerations May Not Apply, So Raw Channel Indices Should Be Used.
    Multichannel Sounds Map Input Channels To Output Channels 1:1. 
    FMOD_Channel_SetPan And FMOD_Channel_SetSpeakerMix Do Not Work.
    Speaker Levels Must Be Manually Set With FMOD_Channel_SetSpeakerLevels.
    
    Fmod_speakermode_mono
    ---------------------
    This Mode Is For A 1 Speaker Arrangement.
    Panning Does Not Work In This Speaker Mode.
    Mono, Stereo And Multichannel Sounds Have Each Sound Channel Played On The One Speaker Unity.
    Mix Behavior For Multichannel Sounds Can Be Set With FMOD_Channel_SetSpeakerLevels.
    FMOD_Channel_SetSpeakerMix Does Not Work.
    
    Fmod_speakermode_stereo
    -----------------------
    This Mode Is For 2 Speaker Arrangements That Have A Left And Right Speaker.
    - Mono Sounds Default To An Even Distribution Between Left And Right.  They Can Be Panned With FMOD_Channel_SetPan.
    - Stereo Sounds Default To The Middle, Or Full Left In The Left Speaker And Full Right In The Right Speaker.  
    - They Can Be Cross Faded With FMOD_Channel_SetPan.
    - Multichannel Sounds Have Each Sound Channel Played On Each Speaker At Unity.
    - Mix Behavior For Multichannel Sounds Can Be Set With FMOD_Channel_SetSpeakerLevels.
    - FMOD_Channel_SetSpeakerMix Works But Only Front Left And Right Parameters Are Used, The Rest Are Ignored.
    
    Fmod_speakermode_quad
    ------------------------
    This Mode Is For 4 Speaker Arrangements That Have A Front Left, Front Right, Rear Left And A Rear Right Speaker.
    - Mono Sounds Default To An Even Distribution Between Front Left And Front Right.  They Can Be Panned With FMOD_Channel_SetPan.
    - Stereo Sounds Default To The Left Sound Channel Played On The Front Left, And The Right Sound Channel Played On The Front Right.
    - They Can Be Cross Faded With FMOD_Channel_SetPan.
    - Multichannel Sounds Default To All Of Their Sound Channels Being Played On Each Speaker In Order Of Input.
    - Mix Behavior For Multichannel Sounds Can Be Set With FMOD_Channel_SetSpeakerLevels.
    - FMOD_Channel_SetSpeakerMix Works But Side Left, Side Right, Center And Lfe Are Ignored.
    
    Fmod_speakermode_surround
    ------------------------
    This Mode Is For 5 Speaker Arrangements That Have A Left/right/center/rear Left/rear Right.
    - Mono Sounds Default To The Center Speaker.  They Can Be Panned With FMOD_Channel_SetPan.
    - Stereo Sounds Default To The Left Sound Channel Played On The Front Left, And The Right Sound Channel Played On The Front Right.  
    - They Can Be Cross Faded With FMOD_Channel_SetPan.
    - Multichannel Sounds Default To All Of Their Sound Channels Being Played On Each Speaker In Order Of Input.  
    - Mix Behavior For Multichannel Sounds Can Be Set With FMOD_Channel_SetSpeakerLevels.
    - FMOD_Channel_SetSpeakerMix Works But Side Left / Side Right Are Ignored.
    
    Fmod_speakermode_5point1
    ------------------------
    This Mode Is For 5.1 Speaker Arrangements That Have A Left/right/center/rear Left/rear Right And A Subwoofer Speaker.
    - Mono Sounds Default To The Center Speaker.  They Can Be Panned With FMOD_Channel_SetPan.
    - Stereo Sounds Default To The Left Sound Channel Played On The Front Left, And The Right Sound Channel Played On The Front Right.  
    - They Can Be Cross Faded With FMOD_Channel_SetPan.
    - Multichannel Sounds Default To All Of Their Sound Channels Being Played On Each Speaker In Order Of Input.  
    - Mix Behavior For Multichannel Sounds Can Be Set With FMOD_Channel_SetSpeakerLevels.
    - FMOD_Channel_SetSpeakerMix Works But Side Left / Side Right Are Ignored.
    
    Fmod_speakermode_7point1
    ------------------------
    This Mode Is For 7.1 Speaker Arrangements That Have A Left/right/center/rear Left/rear Right/side Left/side Right 
    And A Subwoofer Speaker.
    - Mono Sounds Default To The Center Speaker.  They Can Be Panned With FMOD_Channel_SetPan.
    - Stereo Sounds Default To The Left Sound Channel Played On The Front Left, And The Right Sound Channel Played On The Front Right.  
    - They Can Be Cross Faded With FMOD_Channel_SetPan.
    - Multichannel Sounds Default To All Of Their Sound Channels Being Played On Each Speaker In Order Of Input.  
    - Mix Behavior For Multichannel Sounds Can Be Set With FMOD_Channel_SetSpeakerLevels.
    - FMOD_Channel_SetSpeakerMix Works And Every Parameter Is Used To Set The Balance Of A Sound In Any Speaker.
    
    Fmod_speakermode_srs5_1_matrix
    ------------------------------------------------------
    This Mode Is For Mono, Stereo, 5.1 And 6.1 Speaker Arrangements, As It Is Backwards And Forwards Compatible With 
    Stereo, But To Get A Surround Effect A Srs 5.1, Prologic Or Prologic 2 Hardware Decoder / Amplifier Is Needed Or 
    A Compatible Srs Equipped Device (e.g., Laptop, Tv, Etc.) Or Accessory (e.g., Headphone).
    Pan Behavior Is The Same As Fmod_speakermode_5point1.
    
    If This Function Is Called The Numoutputchannels Setting In FMOD_System_SetSoftwareFormat Is Overwritten.
    
    Output Rate Must Be 44100, 48000 Or 96000 For This To Work Otherwise Fmod_err_output_init Will Be Returned.

    Fmod_speakermode_myears
    ------------------------------------------------------
    This Mode Is For Headphones.  This Will Attempt To Load A Myears Profile (see Myears.net.au) And Use It To Generate
    Surround Sound On Headphones Using A Personalized Hrtf Algorithm, For Realistic 3d Sound.
    Pan Behavior Is The Same As Fmod_speakermode_7point1.
    Myears Speaker Mode Will Automatically Be Set If The Speakermode Is Fmod_speakermode_stereo And The Myears Profile Exists.
    If This Mode Is Set Explicitly, Fmod_init_disable_myears_autodetect Has No Effect.
    If This Mode Is Set Explicitly And The Myears Profile Does Not Exist, Fmod_err_output_drivercall Will Be Returned.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_SetSpeakerMode
    FMOD_System_GetSpeakerMode
    FMOD_System_GetDriverCaps
    FMOD_System_SetSoftwareFormat
    FMOD_Channel_SetSpeakerLevels
]
'/
Enum Fmod_speakermode
    Fmod_speakermode_raw              /' There Is No Specific Speakermode.  Sound Channels Are Mapped In Order Of Input To Output.  Use FMOD_System_SetSoftwareFormat To Specify Speaker Count. See Remarks For More Information. '/
    Fmod_speakermode_mono             /' The Speakers Are Monaural. '/
    Fmod_speakermode_stereo           /' The Speakers Are Stereo (default). '/
    Fmod_speakermode_quad             /' 4 Speaker Setup.  This Includes Front Left, Front Right, Rear Left, Rear Right.  '/
    Fmod_speakermode_surround         /' 5 Speaker Setup.  This Includes Front Left, Front Right, Center, Rear Left, Rear Right. '/
    Fmod_speakermode_5point1          /' 5.1 Speaker Setup.  This Includes Front Left, Front Right, Center, Rear Left, Rear Right And A Subwoofer. '/
    Fmod_speakermode_7point1          /' 7.1 Speaker Setup.  This Includes Front Left, Front Right, Center, Rear Left, Rear Right, Side Left, Side Right And A Subwoofer. '/
    
    Fmod_speakermode_srs5_1_matrix    /' Stereo Compatible Output, Embedded With Surround Information. Srs 5.1/prologic/prologic2 Decoders Will Split The Signal Into A 5.1 Speaker Set-up Or Srs Virtual Surround Will Decode Into A 2-speaker/headphone Setup.  See Remarks About Limitations.'/
    Fmod_speakermode_myears           /' Stereo Output, But Data Is Encoded Using Personalized Hrtf Algorithms.  See Myears.net.au '/

    Fmod_speakermode_max              /' Maximum Number Of Speaker Modes Supported. '/
    Fmod_speakermode_forceint = 65536  /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    These Are Speaker Types Defined For Use With The FMOD_Channel_SetSpeakerLevels Command.
    It Can Also Be Used For Speaker Placement In The FMOD_System_Set3DSpeakerPosition Command.

    [remarks]
    If You Are Using Fmod_speakermode_raw And Speaker Assignments Are Meaningless, Just Cast A Raw Integer Value To This Type.
    For Example (fmod_speaker)7 Would Use The 7th Speaker (also The Same As Fmod_speaker_side_right).
    Values Higher Than This Can Be Used If An Output System Has More Than 8 Speaker Types / Output Channels.  15 Is The Current Maximum. 

    Note: On Playstation 3 In 7.1, The Extra 2 Speakers Are Not Side Left/side Right, They Are "surround Back Left"/"surround Back Right" Which
    Locate The Speakers Behind The Listener Instead Of To The Sides Like On Pc.  Fmod_speaker_sbl/fmod_speaker_sbr Are Provided To Make It 
    Clearer What Speaker Is Being Addressed On That Platform.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Fmod_speakermode
    FMOD_Channel_SetSpeakerLevels
    FMOD_Channel_GetSpeakerLevels
    FMOD_System_Set3DSpeakerPosition
    FMOD_System_Get3DSpeakerPosition
]
'/
Enum Fmod_speaker
    Fmod_speaker_front_left
    Fmod_speaker_front_right
    Fmod_speaker_front_center
    Fmod_speaker_low_frequency
    Fmod_speaker_back_left
    Fmod_speaker_back_right
    Fmod_speaker_side_left
    Fmod_speaker_side_right
    
    Fmod_speaker_max                                       /' Maximum Number Of Speaker Types Supported. '/
    Fmod_speaker_mono        = Fmod_speaker_front_left     /' For Use With Fmod_speakermode_mono And FMOD_Channel_SetSpeakerLevels.  Mapped To Same Value As Fmod_speaker_front_left. '/
    Fmod_speaker_null        = 65535                       /' A Non Speaker.  Use This With Asio Mapping To Ignore A Speaker. '/
    Fmod_speaker_sbl         = Fmod_speaker_side_left      /' For Use With Fmod_speakermode_7point1 On Ps3 Where The Extra Speakers Are Surround Back Inside Of Side Speakers. '/
    Fmod_speaker_sbr         = Fmod_speaker_side_right     /' For Use With Fmod_speakermode_7point1 On Ps3 Where The Extra Speakers Are Surround Back Inside Of Side Speakers. '/
    Fmod_speaker_forceint    = 65536                        /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    These Are Plugin Types Defined For Use With The FMOD_System_GetNumPlugins, 
    FMOD_System_GetPluginInfo And FMOD_System_UnloadPlugin Functions.

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_GetNumPlugins
    FMOD_System_GetPluginInfo
    FMOD_System_UnloadPlugin
]
'/
Enum Fmod_plugintype
    Fmod_plugintype_output          /' The Plugin Type Is An Output Module.  Fmod Mixed Audio Will Play Through One Of These Devices '/
    Fmod_plugintype_codec           /' The Plugin Type Is A File Format Codec.  Fmod Will Use These Codecs To Load File Formats For Playback. '/
    Fmod_plugintype_dsp             /' The Plugin Type Is A Dsp Unit.  Fmod Will Use These Plugins As Part Of Its Dsp Network To Apply Effects To Output Or Generate Sound In Realtime. '/

    Fmod_plugintype_max             /' Maximum Number Of Plugin Types Supported. '/
    Fmod_plugintype_forceint = 65536 /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[define]
[
    [name]
    Fmod_initflags

    [description]   
    Initialization Flags.  Use Them With FMOD_System_Init In The Flags Parameter To Change Various Behavior.  

    [remarks]
    Use FMOD_System_SetAdvancedSettings To Adjust Settings For Some Of The Features That Are Enabled By These Flags.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_Init
    FMOD_System_Update
    FMOD_System_SetAdvancedSettings
    FMOD_Channel_Set3DOcclusion
]
'/
#define Fmod_init_normal                    &h00000000 /' All Platforms - Initialize Normally '/
#define Fmod_init_stream_from_update        &h00000001 /' All Platforms - No Stream Thread Is Created Internally.  Streams Are Driven From FMOD_System_Update.  Mainly Used With Non-realtime Outputs. '/
#define Fmod_init_3d_righthanded            &h00000002 /' All Platforms - Fmod Will Treat +x As Right, +y As Up And +z As Backwards (towards You). '/
#define Fmod_init_software_disable          &h00000004 /' All Platforms - Disable Software Mixer To Save Memory.  Anything Created With Fmod_software Will Fail And Dsp Will Not Work. '/
#define Fmod_init_occlusion_lowpass         &h00000008 /' All Platforms - All Fmod_software (and Fmod_hardware On 3ds And Ngp) With Fmod_3d Based Voices Will Add A Software Lowpass Filter Effect Into The Dsp Chain Which Is Automatically Used When FMOD_Channel_Set3DOcclusion Is Used Or The Geometry Api. '/
#define Fmod_init_hrtf_lowpass              &h00000010 /' All Platforms - All Fmod_software (and Fmod_hardware On 3ds And Ngp) With Fmod_3d Based Voices Will Add A Software Lowpass Filter Effect Into The Dsp Chain Which Causes Sounds To Sound Duller When The Sound Goes Behind The Listener.  Use FMOD_System_SetAdvancedSettings To Adjust Cutoff Frequency. '/
#define Fmod_init_distance_filtering        &h00000200 /' All Platforms - All Fmod_software With Fmod_3d Based Voices Will Add A Software Lowpass And Highpass Filter Effect Into The Dsp Chain Which Will Act As A Distance-automated Bandpass Filter. Use FMOD_System_SetAdvancedSettings To Adjust The Center Frequency. '/
#define Fmod_init_software_reverb_lowmem    &h00000040 /' All Platforms - Sfx Reverb Is Run Using 22/24khz Delay Buffers, Halving The Memory Required. '/
#define Fmod_init_enable_profile            &h00000020 /' All Platforms - Enable Tcp/ip Based Host Which Allows Fmod Designer Or Fmod Profiler To Connect To It, And View Memory, Cpu And The Dsp Network Graph In Real-time. '/
#define Fmod_init_vol0_becomes_virtual      &h00000080 /' All Platforms - Any Sounds That Are 0 Volume Will Go Virtual And Not Be Processed Except For Having Their Positions Updated Virtually.  Use FMOD_System_SetAdvancedSettings To Adjust What Volume Besides Zero To Switch To Virtual At. '/
#define Fmod_init_wasapi_exclusive          &h00000100 /' Win32 Vista Only - For Wasapi Output - Enable Exclusive Access To Hardware, Lower Latency At The Expense Of Excluding Other Applications From Accessing The Audio Hardware. '/
#define Fmod_init_ps3_preferdts             &h00800000 /' Ps3 Only - Prefer Dts Over Dolby Digital If Both Are Supported. Note: 8 And 6 Channel Lpcm Is Always Preferred Over Both Dts And Dolby Digital. '/
#define Fmod_init_ps3_force2chlpcm          &h01000000 /' Ps3 Only - Force Ps3 System Output Mode To 2 Channel Lpcm. '/
#define Fmod_init_disabledolby              &h00100000 /' Wii / 3ds - Disable Dolby Pro Logic Surround. Speakermode Will Be Set To Stereo Even If User Has Selected Surround In The System Settings. '/
#define Fmod_init_system_musicmutenotpause  &h00200000 /' Xbox 360 / Ps3 - The "music" Channelgroup Which By Default Pauses When Custom 360 Dashboard / Ps3 Bgm Music Is Played, Can Be Changed To Mute (therefore Continues Playing) Instead Of Pausing, By Using This Flag. '/
#define Fmod_init_syncmixerwithupdate       &h00400000 /' Win32/wii/ps3/xbox/xbox 360 - Fmod Mixer Thread Is Woken Up To Do A Mix When FMOD_System_Update Is Called Rather Than Waking Periodically On Its Own Timer. '/
#define Fmod_init_geometry_useclosest       &h04000000 /' All Platforms - With The Geometry Engine, Only Process The Closest Polygon Rather Than Accumulating All Polygons The Sound To Listener Line Intersects. '/
#define Fmod_init_disable_myears_autodetect &h08000000 /' Win32 - Disables Automatic Setting Of Fmod_speakermode_stereo To Fmod_speakermode_myears If The Myears Profile Exists On The Pc.  Myears Is Hrtf 7.1 Downmixing Through Headphones. '/
#define Fmod_init_ps3_disabledts            &h10000000 /' Ps3 Only - Disable Dts Output Mode Selection '/
#define Fmod_init_ps3_disabledolbydigital   &h20000000 /' Ps3 Only - Disable Dolby Digital Output Mode Selection '/
/' [define_end] '/


/'
[enum]
[
    [description]   
    These Definitions Describe The Type Of Song Being Played.

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Sound_GetFormat
]
'/
Enum Fmod_sound_type
    Fmod_sound_type_unknown         /' 3rd Party / Unknown Plugin Format. '/
    Fmod_sound_type_aiff            /' Aiff. '/
    Fmod_sound_type_asf             /' Microsoft Advanced Systems Format (ie Wma/asf/wmv). '/
    Fmod_sound_type_at3             /' Sony Atrac 3 Format '/
    Fmod_sound_type_cdda            /' Digital Cd Audio. '/
    Fmod_sound_type_dls             /' Sound Font / Downloadable Sound Bank. '/
    Fmod_sound_type_flac            /' Flac Lossless Codec. '/
    Fmod_sound_type_fsb             /' Fmod Sample Bank. '/
    Fmod_sound_type_gcadpcm         /' Nintendo Gamecube/wii Adpcm '/
    Fmod_sound_type_it              /' Impulse Tracker. '/
    Fmod_sound_type_midi            /' Midi. Extracodecdata Is A Pointer To An Fmod_midi_extracodecdata Structure. '/
    Fmod_sound_type_mod             /' Protracker / Fasttracker Mod. '/
    Fmod_sound_type_mpeg            /' Mp2/mp3 Mpeg. '/
    Fmod_sound_type_oggvorbis       /' Ogg Vorbis. '/
    Fmod_sound_type_playlist        /' Information Only From Asx/pls/m3u/wax Playlists '/
    Fmod_sound_type_raw             /' Raw Pcm Data. '/
    Fmod_sound_type_s3m             /' Screamtracker 3. '/
    Fmod_sound_type_sf2             /' Sound Font 2 Format. '/
    Fmod_sound_type_user            /' User Created Sound. '/
    Fmod_sound_type_wav             /' Microsoft Wav. '/
    Fmod_sound_type_xm              /' Fasttracker 2 Xm. '/
    Fmod_sound_type_xma             /' Xbox360 Xma '/
    Fmod_sound_type_vag             /' Playstation Portable Adpcm Vag Format. '/
    Fmod_sound_type_audioqueue      /' Iphone Hardware Decoder, Supports Aac, Alac And Mp3. Extracodecdata Is A Pointer To An Fmod_audioqueue_extracodecdata Structure. '/
    Fmod_sound_type_xwma            /' Xbox360 Xwma '/
    Fmod_sound_type_bcwav           /' 3ds Bcwav Container Format For Dsp Adpcm And Pcm '/
    Fmod_sound_type_at9             /' Ngp Atrac 9 Format '/
    Fmod_sound_type_vorbis          /' Raw Vorbis '/
    Fmod_sound_type_media_foundation /' Microsoft Media Foundation Wrappers, Supports Asf/wma '/

    Fmod_sound_type_max             /' Maximum Number Of Sound Types Supported. '/
    Fmod_sound_type_forceint = 65536 /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    These Definitions Describe The Native Format Of The Hardware Or Software Buffer That Will Be Used.

    [remarks]
    This Is The Format The Native Hardware Or Software Buffer Will Be Or Is Created In.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_CreateSound
    FMOD_Sound_GetFormat
]
'/
Enum Fmod_sound_format
    Fmod_sound_format_none             /' Unitialized / Unknown. '/
    Fmod_sound_format_pcm8             /' 8bit Integer Pcm Data. '/
    Fmod_sound_format_pcm16            /' 16bit Integer Pcm Data. '/
    Fmod_sound_format_pcm24            /' 24bit Integer Pcm Data. '/
    Fmod_sound_format_pcm32            /' 32bit Integer Pcm Data. '/
    Fmod_sound_format_pcmfloat         /' 32bit Floating Point Pcm Data. '/
    Fmod_sound_format_gcadpcm          /' Compressed Nintendo 3ds/wii Dsp Data. '/
    Fmod_sound_format_imaadpcm         /' Compressed Ima Adpcm Data. '/
    Fmod_sound_format_vag              /' Compressed Playstation Portable Adpcm Data. '/
    Fmod_sound_format_hevag            /' Compressed Psvita Adpcm Data. '/
    Fmod_sound_format_xma              /' Compressed Xbox360 Xma Data. '/
    Fmod_sound_format_mpeg             /' Compressed Mpeg Layer 2 Or 3 Data. '/
    Fmod_sound_format_celt             /' Compressed Celt Data. '/
    Fmod_sound_format_at9              /' Compressed Psvita Atrac9 Data. '/
    Fmod_sound_format_xwma             /' Compressed Xbox360 Xwma Data. '/
    Fmod_sound_format_vorbis           /' Compressed Vorbis Data. '/

    Fmod_sound_format_max              /' Maximum Number Of Sound Formats Supported. '/   
    Fmod_sound_format_forceint = 65536  /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[define]
[
    [name] 
    Fmod_mode

    [description]   
    Sound Description Bitfields, Bitwise Or Them Together For Loading And Describing Sounds.

    [remarks]
    By Default A Sound Will Open As A Static Sound That Is Decompressed Fully Into Memory To Pcm. (ie Equivalent Of Fmod_createsample)
    To Have A Sound Stream Instead, Use Fmod_createstream, Or Use The Wrapper Function FMOD_System_CreateStream.
    Some Opening Modes (ie Fmod_openuser, Fmod_openmemory, Fmod_openmemory_point, Fmod_openraw) Will Need Extra Information.
    This Can Be Provided Using The Fmod_createsoundexinfo Structure.
    
    Specifying Fmod_openmemory_point Will Point To Your Memory Rather Allocating Its Own Sound Buffers And Duplicating It Internally.
    <b><u>this Means You Cannot Free The Memory While Fmod Is Using It, Until After FMOD_Sound_Release Is Called.</b></u>
    With Fmod_openmemory_point, For Pcm Formats, Only Wav, Fsb, And Raw Are Supported.  For Compressed Formats, Only Those Formats Supported By Fmod_createcompressedsample Are Supported.
    With Fmod_openmemory_point And Fmod_openraw Or Pcm, If Using Them Together, Note That You Must Pad The Data On Each Side By 16 Bytes.  This Is So Fmod Can Modify The Ends Of The Data For Looping/interpolation/mixing Purposes.  If A Wav File, You Will Need To Insert Silence, And Then Reset Loop Points To Stop The Playback From Playing That Silence.
    With Fmod_openmemory_point, For Wii/psp Fmod_hardware Supports This Flag For The Gcadpcm/vag Formats.  On Other Platforms Fmod_software Must Be Used.
    
    <b>xbox 360 Memory</b> On Xbox 360 Specifying Fmod_openmemory_point To A Virtual Memory Address Will Cause Fmod_err_invalid_address
    To Be Returned.  Use Physical Memory Only For This Functionality.
    
    Fmod_lowmem Is Used On A Sound If You Want To Minimize The Memory Overhead, By Having Fmod Not Allocate Memory For Certain 
    Features That Are Not Likely To Be Used In A Game Environment.  These Are :
    1. FMOD_Sound_GetName Functionality Is Removed.  256 Bytes Per Sound Is Saved.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_CreateSound
    FMOD_System_CreateStream
    FMOD_Sound_SetMode
    FMOD_Sound_GetMode
    FMOD_Channel_SetMode
    FMOD_Channel_GetMode
    FMOD_Sound_Set3DCustomRolloff
    FMOD_Channel_Set3DCustomRolloff
    FMOD_Sound_GetOpenState
]
'/
#define Fmod_default                  &h00000000  /' Default For All Modes Listed Below. Fmod_loop_off, Fmod_2d, Fmod_hardware '/
#define Fmod_loop_off                 &h00000001  /' For Non Looping Sounds. (default).  Overrides Fmod_loop_normal / Fmod_loop_bidi. '/
#define Fmod_loop_normal              &h00000002  /' For Forward Looping Sounds. '/
#define Fmod_loop_bidi                &h00000004  /' For Bidirectional Looping Sounds. (only Works On Software Mixed Static Sounds). '/
#define Fmod_2d                       &h00000008  /' Ignores Any 3d Processing. (default). '/
#define Fmod_3d                       &h00000010  /' Makes The Sound Positionable In 3d.  Overrides Fmod_2d. '/
#define Fmod_hardware                 &h00000020  /' Attempts To Make Sounds Use Hardware Acceleration. (default).  Note On Platforms That Don't Support Fmod_hardware (only 3ds, Ps Vita, Psp, Wii And Wii U Support Fmod_hardware), This Will Be Internally Treated As Fmod_software. '/
#define Fmod_software                 &h00000040  /' Makes The Sound Be Mixed By The Fmod Cpu Based Software Mixer.  Overrides Fmod_hardware.  Use This For Fft, Dsp, Compressed Sample Support, 2d Multi-speaker Support And Other Software Related Features. '/
#define Fmod_createstream             &h00000080  /' Decompress At Runtime, Streaming From The Source Provided (ie From Disk).  Overrides Fmod_createsample And Fmod_createcompressedsample.  Note A Stream Can Only Be Played Once At A Time Due To A Stream Only Having 1 Stream Buffer And File Handle.  Open Multiple Streams To Have Them Play Concurrently. '/
#define Fmod_createsample             &h00000100  /' Decompress At Loadtime, Decompressing Or Decoding Whole File Into Memory As The Target Sample Format (ie Pcm).  Fastest For Fmod_software Based Playback And Most Flexible.  '/
#define Fmod_createcompressedsample   &h00000200  /' Load Mp2, Mp3, Imaadpcm Or Xma Into Memory And Leave It Compressed.  During Playback The Fmod Software Mixer Will Decode It In Realtime As A 'compressed Sample'.  Can Only Be Used In Combination With Fmod_software.  Overrides Fmod_createsample.  If The Sound Data Is Not Adpcm, Mpeg Or Xma It Will Behave As If It Was Created With Fmod_createsample And Decode The Sound Into Pcm. '/
#define Fmod_openuser                 &h00000400  /' Opens A User Created Static Sample Or Stream. Use Fmod_createsoundexinfo To Specify Format And/or Read Callbacks.  If A User Created 'sample' Is Created With No Read Callback, The Sample Will Be Empty.  Use FMOD_Sound_Lock And FMOD_Sound_Unlock To Place Sound Data Into The Sound If This Is The Case. '/
#define Fmod_openmemory               &h00000800  /' "name_or_data" Will Be Interpreted As A Pointer To Memory Instead Of Filename For Creating Sounds.  Use Fmod_createsoundexinfo To Specify Length.  If Used With Fmod_createsample Or Fmod_createcompressedsample, Fmod Duplicates The Memory Into Its Own Buffers.  Your Own Buffer Can Be Freed After Open.  If Used With Fmod_createstream, Fmod Will Stream Out Of The Buffer Whose Pointer You Passed In.  In This Case, Your Own Buffer Should Not Be Freed Until You Have Finished With And Released The Stream.'/
#define Fmod_openmemory_point         &h10000000  /' "name_or_data" Will Be Interpreted As A Pointer To Memory Instead Of Filename For Creating Sounds.  Use Fmod_createsoundexinfo To Specify Length.  This Differs To Fmod_openmemory In That It Uses The Memory As Is, Without Duplicating The Memory Into Its Own Buffers.  For Wii/psp Fmod_hardware Supports This Flag For The Gcadpcm/vag Formats.  On Other Platforms Fmod_software Must Be Used, As Sound Hardware On The Other Platforms (ie Pc) Cannot Access Main Ram.  Cannot Be Freed After Open, Only After FMOD_Sound_Release.   Will Not Work If The Data Is Compressed And Fmod_createcompressedsample Is Not Used. '/
#define Fmod_openraw                  &h00001000  /' Will Ignore File Format And Treat As Raw Pcm.  Use Fmod_createsoundexinfo To Specify Format.  Requires At Least Defaultfrequency, Numchannels And Format To Be Specified Before It Will Open.  Must Be Little Endian Data. '/
#define Fmod_openonly                 &h00002000  /' Just Open The File, Dont Prebuffer Or Read.  Good For Fast Opens For Info, Or When FMOD_Sound_ReadData Is To Be Used. '/
#define Fmod_accuratetime             &h00004000  /' For FMOD_System_CreateSound - For Accurate FMOD_Sound_GetLength/FMOD_Channel_SetPosition On Vbr Mp3, And Mod/s3m/xm/it/midi Files.  Scans File First, So Takes Longer To Open. Fmod_openonly Does Not Affect This. '/
#define Fmod_mpegsearch               &h00008000  /' For Corrupted / Bad Mp3 Files.  This Will Search All The Way Through The File Until It Hits A Valid Mpeg Header.  Normally Only Searches For 4k. '/
#define Fmod_nonblocking              &h00010000  /' For Opening Sounds And Getting Streamed Subsounds (seeking) Asyncronously.  Use FMOD_Sound_GetOpenState To Poll The State Of The Sound As It Opens Or Retrieves The Subsound In The Background. '/
#define Fmod_unique                   &h00020000  /' Unique Sound, Can Only Be Played One At A Time '/
#define Fmod_3d_headrelative          &h00040000  /' Make The Sound's Position, Velocity And Orientation Relative To The Listener. '/
#define Fmod_3d_worldrelative         &h00080000  /' Make The Sound's Position, Velocity And Orientation Absolute (relative To The World). (default) '/
#define Fmod_3d_inverserolloff        &h00100000  /' This Sound Will Follow The Inverse Rolloff Model Where Mindistance = Full Volume, Maxdistance = Where Sound Stops Attenuating, And Rolloff Is Fixed According To The Global Rolloff Factor.  (default) '/
#define Fmod_3d_linearrolloff         &h00200000  /' This Sound Will Follow A Linear Rolloff Model Where Mindistance = Full Volume, Maxdistance = Silence.  Rolloffscale Is Ignored. '/
#define Fmod_3d_linearsquarerolloff   &h00400000  /' This Sound Will Follow A Linear-square Rolloff Model Where Mindistance = Full Volume, Maxdistance = Silence.  Rolloffscale Is Ignored. '/
#define Fmod_3d_customrolloff         &h04000000  /' This Sound Will Follow A Rolloff Model Defined By FMOD_Sound_Set3DCustomRolloff / FMOD_Channel_Set3DCustomRolloff.  '/
#define Fmod_3d_ignoregeometry        &h40000000  /' Is Not Affect By Geometry Occlusion.  If Not Specified In FMOD_Sound_SetMode, Or FMOD_Channel_SetMode, The Flag Is Cleared And It Is Affected By Geometry Again. '/
#define Fmod_unicode                  &h01000000  /' Filename Is Double-byte Unicode. '/
#define Fmod_ignoretags               &h02000000  /' Skips Id3v2/asf/etc Tag Checks When Opening A Sound, To Reduce Seek/read Overhead When Opening Files (helps With Cd Performance). '/
#define Fmod_lowmem                   &h08000000  /' Removes Some Features From Samples To Give A Lower Memory Overhead, Like FMOD_Sound_GetName.  See Remarks. '/
#define Fmod_loadsecondaryram         &h20000000  /' Load Sound Into The Secondary Ram Of Supported Platform. On Ps3, Sounds Will Be Loaded Into Rsx/vram. '/
#define Fmod_virtual_playfromstart    &h80000000  /' For Sounds That Start Virtual (due To Being Quiet Or Low Importance), Instead Of Swapping Back To Audible, And Playing At The Correct Offset According To Time, This Flag Makes The Sound Play From The Start. '/

/' [define_end] '/


/'
[enum]
[
    [description]   
    These Values Describe What State A Sound Is In After Fmod_nonblocking Has Been Used To Open It.

    [remarks]
    With Streams, If You Are Using Fmod_nonblocking, Note That If The User Calls FMOD_Sound_GetSubSound, A Stream Will Go Into Fmod_openstate_seeking State And Sound Related Commands Will Return Fmod_err_notready.
    With Streams, If You Are Using Fmod_nonblocking, Note That If The User Calls FMOD_Channel_GetPosition, A Stream Will Go Into Fmod_openstate_setposition State And Sound Related Commands Will Return Fmod_err_notready.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_Sound_GetOpenState
    Fmod_mode
]
'/
Enum Fmod_openstate
    Fmod_openstate_ready = 0       /' Opened And Ready To Play. '/
    Fmod_openstate_loading         /' Initial Load In Progress. '/
    Fmod_openstate_error           /' Failed To Open - File Not Found, Out Of Memory Etc.  See Return Value Of FMOD_Sound_GetOpenState For What Happened. '/
    Fmod_openstate_connecting      /' Connecting To Remote Host (internet Sounds Only). '/
    Fmod_openstate_buffering       /' Buffering Data. '/
    Fmod_openstate_seeking         /' Seeking To Subsound And Re-flushing Stream Buffer. '/
    Fmod_openstate_playing         /' Ready And Playing, But Not Possible To Release At This Time Without Stalling The Main Thread. '/
    Fmod_openstate_setposition     /' Seeking Within A Stream To A Different Position. '/

    Fmod_openstate_max             /' Maximum Number Of Open State Types. '/
    Fmod_openstate_forceint = 65536 /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    These Flags Are Used With FMOD_SoundGroup_SetMaxAudibleBehavior To  Determine What Happens When More Sounds 
    Are Played Than Are Specified With FMOD_SoundGroup_SetMaxAudible.

    [remarks]
    When Using Fmod_soundgroup_behavior_mute, FMOD_SoundGroup_SetMuteFadeSpeed Can Be Used To Stop A Sudden Transition.  
    Instead, The Time Specified Will Be Used To Cross Fade Between The Sounds That Go Silent And The Ones That Become Audible.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_SoundGroup_SetMaxAudibleBehavior
    FMOD_SoundGroup_GetMaxAudibleBehavior
    FMOD_SoundGroup_SetMaxAudible
    FMOD_SoundGroup_GetMaxAudible
    FMOD_SoundGroup_SetMuteFadeSpeed
    FMOD_SoundGroup_GetMuteFadeSpeed
]
'/
Enum Fmod_soundgroup_behavior
    Fmod_soundgroup_behavior_fail              /' Any Sound Played That Puts The Sound Count Over The FMOD_SoundGroup_SetMaxAudible Setting, Will Simply Fail During FMOD_System_PlaySound. '/
    Fmod_soundgroup_behavior_mute              /' Any Sound Played That Puts The Sound Count Over The FMOD_SoundGroup_SetMaxAudible Setting, Will Be Silent, Then If Another Sound In The Group Stops The Sound That Was Silent Before Becomes Audible Again. '/
    Fmod_soundgroup_behavior_steallowest       /' Any Sound Played That Puts The Sound Count Over The FMOD_SoundGroup_SetMaxAudible Setting, Will Steal The Quietest / Least Important Sound Playing In The Group. '/

    Fmod_soundgroup_behavior_max               /' Maximum Number Of Open State Types. '/
    Fmod_soundgroup_behavior_forceint = 65536   /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    These Callback Types Are Used With FMOD_Channel_SetCallback.

    [remarks]
    Each Callback Has Commanddata Parameters Passed As Int Unique To The Type Of Callback.
    See Reference To Fmod_channel_callback To Determine What They Might Mean For Each Type Of Callback.
    
    <b>note!</b>  Currently The User Must Call FMOD_System_Update For These Callbacks To Trigger!

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Channel_SetCallback
    Fmod_channel_callback
    FMOD_System_Update
]
'/
Enum Fmod_channel_callbacktype
    Fmod_channel_callbacktype_end                  /' Called When A Sound Ends. '/
    Fmod_channel_callbacktype_virtualvoice         /' Called When A Voice Is Swapped Out Or Swapped In. '/
    Fmod_channel_callbacktype_syncpoint            /' Called When A Syncpoint Is Encountered.  Can Be From Wav File Markers. '/
    Fmod_channel_callbacktype_occlusion            /' Called When The Channel Has Its Geometry Occlusion Value Calculated.  Can Be Used To Clamp Or Change The Value. '/

    Fmod_channel_callbacktype_max                  /' Maximum Number Of Callback Types Supported. '/
    Fmod_channel_callbacktype_forceint = 65536      /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    These Callback Types Are Used With FMOD_System_SetCallback.

    [remarks]
    Each Callback Has Commanddata Parameters Passed As Void* Unique To The Type Of Callback.
    See Reference To Fmod_system_callback To Determine What They Might Mean For Each Type Of Callback.
    
    <b>note!</b> Using Fmod_system_callbacktype_devicelistchanged (on Mac Only) Requires The Application To Be Running An Event Loop Which Will Allow External Changes To Device List To Be Detected By Fmod.
    
    <b>note!</b> The 'system' Object Pointer Will Be Null For Fmod_system_callbacktype_threadcreated And Fmod_system_callbacktype_memoryallocationfailed Callbacks.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_System_SetCallback
    Fmod_system_callback
    FMOD_System_Update
    FMOD_DSP_AddInput
]
'/
Enum Fmod_system_callbacktype
    Fmod_system_callbacktype_devicelistchanged         /' Called From FMOD_System_Update When The Enumerated List Of Devices Has Changed. '/
    Fmod_system_callbacktype_devicelost                /' Called From FMOD_System_Update When An Output Device Has Been Lost Due To Control Panel Parameter Changes And Fmod Cannot Automatically Recover. '/
    Fmod_system_callbacktype_memoryallocationfailed    /' Called Directly When A Memory Allocation Fails Somewhere In Fmod.  (note - 'system' Will Be Null In This Callback Type.)'/
    Fmod_system_callbacktype_threadcreated             /' Called Directly When A Thread Is Created. (note - 'system' Will Be Null In This Callback Type.) '/
    Fmod_system_callbacktype_baddspconnection          /' Called When A Bad Connection Was Made With FMOD_DSP_AddInput. Usually Called From Mixer Thread Because That Is Where The Connections Are Made.  '/
    Fmod_system_callbacktype_baddsplevel               /' Called When Too Many Effects Were Added Exceeding The Maximum Tree Depth Of 128.  This Is Most Likely Caused By Accidentally Adding Too Many Dsp Effects. Usually Called From Mixer Thread Because That Is Where The Connections Are Made.  '/

    Fmod_system_callbacktype_max                       /' Maximum Number Of Callback Types Supported. '/
    Fmod_system_callbacktype_forceint = 65536           /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/' 
    Fmod Callbacks
'/
Type Fmod_system_callback As Function      (byval System As Fmod_system Ptr, Byval Type_ As Fmod_system_callbacktype, _
Byval Commanddata1 As Any Ptr, Byval Commanddata2 As Any Ptr) As Fmod_result

Type Fmod_channel_callback As Function      (byval Channel As Fmod_channel Ptr, Byval Type_ As Fmod_channel_callbacktype, _
Byval Commanddata1 As Any Ptr, Byval Commanddata2 As Any Ptr) As Fmod_result

Type Fmod_sound_nonblockcallback As Function(byval Sound As Fmod_sound Ptr, Byval Result As Fmod_result) As Fmod_result
Type Fmod_sound_pcmreadcallback As Function(byval Sound As Fmod_sound Ptr, Byval Data_ As Any Ptr, _
Byval Datalen As Uinteger) As Fmod_result
Type Fmod_sound_pcmsetposcallback As Function(byval Sound As Fmod_sound Ptr, Byval Subsound As Integer, Byval Position As Uinteger, _
Byval Postype As Fmod_timeunit) As Fmod_result

Type Fmod_file_opencallback As Function     (byval fName As Zstring Ptr, Byval Unicode As Integer, Byval Filesize As Uinteger Ptr, _
Byval Handle As Any Ptr Ptr, Byval Userdata As Any Ptr Ptr) As Fmod_result
Type Fmod_file_closecallback As Function    (byval Handle As Any Ptr, Byval Userdata As Any Ptr) As Fmod_result
Type Fmod_file_readcallback As Function     (byval Handle As Any Ptr, Byval Buffer As Any Ptr, Byval Sizebytes As Uinteger, _
Byval Bytesread As Uinteger Ptr, Byval Userdata As Any Ptr) As Fmod_result
Type Fmod_file_seekcallback As Function     (byval Handle As Any Ptr, Byval Pos As Uinteger, Byval Userdata As Any Ptr) As Fmod_result
Type Fmod_file_asyncreadcallback As Function(byval Info As Fmod_asyncreadinfo Ptr, Byval Userdata As Any Ptr) As Fmod_result
Type Fmod_file_asynccancelcallback As Function(byval Handle As Any Ptr, Byval Userdata As Any Ptr) As Fmod_result

Type Fmod_memory_alloccallback As Function(byval Size As Uinteger, Byval Type_ As Fmod_memory_type, _
Byval Sourcestr As Zstring Ptr) As Any Ptr
Type Fmod_memory_realloccallback As Function(byval Ptr_ As Any Ptr, Byval Size As Uinteger, Byval Type_ As Fmod_memory_type, _
Byval Sourcestr As Zstring Ptr) As Any Ptr
Type Fmod_memory_freecallback As Sub(byval Ptr_ As Any Ptr, Byval Type_ As Fmod_memory_type, Byval Sourcestr As Zstring Ptr)

Type Fmod_3d_rolloffcallback As Function   (byval Channel As Fmod_channel Ptr, Byval Distance As Float) As Float


/'
[enum]
[
    [description]   
    List Of Windowing Methods Used In Spectrum Analysis To Reduce Leakage / Transient Signals Intefering With The Analysis.
    This Is A Problem With Analysis Of Continuous Signals That Only Have A Small Portion Of The Signal Sample (the Fft Window Size).
    Windowing The Signal With A Curve Or Triangle Tapers The Sides Of The Fft Window To Help Alleviate This Problem.

    [remarks]
    Cyclic Signals Such As A Sine Wave That Repeat Their Cycle In A Multiple Of The Window Size Do Not Need Windowing.
    I.e. If The Sine Wave Repeats Every 1024, 512, 256 Etc Samples And The Fmod Fft Window Is 1024, Then The Signal Would Not Need Windowing.
    Not Windowing Is The Same As Fmod_dsp_fft_window_rect, Which Is The Default.
    If The Cycle Of The Signal (ie The Sine Wave) Is Not A Multiple Of The Window Size, It Will Cause Frequency Abnormalities, So A Different Windowing Method Is Needed.
    
    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_System_GetSpectrum
    FMOD_Channel_GetSpectrum
]
'/
Enum Fmod_dsp_fft_window
    Fmod_dsp_fft_window_rect            /' W[n] = 1.0                                                                                            '/
    Fmod_dsp_fft_window_triangle        /' W[n] = Tri(2n/n)                                                                                      '/
    Fmod_dsp_fft_window_hamming         /' W[n] = 0.54 - (0.46 * Cos(n/n) )                                                                      '/
    Fmod_dsp_fft_window_hanning         /' W[n] = 0.5 *  (1.0  - Cos(n/n) )                                                                      '/
    Fmod_dsp_fft_window_blackman        /' W[n] = 0.42 - (0.5  * Cos(n/n) ) + (0.08 * Cos(2.0 * N/n) )                                           '/
    Fmod_dsp_fft_window_blackmanharris  /' W[n] = 0.35875 - (0.48829 * Cos(1.0 * N/n)) + (0.14128 * Cos(2.0 * N/n)) - (0.01168 * Cos(3.0 * N/n)) '/
    
    Fmod_dsp_fft_window_max             /' Maximum Number Of Fft Window Types Supported. '/
    Fmod_dsp_fft_window_forceint = 65536 /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    List Of Interpolation Types That The Fmod Ex Software Mixer Supports.  

    [remarks]
    The Default Resampler Type Is Fmod_dsp_resampler_linear.
    Use FMOD_System_SetSoftwareFormat To Tell Fmod The Resampling Quality You Require For Fmod_software Based Sounds.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_System_SetSoftwareFormat
    FMOD_System_GetSoftwareFormat
]
'/
Enum Fmod_dsp_resampler
    Fmod_dsp_resampler_nointerp        /' No Interpolation.  High Frequency Aliasing Hiss Will Be Audible Depending On The Sample Rate Of The Sound. '/
    Fmod_dsp_resampler_linear          /' Linear Interpolation (default Method).  Fast And Good Quality, Causes Very Slight Lowpass Effect On Low Frequency Sounds. '/
    Fmod_dsp_resampler_cubic           /' Cubic Interpolation.  Slower Than Linear Interpolation But Better Quality. '/
    Fmod_dsp_resampler_spline          /' 5 Point Spline Interpolation.  Slowest Resampling Method But Best Quality. '/

    Fmod_dsp_resampler_max             /' Maximum Number Of Resample Methods Supported. '/
    Fmod_dsp_resampler_forceint = 65536 /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    List Of Tag Types That Could Be Stored Within A Sound.  These Include Id3 Tags, Metadata From Netstreams And Vorbis/asf Data.

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Sound_GetTag
]
'/
Enum Fmod_tagtype
    Fmod_tagtype_unknown = 0
    Fmod_tagtype_id3v1
    Fmod_tagtype_id3v2
    Fmod_tagtype_vorbiscomment
    Fmod_tagtype_shoutcast
    Fmod_tagtype_icecast
    Fmod_tagtype_asf
    Fmod_tagtype_midi
    Fmod_tagtype_playlist
    Fmod_tagtype_fmod
    Fmod_tagtype_user

    Fmod_tagtype_max               /' Maximum Number Of Tag Types Supported. '/
    Fmod_tagtype_forceint = 65536   /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    List Of Data Types That Can Be Returned By FMOD_Sound_GetTag

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Sound_GetTag
]
'/
Enum Fmod_tagdatatype
    Fmod_tagdatatype_binary = 0
    Fmod_tagdatatype_int
    Fmod_tagdatatype_float
    Fmod_tagdatatype_string
    Fmod_tagdatatype_string_utf16
    Fmod_tagdatatype_string_utf16be
    Fmod_tagdatatype_string_utf8
    Fmod_tagdatatype_cdtoc

    Fmod_tagdatatype_max               /' Maximum Number Of Tag Datatypes Supported. '/
    Fmod_tagdatatype_forceint = 65536   /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


/'
[enum]
[
    [description]   
    Types Of Delay That Can Be Used With FMOD_Channel_SetDelay / FMOD_Channel_GetDelay.

    [remarks]
    If You Haven't Called FMOD_Channel_SetDelay Yet, If You Call FMOD_Channel_GetDelay With Fmod_delaytype_dspclock_start It Will Return The 
    Equivalent Global Dsp Clock Value To Determine When A Channel Started, So That You Can Use It For Other Channels To Sync Against.
    
    Use FMOD_System_GetDSPClock To Also Get The Current Dspclock Time, A Base For Future Calls To FMOD_Channel_SetDelay.
    
    Use Fmod_64bit_add Or Fmod_64bit_sub To Add A Hi/lo Combination Together And Cope With Wraparound.
    
    If Fmod_delaytype_end_ms Is Specified, The Value Is Not Treated As A 64 Bit Number, Just The Delayhi Value Is Used And It Is Treated As Milliseconds.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Channel_SetDelay
    FMOD_Channel_GetDelay
    FMOD_System_GetDSPClock
]
'/
Enum Fmod_delaytype
    Fmod_delaytype_end_ms              /' Delay At The End Of The Sound In Milliseconds.  Use Delayhi Only.   FMOD_Channel_IsPlaying Will Remain True Until This Delay Has Passed Even Though The Sound Itself Has Stopped Playing.'/
    Fmod_delaytype_dspclock_start      /' Time The Sound Started If FMOD_Channel_GetDelay Is Used, Or If FMOD_Channel_SetDelay Is Used, The Sound Will Delay Playing Until This Exact Tick. '/
    Fmod_delaytype_dspclock_end        /' Time The Sound Should End. If This Is Non-zero, The Channel Will Go Silent At This Exact Tick. '/
    Fmod_delaytype_dspclock_pause      /' Time The Sound Should Pause. If This Is Non-zero, The Channel Will Pause At This Exact Tick. '/

    Fmod_delaytype_max                 /' Maximum Number Of Tag Datatypes Supported. '/
    Fmod_delaytype_forceint = 65536     /' Makes Sure This Enum Is Signed 32bit. '/
End Enum


#define FMOD_64BIT_ADD(_hi1, _lo1, _hi2, _lo2) _hi1 += iif((_hi2) + (((_lo1) + (_lo2)) < (_lo1)),1,0) : (_lo1) += (_lo2)
#define Fmod_64bit_sub(_hi1, _lo1, _hi2, _lo2) _hi1 -= iif((_hi2) + (((_lo1) - (_lo2)) > (_lo1)), 1, 0):(_lo1) -= (_lo2)


/'
[structure] 
[
    [description]   
    Structure Describing A Piece Of Tag Data.

    [remarks]
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Sound_GetTag
    Fmod_tagtype
    Fmod_tagdatatype
]
'/
Type Fmod_tag
    As Fmod_tagtype      Type         /' [r] The Type Of This Tag. '/
    As Fmod_tagdatatype  Datatype     /' [r] The Type Of Data That This Tag Contains '/
    As Zstring Ptr            Name         /' [r] The Name Of This Tag I.e. "title", "artist" Etc. '/
    As Any Ptr             Data         /' [r] Pointer To The Tag Data - Its Format Is Determined By The Datatype Member '/
    As Uinteger      Datalen      /' [r] Length Of The Data Contained In This Tag '/
    As Fmod_bool         Updated      /' [r] True If This Tag Has Been Updated Since Last Being Accessed With FMOD_Sound_GetTag '/
End Type


/'
[structure] 
[
    [description]   
    Structure Describing A Cd/dvd Table Of Contents

    [remarks]
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Sound_GetTag
]
'/
Type Fmod_cdtoc
    As Integer Numtracks                  /' [r] The Number Of Tracks On The Cd '/
    As Integer Min_(100-1)                  /' [r] The Start Offset Of Each Track In Minutes '/
    As Integer Sec(100-1)                   /' [r] The Start Offset Of Each Track In Seconds '/
    As Integer Frame(100-1)                 /' [r] The Start Offset Of Each Track In Frames '/
End Type


/'
[define]
[
    [name]
    Fmod_timeunit

    [description]   
    List Of Time Types That Can Be Returned By FMOD_Sound_GetLength And Used With FMOD_Channel_SetPosition Or FMOD_Channel_GetPosition.

    [remarks]
    Fmod_timeunit_sentence_ms, Fmod_timeunit_sentence_pcm, Fmod_timeunit_sentence_pcmbytes, Fmod_timeunit_sentence And Fmod_timeunit_sentence_subsound Are Only Supported By Channel Functions.
    Do Not Combine Flags Except Fmod_timeunit_buffered.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]      
    FMOD_Sound_GetLength
    FMOD_Channel_SetPosition
    FMOD_Channel_GetPosition
]
'/
#define Fmod_timeunit_ms               &h00000001  /' Milliseconds. '/
#define Fmod_timeunit_pcm              &h00000002  /' Pcm Samples, Related To Milliseconds * Samplerate / 1000. '/
#define Fmod_timeunit_pcmbytes         &h00000004  /' Bytes, Related To Pcm Samples * Channels * Datawidth (ie 16bit = 2 Bytes). '/
#define Fmod_timeunit_rawbytes         &h00000008  /' Raw File Bytes Of (compressed) Sound Data (does Not Include Headers).  Only Used By FMOD_Sound_GetLength And FMOD_Channel_GetPosition. '/
#define Fmod_timeunit_pcmfraction      &h00000010  /' Fractions Of 1 Pcm Sample.  As Uinteger Range 0 To&hffffffff.  Used For Sub-sample Granularity For Dsp Purposes. '/
#define Fmod_timeunit_modorder         &h00000100  /' Mod/s3m/xm/it.  Order In A Sequenced Module Format.  Use FMOD_Sound_GetFormat To Determine The Pcm Format Being Decoded To. '/
#define Fmod_timeunit_modrow           &h00000200  /' Mod/s3m/xm/it.  Current Row In A Sequenced Module Format.  FMOD_Sound_GetLength Will Return The Number Of Rows In The Currently Playing Or Seeked To Pattern. '/
#define Fmod_timeunit_modpattern       &h00000400  /' Mod/s3m/xm/it.  Current Pattern In A Sequenced Module Format.  FMOD_Sound_GetLength Will Return The Number Of Patterns In The Song And FMOD_Channel_GetPosition Will Return The Currently Playing Pattern. '/
#define Fmod_timeunit_sentence_ms      &h00010000  /' Currently Playing Subsound In A Sentence Time In Milliseconds. '/
#define Fmod_timeunit_sentence_pcm     &h00020000  /' Currently Playing Subsound In A Sentence Time In Pcm Samples, Related To Milliseconds * Samplerate / 1000. '/
#define Fmod_timeunit_sentence_pcmbytes &h00040000  /' Currently Playing Subsound In A Sentence Time In Bytes, Related To Pcm Samples * Channels * Datawidth (ie 16bit = 2 Bytes). '/
#define Fmod_timeunit_sentence         &h00080000  /' Currently Playing Sentence Index According To The Channel. '/
#define Fmod_timeunit_sentence_subsound &h00100000  /' Currently Playing Subsound Index In A Sentence. '/
#define Fmod_timeunit_buffered         &h10000000  /' Time Value As Seen By Buffered Stream.  This Is Always Ahead Of Audible Time, And Is Only Used For Processing. '/
/' [define_end] '/


/'
[enum]
[
    [description]
    When Creating A Multichannel Sound, Fmod Will Pan Them To Their Default Speaker Locations, For Example A 6 Channel Sound Will Default To One Channel Per 5.1 Output Speaker.
    Another Example Is A Stereo Sound.  It Will Default To Left = Front Left, Right = Front Right.
    
    This Is For Sounds That Are Not 'default'.  For Example You Might Have A Sound That Is 6 Channels But Actually Made Up Of 3 Stereo Pairs, That Should All Be Located In Front Left, Front Right Only.

    [remarks]
    For Full Flexibility Of Speaker Assignments, Use FMOD_Channel_SetSpeakerLevels.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Fmod_createsoundexinfo
    FMOD_Channel_SetSpeakerLevels
]
'/
Enum Fmod_speakermaptype
    Fmod_speakermaptype_default     /' This Is The Default, And Just Means Fmod Decides Which Speakers It Puts The Source Channels. '/
    Fmod_speakermaptype_allmono     /' This Means The Sound Is Made Up Of All Mono Sounds.  All Voices Will Be Panned To The Front Center By Default In This Case.  '/
    Fmod_speakermaptype_allstereo   /' This Means The Sound Is Made Up Of All Stereo Sounds.  All Voices Will Be Panned To Front Left And Front Right Alternating Every Second Channel.  '/
    Fmod_speakermaptype_51_protools  /' Map A 5.1 Sound To Use Protools L C R Ls Rs Lfe Mapping.  Will Return An Error If Not A 6 Channel Sound. '/
End Enum


/'
[structure] 
[
    [description]
    Use This Structure With FMOD_System_CreateSound When More Control Is Needed Over Loading.
    The Possible Reasons To Use This With FMOD_System_CreateSound Are:
    - Loading A File From Memory.
    - Loading A File From Within Another Larger (possibly Wad/pak) File, By Giving The Loader An Offset And Length.
    - To Create A User Created / Non File Based Sound.
    - To Specify A Starting Subsound To Seek To Within A Multi-sample Sounds (ie Fsb/dls/sf2) When Created As A Stream.
    - To Specify Which Subsounds To Load For Multi-sample Sounds (ie Fsb/dls/sf2) So That Memory Is Saved And Only A Subset Is Actually Loaded/read From Disk.
    - To Specify 'piggyback' Read And Seek Callbacks For Capture Of Sound Data As Fmod Reads And Decodes It.  Useful For Ripping Decoded Pcm Data From Sounds As They Are Loaded / Played.
    - To Specify A Midi Dls/sf2 Sample Set File To Load When Opening A Midi File.
    See Below On What Members To Fill For Each Of The Above Types Of Sound You Want To Create.

    [remarks]
    This Structure Is Optional!  Specify 0 Or Null In FMOD_System_CreateSound If You Don't Need It!
    
    <u>loading A File From Memory.</u>
    - Create The Sound Using The Fmod_openmemory Flag.
    - Mandatory.  Specify 'length' For The Size Of The Memory Block In Bytes.
    - Other Flags Are Optional.
    
    
    <u>loading A File From Within Another Larger (possibly Wad/pak) File, By Giving The Loader An Offset And Length.</u>
    - Mandatory.  Specify 'fileoffset' And 'length'.
    - Other Flags Are Optional.
    
    
    <u>to Create A User Created / Non File Based Sound.</u>
    - Create The Sound Using The Fmod_openuser Flag.
    - Mandatory.  Specify 'defaultfrequency, 'numchannels' And 'format'.
    - Other Flags Are Optional.
    
    
    <u>to Specify A Starting Subsound To Seek To And Flush With, Within A Multi-sample Stream (ie Fsb/dls/sf2).</u>
    
    - Mandatory.  Specify 'initialsubsound'.
    
    
    <u>to Specify Which Subsounds To Load For Multi-sample Sounds (ie Fsb/dls/sf2) So That Memory Is Saved And Only A Subset Is Actually Loaded/read From Disk.</u>
    
    - Mandatory.  Specify 'inclusionlist' And 'inclusionlistnum'.
    
    
    <u>to Specify 'piggyback' Read And Seek Callbacks For Capture Of Sound Data As Fmod Reads And Decodes It.  Useful For Ripping Decoded Pcm Data From Sounds As They Are Loaded / Played.</u>
    
    - Mandatory.  Specify 'pcmreadcallback' And 'pcmseekcallback'.
    
    
    <u>to Specify A Midi Dls/sf2 Sample Set File To Load When Opening A Midi File.</u>
    
    - Mandatory.  Specify 'dlsname'.
    
    
    Setting The 'decodebuffersize' Is For Cpu Intensive Codecs That May Be Causing Stuttering, Not File Intensive Codecs (ie Those From Cd Or Netstreams) Which Are Normally 
    Altered With FMOD_System_SetStreamBufferSize.  As An Example Of Cpu Intensive Codecs, An Mp3 File Will Take More Cpu To Decode Than A Pcm Wav File.
    If You Have A Stuttering Effect, Then It Is Using More Cpu Than The Decode Buffer Playback Rate Can Keep Up With.  Increasing The Decode Buffersize Will Most Likely Solve This Problem.
    
    
    Fsb Codec.  If Inclusionlist And Numsubsounds Are Used Together, This Will Trigger A Special Mode Where Subsounds Are Shuffled Down To Save Memory.  (useful For Large Fsb 
    Files Where You Only Want To Load 1 Sound).  There Will Be No Gaps, Ie No Null Subsounds.  As An Example, If There Are 10,000 Subsounds And There Is An Inclusionlist With Only 1 Entry, 
    And Numsubsounds = 1, Then Subsound 0 Will Be That Entry, And There Will Only Be The Memory Allocated For 1 Subsound.  Previously There Would Still Be 10,000 Subsound Pointers And Other
    Associated Codec Entries Allocated Along With It Multiplied By 10,000.
    
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_CreateSound
    FMOD_System_SetStreamBufferSize
    Fmod_mode
    Fmod_sound_format
    Fmod_sound_type
    Fmod_speakermaptype
]
'/
Type Fmod_createsoundexinfo
    As Integer                            Cbsize             /' [w] Size Of This Structure.  This Is Used So The Structure Can Be Expanded In The Future And Still Work On Older Versions Of Fmod Ex. '/
    As Uinteger                   Length             /' [w] Optional. Specify 0 To Ignore. Size In Bytes Of File To Load, Or Sound To Create (in This Case Only If Fmod_openuser Is Used).  Required If Loading From Memory.  If 0 Is Specified, Then It Will Use The Size Of The File (unless Loading From Memory Then An Error Will Be Returned). '/
    As Uinteger                   Fileoffset         /' [w] Optional. Specify 0 To Ignore. Offset From Start Of The File To Start Loading From.  This Is Useful For Loading Files From Inside Big Data Files. '/
    As Integer                            Numchannels        /' [w] Optional. Specify 0 To Ignore. Number Of Channels In A Sound Mandatory If Fmod_openuser Or Fmod_openraw Is Used. '/
    As Integer                            Defaultfrequency   /' [w] Optional. Specify 0 To Ignore. Default Frequency Of Sound In A Sound Mandatory If Fmod_openuser Or Fmod_openraw Is Used.  Other Formats Use The Frequency Determined By The File Format. '/
    As Fmod_sound_format              Format             /' [w] Optional. Specify 0 Or Fmod_sound_format_none To Ignore. Format Of The Sound Mandatory If Fmod_openuser Or Fmod_openraw Is Used.  Other Formats Use The Format Determined By The File Format.   '/
    As Uinteger                   Decodebuffersize   /' [w] Optional. Specify 0 To Ignore. For Streams.  This Determines The Size Of The Double Buffer (in Pcm Samples) That A Stream Uses.  Use This For User Created Streams If You Want To Determine The Size Of The Callback Buffer Passed To You.  Specify 0 To Use Fmod's Default Size Which Is Currently Equivalent To 400ms Of The Sound Format Created/loaded. '/
    As Integer                            Initialsubsound    /' [w] Optional. Specify 0 To Ignore. In A Multi-sample File Format Such As .fsb/.dls/.sf2, Specify The Initial Subsound To Seek To, Only If Fmod_createstream Is Used. '/
    As Integer                            Numsubsounds       /' [w] Optional. Specify 0 To Ignore Or Have No Subsounds.  In A Sound Created With Fmod_openuser, Specify The Number Of Subsounds That Are Accessable With FMOD_Sound_GetSubSound.  If Not Created With Fmod_openuser, This Will Limit The Number Of Subsounds Loaded Within A Multi-subsound File.  If Using Fsb, Then If Fmod_createsoundexinfo.inclusionlist Is Used, This Will Shuffle Subsounds Down So That There Are Not Any Gaps.  It Will Mean That The Indices Of The Sounds Will Be Different. '/
    As Integer Ptr                           Inclusionlist      /' [w] Optional. Specify 0 To Ignore. In A Multi-sample Format Such As .fsb/.dls/.sf2 It May Be Desirable To Specify Only A Subset Of Sounds To Be Loaded Out Of The Whole File.  This Is An Array Of Subsound Indices To Load Into Memory When Created. '/
    As Integer                            Inclusionlistnum   /' [w] Optional. Specify 0 To Ignore. This Is The Number Of Integers Contained Within The Inclusionlist Array. '/
    As Fmod_sound_pcmreadcallback     Pcmreadcallback    /' [w] Optional. Specify 0 To Ignore. Callback To 'piggyback' On Fmod's Read Functions And Accept Or Even Write Pcm Data While Fmod Is Opening The Sound.  Used For User Sounds Created With Fmod_openuser Or For Capturing Decoded Data As Fmod Reads It. '/
    As Fmod_sound_pcmsetposcallback   Pcmsetposcallback  /' [w] Optional. Specify 0 To Ignore. Callback For When The User Calls A Seeking Function Such As Channel::settime Or FMOD_Channel_SetPosition Within A Multi-sample Sound, And For When It Is Opened.'/
    As Fmod_sound_nonblockcallback    Nonblockcallback   /' [w] Optional. Specify 0 To Ignore. Callback For Successful Completion, Or Error While Loading A Sound That Used The Fmod_nonblocking Flag.'/
    As Const Zstring Ptr                    Dlsname            /' [w] Optional. Specify 0 To Ignore. Filename For A Dls Or Sf2 Sample Set When Loading A Midi File. If Not Specified, On Windows It Will Attempt To Open /windows/system32/drivers/gm.dls Or /windows/system32/drivers/etc/gm.dls, On Mac It Will Attempt To Load /system/library/components/coreaudio.component/contents/resources/gs_instruments.dls, Otherwise The Midi Will Fail To Open. Current Dls Support Is For Level 1 Of The Specification. '/
    As Const Zstring Ptr                    Encryptionkey      /' [w] Optional. Specify 0 To Ignore. Key For Encrypted Fsb File.  Without This Key An Encrypted Fsb File Will Not Load. '/
    As Integer                            Maxpolyphony       /' [w] Optional. Specify 0 To Ignore. For Sequenced Formats With Dynamic Channel Allocation Such As .mid And .it, This Specifies The Maximum Voice Count Allowed While Playing.  .it Defaults To 64.  .mid Defaults To 32. '/
    As Any Ptr                          Userdata           /' [w] Optional. Specify 0 To Ignore. This Is User Data To Be Attached To The Sound During Creation.  Access Via FMOD_Sound_GetUserData.  Note: This Is Not Passed To Fmod_file_opencallback, That Is A Different Userdata That Is File Specific. '/
    As Fmod_sound_type                Suggestedsoundtype /' [w] Optional. Specify 0 Or Fmod_sound_type_unknown To Ignore.  Instead Of Scanning All Codec Types, Use This To Speed Up Loading By Making It Jump Straight To This Codec. '/
    As Fmod_file_opencallback         Useropen           /' [w] Optional. Specify 0 To Ignore. Callback For Opening This File. '/
    As Fmod_file_closecallback        Userclose          /' [w] Optional. Specify 0 To Ignore. Callback For Closing This File. '/
    As Fmod_file_readcallback         Userread           /' [w] Optional. Specify 0 To Ignore. Callback For Reading From This File. '/
    As Fmod_file_seekcallback         Userseek           /' [w] Optional. Specify 0 To Ignore. Callback For Seeking Within This File. '/
    As Fmod_file_asyncreadcallback    Userasyncread      /' [w] Optional. Specify 0 To Ignore. Callback For Seeking Within This File. '/
    As Fmod_file_asynccancelcallback  Userasynccancel    /' [w] Optional. Specify 0 To Ignore. Callback For Seeking Within This File. '/
    As Fmod_speakermaptype            Speakermap         /' [w] Optional. Specify 0 To Ignore. Use This To Differ The Way Fmod Maps Multichannel Sounds To Speakers.  See Fmod_speakermaptype For More. '/
    As Fmod_soundgroup Ptr               Initialsoundgroup  /' [w] Optional. Specify 0 To Ignore. Specify A Sound Group If Required, To Put Sound In As It Is Created. '/
    As Uinteger                   Initialseekposition/' [w] Optional. Specify 0 To Ignore. For Streams. Specify An Initial Position To Seek The Stream To. '/
    As Fmod_timeunit                  Initialseekpostype /' [w] Optional. Specify 0 To Ignore. For Streams. Specify The Time Unit For The Position Set In Initialseekposition. '/
    As Integer                            Ignoresetfilesystem/' [w] Optional. Specify 0 To Ignore. Set To 1 To Use Fmod's Built In File System. Ignores Setfilesystem Callbacks And Also Fmod_createsounexinfo File Callbacks.  Useful For Specific Cases Where You Don't Want To Use Your Own File System But Want To Use Fmod's File System (ie Net Streaming). '/
    As Integer                            Cddaforceaspi      /' [w] Optional. Specify 0 To Ignore. For Cdda Sounds Only - If Non-zero Use Aspi Instead Of Ntscsi To Access The Specified Cd/dvd Device. '/
    As Uinteger                   Audioqueuepolicy   /' [w] Optional. Specify 0 Or Fmod_audioqueue_codecpolicy_default To Ignore. Policy Used To Determine Whether Hardware Or Software Is Used For Decoding, See Fmod_audioqueue_codecpolicy For Options (ios >= 3.0 Required, Otherwise Only Hardware Is Available) '/ 
    As Uinteger                   Minmidigranularity /' [w] Optional. Specify 0 To Ignore. Allows You To Set A Minimum Desired Midi Mixer Granularity. Values Smaller Than 512 Give Greater Than Default Accuracy At The Cost Of More Cpu And Vice Versa. Specify 0 For Default (512 Samples). '/
    As Integer                            Nonblockthreadid   /' [w] Optional. Specify 0 To Ignore. Specifies A Thread Index To Execute Non Blocking Load On.  Allows For Up To 5 Threads To Be Used For Loading At Once.  This Is To Avoid One Load Blocking Another.  Maximum Value = 4. '/
End Type


/'
[structure] 
[
    [description]
    Structure Defining A Reverb Environment.

    [remarks]
    Note The Default Reverb Properties Are The Same As The Fmod_preset_generic Preset.
    Note That Integer Values That Typically Range From -10,000 To 1000 Are Represented In 
    Decibels, And Are Of A Logarithmic Scale, Not Linear, Wheras Float Values Are Always Linear.
    
    The Numerical Values Listed Below Are The Maximum, Minimum And Default Values For Each Variable Respectively.
    
    <b>supported</b> Next To Each Parameter Means The Platform The Parameter Can Be Set On.  Some Platforms Support All Parameters And Some Don't.
    Wii   Means Nintendo Wii Hardware Reverb (must Use Fmod_hardware).
    Psp   Means Playstation Portable Hardware Reverb (must Use Fmod_hardware).
    Sfx   Means Fmod Sfx Software Reverb.  This Works On Any Platform That Uses Fmod_software For Loading Sounds.
    ---   Means Unsupported/deprecated.  Will Either Be Removed Or Supported By Sfx In The Future.
    
    Nintendo Wii Notes:
    This Structure Supports Only Limited Parameters, And Maps Them To The Wii Hardware Reverb As Follows.
    Decaytime = 'time'
    Reverbdelay = 'predelay'
    Modulationdepth = 'damping'
    Reflections = 'coloration'
    Envdiffusion = 'crosstalk'
    Room = 'mix'
    
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.
    Members Marked With [r/w] Are Either Read Or Write Depending On If You Are Using FMOD_System_SetReverbProperties (w) Or FMOD_System_GetReverbProperties (r).

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_SetReverbProperties
    FMOD_System_GetReverbProperties
    Fmod_reverb_presets
    Fmod_reverb_flags
]
'/
Type Fmod_reverb_properties
                                   /'       Min    Max     Default Description '/
    As Integer          Instance          /' [w]   0      3       0       Environment Instance.                                                 (supported:sfx(4 Instances) And Wii (3 Instances)) '/
    As Integer          Environment       /' [r/w] -1     25      -1      Sets All Listener Properties.  -1 = Off.                              (supported:sfx(-1 Only)/psp) '/
    As Float        Envdiffusion      /' [r/w] 0.0    1.0     1.0     Environment Diffusion                                                 (supported:wii) '/
    As Integer          Room              /' [r/w] -10000 0       -1000   Room Effect Level (at Mid Frequencies)                                (supported:sfx/wii/psp) '/
    As Integer          Roomhf            /' [r/w] -10000 0       -100    Relative Room Effect Level At High Frequencies                        (supported:sfx) '/
    As Integer          Roomlf            /' [r/w] -10000 0       0       Relative Room Effect Level At Low Frequencies                         (supported:sfx) '/
    As Float        Decaytime         /' [r/w] 0.1    20.0    1.49    Reverberation Decay Time At Mid Frequencies                           (supported:sfx/wii) '/
    As Float        Decayhfratio      /' [r/w] 0.1    2.0     0.83    High-frequency To Mid-frequency Decay Time Ratio                      (supported:sfx) '/
    As Float        Decaylfratio      /' [r/w] 0.1    2.0     1.0     Low-frequency To Mid-frequency Decay Time Ratio                       (supported:---) '/
    As Integer          Reflections       /' [r/w] -10000 1000    -2602   Early Reflections Level Relative To Room Effect                       (supported:sfx/wii) '/
    As Float        Reflectionsdelay  /' [r/w] 0.0    0.3     0.007   Initial Reflection Delay Time                                         (supported:sfx) '/
    As Integer          Reverb            /' [r/w] -10000 2000    200     Late Reverberation Level Relative To Room Effect                      (supported:sfx) '/
    As Float        Reverbdelay       /' [r/w] 0.0    0.1     0.011   Late Reverberation Delay Time Relative To Initial Reflection          (supported:sfx/wii) '/
    As Float        Modulationtime    /' [r/w] 0.04   4.0     0.25    Modulation Time                                                       (supported:---) '/
    As Float        Modulationdepth   /' [r/w] 0.0    1.0     0.0     Modulation Depth                                                      (supported:wii) '/
    As Float        Hfreference       /' [r/w] 20.0   20000.0 5000.0  Reference High Frequency (hz)                                         (supported:sfx) '/
    As Float        Lfreference       /' [r/w] 20.0   1000.0  250.0   Reference Low Frequency (hz)                                          (supported:sfx) '/
    As Float        Diffusion         /' [r/w] 0.0    100.0   100.0   Value That Controls The Echo Density In The Late Reverberation Decay. (supported:sfx) '/
    As Float        Density           /' [r/w] 0.0    100.0   100.0   Value That Controls The Modal Density In The Late Reverberation Decay (supported:sfx) '/
    As Uinteger Flags             /' [r/w] Fmod_reverb_flags - Modifies The Behavior Of Above Properties                                (supported:wii) '/
End Type


/'
[define] 
[
    [name] 
    Fmod_reverb_flags

    [description]
    Values For The Flags Member Of The Fmod_reverb_properties Structure.

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Fmod_reverb_properties
]
'/
#define Fmod_reverb_flags_highqualityreverb    &h00000400 /' Wii. Use High Quality Reverb '/
#define Fmod_reverb_flags_highqualitydpl2reverb&h00000800 /' Wii. Use High Quality Dpl2 Reverb '/
#define Fmod_reverb_flags_hardwareonly         &h00001000 /' Don't Create An Sfx Reverb For Fmod_software Channels, Hardware Reverb Only '/
#define Fmod_reverb_flags_default              &h00000000
/' [define_end] '/


/'
[define] 
[
    [name] 
    Fmod_reverb_presets

    [description]   
    A Set Of Predefined Environment Parameters.
    These Are Used To Initialize An Fmod_reverb_properties Structure Statically.
    I.e.
    Fmod_reverb_properties Prop = Fmod_preset_generic;

    [remarks]

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_SetReverbProperties
]
'/
/'                                    Inst Env  Diffus  Room   Roomhf  Rmlf Dectm   Dechf  Declf   Refl  Refdel   Revb  Revdel  Modtm  Moddp   Hfref    Lfref   Diffus  Densty  Flags '/
#define Fmod_preset_off              Type(  0, -1,  1.00f, -10000, -10000, 0,   1.00f,  1.00f, 1.0f,  -2602, 0.007f,   200, 0.011f, 0.25f, 0.000f, 5000.0f, 250.0f,   0.0f,   0.0f,&h33f )
#define Fmod_preset_generic          Type(  0,  0,  1.00f, -1000,  -100,   0,   1.49f,  0.83f, 1.0f,  -2602, 0.007f,   200, 0.011f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_paddedcell       Type(  0,  1,  1.00f, -1000,  -6000,  0,   0.17f,  0.10f, 1.0f,  -1204, 0.001f,   207, 0.002f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_room             Type(  0,  2,  1.00f, -1000,  -454,   0,   0.40f,  0.83f, 1.0f,  -1646, 0.002f,    53, 0.003f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_bathroom         Type(  0,  3,  1.00f, -1000,  -1200,  0,   1.49f,  0.54f, 1.0f,   -370, 0.007f,  1030, 0.011f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f,  60.0f,&h3f )
#define Fmod_preset_livingroom       Type(  0,  4,  1.00f, -1000,  -6000,  0,   0.50f,  0.10f, 1.0f,  -1376, 0.003f, -1104, 0.004f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_stoneroom        Type(  0,  5,  1.00f, -1000,  -300,   0,   2.31f,  0.64f, 1.0f,   -711, 0.012f,    83, 0.017f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_auditorium       Type(  0,  6,  1.00f, -1000,  -476,   0,   4.32f,  0.59f, 1.0f,   -789, 0.020f,  -289, 0.030f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_concerthall      Type(  0,  7,  1.00f, -1000,  -500,   0,   3.92f,  0.70f, 1.0f,  -1230, 0.020f,    -2, 0.029f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_cave             Type(  0,  8,  1.00f, -1000,  0,      0,   2.91f,  1.30f, 1.0f,   -602, 0.015f,  -302, 0.022f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h1f )
#define Fmod_preset_arena            Type(  0,  9,  1.00f, -1000,  -698,   0,   7.24f,  0.33f, 1.0f,  -1166, 0.020f,    16, 0.030f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_hangar           Type(  0,  10, 1.00f, -1000,  -1000,  0,   10.05f, 0.23f, 1.0f,   -602, 0.020f,   198, 0.030f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_carpettedhallway Type(  0,  11, 1.00f, -1000,  -4000,  0,   0.30f,  0.10f, 1.0f,  -1831, 0.002f, -1630, 0.030f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_hallway          Type(  0,  12, 1.00f, -1000,  -300,   0,   1.49f,  0.59f, 1.0f,  -1219, 0.007f,   441, 0.011f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_stonecorridor    Type(  0,  13, 1.00f, -1000,  -237,   0,   2.70f,  0.79f, 1.0f,  -1214, 0.013f,   395, 0.020f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_alley            Type(  0,  14, 0.30f, -1000,  -270,   0,   1.49f,  0.86f, 1.0f,  -1204, 0.007f,    -4, 0.011f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_forest           Type(  0,  15, 0.30f, -1000,  -3300,  0,   1.49f,  0.54f, 1.0f,  -2560, 0.162f,  -229, 0.088f, 0.25f, 0.000f, 5000.0f, 250.0f,  79.0f, 100.0f,&h3f )
#define Fmod_preset_city             Type(  0,  16, 0.50f, -1000,  -800,   0,   1.49f,  0.67f, 1.0f,  -2273, 0.007f, -1691, 0.011f, 0.25f, 0.000f, 5000.0f, 250.0f,  50.0f, 100.0f,&h3f )
#define Fmod_preset_mountains        Type(  0,  17, 0.27f, -1000,  -2500,  0,   1.49f,  0.21f, 1.0f,  -2780, 0.300f, -1434, 0.100f, 0.25f, 0.000f, 5000.0f, 250.0f,  27.0f, 100.0f,&h1f )
#define Fmod_preset_quarry           Type(  0,  18, 1.00f, -1000,  -1000,  0,   1.49f,  0.83f, 1.0f, -10000, 0.061f,   500, 0.025f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )
#define Fmod_preset_plain            Type(  0,  19, 0.21f, -1000,  -2000,  0,   1.49f,  0.50f, 1.0f,  -2466, 0.179f, -1926, 0.100f, 0.25f, 0.000f, 5000.0f, 250.0f,  21.0f, 100.0f,&h3f )
#define Fmod_preset_parkinglot       Type(  0,  20, 1.00f, -1000,  0,      0,   1.65f,  1.50f, 1.0f,  -1363, 0.008f, -1153, 0.012f, 0.25f, 0.000f, 5000.0f, 250.0f, 100.0f, 100.0f,&h1f )
#define Fmod_preset_sewerpipe        Type(  0,  21, 0.80f, -1000,  -1000,  0,   2.81f,  0.14f, 1.0f,    429, 0.014f,  1023, 0.021f, 0.25f, 0.000f, 5000.0f, 250.0f,  80.0f,  60.0f,&h3f )
#define Fmod_preset_underwater       Type(  0,  22, 1.00f, -1000,  -4000,  0,   1.49f,  0.10f, 1.0f,   -449, 0.007f,  1700, 0.011f, 1.18f, 0.348f, 5000.0f, 250.0f, 100.0f, 100.0f,&h3f )

/' Playstation Portable Only Presets '/
#define Fmod_preset_psp_room         Type(  0,  1,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_studio_a     Type(  0,  2,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_studio_b     Type(  0,  3,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_studio_c     Type(  0,  4,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_hall         Type(  0,  5,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_space        Type(  0,  6,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_echo         Type(  0,  7,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_delay        Type(  0,  8,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
#define Fmod_preset_psp_pipe         Type(  0,  9,  0,     0,      0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f,     0, 0.000f, 0.00f, 0.000f, 0000.0f,   0.0f,  0.0f,    0.0f,&h31f )
/' [define_end] '/


/'
[structure] 
[
    [description]
    Structure Defining The Properties For A Reverb Source, Related To A Fmod Channel.
    
    Note The Default Reverb Properties Are The Same As The Fmod_preset_generic Preset.
    Note That Integer Values That Typically Range From -10,000 To 1000 Are Represented In 
    Decibels, And Are Of A Logarithmic Scale, Not Linear, Wheras Float Values Are Typically Linear.
    Portability: Each Member Has The Platform It Supports In Braces Ie (win32/wii).
    
    The Numerical Values Listed Below Are The Maximum, Minimum And Default Values For Each Variable Respectively.

    [remarks]
    <b>supported</b> Next To Each Parameter Means The Platform The Parameter Can Be Set On.  Some Platforms Support All Parameters And Some Don't.
    Wii   Means Nintendo Wii Hardware Reverb (must Use Fmod_hardware).
    Psp   Means Playstation Portable Hardware Reverb (must Use Fmod_hardware).
    Sfx   Means Fmod Sfx Software Reverb.  This Works On Any Platform That Uses Fmod_software For Loading Sounds.
    ---   Means Unsupported/deprecated.  Will Either Be Removed Or Supported By Sfx In The Future.
    
    
    <b>'connectionpoint' Parameter.</b>  This Parameter Is For The Fmod Software Reverb Only (known As Sfx In The List Above).
    By Default The Dsp Network Connection For A Channel And Its Reverb Is Between The 'sfx Reverb' Unit, And The Channel's Wavetable/resampler/dspcodec/oscillator Unit (the Unit Below The Channel Dsp Head).  Null Can Be Used For This Parameter To Make It Use This Default Behaviour.
    This Parameter Allows The User To Connect The Sfx Reverb To Somewhere Else Internally, For Example The Channel Dsp Head, Or A Related Channelgroup.  The Event System Uses This So That It Can Have The Output Of An Event Going To The Reverb, Instead Of Just The Output Of The Event's Channels (thereby Ignoring Event Effects/submixes Etc).
    Do Not Use If You Are Unaware Of Dsp Network Connection Issues.  Leave It At The Default Of Null Instead.
    
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.
    Members Marked With [r/w] Are Either Read Or Write Depending On If You Are Using FMOD_Channel_SetReverbProperties (w) Or FMOD_Channel_GetReverbProperties (r).

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_Channel_SetReverbProperties
    FMOD_Channel_GetReverbProperties
    Fmod_reverb_channelflags 
]
'/
Type Fmod_reverb_channelproperties
                                      /'       Min    Max  Default  Description '/
    As Integer          Direct               /' [r/w] -10000 1000 0        Direct Path Level                                        (supported:sfx) '/
    As Integer          Room                 /' [r/w] -10000 1000 0        Room Effect Level                                        (supported:sfx) '/
    As Uinteger Flags                /' [r/w] Fmod_reverb_channelflags - Modifies The Behavior Of Properties                (supported:sfx) '/
    As Fmod_dsp Ptr    Connectionpoint      /' [r/w] See Remarks.         Dsp Network Location To Connect Reverb For This Channel. (supported:sfx).'/
End Type


/'
[define] 
[
    [name] 
    Fmod_reverb_channelflags

    [description]
    Values For The Flags Member Of The Fmod_reverb_channelproperties Structure.

    [remarks]
    For Sfx Reverb, There Is Support For Multiple Reverb Environments.
    Use Fmod_reverb_channelflags_environment0 To Fmod_reverb_channelflags_environment3 In The Flags Member 
    Of Fmod_reverb_channelproperties To Specify Which Environment Instance(s) To Target. 
    - If You Do Not Specify Any Instance The First Reverb Instance Will Be Used.
    - If You Specify More Than One Instance With Getreverbproperties, The First Instance Will Be Used.
    - If You Specify More Than One Instance With Setreverbproperties, It Will Set More Than 1 Instance At Once.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    Fmod_reverb_channelproperties
]
'/
#define Fmod_reverb_channelflags_instance0    &h00000010 /' Sfx/wii. Specify Channel To Target Reverb Instance 0.  Default Target. '/
#define Fmod_reverb_channelflags_instance1    &h00000020 /' Sfx/wii. Specify Channel To Target Reverb Instance 1. '/
#define Fmod_reverb_channelflags_instance2    &h00000040 /' Sfx/wii. Specify Channel To Target Reverb Instance 2. '/
#define Fmod_reverb_channelflags_instance3    &h00000080 /' Sfx. Specify Channel To Target Reverb Instance 3. '/

#define Fmod_reverb_channelflags_default       Fmod_reverb_channelflags_instance0
/' [define_end] '/


/'
[structure] 
[
    [description]
    Settings For Advanced Features Like Configuring Memory And Cpu Usage For The Fmod_createcompressedsample Feature.

    [remarks]
    Maxmpegcodecs / Maxadpcmcodecs / Maxxmacodecs Will Determine The Maximum Cpu Usage Of Playing Realtime Samples.  Use This To Lower Potential Excess Cpu Usage And Also Control Memory Usage.
    
    Maxpcmcodecs Is For Use With Ps3 Only. It Will Determine The Maximum Number Of Pcm Voices That Can Be Played At Once. This Includes Streams Of Any Format And All Sounds Created
    *without* The Fmod_createcompressedsample Flag.
    
    Memory Will Be Allocated For Codecs 'up Front' (during FMOD_System_Init) If These Values Are Specified As Non Zero.  If Any Are Zero, It Allocates Memory For The Codec Whenever A File Of The Type In Question Is Loaded.  So If Maxmpegcodecs Is 0 For Example, It Will Allocate Memory For The Mpeg Codecs The First Time An Mp3 Is Loaded Or An Mp3 Based .fsb File Is Loaded.
    
    Due To Inefficient Encoding Techniques On Certain .wav Based Adpcm Files, Fmod Can Can Need An Extra 29720 Bytes Per Codec.  This Means For Lowest Memory Consumption.  Use Fsb As It Uses An Optimal/small Adpcm Block Size.
    
    Members Marked With [r] Mean The Variable Is Modified By Fmod And Is For Reading Purposes Only.  Do Not Change This Value.
    Members Marked With [w] Mean The Variable Can Be Written To.  The User Can Set The Value.
    Members Marked With [r/w] Are Either Read Or Write Depending On If You Are Using FMOD_System_SetAdvancedSettings (w) Or FMOD_System_GetAdvancedSettings (r).

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_SetAdvancedSettings
    FMOD_System_GetAdvancedSettings
    FMOD_System_Init
    Fmod_mode
]
'/
Type Fmod_advancedsettings field = 1
                          As Integer             Cbsize                     /' [w]   Size Of This Structure.  Use Sizeof(fmod_advancedsettings)  Note: This Must Be Set Before Calling FMOD_System_GetAdvancedSettings! '/
    As Integer             Maxmpegcodecs              /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_createcompressedsample Only.  Mpeg  Codecs Consume 21,684 Bytes Per Instance And This Number Will Determine How Many Mpeg Channels Can Be Played Simultaneously.   Default = 32. '/
    As Integer             Maxadpcmcodecs             /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_createcompressedsample Only.  Adpcm Codecs Consume  2,136 Bytes Per Instance And This Number Will Determine How Many Adpcm Channels Can Be Played Simultaneously.  Default = 32. '/
    As Integer             Maxxmacodecs               /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_createcompressedsample Only.  Xma   Codecs Consume 14,836 Bytes Per Instance And This Number Will Determine How Many Xma Channels Can Be Played Simultaneously.    Default = 32. '/
    As Integer             Maxceltcodecs              /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_createcompressedsample Only.  Celt  Codecs Consume 11,500 Bytes Per Instance And This Number Will Determine How Many Celt Channels Can Be Played Simultaneously.   Default = 32. '/    
    As Integer             Maxvorbiscodecs            /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_createcompressedsample Only.  Vorbis Codecs Consume 12,000 Bytes Per Instance And This Number Will Determine How Many Vorbis Channels Can Be Played Simultaneously. Default = 32. '/    
    As Integer             Maxpcmcodecs               /' [r/w] Optional. Specify 0 To Ignore. For Use With Ps3 Only.                          Pcm   Codecs Consume 12,672 Bytes Per Instance And This Number Will Determine How Many Streams And Pcm Voices Can Be Played Simultaneously. Default = 16. '/
    As Integer             Asionumchannels            /' [r/w] Optional. Specify 0 To Ignore. Number Of Channels Available On The Asio Device. '/
    As Zstring Ptr Ptr          Asiochannellist            /' [r/w] Optional. Specify 0 To Ignore. Pointer To An Array Of Strings (number Of Entries Defined By Asionumchannels) With Asio Channel Names. '/
    As Fmod_speaker Ptr   Asiospeakerlist            /' [r/w] Optional. Specify 0 To Ignore. Pointer To A List Of Speakers That The Asio Channels Map To.  This Can Be Called After FMOD_System_Init To Remap Asio Output. '/
    As Integer             Max3dreverbdsps            /' [r/w] Optional. Specify 0 To Ignore. The Max Number Of 3d Reverb Dsp's In The System. (note: Currently Disabled / Unused) '/
    As Float           Hrtfminangle               /' [r/w] Optional.                      For Use With Fmod_init_hrtf_lowpass.  The Angle Range (0-360) Of A 3d Sound In Relation To The Listener, At Which The Hrtf Function Begins To Have An Effect. 0 = In Front Of The Listener. 180 = From 90 Degrees To The Left Of The Listener To 90 Degrees To The Right. 360 = Behind The Listener. Default = 180.0. '/
    As Float           Hrtfmaxangle               /' [r/w] Optional.                      For Use With Fmod_init_hrtf_lowpass.  The Angle Range (0-360) Of A 3d Sound In Relation To The Listener, At Which The Hrtf Function Has Maximum Effect. 0 = Front Of The Listener. 180 = From 90 Degrees To The Left Of The Listener To 90 Degrees To The Right. 360 = Behind The Listener. Default = 360.0. '/
    As Float           Hrtffreq                   /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_init_hrtf_lowpass.  The Cutoff Frequency Of The Hrtf's Lowpass Filter Function When At Maximum Effect. (i.e. At Hrtfmaxangle).  Default = 4000.0. '/
    As Float           Vol0virtualvol             /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_init_vol0_becomes_virtual.  If This Flag Is Used, And The Volume Is 0.0, Then The Sound Will Become Virtual.  Use This Value To Raise The Threshold To A Different Point Where A Sound Goes Virtual. '/
    As Integer             Eventqueuesize             /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod Event System Only.  Specifies The Number Of Slots Available For Simultaneous Non Blocking Loads, Across All Threads.  Default = 32. '/
    As Uinteger    Defaultdecodebuffersize    /' [r/w] Optional. Specify 0 To Ignore. For Streams. This Determines The Default Size Of The Double Buffer (in Milliseconds) That A Stream Uses.  Default = 400ms '/
    As Zstring Ptr           Debuglogfilename           /' [r/w] Optional. Specify 0 To Ignore. Gives Fmod's Logging System A Path/filename.  Normally The Log Is Placed In The Same Directory As The Executable And Called Fmod.log. When Using FMOD_System_GetAdvancedSettings, Provide At Least 256 Bytes Of Memory To Copy Into. '/
    As Ushort  Profileport                /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_init_enable_profile.  Specify The Port To Listen On For Connections By The Profiler Application. '/
    As Uinteger    Geometrymaxfadetime        /' [r/w] Optional. Specify 0 To Ignore. The Maximum Time In Miliseconds It Takes For A Channel To Fade To The New Level When Its Occlusion Changes. '/
    As Uinteger    Maxspectrumwavedatabuffers /' [r/w] Optional. Specify 0 To Ignore. Tells FMOD_System_Init To Allocate A Pool Of Wavedata/spectrum Buffers To Prevent Memory Fragmentation, Any Additional Buffers Will Be Allocated Normally. '/
    As Uinteger    Musicsystemcachedelay      /' [r/w] Optional. Specify 0 To Ignore. The Delay The Music System Should Allow For Loading A Sample From Disk (in Milliseconds). Default = 400 Ms. '/
    As Float           Distancefiltercenterfreq   /' [r/w] Optional. Specify 0 To Ignore. For Use With Fmod_init_distance_filtering.  The Default Center Frequency In Hz For The Distance Filtering Effect. Default = 1500.0. '/
    As Uinteger    Stacksizestream            /' [r/w] Optional. Specify 0 To Ignore. Specify The Stack Size For The Fmod Stream Thread In Bytes.  Useful For Custom Codecs That Use Excess Stack.  Default 49,152 (48kb) '/
    As Uinteger    Stacksizenonblocking       /' [r/w] Optional. Specify 0 To Ignore. Specify The Stack Size For The Fmod_nonblocking Loading Thread.  Useful For Custom Codecs That Use Excess Stack.  Default 65,536 (64kb) '/
    As Uinteger    Stacksizemixer             /' [r/w] Optional. Specify 0 To Ignore. Specify The Stack Size For The Fmod Mixer Thread.  Useful For Custom Dsps That Use Excess Stack.  Default 49,152 (48kb) '/
End Type


/'
[enum]
[
    [description]
    Special Channel Index Values For Fmod Functions.

    [remarks]
    To Get 'all' Of The Channels, Use FMOD_System_GetMasterChannelGroup.

    [platforms]
    Win32, Win64, Linux, Linux64, Macintosh, Xbox360, Playstation Portable, Playstation 3, Wii, Iphone, 3gs, Ngp, Android

    [see_also]
    FMOD_System_PlaySound
    FMOD_System_PlayDSP
    FMOD_System_GetChannel
    FMOD_System_GetMasterChannelGroup
]
'/
Enum Fmod_channelindex
    Fmod_channel_free  = -1      /' For A Channel Index, Fmod Chooses A Free Voice Using The Priority System. '/
    Fmod_channel_reuse = -2       /' For A Channel Index, Re-use The Channel Handle That Was Passed In. '/
End Enum

#include "fmod_codec.bi"
#include "fmod_dsp.bi"
#include "fmod_memoryinfo.bi"

/' ========================================================================================== '/
/' Function Prototypes                                                                        '/
/' ========================================================================================== '/

/'
    Fmod Global System Functions (optional).
'/

Declare Function FMOD_Memory_Initialize(byval Poolmem As Any Ptr, Byval Poollen As Integer, Byval Useralloc As Fmod_memory_alloccallback, _
Byval Userrealloc As Fmod_memory_realloccallback, Byval Userfree As Fmod_memory_freecallback, _
Byval Memtypeflags As Fmod_memory_type) As Fmod_result
Declare Function FMOD_Memory_GetStats(byval Currentalloced As Integer Ptr, Byval Maxalloced As Integer Ptr, Byval Blocking As Fmod_bool) As Fmod_result
Declare Function FMOD_Debug_SetLevel(byval Level As Fmod_debuglevel) As Fmod_result
Declare Function FMOD_Debug_GetLevel(byval Level As Fmod_debuglevel Ptr) As Fmod_result
Declare Function FMOD_File_SetDiskBusy(byval Busy As Integer) As Fmod_result
Declare Function FMOD_File_GetDiskBusy(byval Busy As Integer Ptr) As Fmod_result

/'
    Fmod System Factory Functions.  Use This To Create An Fmod System Instance.  Below You Will See FMOD_System_Init/close To Get Started.
'/

Declare Function FMOD_System_Create(byval System_ As Fmod_system Ptr Ptr) As Fmod_result
Declare Function FMOD_System_Release(byval System_ As Fmod_system Ptr) As Fmod_result


/'
    'system' Api
'/

/'
     Pre-init Functions.
'/

Declare Function FMOD_System_SetOutput(byval System_ As Fmod_system Ptr, Byval Output As Fmod_outputtype) As Fmod_result
Declare Function FMOD_System_GetOutput(byval System_ As Fmod_system Ptr, Byval Output As Fmod_outputtype Ptr) As Fmod_result
Declare Function FMOD_System_GetNumDrivers(byval System_ As Fmod_system Ptr, Byval Numdrivers As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetDriverInfo(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Name_ As Zstring Ptr, _
Byval Namelen As Integer, Byval Guid As Fmod_guid Ptr) As Fmod_result
Declare Function FMOD_System_GetDriverInfow(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Name_ As Wstring Ptr, _
Byval Namelen As Integer, Byval Guid As Fmod_guid Ptr) As Fmod_result
Declare Function FMOD_System_GetDriverCaps(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Caps As Fmod_caps Ptr, _
Byval Controlpaneloutputrate As Integer Ptr, Byval Controlpanelspeakermode As Fmod_speakermode Ptr) As Fmod_result
Declare Function FMOD_System_SetDriver(byval System_ As Fmod_system Ptr, Byval Driver As Integer) As Fmod_result
Declare Function FMOD_System_GetDriver(byval System_ As Fmod_system Ptr, Byval Driver As Integer Ptr) As Fmod_result
Declare Function FMOD_System_SetHardwareChannels(byval System_ As Fmod_system Ptr, Byval Numhardwarechannels As Integer) As Fmod_result
Declare Function FMOD_System_SetSoftwareChannels(byval System_ As Fmod_system Ptr, Byval Numsoftwarechannels As Integer) As Fmod_result
Declare Function FMOD_System_GetSoftwareChannels(byval System_ As Fmod_system Ptr, Byval Numsoftwarechannels As Integer Ptr) As Fmod_result
Declare Function FMOD_System_SetSoftwareFormat(byval System_ As Fmod_system Ptr, Byval Samplerate As Integer, _
Byval Format As Fmod_sound_format, Byval Numoutputchannels As Integer, Byval Maxinputchannels As Integer, _
Byval Resamplemethod As Fmod_dsp_resampler) As Fmod_result
Declare Function FMOD_System_GetSoftwareFormat(byval System_ As Fmod_system Ptr, Byval Samplerate As Integer Ptr, _
Byval Format As Fmod_sound_format Ptr, Byval Numoutputchannels As Integer Ptr, Byval Maxinputchannels As Integer Ptr, _
Byval Resamplemethod As Fmod_dsp_resampler Ptr, Byval Bits As Integer Ptr) As Fmod_result
Declare Function FMOD_System_SetDSPBufferSize(byval System_ As Fmod_system Ptr, Byval Bufferlength As Uinteger, _
Byval Numbuffers As Integer) As Fmod_result
Declare Function FMOD_System_GetDSPBufferSize(byval System_ As Fmod_system Ptr, Byval Bufferlength As Uinteger Ptr, _
Byval Numbuffers As Integer Ptr) As Fmod_result
Declare Function FMOD_System_SetFileSystem(byval System_ As Fmod_system Ptr, Byval Useropen As Fmod_file_opencallback, _
Byval Userclose As Fmod_file_closecallback, Byval Userread As Fmod_file_readcallback, Byval Userseek As Fmod_file_seekcallback, _
Byval Userasyncread As Fmod_file_asyncreadcallback, Byval Userasynccancel As Fmod_file_asynccancelcallback, _
Byval Blockalign As Integer) As Fmod_result
Declare Function FMOD_System_AttachFileSystem(byval System_ As Fmod_system Ptr, Byval Useropen As Fmod_file_opencallback, _
Byval Userclose As Fmod_file_closecallback, Byval Userread As Fmod_file_readcallback, _
Byval Userseek As Fmod_file_seekcallback) As Fmod_result
Declare Function FMOD_System_SetAdvancedSettings(byval System_ As Fmod_system Ptr, Byval Settings As Fmod_advancedsettings Ptr) As Fmod_result
Declare Function FMOD_System_GetAdvancedSettings(byval System_ As Fmod_system Ptr, Byval Settings As Fmod_advancedsettings Ptr) As Fmod_result
Declare Function FMOD_System_SetSpeakerMode(byval System_ As Fmod_system Ptr, Byval Speakermode As Fmod_speakermode) As Fmod_result
Declare Function FMOD_System_GetSpeakerMode(byval System_ As Fmod_system Ptr, Byval Speakermode As Fmod_speakermode Ptr) As Fmod_result
Declare Function FMOD_System_SetCallback(byval System_ As Fmod_system Ptr, Byval Callback As Fmod_system_callback) As Fmod_result

/'
     Plug-in Support                       
'/

Declare Function FMOD_System_SetPluginPath(byval System_ As Fmod_system Ptr, Byval Path As Const Zstring Ptr) As Fmod_result
Declare Function FMOD_System_LoadPlugin(byval System_ As Fmod_system Ptr, Byval Filename As Const Zstring Ptr, Byval Handle As Uinteger Ptr, _
Byval Priority As Uinteger) As Fmod_result
Declare Function FMOD_System_UnloadPlugin(byval System_ As Fmod_system Ptr, Byval Handle As Uinteger) As Fmod_result
Declare Function FMOD_System_GetNumPlugins(byval System_ As Fmod_system Ptr, Byval Plugintype As Fmod_plugintype, _
Byval Numplugins As Integer Ptr) As Fmod_result 
Declare Function FMOD_System_GetPluginHandle(byval System_ As Fmod_system Ptr, Byval Plugintype As Fmod_plugintype, Byval Index As Integer, _
Byval Handle As Uinteger Ptr) As Fmod_result
Declare Function FMOD_System_GetPluginInfo(byval System_ As Fmod_system Ptr, Byval Handle As Uinteger, _
Byval Plugintype As Fmod_plugintype Ptr, Byval Name_ As Zstring Ptr, Byval Namelen As Integer, Byval Version As Uinteger Ptr) As Fmod_result
Declare Function FMOD_System_SetOutputByPlugin(byval System_ As Fmod_system Ptr, Byval Handle As Uinteger) As Fmod_result
Declare Function FMOD_System_GetOutputByPlugin(byval System_ As Fmod_system Ptr, Byval Handle As Uinteger Ptr) As Fmod_result
Declare Function FMOD_System_CreateDSPByPlugin(byval System_ As Fmod_system Ptr, Byval Handle As Uinteger, _
Byval Dsp As Fmod_dsp Ptr ptr) As Fmod_result
Declare Function FMOD_System_RegisterCodec(byval System_ As Fmod_system Ptr, Byval Description As Fmod_codec_description Ptr, _
Byval Handle As Uinteger Ptr, Byval Priority As Uinteger) As Fmod_result
Declare Function FMOD_System_RegisterDSP(byval System_ As Fmod_system Ptr, Byval Description As Fmod_dsp_description Ptr, _
Byval Handle As Uinteger Ptr) As Fmod_result

/'
     Init/close                            
'/

Declare Function FMOD_System_Init(byval System_ As Fmod_system Ptr, Byval Maxchannels As Integer, Byval Flags As Fmod_initflags, _
Byval Extradriverdata As Any Ptr) As Fmod_result
Declare Function FMOD_System_Close(byval System_ As Fmod_system Ptr) As Fmod_result

/'
     General Post-init System Functions    
'/

Declare Function FMOD_System_Update(byval System_ As Fmod_system Ptr) As Fmod_result

Declare Function FMOD_System_Set3DSettings(byval System_ As Fmod_system Ptr, Byval Dopplerscale As Float, Byval Distancefactor As Float, _
Byval Rolloffscale As Float) As Fmod_result
Declare Function FMOD_System_Get3DSettings(byval System_ As Fmod_system Ptr, Byval Dopplerscale As Fmod_system Ptr, _
Byval Distancefactor As Float Ptr, Byval Rolloffscale As Float Ptr) As Fmod_result
Declare Function FMOD_System_Set3DNumListeners(byval System_ As Fmod_system Ptr, Byval Numlisteners As Integer) As Fmod_result
Declare Function FMOD_System_Get3DNumListeners(byval System_ As Fmod_system Ptr, Byval Numlisteners As Integer Ptr) As Fmod_result
Declare Function FMOD_System_Set3DListenerAttributes(byval System_ As Fmod_system Ptr, Byval Listener As Integer, _
Byval Pos_ As Const Fmod_vector Ptr, Byval Vel As Const Fmod_vector Ptr, Byval Forward As Const Fmod_vector Ptr, _
Byval Up As Const Fmod_vector Ptr) As Fmod_result
Declare Function FMOD_System_Get3DListenerAttributes(byval System_ As Fmod_system Ptr, Byval Listener As Integer, Byval Pos_ As Fmod_vector Ptr, _
Byval Vel As Fmod_vector Ptr, Byval Forward As Fmod_vector Ptr, Byval Up As Fmod_vector Ptr) As Fmod_result
Declare Function FMOD_System_Set3DRolloffCallback(byval System_ As Fmod_system Ptr, Byval Callback As Fmod_3d_rolloffcallback) As Fmod_result
Declare Function FMOD_System_Set3DSpeakerPosition(byval System_ As Fmod_system Ptr, Byval Speaker As Fmod_speaker, _
Byval X As Float, Byval Y As Float, Byval Active As Fmod_bool) As Fmod_result
Declare Function FMOD_System_Get3DSpeakerPosition(byval System_ As Fmod_system Ptr, Byval Speaker As Fmod_speaker, _
Byval X As Float Ptr, Byval Y As Float Ptr, Byval Active As Fmod_bool Ptr) As Fmod_result

Declare Function FMOD_System_SetStreamBufferSize(byval System_ As Fmod_system Ptr, Byval Filebuffersize As Uinteger, _
Byval Filebuffersizetype As Fmod_timeunit) As Fmod_result 
Declare Function FMOD_System_GetStreamBufferSize    (byval System_ As Fmod_system Ptr, Byval Filebuffersize As Uinteger Ptr, _
Byval Filebuffersizetype As Fmod_timeunit Ptr) As Fmod_result

/'
     System Information Functions.        
'/

Declare Function FMOD_System_GetVersion             (byval System_ As Fmod_system Ptr, Byval Version As Uinteger Ptr) As Fmod_result
Declare Function FMOD_System_GetOutputHandle(byval System_ As Fmod_system Ptr, Byval Handle As Any Ptr Ptr) As Fmod_result
Declare Function FMOD_System_GetChannelsPlaying(byval System_ As Fmod_system Ptr, Byval Channels As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetHardwareChannels(byval System_ As Fmod_system Ptr, Byval Numhardwarechannels As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetCPUUsage(byval System_ As Fmod_system Ptr, Byval Dsp As Float Ptr, Stream As Float Ptr, _
Byval Geometry As Float Ptr, Byval Update As Float Ptr, Byval Total As Float Ptr) As Fmod_result
Declare Function FMOD_System_GetSoundRAM(byval System_ As Fmod_system Ptr, Byval Currentalloced As Integer Ptr, _
Byval Maxalloced As Integer Ptr, Byval Total As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetNumCDROMDrives(byval System_ As Fmod_system Ptr, Byval Numdrives As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetCDROMDriveName(byval System_ As Fmod_system Ptr, Byval Drive As Integer, Byval Drivename As Zstring Ptr, _
Byval Drivenamelen As Integer, Byval Scsiname As Zstring Ptr, Byval Scsinamelen As Integer, Byval Devicename As Zstring Ptr, _
Byval Devicenamelen As Integer) As Fmod_result
Declare Function FMOD_System_GetSpectrum            (byval System_ As Fmod_system Ptr, Byval Spectrumarray As Float Ptr, _
Byval Numvalues As Integer, Byval Channeloffset As Integer, Byval Windowtype As Fmod_dsp_fft_window) As Fmod_result
Declare Function FMOD_System_GetWaveData            (byval System_ As Fmod_system Ptr, Byval Wavearray As Float Ptr, _
Byval Numvalues As Integer, Byval Channeloffset As Integer) As Fmod_result

/'
     Sound/dsp/channel/fx Creation And Retrieval.       
'/

Declare Function FMOD_System_CreateSound(byval System_ As Fmod_system Ptr, Byval Name_or_data As Const Zstring Ptr, _
Byval Mode As Fmod_mode, Byval Exinfo As Fmod_createsoundexinfo Ptr, Byval Sound As Fmod_sound Ptr Ptr) As Fmod_result
Declare Function FMOD_System_CreateStream(byval System_ As Fmod_system Ptr, Byval Name_or_data As Const Zstring Ptr, _
Byval Mode As Fmod_mode, Byval Exinfo As Fmod_createsoundexinfo Ptr, Byval Sound As Fmod_sound Ptr Ptr) As Fmod_result
Declare Function FMOD_System_CreateDSP(byval System_ As Fmod_system Ptr, Byval Description As Fmod_dsp_description Ptr, _
Byval Dsp As Fmod_dsp Ptr Ptr) As Fmod_result
Declare Function FMOD_System_CreateDSPByType(byval System_ As Fmod_system Ptr, Byval Type_ As Fmod_dsp_type, _
Byval Dsp As Fmod_dsp Ptr Ptr) As Fmod_result
Declare Function FMOD_System_CreateChannelGroup(byval System_ As Fmod_system Ptr, Byval Name_ As Const Zstring Ptr, _
Byval Channelgroup As Fmod_channelgroup Ptr Ptr) As Fmod_result
Declare Function FMOD_System_CreateSoundGroup(byval System_ As Fmod_system Ptr, Byval Name_ As Const Zstring Ptr, _
Byval Soundgroup As Fmod_soundgroup Ptr Ptr) As Fmod_result
Declare Function FMOD_System_CreateReverb(byval System_ As Fmod_system Ptr, Byval Reverb As Fmod_reverb Ptr Ptr) As Fmod_result

Declare Function FMOD_System_PlaySound(byval System_ As Fmod_system Ptr, Byval Channelid As Fmod_channelindex, _
Byval Sound As Fmod_sound Ptr, Byval Paused As Fmod_bool, Byval Channel As Fmod_channel Ptr Ptr) As Fmod_result
Declare Function FMOD_System_PlayDSP(byval System_ As Fmod_system Ptr, Byval Channelid As Fmod_channelindex, _
Byval Dsp As Fmod_dsp Ptr, Byval Paused As Fmod_bool, Byval Channel As Fmod_channel Ptr Ptr) As Fmod_result
Declare Function FMOD_System_GetChannel(byval System_ As Fmod_system Ptr, Byval Channelid As Integer, _
Byval Channel As Fmod_channel Ptr Ptr) As Fmod_result
Declare Function FMOD_System_GetMasterChannelGroup(byval System_ As Fmod_system Ptr, Byval Channelgroup As Fmod_channelgroup Ptr Ptr) As Fmod_result
Declare Function FMOD_System_GetMasterSoundGroup    (byval System_ As Fmod_system Ptr, Byval Soundgroup As Fmod_soundgroup Ptr Ptr) As Fmod_result

/'
     Reverb Api                           
'/

Declare Function FMOD_System_SetReverbProperties(byval System_ As Fmod_system Ptr, Byval Prop As Const Fmod_reverb_properties Ptr) As Fmod_result
Declare Function FMOD_System_GetReverbProperties(byval System_ As Fmod_system Ptr, Byval Prop As Fmod_reverb_properties Ptr) As Fmod_result
Declare Function FMOD_System_SetReverbAmbientProperties(byval System_ As Fmod_system Ptr, Byval Prop As Fmod_reverb_properties Ptr) As Fmod_result
Declare Function FMOD_System_GetReverbAmbientProperties(byval System_ As Fmod_system Ptr, Byval Prop As Fmod_reverb_properties Ptr) As Fmod_result

/'
     System Level Dsp Access.
'/

Declare Function FMOD_System_GetDSPHead(byval System_ As Fmod_system Ptr, Byval Dsp As Fmod_dsp Ptr Ptr) As Fmod_result
Declare Function FMOD_System_AddDSP(byval System_ As Fmod_system Ptr, Byval Dsp As Fmod_dsp Ptr, _
Byval Connection As Fmod_dspconnection Ptr Ptr) As Fmod_result
Declare Function FMOD_System_LockDSP(byval System_ As Fmod_system Ptr) As Fmod_result
Declare Function FMOD_System_UnlockDSP(byval System_ As Fmod_system Ptr) As Fmod_result
Declare Function FMOD_System_GetDSPClock(byval System_ As Fmod_system Ptr, Byval Hi As Uinteger Ptr, Byval Lo As Uinteger Ptr) As Fmod_result 

/'
     Recording Api.
'/

Declare Function FMOD_System_GetRecordNumDrivers(byval System_ As Fmod_system Ptr, Byval Numdrivers As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetRecordDriverInfo(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Name_ As Zstring Ptr, _
Byval Namelen As Integer, Byval Guid As Fmod_guid Ptr) As Fmod_result
Declare Function FMOD_System_GetRecordDriverInfow(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Name_ As Wstring Ptr, _
Byval Namelen As Integer, Byval Guid As Fmod_guid Ptr) As Fmod_result
Declare Function FMOD_System_GetRecordDriverCaps(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Caps As Fmod_caps Ptr, _
Byval Minfrequency As Integer Ptr, Byval Maxfrequency As Integer Ptr) As Fmod_result
Declare Function FMOD_System_GetRecordPosition(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Position As Uinteger Ptr) As Fmod_result
Declare Function FMOD_System_RecordStart(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Sound As Fmod_sound Ptr, _
Byval Loop As Fmod_bool) As Fmod_result
Declare Function FMOD_System_RecordStop(byval System_ As Fmod_system Ptr, Byval Id As Integer) As Fmod_result
Declare Function FMOD_System_IsRecording(byval System_ As Fmod_system Ptr, Byval Id As Integer, Byval Recording As Fmod_bool Ptr) As Fmod_result

/'
     Geometry Api.
'/

Declare Function FMOD_System_CreateGeometry(byval System_ As Fmod_system Ptr, Byval Maxpolygons As Integer, Byval Maxvertices As Integer, _
Byval Geometry As Fmod_geometry Ptr Ptr) As Fmod_result
Declare Function FMOD_System_SetGeometrySettings(byval System_ As Fmod_system Ptr, Byval Maxworldsize As Float) As Fmod_result
Declare Function FMOD_System_GetGeometrySettings(byval System_ As Fmod_system Ptr, Byval Maxworldsize As Float Ptr) As Fmod_result
Declare Function FMOD_System_LoadGeometry(byval System_ As Fmod_system Ptr, Byval Data_ As Any Ptr, Byval Datasize As Integer, _
Byval Geometry As Fmod_geometry Ptr Ptr) As Fmod_result
Declare Function FMOD_System_GetGeometryOcclusion   (byval System_ As Fmod_system Ptr, Byval Listener As Const Fmod_vector Ptr, _
Byval Source As Const Fmod_vector Ptr, Byval Direct As Float Ptr, Byval Reverb As Float Ptr) As Fmod_result

/'
     Network Functions.
'/

Declare Function FMOD_System_SetNetworkProxy(byval System_ As Fmod_system Ptr, Byval Proxy As Const Zstring Ptr) As Fmod_result
Declare Function FMOD_System_GetNetworkProxy(byval System_ As Fmod_system Ptr, Byval Proxy As Zstring Ptr, Byval Proxylen As Integer) As Fmod_result
Declare Function FMOD_System_SetNetworkTimeout(byval System_ As Fmod_system Ptr, Byval Timeout As Integer) As Fmod_result
Declare Function FMOD_System_GetNetworkTimeout(byval System_ As Fmod_system Ptr, Byval Timeout As Integer Ptr) As Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_System_SetUserData(byval System_ As Fmod_system Ptr, Byval Userdata As Any Ptr) As Fmod_result 
Declare Function FMOD_System_GetUserData(byval System_ As Fmod_system Ptr, Byval Userdata As Any Ptr Ptr) As Fmod_result

Declare Function FMOD_System_GetMemoryInfo(byval System_ As Fmod_system Ptr, Byval Memorybits As Uinteger, Byval Event_memorybits As Uinteger, _
Byval Memoryused As Uinteger Ptr, Byval Memoryused_details As Fmod_memory_usage_details Ptr) As Fmod_result

/'
    'sound' Api
'/

Declare Function FMOD_Sound_Release(byval Sound As Fmod_sound Ptr) As Fmod_result
Declare Function FMOD_Sound_GetSystemObject(byval Sound As Fmod_sound Ptr, Byval System_ As Fmod_system Ptr Ptr) As Fmod_result 

/'
     Standard Sound Manipulation Functions.                                                
'/

Declare Function FMOD_Sound_Lock(byval Sound As Fmod_sound Ptr, Byval Offset As Uinteger, Byval Length As Uinteger, Byval Ptr1 As Any Ptr Ptr, _
Byval Ptr2 As Any Ptr Ptr, Byval Len1 As Uinteger Ptr, Byval Len2 As Uinteger Ptr) As Fmod_result
Declare Function FMOD_Sound_Unlock(byval Sound As Fmod_sound Ptr, Byval Ptr1 As Any Ptr, Byval Ptr2 As Any Ptr, Byval Len1 As Uinteger, _
Byval Len2 As Uinteger) As Fmod_result
Declare Function FMOD_Sound_SetDefaults(byval Sound As Fmod_sound Ptr, Byval Frequency As Float, Byval Volume As Float, Byval Pan As Float, _
Byval Priority As Integer) As Fmod_result
Declare Function FMOD_Sound_GetDefaults(byval Sound As Fmod_sound Ptr, Byval Frequency As Float Ptr, Byval Volume As Float Ptr, _
Byval Pan As Float Ptr, Byval Priority As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_SetVariations(byval Sound As Fmod_sound Ptr, Byval Frequencyvar As Float, Byval Volumevar As Float, _
Byval Panvar As Float) As Fmod_result
Declare Function FMOD_Sound_GetVariations(byval Sound As Fmod_sound Ptr, Byval Frequencyvar As Float Ptr, Byval Volumevar As Float Ptr, _
Byval Panvar As Float Ptr) As Fmod_result
Declare Function FMOD_Sound_Set3DMinMaxDistance(byval Sound As Fmod_sound Ptr, Byval Min As Float, Byval Max As Float) As Fmod_result
Declare Function FMOD_Sound_Get3DMinMaxDistance(byval Sound As Fmod_sound Ptr, Byval Min As Float Ptr, Byval Max As Float Ptr) As Fmod_result
Declare Function FMOD_Sound_Set3DConeSettings(byval Sound As Fmod_sound Ptr, Byval Insideconeangle As Float, Byval Outsideconeangle As Float, _
Byval Outsidevolume As Float) As Fmod_result
Declare Function FMOD_Sound_Get3DConeSettings(byval Sound As Fmod_sound Ptr, Byval Insideconeangle As Float Ptr, _
Byval Outsideconeangle As Float Ptr, Byval Outsidevolume As Float Ptr) As Fmod_result
Declare Function FMOD_Sound_Set3DCustomRolloff(byval Sound As Fmod_sound Ptr, Byval Points As Fmod_vector Ptr, _
Byval Numpoints As Integer) As Fmod_result
Declare Function FMOD_Sound_Get3DCustomRolloff(byval Sound As Fmod_sound Ptr, Byval Points As Fmod_vector Ptr Ptr, _
Byval Numpoints As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_SetSubSound(byval Sound As Fmod_sound Ptr, Byval Index As Integer, Byval Subsound As Fmod_sound Ptr) As Fmod_result
Declare Function FMOD_Sound_GetSubSound(byval Sound As Fmod_sound Ptr, Byval Index As Integer, Byval Subsound As Fmod_sound Ptr Ptr) As Fmod_result
Declare Function FMOD_Sound_SetSubSoundSentence     (byval Sound As Fmod_sound Ptr, Byval Subsoundlist As Integer Ptr, Byval Numsubsounds As Integer) As Fmod_result
Declare Function FMOD_Sound_GetName(byval Sound As Fmod_sound Ptr, Byval Name_ As Zstring Ptr, Byval Namelen As Integer) As Fmod_result
Declare Function FMOD_Sound_GetLength(byval Sound As Fmod_sound Ptr, Byval Length As Uinteger Ptr, Byval Lengthtype As Fmod_timeunit) As Fmod_result
Declare Function FMOD_Sound_GetFormat(byval Sound As Fmod_sound Ptr, Byval Type As Fmod_sound_type Ptr, _
Byval Format As Fmod_sound_format Ptr, Byval Channels As Integer Ptr, Byval Bits As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_GetNumSubSounds(byval Sound As Fmod_sound Ptr, Byval Numsubsounds As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_GetNumTags(byval Sound As Fmod_sound Ptr, Byval Numtags As Integer Ptr, Byval Numtagsupdated As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_GetTag(byval Sound As Fmod_sound Ptr, Byval Name_ As Const Zstring Ptr, Byval Index As Integer, _
Byval Tag As Fmod_tag Ptr) As Fmod_result
Declare Function FMOD_Sound_GetOpenState(byval Sound As Fmod_sound Ptr, Byval Openstate As Fmod_openstate Ptr, _
Byval Percentbuffered As Uinteger Ptr, Byval Starving As Fmod_bool Ptr, Byval Diskbusy As Fmod_bool Ptr) As Fmod_result
Declare Function FMOD_Sound_ReadData(byval Sound As Fmod_sound Ptr, Byval Buffer As Any Ptr, Byval Lenbytes As Uinteger, _
Byval Read As Uinteger Ptr) As Fmod_result
Declare Function FMOD_Sound_SeekData(byval Sound As Fmod_sound Ptr, Byval Pcm As Uinteger) As Fmod_result

Declare Function FMOD_Sound_SetSoundGroup(byval Sound As Fmod_sound Ptr, Byval Soundgroup As Fmod_soundgroup Ptr) As Fmod_result
Declare Function FMOD_Sound_GetSoundGroup(byval Sound As Fmod_sound Ptr, Byval Soundgroup As Fmod_soundgroup Ptr Ptr) As Fmod_result

/'
     Synchronization Point Api.  These Points Can Come From Markers Embedded In Wav Files, And Can Also Generate Channel Callbacks.        
'/

Declare Function FMOD_Sound_GetNumSyncPoints(byval Sound As Fmod_sound Ptr, Byval Numsyncpoints As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_GetSyncPoint(byval Sound As Fmod_sound Ptr, Byval Index As Integer, Byval Point As Fmod_syncpoint Ptr Ptr) As Fmod_result
Declare Function FMOD_Sound_GetSyncPointInfo(byval Sound As Fmod_sound Ptr, Byval Point As Fmod_syncpoint Ptr, Byval Name_ As Zstring Ptr, _
Byval Namelen As Integer, Byval Offset As Uinteger Ptr, Byval Offsettype As Fmod_timeunit) As Fmod_result
Declare Function FMOD_Sound_AddSyncPoint(byval Sound As Fmod_sound Ptr, Byval Offset As Uinteger, Byval Offsettype As Fmod_timeunit, _
Byval Name_ As Const Zstring Ptr, Byval Point As Fmod_syncpoint Ptr Ptr) As Fmod_result
Declare Function FMOD_Sound_DeleteSyncPoint(byval Sound As Fmod_sound Ptr, Byval Point As Fmod_syncpoint Ptr) As Fmod_result

/'
     Functions Also In Channel Class But Here They Are The 'default' To Save Having To Change It In Channel All The Time.
'/

Declare Function FMOD_Sound_SetMode(byval Sound As Fmod_sound Ptr, Byval Mode As Fmod_mode) As Fmod_result
Declare Function FMOD_Sound_GetMode(byval Sound As Fmod_sound Ptr, Byval Mode As Fmod_mode Ptr) As Fmod_result
Declare Function FMOD_Sound_SetLoopCount(byval Sound As Fmod_sound Ptr, Byval Loopcount As Integer) As Fmod_result
Declare Function FMOD_Sound_GetLoopCount(byval Sound As Fmod_sound Ptr, Byval Loopcount As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_SetLoopPoints(byval Sound As Fmod_sound Ptr, Byval Loopstart As Uinteger, Byval Oopstarttype As Fmod_timeunit, _
Byval Loopend As Uinteger, Byval Loopendtype As Fmod_timeunit) As Fmod_result
Declare Function FMOD_Sound_GetLoopPoints(byval Sound As Fmod_sound Ptr, Byval Loopstart As Uinteger Ptr, _
Byval Loopstarttype As Fmod_timeunit, Byval Loopend As Uinteger Ptr, Byval Loopendtype As Fmod_timeunit) As Fmod_result

/'
     For Mod/s3m/xm/it/mid Sequenced Formats Only.
'/

Declare Function FMOD_Sound_GetMusicNumChannels(byval Sound As Fmod_sound Ptr, Byval Numchannels As Integer Ptr) As Fmod_result
Declare Function FMOD_Sound_SetMusicChannelVolume(byval Sound As Fmod_sound Ptr, Byval Channel As Integer, Byval Volume As Float) As Fmod_result
Declare Function FMOD_Sound_GetMusicChannelVolume(byval Sound As Fmod_sound Ptr, Byval Channel As Integer, Byval Volume As Float Ptr) As Fmod_result
Declare Function FMOD_Sound_SetMusicSpeed(byval Sound As Fmod_sound Ptr, Byval Speed As Float) As Fmod_result
Declare Function FMOD_Sound_GetMusicSpeed(byval sound as fmod_sound ptr, byval speed as float ptr) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_Sound_SetUserData(byval sound as fmod_sound ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_Sound_GetUserData             (byval sound as fmod_sound ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_Sound_GetMemoryInfo(byval sound as fmod_sound ptr, byval Memorybits as Uinteger, byval Event_memorybits As Uinteger , _
byval memoryused As Uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'channel' Api
'/

Declare Function FMOD_Channel_GetSystemObject(byval channel as fmod_channel ptr, byval system_ as Fmod_system ptr ptr) as Fmod_result

Declare Function FMOD_Channel_Stop(byval channel as fmod_channel ptr) as Fmod_result
Declare Function FMOD_Channel_SetPaused(byval channel as fmod_channel ptr, byval paused as Fmod_bool) as Fmod_result
Declare Function FMOD_Channel_GetPaused(byval channel as fmod_channel ptr, byval paused as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_Channel_SetVolume(byval channel as fmod_channel ptr, byval Volume as Float) as Fmod_result
Declare Function FMOD_Channel_GetVolume(byval channel as fmod_channel ptr, byval volume as Float ptr) as Fmod_result
Declare Function FMOD_Channel_SetFrequency(byval channel as fmod_channel ptr, byval Frequency as Float) as Fmod_result
Declare Function FMOD_Channel_GetFrequency(byval channel as fmod_channel ptr, byval frequency as Float ptr) as Fmod_result
Declare Function FMOD_Channel_SetPan(byval channel as fmod_channel ptr, byval Pan as Float) as Fmod_result
Declare Function FMOD_Channel_GetPan                (byval channel as fmod_channel ptr, byval pan as Float ptr) as Fmod_result
Declare Function FMOD_Channel_SetDelay(byval channel as fmod_channel ptr, byval Delaytype as Fmod_delaytype, byval Delayhi as uinteger, _
byval Delaylo as uinteger) as Fmod_result
Declare Function FMOD_Channel_GetDelay(byval channel as fmod_channel ptr, byval Delaytype as Fmod_delaytype, byval delayhi as uinteger ptr, _
byval delaylo as uinteger ptr) as Fmod_result
Declare Function FMOD_Channel_SetSpeakerMix(byval channel as fmod_channel ptr, byval Frontleft as Float, byval Frontright as float, _
byval center as float, byval Lfe as float, byval Backleft as float, byval Backright as float, byval Sideleft as float, byval Sideright as float) as Fmod_result
Declare Function FMOD_Channel_GetSpeakerMix(byval channel as fmod_channel ptr, byval frontleft as float ptr, byval frontright as float ptr, _
byval center as float ptr, byval lfe as float ptr, byval backleft as float ptr, byval backright as float ptr, byval sideleft as float ptr, _
byval sideright as float ptr) as Fmod_result
Declare Function FMOD_Channel_SetSpeakerLevels(byval channel as fmod_channel ptr, byval Speaker as Fmod_speaker, byval levels as float ptr, _
byval Numlevels as integer) as Fmod_result
Declare Function FMOD_Channel_GetSpeakerLevels(byval channel as fmod_channel ptr, byval Speaker as Fmod_speaker, byval levels as float ptr, _
byval Numlevels as integer) as Fmod_result
Declare Function FMOD_Channel_SetInputChannelMix(byval channel as fmod_channel ptr, byval levels as float ptr, byval Numlevels as integer) as Fmod_result
Declare Function FMOD_Channel_GetInputChannelMix(byval channel as fmod_channel ptr, byval levels as float ptr, byval Numlevels as integer) as Fmod_result
Declare Function FMOD_Channel_SetMute(byval channel as fmod_channel ptr, byval Mute as Fmod_bool) as Fmod_result
Declare Function FMOD_Channel_GetMute(byval channel as fmod_channel ptr, byval mute as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_Channel_SetPriority(byval channel as fmod_channel ptr, byval Priority as integer) as Fmod_result
Declare Function FMOD_Channel_GetPriority(byval channel as fmod_channel ptr, byval priority as integer ptr) as Fmod_result
Declare Function FMOD_Channel_SetPosition(byval channel as fmod_channel ptr, byval Position as uinteger, byval Postype as Fmod_timeunit) as Fmod_result
Declare Function FMOD_Channel_GetPosition(byval channel as fmod_channel ptr, byval position as uinteger ptr, byval Postype as Fmod_timeunit) as Fmod_result
Declare Function FMOD_Channel_SetReverbProperties(byval channel as fmod_channel ptr, byval prop as Const Fmod_reverb_channelproperties ptr) as Fmod_result
Declare Function FMOD_Channel_GetReverbProperties(byval channel as fmod_channel ptr, byval prop as Fmod_reverb_channelproperties ptr) as Fmod_result
Declare Function FMOD_Channel_SetLowPassGain(byval channel as fmod_channel ptr, byval gain as float) as Fmod_result
Declare Function FMOD_Channel_GetLowPassGain(byval channel as fmod_channel ptr, byval gain as float ptr) as Fmod_result

Declare Function FMOD_Channel_SetChannelGroup(byval channel as fmod_channel ptr, byval channelgroup as Fmod_channelgroup ptr) as Fmod_result
Declare Function FMOD_Channel_GetChannelGroup(byval channel as fmod_channel ptr, byval channelgroup as Fmod_channelgroup ptr ptr) as Fmod_result
Declare Function FMOD_Channel_SetCallback(byval channel as fmod_channel ptr, byval Callback as Fmod_channel_callback) as Fmod_result

/'
     3d Functionality.
'/

Declare Function FMOD_Channel_Set3DAttributes(byval channel as fmod_channel ptr, byval pos_ as Const Fmod_vector ptr, _
byval vel as Const Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Channel_Get3DAttributes(byval channel as fmod_channel ptr, byval pos_ as Fmod_vector ptr, byval vel as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DMinMaxDistance(byval channel as fmod_channel ptr, byval Mindistance as float, byval Maxdistance as float) as Fmod_result
Declare Function FMOD_Channel_Get3DMinMaxDistance(byval channel as fmod_channel ptr, byval mindistance as float ptr, _
byval maxdistance as float ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DConeSettings(byval channel as fmod_channel ptr, byval Insideconeangle as float, _
byval Outsideconeangle as float, byval Outsidevolume as float) as Fmod_result
Declare Function FMOD_Channel_Get3DConeSettings(byval channel as fmod_channel ptr, byval insideconeangle as float ptr, _
byval outsideconeangle as float ptr, byval outsidevolume as float ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DConeOrientation(byval channel as fmod_channel ptr, byval orientation as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Channel_Get3DConeOrientation(byval channel as fmod_channel ptr, byval orientation as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DCustomRolloff(byval channel as fmod_channel ptr, byval points as Fmod_vector ptr, _
byval Numpoints as integer) as Fmod_result
Declare Function FMOD_Channel_Get3DCustomRolloff(byval channel as fmod_channel ptr, byval points as Fmod_vector ptr ptr, _
byval numpoints as integer ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DOcclusion(byval channel as fmod_channel ptr, byval Directocclusion as float, byval Reverbocclusion as float) as Fmod_result
Declare Function FMOD_Channel_Get3DOcclusion(byval channel as fmod_channel ptr, byval directocclusion as float ptr, _
byval reverbocclusion as float ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DSpread(byval channel as fmod_channel ptr, byval Angle as float) as Fmod_result
Declare Function FMOD_Channel_Get3DSpread(byval channel as fmod_channel ptr, byval angle as float ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DPanLevel(byval channel as fmod_channel ptr, byval Level as float) as Fmod_result
Declare Function FMOD_Channel_Get3DPanLevel(byval channel as fmod_channel ptr, byval level as float ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DDopplerLevel(byval channel as fmod_channel ptr, byval Level as float) as Fmod_result
Declare Function FMOD_Channel_Get3DDopplerLevel(byval channel as fmod_channel ptr, byval level as float ptr) as Fmod_result
Declare Function FMOD_Channel_Set3DDistanceFilter(byval channel as fmod_channel ptr, byval custom as Fmod_bool, byval Customlevel as float, _
byval centerfreq as float) as Fmod_result
Declare Function FMOD_Channel_Get3DDistanceFilter(byval channel as fmod_channel ptr, byval custom as Fmod_bool ptr, byval customlevel as float ptr, _
byval centerfreq as float ptr) as Fmod_result

/'
     Dsp Functionality Only For Channels Playing Sounds Created With Fmod_software.
'/

Declare Function FMOD_Channel_GetDSPHead(byval channel as fmod_channel ptr, byval dsp as Fmod_dsp ptr ptr) as Fmod_result
Declare Function FMOD_Channel_AddDSP(byval channel as fmod_channel ptr, byval dsp as Fmod_dsp ptr, _
byval connection as Fmod_dspconnection ptr ptr) as Fmod_result

/'
     Information Only Functions.
'/

Declare Function FMOD_Channel_IsPlaying(byval channel as fmod_channel ptr, byval isplaying as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_Channel_IsVirtual(byval channel as fmod_channel ptr, byval isvirtual as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_Channel_GetAudibility(byval channel as fmod_channel ptr, byval audibility as float ptr) as Fmod_result
Declare Function FMOD_Channel_GetCurrentSound(byval channel as fmod_channel ptr, byval sound as Fmod_sound ptr ptr) as Fmod_result
Declare Function FMOD_Channel_GetSpectrum(byval channel as fmod_channel ptr, byval spectrumarray as Float ptr, byval Numvalues as integer, _
byval Channeloffset as integer, byval Windowtype as Fmod_dsp_fft_window) as Fmod_result
Declare Function FMOD_Channel_GetWaveData(byval channel as fmod_channel ptr, byval wavearray as float ptr, byval Numvalues as integer, _
byval Channeloffset as integer) as Fmod_result
Declare Function FMOD_Channel_GetIndex(byval channel as fmod_channel ptr, byval index as integer ptr) as Fmod_result

/'
     Functions Also Found In Sound Class But Here They Can Be Set Per Channel.
'/

Declare Function FMOD_Channel_SetMode(byval channel as fmod_channel ptr, byval Mode as Fmod_mode) as Fmod_result
Declare Function FMOD_Channel_GetMode(byval channel as fmod_channel ptr, byval mode as Fmod_mode ptr) as Fmod_result
Declare Function FMOD_Channel_SetLoopCount(byval channel as fmod_channel ptr, byval Loopcount as integer) as Fmod_result
Declare Function FMOD_Channel_GetLoopCount(byval channel as fmod_channel ptr, byval loopcount as integer ptr) as Fmod_result
Declare Function FMOD_Channel_SetLoopPoints(byval channel as fmod_channel ptr, byval Loopstart as uinteger, byval Loopstarttype as Fmod_timeunit, _
byval Loopend as uinteger, byval Loopendtype as Fmod_timeunit) as Fmod_result
Declare Function FMOD_Channel_GetLoopPoints(byval channel as fmod_channel ptr, byval loopstart as uinteger ptr, _
byval Loopstarttype as Fmod_timeunit, byval loopend as uinteger ptr, byval Loopendtype as Fmod_timeunit ) as Fmod_result

/'
     Userdata Set/get.                                                
'/

Declare Function FMOD_Channel_SetUserData(byval channel as fmod_channel ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_Channel_GetUserData(byval channel as fmod_channel ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_Channel_GetMemoryInfo(byval channel as fmod_channel ptr, byval Memorybits as uinteger, byval Event_memorybits as uinteger, _
byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'channelgroup' Api
'/

Declare Function FMOD_ChannelGroup_Release(byval channelgroup as fmod_channelgroup ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetSystemObject(byval channelgroup as fmod_channelgroup ptr, byval system_ as Fmod_system ptr ptr) as Fmod_result

/'
     Channelgroup Scale Values.  (changes Attributes Relative To The Channels, Doesn't Overwrite Them)
'/

Declare Function FMOD_ChannelGroup_SetVolume(byval channelgroup as fmod_channelgroup ptr, byval Volume as float) as Fmod_result
Declare Function FMOD_ChannelGroup_GetVolume(byval channelgroup as fmod_channelgroup ptr, byval volume as float ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_SetPitch(byval channelgroup as fmod_channelgroup ptr, byval Pitch as float) as Fmod_result
Declare Function FMOD_ChannelGroup_GetPitch(byval channelgroup as fmod_channelgroup ptr, byval pitch as float ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_Set3DOcclusion(byval channelgroup as fmod_channelgroup ptr, byval Directocclusion as float, _
byval Reverbocclusion as float) as Fmod_result
Declare Function FMOD_ChannelGroup_Get3DOcclusion(byval channelgroup as fmod_channelgroup ptr, byval directocclusion as float ptr, _
byval reverbocclusion as float ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_SetPaused(byval channelgroup as fmod_channelgroup ptr, byval Paused as Fmod_bool) as Fmod_result
Declare Function FMOD_ChannelGroup_GetPaused(byval channelgroup as fmod_channelgroup ptr, byval paused as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_SetMute(byval channelgroup as fmod_channelgroup ptr, byval Mute as Fmod_bool) as Fmod_result
Declare Function FMOD_ChannelGroup_GetMute(byval channelgroup as fmod_channelgroup ptr, byval mute as Fmod_bool ptr) as Fmod_result

/'
     Channelgroup Override Values.  (recursively Overwrites Whatever Settings The Channels Had)
'/

Declare Function FMOD_ChannelGroup_Stop(byval channelgroup as fmod_channelgroup ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_OverrideVolume(byval channelgroup as fmod_channelgroup ptr, byval Volume as float) as Fmod_result
Declare Function FMOD_ChannelGroup_OverrideFrequency(byval channelgroup as fmod_channelgroup ptr, byval Frequency as float) as Fmod_result
Declare Function FMOD_ChannelGroup_OverridePan      (byval channelgroup as fmod_channelgroup ptr, byval Pan as float) as Fmod_result
Declare Function FMOD_ChannelGroup_OverrideReverbProperties(byval channelgroup as fmod_channelgroup ptr, _
byval prop as Const Fmod_reverb_channelproperties ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_Override3DAttributes(byval channelgroup as fmod_channelgroup ptr, byval pos as Const Fmod_vector ptr, _
byval vel as Const Fmod_vector ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_OverrideSpeakerMix(byval channelgroup as fmod_channelgroup ptr, byval Frontleft as float, _
byval Frontright as float, byval Center as float, byval Lfe as float, byval Backleft as float, byval Backright as float, byval Sideleft as float, _
byval Sideright as float) as Fmod_result

/'
     Nested Channel Groups.
'/

Declare Function FMOD_ChannelGroup_AddGroup(byval channelgroup as fmod_channelgroup ptr, byval group as Fmod_channelgroup ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetNumGroups(byval channelgroup as fmod_channelgroup ptr, byval numgroups as integer ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetGroup(byval channelgroup as fmod_channelgroup ptr, byval Index as integer, _
byval group as Fmod_channelgroup ptr ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetParentGroup(byval channelgroup as fmod_channelgroup ptr, byval group as Fmod_channelgroup ptr ptr) as Fmod_result

/'
     Dsp Functionality Only For Channel Groups Playing Sounds Created With Fmod_software.
'/

Declare Function FMOD_ChannelGroup_GetDSPHead(byval channelgroup as fmod_channelgroup ptr, byval dsp as Fmod_dsp ptr ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_AddDSP(byval channelgroup as fmod_channelgroup ptr, byval dsp as Fmod_dsp ptr, _
byval connection as Fmod_dspconnection ptr ptr) as Fmod_result

/'
     Information Only Functions.
'/

Declare Function FMOD_ChannelGroup_GetName(byval channelgroup as fmod_channelgroup ptr, byval name_ as zstring ptr, byval Namelen as integer) as Fmod_result
Declare Function FMOD_ChannelGroup_GetNumChannels(byval channelgroup as fmod_channelgroup ptr, byval numchannels as integer ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetChannel(byval channelgroup as fmod_channelgroup ptr, byval Index as integer, _
byval channel as Fmod_channel ptr ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetSpectrum(byval channelgroup as fmod_channelgroup ptr, byval spectrumarray as float ptr, _
byval Numvalues as integer, byval Channeloffset as integer, byval Windowtype as Fmod_dsp_fft_window) as Fmod_result
Declare Function FMOD_ChannelGroup_GetWaveData(byval channelgroup as fmod_channelgroup ptr, byval wavearray as float ptr, _
byval Numvalues as integer, byval Channeloffset as integer) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_ChannelGroup_SetUserData(byval channelgroup as fmod_channelgroup ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_ChannelGroup_GetUserData(byval channelgroup as fmod_channelgroup ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_ChannelGroup_GetMemoryInfo(byval channelgroup as fmod_channelgroup ptr, byval Memorybits as uinteger, _
byval Event_memorybits as uinteger, byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'soundgroup' Api
'/

Declare Function FMOD_SoundGroup_Release(byval soundgroup as fmod_soundgroup ptr) as Fmod_result
Declare Function FMOD_SoundGroup_GetSystemObject(byval soundgroup as fmod_soundgroup ptr, byval system_ as Fmod_system ptr ptr) as Fmod_result

/'
     Soundgroup Control Functions.
'/

Declare Function FMOD_SoundGroup_SetMaxAudible(byval soundgroup as fmod_soundgroup ptr, byval Maxaudible as integer) as Fmod_result
Declare Function FMOD_SoundGroup_GetMaxAudible(byval soundgroup as fmod_soundgroup ptr, byval maxaudible as integer ptr) as Fmod_result
Declare Function FMOD_SoundGroup_SetMaxAudibleBehavior(byval soundgroup as fmod_soundgroup ptr, _
byval Behavior as Fmod_soundgroup_behavior) as Fmod_result
Declare Function FMOD_SoundGroup_GetMaxAudibleBehavior(byval soundgroup as fmod_soundgroup ptr, _
byval behavior as Fmod_soundgroup_behavior ptr) as Fmod_result
Declare Function FMOD_SoundGroup_SetMuteFadeSpeed(byval soundgroup as fmod_soundgroup ptr, byval Speed as float) as Fmod_result
Declare Function FMOD_SoundGroup_GetMuteFadeSpeed(byval soundgroup as fmod_soundgroup ptr, byval speed as float ptr) as Fmod_result
Declare Function FMOD_SoundGroup_SetVolume(byval soundgroup as fmod_soundgroup ptr, byval Volume as float) as Fmod_result
Declare Function FMOD_SoundGroup_GetVolume(byval soundgroup as fmod_soundgroup ptr, byval volume as float ptr) as Fmod_result
Declare Function FMOD_SoundGroup_Stop               (byval soundgroup as fmod_soundgroup ptr) as Fmod_result

/'
     Information Only Functions.
'/

Declare Function FMOD_SoundGroup_GetName(byval soundgroup as fmod_soundgroup ptr, byval name_ as zstring ptr, byval Namelen as integer) as Fmod_result
Declare Function FMOD_SoundGroup_GetNumSounds(byval soundgroup as fmod_soundgroup ptr, byval numsounds as integer ptr) as Fmod_result
Declare Function FMOD_SoundGroup_GetSound(byval soundgroup as fmod_soundgroup ptr, byval Index as integer, byval sound as Fmod_sound ptr ptr) as Fmod_result
Declare Function FMOD_SoundGroup_GetNumPlaying(byval soundgroup as fmod_soundgroup ptr, byval numplaying as integer ptr) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_SoundGroup_SetUserData(byval soundgroup as fmod_soundgroup ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_SoundGroup_GetUserData(byval soundgroup as fmod_soundgroup ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_SoundGroup_GetMemoryInfo(byval soundgroup as fmod_soundgroup ptr, byval Memorybits as uinteger, _
byval Event_memorybits as uinteger, byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'dsp' Api
'/

Declare Function FMOD_DSP_Release(byval dsp as fmod_dsp ptr) as Fmod_result
Declare Function FMOD_DSP_GetSystemObject(byval dsp as fmod_dsp ptr, byval system_ as Fmod_system ptr ptr) as Fmod_result

/'
     Connection / Disconnection / Input And Output Enumeration.
'/

Declare Function FMOD_DSP_AddInput(byval dsp as fmod_dsp ptr, byval target as Fmod_dsp ptr, byval connection as Fmod_dspconnection ptr ptr) as Fmod_result
Declare Function FMOD_DSP_DisconnectFrom(byval dsp as fmod_dsp ptr, byval target as Fmod_dsp ptr) as Fmod_result
Declare Function FMOD_DSP_DisconnectAll(byval dsp as fmod_dsp ptr, byval Inputs as Fmod_bool, byval Outputs as Fmod_bool) as Fmod_result
Declare Function FMOD_DSP_Remove(byval dsp as fmod_dsp ptr) as Fmod_result
Declare Function FMOD_DSP_GetNumInputs(byval dsp as fmod_dsp ptr, byval numinputs as integer ptr) as Fmod_result
Declare Function FMOD_DSP_GetNumOutputs(byval dsp as fmod_dsp ptr, byval numoutputs as integer ptr) as Fmod_result
Declare Function FMOD_DSP_GetInput(byval dsp as fmod_dsp ptr, byval Index as integer, byval input as Fmod_dsp ptr ptr, _
byval inputconnection as Fmod_dspconnection ptr ptr) as Fmod_result
Declare Function FMOD_DSP_GetOutput(byval dsp as fmod_dsp ptr, byval Index as integer, byval output as Fmod_dsp ptr ptr, _
byval outputconnection as Fmod_dspconnection ptr ptr) as Fmod_result

/'
     Dsp Unit Control.
'/

Declare Function FMOD_DSP_SetActive(byval dsp as fmod_dsp ptr, byval Active as Fmod_bool) as Fmod_result
Declare Function FMOD_DSP_GetActive(byval dsp as fmod_dsp ptr, byval active as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_DSP_SetBypass(byval dsp as fmod_dsp ptr, byval Bypass as Fmod_bool) as Fmod_result
Declare Function FMOD_DSP_GetBypass(byval dsp as fmod_dsp ptr, byval bypass as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_DSP_SetSpeakerActive(byval dsp as fmod_dsp ptr, byval Speaker as Fmod_speaker, byval Active as Fmod_bool) as Fmod_result
Declare Function FMOD_DSP_GetSpeakerActive(byval dsp as fmod_dsp ptr, byval Speaker as Fmod_speaker, byval active as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_DSP_Reset(byval dsp as fmod_dsp ptr) as Fmod_result

/'
     Dsp Parameter Control.
'/

Declare Function FMOD_DSP_SetParameter(byval dsp as fmod_dsp ptr, byval Index as integer, byval Value as float) as Fmod_result
Declare Function FMOD_DSP_GetParameter(byval dsp as fmod_dsp ptr, byval Index as integer, byval value as float ptr, byval valuestr as zstring ptr, _
byval Valuestrlen as integer) as Fmod_result
Declare Function FMOD_DSP_GetNumParameters(byval dsp as fmod_dsp ptr, byval numparams as integer ptr) as Fmod_result
Declare Function FMOD_DSP_GetParameterInfo(byval dsp as fmod_dsp ptr, byval Index as integer, byval name_ as zstring ptr, _
byval label as zstring ptr, byval description as zstring ptr, byval Descriptionlen as integer, byval min as float ptr, _
byval max as float ptr) as Fmod_result
Declare Function FMOD_DSP_ShowConfigDialog(byval dsp as fmod_dsp ptr, byval hwnd as any ptr, byval Show as Fmod_bool) as Fmod_result

/'
     Dsp Attributes.        
'/

Declare Function FMOD_DSP_GetInfo(byval dsp as fmod_dsp ptr, byval name_ as zstring ptr, byval version as uinteger ptr, _
byval channels as integer ptr, byval configwidth as integer ptr, byval configheight as integer ptr) as Fmod_result
Declare Function FMOD_DSP_GetType(byval dsp as fmod_dsp ptr, byval type_ as Fmod_dsp_type ptr) as Fmod_result
Declare Function FMOD_DSP_SetDefaults(byval dsp as fmod_dsp ptr, byval Frequency as float, byval Volume as float, byval Pan as float, _
byval Priority as integer) as Fmod_result
Declare Function FMOD_DSP_GetDefaults(byval dsp as fmod_dsp ptr, byval frequency as float ptr, byval volume as float ptr, byval pan as float ptr, _
byval priority as integer ptr) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_DSP_SetUserData(byval dsp as fmod_dsp ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_DSP_GetUserData(byval dsp as fmod_dsp ptr, byval userdata as any ptr ptr) as Fmod_result 

Declare Function FMOD_DSP_GetMemoryInfo(byval dsp as fmod_dsp ptr, byval Memorybits as uinteger, byval Event_memorybits as uinteger, _
byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'dspconnection' Api
'/

Declare Function FMOD_DSPConnection_GetInput(byval dspconnection as fmod_dspconnection ptr, byval input as Fmod_dsp ptr ptr) as Fmod_result
Declare Function FMOD_DSPConnection_GetOutput(byval dspconnection as fmod_dspconnection ptr, byval output as Fmod_dsp ptr ptr) as Fmod_result
Declare Function FMOD_DSPConnection_SetMix(byval dspconnection as fmod_dspconnection ptr, byval Volume as float) as Fmod_result
Declare Function FMOD_DSPConnection_GetMix(byval dspconnection as fmod_dspconnection ptr, byval volume as float ptr) as Fmod_result
Declare Function FMOD_DSPConnection_SetLevels(byval dspconnection as fmod_dspconnection ptr, byval Speaker as Fmod_speaker, _
byval levels as float ptr, byval Numlevels as integer) as Fmod_result
Declare Function FMOD_DSPConnection_GetLevels(byval dspconnection as fmod_dspconnection ptr, byval Speaker as Fmod_speaker, _
byval levels as float ptr, byval Numlevels as integer) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_DSPConnection_SetUserData(byval dspconnection as fmod_dspconnection ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_DSPConnection_GetUserData(byval dspconnection as fmod_dspconnection ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_DSPConnection_GetMemoryInfo(byval dspconnection as fmod_dspconnection ptr, byval Memorybits as uinteger, _
byval Event_memorybits as uinteger, byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'geometry' Api
'/

Declare Function FMOD_Geometry_Release(byval geometry as fmod_geometry ptr) as Fmod_result

/'
     Polygon Manipulation.
'/

Declare Function FMOD_Geometry_AddPolygon(byval geometry as fmod_geometry ptr, byval Directocclusion as float, byval Reverbocclusion as float, _
byval Doublesided as Fmod_bool, byval Numvertices as integer, byval vertices as Const Fmod_vector ptr, byval polygonindex as integer ptr) as Fmod_result
Declare Function FMOD_Geometry_GetNumPolygons(byval geometry as fmod_geometry ptr, byval numpolygons as integer ptr) as Fmod_result
Declare Function FMOD_Geometry_GetMaxPolygons(byval geometry as fmod_geometry ptr, byval maxpolygons as integer ptr, _
byval maxvertices as integer ptr) as Fmod_result
Declare Function FMOD_Geometry_GetPolygonNumVertices(byval geometry as fmod_geometry ptr, byval Index as integer, byval numvertices as integer ptr) as Fmod_result
Declare Function FMOD_Geometry_SetPolygonVertex(byval geometry as fmod_geometry ptr, byval Index as integer, byval Vertexindex as integer, _
byval vertex as  const Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_GetPolygonVertex(byval geometry as fmod_geometry ptr, byval Index as integer, byval Vertexindex as integer, _
byval vertex as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_SetPolygonAttributes(byval geometry as fmod_geometry ptr, byval Index as integer, byval Directocclusion as float, _
byval Reverbocclusion as float, byval Doublesided as Fmod_bool) as Fmod_result
Declare Function FMOD_Geometry_GetPolygonAttributes(byval geometry as fmod_geometry ptr, byval Index as integer, byval directocclusion as float ptr, _
byval reverbocclusion as float ptr, byval doublesided as Fmod_bool ptr) as Fmod_result

/'
     Object Manipulation.
'/

Declare Function FMOD_Geometry_SetActive(byval geometry as fmod_geometry ptr, byval Active as Fmod_bool) as Fmod_result
Declare Function FMOD_Geometry_GetActive(byval geometry as fmod_geometry ptr, byval active as Fmod_bool ptr) as Fmod_result
Declare Function FMOD_Geometry_SetRotation(byval geometry as fmod_geometry ptr, byval forward as Const Fmod_vector ptr, _
byval up as Const Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_GetRotation(byval geometry as fmod_geometry ptr, byval forward as Fmod_vector ptr, byval up as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_SetPosition(byval geometry as fmod_geometry ptr, byval position as Const Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_GetPosition(byval geometry as fmod_geometry ptr, byval position as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_SetScale(byval geometry as fmod_geometry ptr, byval scale as Const Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_GetScale(byval geometry as fmod_geometry ptr, byval scale as Fmod_vector ptr) as Fmod_result
Declare Function FMOD_Geometry_Save(byval geometry as fmod_geometry ptr, byval data_ as any ptr, byval datasize as integer ptr) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_Geometry_SetUserData(byval geometry as fmod_geometry ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_Geometry_GetUserData(byval geometry as fmod_geometry ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_Geometry_GetMemoryInfo(byval geometry as fmod_geometry ptr, byval Memorybits as uinteger, byval Event_memorybits as uinteger, _
byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result

/'
    'reverb' Api
'/

Declare Function FMOD_Reverb_Release(byval reverb as fmod_reverb ptr) as Fmod_result

/'
     Reverb Manipulation.
'/

Declare Function FMOD_Reverb_Set3DAttributes(byval reverb as fmod_reverb ptr, byval position as Const Fmod_vector ptr, byval Mindistance as float, _
byval Maxdistance as float) as Fmod_result
Declare Function FMOD_Reverb_Get3DAttributes(byval reverb as fmod_reverb ptr, byval position as Fmod_vector ptr, byval mindistance as float ptr, _
byval maxdistance as float ptr) as Fmod_result
Declare Function FMOD_Reverb_SetProperties(byval reverb as fmod_reverb ptr, byval properties as Const Fmod_reverb_properties ptr) as Fmod_result
Declare Function FMOD_Reverb_GetProperties(byval reverb as fmod_reverb ptr, byval properties as Fmod_reverb_properties ptr) as Fmod_result
Declare Function FMOD_Reverb_SetActive(byval reverb as fmod_reverb ptr, byval Active as Fmod_bool) as Fmod_result
Declare Function FMOD_Reverb_GetActive(byval reverb as fmod_reverb ptr, byval active as Fmod_bool ptr) as Fmod_result

/'
     Userdata Set/get.
'/

Declare Function FMOD_Reverb_SetUserData(byval reverb as fmod_reverb ptr, byval userdata as any ptr) as Fmod_result
Declare Function FMOD_Reverb_GetUserData(byval reverb as fmod_reverb ptr, byval userdata as any ptr ptr) as Fmod_result

Declare Function FMOD_Reverb_GetMemoryInfo(byval reverb as fmod_reverb ptr, byval Memorybits as uinteger, byval Event_memorybits as uinteger, _
byval memoryused as uinteger ptr, byval memoryused_details as Fmod_memory_usage_details ptr) as Fmod_result
End Extern
#endif
