Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

fmod.h

Go to the documentation of this file.
00001 /* ========================================================================================== */
00002 /* FMOD Main header file. Copyright (c), Firelight Technologies Pty, Ltd. 1999-2004.          */
00003 /* ========================================================================================== */
00004 
00005 #ifndef _FMOD_H_
00006 #define _FMOD_H_
00007 
00008 /* ========================================================================================== */
00009 /* DEFINITIONS                                                                                */
00010 /* ========================================================================================== */
00011 
00012 #if (!defined(WIN32) && !defined(_WIN32) && !defined(__WIN32__) && !defined(_WIN64) && !defined(_WIN32_WCE) && !defined(_XBOX)) || (defined(__GNUC__) && defined(WIN32))
00013     #ifndef __cdecl
00014         #define __cdecl
00015     #endif
00016     #ifndef __stdcall
00017         #define __stdcall
00018     #endif
00019 #endif 
00020 
00021 #if defined(_WIN32_WCE)
00022     #define F_API _cdecl
00023     #define F_CALLBACKAPI _cdecl
00024 #else
00025     #define F_API __stdcall
00026     #define F_CALLBACKAPI __stdcall
00027 #endif
00028 
00029 #ifdef DLL_EXPORTS
00030     #define DLL_API __declspec(dllexport)
00031 #else
00032     #if defined(__LCC__) || defined(__MINGW32__) || defined(__CYGWIN32__)
00033         #define DLL_API F_API
00034     #else
00035         #define DLL_API
00036     #endif /* __LCC__ ||  __MINGW32__ || __CYGWIN32__ */
00037 #endif /* DLL_EXPORTS */
00038 
00039 #define FMOD_VERSION    3.74f
00040 
00041 /* 
00042     FMOD defined types 
00043 */
00044 typedef struct FSOUND_SAMPLE    FSOUND_SAMPLE;
00045 typedef struct FSOUND_STREAM    FSOUND_STREAM;
00046 typedef struct FSOUND_DSPUNIT   FSOUND_DSPUNIT;
00047 typedef struct FSOUND_SYNCPOINT FSOUND_SYNCPOINT;
00048 typedef struct FMUSIC_MODULE    FMUSIC_MODULE;
00049 
00050 /* 
00051     Callback types
00052 */
00053 typedef void *      (F_CALLBACKAPI *FSOUND_OPENCALLBACK)    (const char *name);
00054 typedef void        (F_CALLBACKAPI *FSOUND_CLOSECALLBACK)   (void *handle);
00055 typedef int         (F_CALLBACKAPI *FSOUND_READCALLBACK)    (void *buffer, int size, void *handle);
00056 typedef int         (F_CALLBACKAPI *FSOUND_SEEKCALLBACK)    (void *handle, int pos, signed char mode);
00057 typedef int         (F_CALLBACKAPI *FSOUND_TELLCALLBACK)    (void *handle);
00058 
00059 typedef void *      (F_CALLBACKAPI *FSOUND_ALLOCCALLBACK)   (unsigned int size);
00060 typedef void *      (F_CALLBACKAPI *FSOUND_REALLOCCALLBACK) (void *ptr, unsigned int size);
00061 typedef void        (F_CALLBACKAPI *FSOUND_FREECALLBACK)    (void *ptr);
00062 
00063 typedef void *      (F_CALLBACKAPI *FSOUND_DSPCALLBACK)     (void *originalbuffer, void *newbuffer, int length, void *userdata);
00064 typedef signed char (F_CALLBACKAPI *FSOUND_STREAMCALLBACK)  (FSOUND_STREAM *stream, void *buff, int len, void *userdata);
00065 typedef signed char (F_CALLBACKAPI *FSOUND_METADATACALLBACK)(char *name, char *value, void *userdata);
00066 typedef void        (F_CALLBACKAPI *FMUSIC_CALLBACK)        (FMUSIC_MODULE *mod, unsigned char param);
00067 
00068 
00069 /*
00070 [ENUM]
00071 [
00072     [DESCRIPTION]   
00073     On failure of commands in FMOD, use FSOUND_GetError to attain what happened.
00074     
00075     [SEE_ALSO]      
00076     FSOUND_GetError
00077 ]
00078 */
00079 enum FMOD_ERRORS 
00080 {
00081     FMOD_ERR_NONE,             /* No errors */
00082     FMOD_ERR_BUSY,             /* Cannot call this command after FSOUND_Init.  Call FSOUND_Close first. */
00083     FMOD_ERR_UNINITIALIZED,    /* This command failed because FSOUND_Init or FSOUND_SetOutput was not called */
00084     FMOD_ERR_INIT,             /* Error initializing output device. */
00085     FMOD_ERR_ALLOCATED,        /* Error initializing output device, but more specifically, the output device is already in use and cannot be reused. */
00086     FMOD_ERR_PLAY,             /* Playing the sound failed. */
00087     FMOD_ERR_OUTPUT_FORMAT,    /* Soundcard does not support the features needed for this soundsystem (16bit stereo output) */
00088     FMOD_ERR_COOPERATIVELEVEL, /* Error setting cooperative level for hardware. */
00089     FMOD_ERR_CREATEBUFFER,     /* Error creating hardware sound buffer. */
00090     FMOD_ERR_FILE_NOTFOUND,    /* File not found */
00091     FMOD_ERR_FILE_FORMAT,      /* Unknown file format */
00092     FMOD_ERR_FILE_BAD,         /* Error loading file */
00093     FMOD_ERR_MEMORY,           /* Not enough memory or resources */
00094     FMOD_ERR_VERSION,          /* The version number of this file format is not supported */
00095     FMOD_ERR_INVALID_PARAM,    /* An invalid parameter was passed to this function */
00096     FMOD_ERR_NO_EAX,           /* Tried to use an EAX command on a non EAX enabled channel or output. */
00097     FMOD_ERR_CHANNEL_ALLOC,    /* Failed to allocate a new channel */
00098     FMOD_ERR_RECORD,           /* Recording is not supported on this machine */
00099     FMOD_ERR_MEDIAPLAYER,      /* Windows Media Player not installed so cannot play wma or use internet streaming. */
00100     FMOD_ERR_CDDEVICE          /* An error occured trying to open the specified CD device */
00101 };
00102 
00103 
00104 /*
00105 [ENUM]
00106 [
00107     [DESCRIPTION]   
00108     These output types are used with FSOUND_SetOutput, to choose which output driver to use.
00109     
00110     FSOUND_OUTPUT_DSOUND will not support hardware 3d acceleration if the sound card driver 
00111     does not support DirectX 6 Voice Manager Extensions.
00112 
00113     FSOUND_OUTPUT_WINMM is recommended for NT and CE.
00114 
00115     [SEE_ALSO]      
00116     FSOUND_SetOutput
00117     FSOUND_GetOutput
00118 ]
00119 */
00120 enum FSOUND_OUTPUTTYPES
00121 {
00122     FSOUND_OUTPUT_NOSOUND,    /* NoSound driver, all calls to this succeed but do nothing. */
00123     FSOUND_OUTPUT_WINMM,      /* Windows Multimedia driver. */
00124     FSOUND_OUTPUT_DSOUND,     /* DirectSound driver.  You need this to get EAX2 or EAX3 support, or FX api support. */
00125     FSOUND_OUTPUT_A3D,        /* A3D driver. */
00126 
00127     FSOUND_OUTPUT_OSS,        /* Linux/Unix OSS (Open Sound System) driver, i.e. the kernel sound drivers. */
00128     FSOUND_OUTPUT_ESD,        /* Linux/Unix ESD (Enlightment Sound Daemon) driver. */
00129     FSOUND_OUTPUT_ALSA,       /* Linux Alsa driver. */
00130 
00131     FSOUND_OUTPUT_ASIO,       /* Low latency ASIO driver */
00132     FSOUND_OUTPUT_XBOX,       /* Xbox driver */
00133     FSOUND_OUTPUT_PS2,        /* PlayStation 2 driver */
00134     FSOUND_OUTPUT_MAC,        /* Mac SoundManager driver */
00135     FSOUND_OUTPUT_GC,         /* Gamecube driver */
00136 
00137     FSOUND_OUTPUT_NOSOUND_NONREALTIME   /* This is the same as nosound, but the sound generation is driven by FSOUND_Update */
00138 };
00139 
00140 
00141 /*
00142 [ENUM]
00143 [
00144     [DESCRIPTION]   
00145     These mixer types are used with FSOUND_SetMixer, to choose which mixer to use, or to act 
00146     upon for other reasons using FSOUND_GetMixer.
00147     It is not nescessary to set the mixer.  FMOD will autodetect the best mixer for you.
00148 
00149     [SEE_ALSO]      
00150     FSOUND_SetMixer
00151     FSOUND_GetMixer
00152 ]
00153 */
00154 enum FSOUND_MIXERTYPES
00155 {
00156     FSOUND_MIXER_AUTODETECT,        /* CE/PS2/GC Only - Non interpolating/low quality mixer. */
00157     FSOUND_MIXER_BLENDMODE,         /* Removed / obsolete. */
00158     FSOUND_MIXER_MMXP5,             /* Removed / obsolete. */
00159     FSOUND_MIXER_MMXP6,             /* Removed / obsolete. */
00160 
00161     FSOUND_MIXER_QUALITY_AUTODETECT,/* All platforms - Autodetect the fastest quality mixer based on your cpu. */
00162     FSOUND_MIXER_QUALITY_FPU,       /* Win32/Linux only - Interpolating/volume ramping FPU mixer.  */
00163     FSOUND_MIXER_QUALITY_MMXP5,     /* Win32/Linux only - Interpolating/volume ramping P5 MMX mixer.  */
00164     FSOUND_MIXER_QUALITY_MMXP6,     /* Win32/Linux only - Interpolating/volume ramping ppro+ MMX mixer. */
00165 
00166     FSOUND_MIXER_MONO,              /* CE/PS2/GC only - MONO non interpolating/low quality mixer. For speed*/
00167     FSOUND_MIXER_QUALITY_MONO,      /* CE/PS2/GC only - MONO Interpolating mixer.  For speed */
00168 
00169     FSOUND_MIXER_MAX
00170 };
00171 
00172 
00173 /*
00174 [ENUM]
00175 [
00176     [DESCRIPTION]   
00177     These definitions describe the type of song being played.
00178 
00179     [SEE_ALSO]      
00180     FMUSIC_GetType  
00181 ]
00182 */
00183 enum FMUSIC_TYPES
00184 {
00185     FMUSIC_TYPE_NONE,       
00186     FMUSIC_TYPE_MOD,        /* Protracker / Fasttracker */
00187     FMUSIC_TYPE_S3M,        /* ScreamTracker 3 */
00188     FMUSIC_TYPE_XM,         /* FastTracker 2 */
00189     FMUSIC_TYPE_IT,         /* Impulse Tracker. */
00190     FMUSIC_TYPE_MIDI,       /* MIDI file */
00191     FMUSIC_TYPE_FSB         /* FMOD Sample Bank file */
00192 };
00193 
00194 
00195 /*
00196 [DEFINE_START] 
00197 [
00198     [NAME] 
00199     FSOUND_DSP_PRIORITIES
00200 
00201     [DESCRIPTION]   
00202     These default priorities are used by FMOD internal system DSP units.  They describe the 
00203     position of the DSP chain, and the order of how audio processing is executed.
00204     You can actually through the use of FSOUND_DSP_GetxxxUnit (where xxx is the name of the DSP
00205     unit), disable or even change the priority of a DSP unit.
00206 
00207     [SEE_ALSO]      
00208     FSOUND_DSP_Create
00209     FSOUND_DSP_SetPriority
00210     FSOUND_DSP_GetSpectrum
00211 ]
00212 */
00213 #define FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT        0       /* DSP CLEAR unit - done first */
00214 #define FSOUND_DSP_DEFAULTPRIORITY_SFXUNIT          100     /* DSP SFX unit - done second */
00215 #define FSOUND_DSP_DEFAULTPRIORITY_MUSICUNIT        200     /* DSP MUSIC unit - done third */
00216 #define FSOUND_DSP_DEFAULTPRIORITY_USER             300     /* User priority, use this as reference for your own DSP units */
00217 #define FSOUND_DSP_DEFAULTPRIORITY_FFTUNIT          900     /* This reads data for FSOUND_DSP_GetSpectrum, so it comes after user units */
00218 #define FSOUND_DSP_DEFAULTPRIORITY_CLIPANDCOPYUNIT  1000    /* DSP CLIP AND COPY unit - last */
00219 /* [DEFINE_END] */
00220 
00221 
00222 /*
00223 [DEFINE_START] 
00224 [
00225     [NAME] 
00226     FSOUND_CAPS
00227 
00228     [DESCRIPTION]   
00229     Driver description bitfields.  Use FSOUND_Driver_GetCaps to determine if a driver enumerated
00230     has the settings you are after.  The enumerated driver depends on the output mode, see
00231     FSOUND_OUTPUTTYPES
00232 
00233     [SEE_ALSO]
00234     FSOUND_GetDriverCaps
00235     FSOUND_OUTPUTTYPES
00236 ]
00237 */
00238 #define FSOUND_CAPS_HARDWARE                0x1     /* This driver supports hardware accelerated 3d sound. */
00239 #define FSOUND_CAPS_EAX2                    0x2     /* This driver supports EAX 2 reverb */
00240 #define FSOUND_CAPS_EAX3                    0x10    /* This driver supports EAX 3 reverb */
00241 /* [DEFINE_END] */
00242 
00243 
00244 /*
00245 [DEFINE_START] 
00246 [
00247     [NAME] 
00248     FSOUND_MODES
00249     
00250     [DESCRIPTION]   
00251     Sample description bitfields, OR them together for loading and describing samples.
00252     NOTE.  If the file format being loaded already has a defined format, such as WAV or MP3, then 
00253     trying to override the pre-defined format with a new set of format flags will not work.  For
00254     example, an 8 bit WAV file will not load as 16bit if you specify FSOUND_16BITS.  It will just
00255     ignore the flag and go ahead loading it as 8bits.  For these type of formats the only flags
00256     you can specify that will really alter the behaviour of how it is loaded, are the following.
00257     ---------
00258     Looping behaviour - FSOUND_LOOP_OFF, FSOUND_LOOP_NORMAL, FSOUND_LOOP_BIDI 
00259     Load destination - FSOUND_HW3D, FSOUND_HW2D, FSOUND_2D
00260     Loading behaviour - FSOUND_NONBLOCKING, FSOUND_LOADMEMORY, FSOUND_LOADRAW, FSOUND_MPEGACCURATE, FSOUND_MPEGHALFRATE, FSOUND_FORCEMONO
00261     Playback behaviour - FSOUND_STREAMABLE, FSOUND_ENABLEFX
00262     PlayStation 2 only - FSOUND_USECORE0, FSOUND_USECORE1, FSOUND_LOADMEMORYIOP    
00263     ---------
00264     See flag descriptions for what these do.
00265 ]
00266 */
00267 #define FSOUND_LOOP_OFF      0x00000001  /* For non looping samples. */
00268 #define FSOUND_LOOP_NORMAL   0x00000002  /* For forward looping samples. */
00269 #define FSOUND_LOOP_BIDI     0x00000004  /* For bidirectional looping samples.  (no effect if in hardware). */
00270 #define FSOUND_8BITS         0x00000008  /* For 8 bit samples. */
00271 #define FSOUND_16BITS        0x00000010  /* For 16 bit samples. */
00272 #define FSOUND_MONO          0x00000020  /* For mono samples. */
00273 #define FSOUND_STEREO        0x00000040  /* For stereo samples. */
00274 #define FSOUND_UNSIGNED      0x00000080  /* For user created source data containing unsigned samples. */
00275 #define FSOUND_SIGNED        0x00000100  /* For user created source data containing signed data. */
00276 #define FSOUND_DELTA         0x00000200  /* For user created source data stored as delta values. */
00277 #define FSOUND_IT214         0x00000400  /* For user created source data stored using IT214 compression. */
00278 #define FSOUND_IT215         0x00000800  /* For user created source data stored using IT215 compression. */
00279 #define FSOUND_HW3D          0x00001000  /* Attempts to make samples use 3d hardware acceleration. (if the card supports it) */
00280 #define FSOUND_2D            0x00002000  /* Tells software (not hardware) based sample not to be included in 3d processing. */
00281 #define FSOUND_STREAMABLE    0x00004000  /* For a streamimg sound where you feed the data to it. */
00282 #define FSOUND_LOADMEMORY    0x00008000  /* "name" will be interpreted as a pointer to data for streaming and samples. */
00283 #define FSOUND_LOADRAW       0x00010000  /* Will ignore file format and treat as raw pcm. */
00284 #define FSOUND_MPEGACCURATE  0x00020000  /* For FSOUND_Stream_Open - for accurate FSOUND_Stream_GetLengthMs/FSOUND_Stream_SetTime.  WARNING, see FSOUND_Stream_Open for inital opening time performance issues. */
00285 #define FSOUND_FORCEMONO     0x00040000  /* For forcing stereo streams and samples to be mono - needed if using FSOUND_HW3D and stereo data - incurs a small speed hit for streams */
00286 #define FSOUND_HW2D          0x00080000  /* 2D hardware sounds.  allows hardware specific effects */
00287 #define FSOUND_ENABLEFX      0x00100000  /* Allows DX8 FX to be played back on a sound.  Requires DirectX 8 - Note these sounds cannot be played more than once, be 8 bit, be less than a certain size, or have a changing frequency */
00288 #define FSOUND_MPEGHALFRATE  0x00200000  /* For FMODCE only - decodes mpeg streams using a lower quality decode, but faster execution */
00289 #define FSOUND_IMAADPCM      0x00400000  /* Contents are stored compressed as IMA ADPCM */
00290 #define FSOUND_VAG           0x00800000  /* For PS2 only - Contents are compressed as Sony VAG format */
00291 #define FSOUND_NONBLOCKING   0x01000000  /* For FSOUND_Stream_Open/FMUSIC_LoadSong - Causes stream or music to open in the background and not block the foreground app.  See FSOUND_Stream_GetOpenState or FMUSIC_GetOpenState to determine when it IS ready. */
00292 #define FSOUND_GCADPCM       0x02000000  /* For Gamecube only - Contents are compressed as Gamecube DSP-ADPCM format */
00293 #define FSOUND_MULTICHANNEL  0x04000000  /* For PS2 and Gamecube only - Contents are interleaved into a multi-channel (more than stereo) format */
00294 #define FSOUND_USECORE0      0x08000000  /* For PS2 only - Sample/Stream is forced to use hardware voices 00-23 */
00295 #define FSOUND_USECORE1      0x10000000  /* For PS2 only - Sample/Stream is forced to use hardware voices 24-47 */
00296 #define FSOUND_LOADMEMORYIOP 0x20000000  /* For PS2 only - "name" will be interpreted as a pointer to data for streaming and samples.  The address provided will be an IOP address */
00297 #define FSOUND_IGNORETAGS    0x40000000  /* Skips id3v2 etc tag checks when opening a stream, to reduce seek/read overhead when opening files (helps with CD performance) */
00298 #define FSOUND_STREAM_NET    0x80000000  /* Specifies an internet stream */
00299 
00300 #define FSOUND_NORMAL       (FSOUND_16BITS | FSOUND_SIGNED | FSOUND_MONO)      
00301 /* [DEFINE_END] */
00302 
00303 
00304 
00305 /*
00306 [DEFINE_START] 
00307 [
00308     [NAME] 
00309     FSOUND_CDPLAYMODES
00310     
00311     [DESCRIPTION]   
00312     Playback method for a CD Audio track, with FSOUND_CD_SetPlayMode
00313 
00314     [SEE_ALSO]    
00315     FSOUND_CD_SetPlayMode  
00316     FSOUND_CD_Play
00317 ]
00318 */
00319 #define FSOUND_CD_PLAYCONTINUOUS    0   /* Starts from the current track and plays to end of CD. */
00320 #define FSOUND_CD_PLAYONCE          1   /* Plays the specified track then stops. */
00321 #define FSOUND_CD_PLAYLOOPED        2   /* Plays the specified track looped, forever until stopped manually. */
00322 #define FSOUND_CD_PLAYRANDOM        3   /* Plays tracks in random order */
00323 /* [DEFINE_END] */
00324 
00325 
00326 /*
00327 [DEFINE_START] 
00328 [
00329     [NAME] 
00330     FSOUND_MISC_VALUES
00331     
00332     [DESCRIPTION]
00333     Miscellaneous values for FMOD functions.
00334 
00335     [SEE_ALSO]
00336     FSOUND_PlaySound
00337     FSOUND_PlaySoundEx
00338     FSOUND_Sample_Alloc
00339     FSOUND_Sample_Load
00340     FSOUND_SetPan
00341 ]
00342 */
00343 #define FSOUND_FREE             -1      /* value to play on any free channel, or to allocate a sample in a free sample slot. */
00344 #define FSOUND_UNMANAGED        -2      /* value to allocate a sample that is NOT managed by FSOUND or placed in a sample slot. */
00345 #define FSOUND_ALL              -3      /* for a channel index , this flag will affect ALL channels available!  Not supported by every function. */
00346 #define FSOUND_STEREOPAN        -1      /* value for FSOUND_SetPan so that stereo sounds are not played at half volume.  See FSOUND_SetPan for more on this. */
00347 #define FSOUND_SYSTEMCHANNEL    -1000   /* special 'channel' ID for all channel based functions that want to alter the global FSOUND software mixing output channel */
00348 #define FSOUND_SYSTEMSAMPLE     -1000   /* special 'sample' ID for all sample based functions that want to alter the global FSOUND software mixing output sample */
00349 
00350 /* [DEFINE_END] */
00351 
00352 
00353 /*
00354 [STRUCTURE] 
00355 [
00356     [DESCRIPTION]
00357     Structure defining a reverb environment.
00358     For more indepth descriptions of the reverb properties under win32, please see the EAX2 and EAX3
00359     documentation at http://developer.creative.com/ under the 'downloads' section.
00360     If they do not have the EAX3 documentation, then most information can be attained from
00361     the EAX2 documentation, as EAX3 only adds some more parameters and functionality on top of EAX2.
00362     Note the default reverb properties are the same as the FSOUND_PRESET_GENERIC preset.
00363     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.
00364     PORTABILITY: Each member has the platform it supports in braces ie (win32/xbox).  
00365     Some reverb parameters are only supported in win32 and some only on xbox. If all parameters are set then the reverb should product a similar effect on either platform.
00366     
00367     The numerical values listed below are the maximum, minimum and default values for each variable respectively.
00368 
00369     [SEE_ALSO]
00370     FSOUND_Reverb_SetProperties
00371     FSOUND_Reverb_GetProperties
00372     FSOUND_REVERB_PRESETS
00373     FSOUND_REVERB_FLAGS
00374 ]
00375 */
00376 typedef struct _FSOUND_REVERB_PROPERTIES /* MIN     MAX    DEFAULT   DESCRIPTION */
00377 {                                   
00378     unsigned int Environment;            /* 0     , 25    , 0      , sets all listener properties (WIN32/PS2 only) */
00379     float        EnvSize;                /* 1.0   , 100.0 , 7.5    , environment size in meters (WIN32 only) */
00380     float        EnvDiffusion;           /* 0.0   , 1.0   , 1.0    , environment diffusion (WIN32/XBOX) */
00381     int          Room;                   /* -10000, 0     , -1000  , room effect level (at mid frequencies) (WIN32/XBOX/PS2) */
00382     int          RoomHF;                 /* -10000, 0     , -100   , relative room effect level at high frequencies (WIN32/XBOX) */
00383     int          RoomLF;                 /* -10000, 0     , 0      , relative room effect level at low frequencies (WIN32 only) */
00384     float        DecayTime;              /* 0.1   , 20.0  , 1.49   , reverberation decay time at mid frequencies (WIN32/XBOX) */
00385     float        DecayHFRatio;           /* 0.1   , 2.0   , 0.83   , high-frequency to mid-frequency decay time ratio (WIN32/XBOX) */
00386     float        DecayLFRatio;           /* 0.1   , 2.0   , 1.0    , low-frequency to mid-frequency decay time ratio (WIN32 only) */
00387     int          Reflections;            /* -10000, 1000  , -2602  , early reflections level relative to room effect (WIN32/XBOX) */
00388     float        ReflectionsDelay;       /* 0.0   , 0.3   , 0.007  , initial reflection delay time (WIN32/XBOX) */
00389     float        ReflectionsPan[3];      /*       ,       , [0,0,0], early reflections panning vector (WIN32 only) */
00390     int          Reverb;                 /* -10000, 2000  , 200    , late reverberation level relative to room effect (WIN32/XBOX) */
00391     float        ReverbDelay;            /* 0.0   , 0.1   , 0.011  , late reverberation delay time relative to initial reflection (WIN32/XBOX) */
00392     float        ReverbPan[3];           /*       ,       , [0,0,0], late reverberation panning vector (WIN32 only) */
00393     float        EchoTime;               /* .075  , 0.25  , 0.25   , echo time (WIN32/PS2 only.  PS2 = Delay time for ECHO/DELAY modes only) */
00394     float        EchoDepth;              /* 0.0   , 1.0   , 0.0    , echo depth (WIN32/PS2 only.  PS2 = Feedback level for ECHO mode only) */
00395     float        ModulationTime;         /* 0.04  , 4.0   , 0.25   , modulation time (WIN32 only) */
00396     float        ModulationDepth;        /* 0.0   , 1.0   , 0.0    , modulation depth (WIN32 only) */
00397     float        AirAbsorptionHF;        /* -100  , 0.0   , -5.0   , change in level per meter at high frequencies (WIN32 only) */
00398     float        HFReference;            /* 1000.0, 20000 , 5000.0 , reference high frequency (hz) (WIN32/XBOX) */
00399     float        LFReference;            /* 20.0  , 1000.0, 250.0  , reference low frequency (hz) (WIN32 only) */
00400     float        RoomRolloffFactor;      /* 0.0   , 10.0  , 0.0    , like FSOUND_3D_SetRolloffFactor but for room effect (WIN32/XBOX) */
00401     float        Diffusion;              /* 0.0   , 100.0 , 100.0  , Value that controls the echo density in the late reverberation decay. (XBOX only) */
00402     float        Density;                /* 0.0   , 100.0 , 100.0  , Value that controls the modal density in the late reverberation decay (XBOX only) */
00403     unsigned int Flags;                  /* FSOUND_REVERB_FLAGS - modifies the behavior of above properties (WIN32/PS2 only) */
00404 } FSOUND_REVERB_PROPERTIES;
00405 
00406 
00407 /*
00408 [DEFINE_START] 
00409 [
00410     [NAME] 
00411     FSOUND_REVERB_FLAGS
00412     
00413     [DESCRIPTION]
00414     Values for the Flags member of the FSOUND_REVERB_PROPERTIES structure.
00415 
00416     [SEE_ALSO]
00417     FSOUND_REVERB_PROPERTIES
00418 ]
00419 */
00420 #define FSOUND_REVERB_FLAGS_DECAYTIMESCALE        0x00000001 /* 'EnvSize' affects reverberation decay time */
00421 #define FSOUND_REVERB_FLAGS_REFLECTIONSSCALE      0x00000002 /* 'EnvSize' affects reflection level */
00422 #define FSOUND_REVERB_FLAGS_REFLECTIONSDELAYSCALE 0x00000004 /* 'EnvSize' affects initial reflection delay time */
00423 #define FSOUND_REVERB_FLAGS_REVERBSCALE           0x00000008 /* 'EnvSize' affects reflections level */
00424 #define FSOUND_REVERB_FLAGS_REVERBDELAYSCALE      0x00000010 /* 'EnvSize' affects late reverberation delay time */
00425 #define FSOUND_REVERB_FLAGS_DECAYHFLIMIT          0x00000020 /* AirAbsorptionHF affects DecayHFRatio */
00426 #define FSOUND_REVERB_FLAGS_ECHOTIMESCALE         0x00000040 /* 'EnvSize' affects echo time */
00427 #define FSOUND_REVERB_FLAGS_MODULATIONTIMESCALE   0x00000080 /* 'EnvSize' affects modulation time */
00428 #define FSOUND_REVERB_FLAGS_CORE0                 0x00000100 /* PS2 Only - Reverb is applied to CORE0 (hw voices 0-23) */
00429 #define FSOUND_REVERB_FLAGS_CORE1                 0x00000200 /* PS2 Only - Reverb is applied to CORE1 (hw voices 24-47) */
00430 #define FSOUND_REVERB_FLAGS_DEFAULT              (FSOUND_REVERB_FLAGS_DECAYTIMESCALE |        \
00431                                                   FSOUND_REVERB_FLAGS_REFLECTIONSSCALE |      \
00432                                                   FSOUND_REVERB_FLAGS_REFLECTIONSDELAYSCALE | \
00433                                                   FSOUND_REVERB_FLAGS_REVERBSCALE |           \
00434                                                   FSOUND_REVERB_FLAGS_REVERBDELAYSCALE |      \
00435                                                   FSOUND_REVERB_FLAGS_DECAYHFLIMIT |          \
00436                                                   FSOUND_REVERB_FLAGS_CORE0 |                 \
00437                                                   FSOUND_REVERB_FLAGS_CORE1 )
00438 /* [DEFINE_END] */
00439 
00440 
00441 
00442 
00443 /*
00444 [DEFINE_START] 
00445 [
00446     [NAME] 
00447     FSOUND_REVERB_PRESETS
00448     
00449     [DESCRIPTION]   
00450     A set of predefined environment PARAMETERS, created by Creative Labs
00451     These are used to initialize an FSOUND_REVERB_PROPERTIES structure statically.
00452     ie 
00453     FSOUND_REVERB_PROPERTIES prop = FSOUND_PRESET_GENERIC;
00454 
00455     [SEE_ALSO]
00456     FSOUND_Reverb_SetProperties
00457 ]
00458 */
00459 /*                                     Env  Size    Diffus  Room   RoomHF  RmLF DecTm   DecHF  DecLF   Refl  RefDel  RefPan               Revb  RevDel  ReverbPan           EchoTm  EchDp  ModTm  ModDp  AirAbs  HFRef    LFRef  RRlOff Diffus  Densty  FLAGS */
00460 #define FSOUND_PRESET_OFF              {0,      7.5f,   1.00f, -10000, -10000, 0,   1.00f,  1.00f, 1.0f,  -2602, 0.007f, { 0.0f,0.0f,0.0f },   200, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f,   0.0f,   0.0f, 0x33f }
00461 #define FSOUND_PRESET_GENERIC          {0,      7.5f,   1.00f, -1000,  -100,   0,   1.49f,  0.83f, 1.0f,  -2602, 0.007f, { 0.0f,0.0f,0.0f },   200, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00462 #define FSOUND_PRESET_PADDEDCELL       {1,      1.4f,   1.00f, -1000,  -6000,  0,   0.17f,  0.10f, 1.0f,  -1204, 0.001f, { 0.0f,0.0f,0.0f },   207, 0.002f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00463 #define FSOUND_PRESET_ROOM                 {2,  1.9f,   1.00f, -1000,  -454,   0,   0.40f,  0.83f, 1.0f,  -1646, 0.002f, { 0.0f,0.0f,0.0f },    53, 0.003f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00464 #define FSOUND_PRESET_BATHROOM         {3,      1.4f,   1.00f, -1000,  -1200,  0,   1.49f,  0.54f, 1.0f,   -370, 0.007f, { 0.0f,0.0f,0.0f },  1030, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f,  60.0f, 0x3f }
00465 #define FSOUND_PRESET_LIVINGROOM       {4,      2.5f,   1.00f, -1000,  -6000,  0,   0.50f,  0.10f, 1.0f,  -1376, 0.003f, { 0.0f,0.0f,0.0f }, -1104, 0.004f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00466 #define FSOUND_PRESET_STONEROOM        {5,      11.6f,  1.00f, -1000,  -300,   0,   2.31f,  0.64f, 1.0f,   -711, 0.012f, { 0.0f,0.0f,0.0f },    83, 0.017f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00467 #define FSOUND_PRESET_AUDITORIUM       {6,      21.6f,  1.00f, -1000,  -476,   0,   4.32f,  0.59f, 1.0f,   -789, 0.020f, { 0.0f,0.0f,0.0f },  -289, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00468 #define FSOUND_PRESET_CONCERTHALL      {7,      19.6f,  1.00f, -1000,  -500,   0,   3.92f,  0.70f, 1.0f,  -1230, 0.020f, { 0.0f,0.0f,0.0f },    -2, 0.029f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00469 #define FSOUND_PRESET_CAVE             {8,      14.6f,  1.00f, -1000,  0,      0,   2.91f,  1.30f, 1.0f,   -602, 0.015f, { 0.0f,0.0f,0.0f },  -302, 0.022f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
00470 #define FSOUND_PRESET_ARENA            {9,      36.2f,  1.00f, -1000,  -698,   0,   7.24f,  0.33f, 1.0f,  -1166, 0.020f, { 0.0f,0.0f,0.0f },    16, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00471 #define FSOUND_PRESET_HANGAR           {10,     50.3f,  1.00f, -1000,  -1000,  0,   10.05f, 0.23f, 1.0f,   -602, 0.020f, { 0.0f,0.0f,0.0f },   198, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00472 #define FSOUND_PRESET_CARPETTEDHALLWAY {11,     1.9f,   1.00f, -1000,  -4000,  0,   0.30f,  0.10f, 1.0f,  -1831, 0.002f, { 0.0f,0.0f,0.0f }, -1630, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00473 #define FSOUND_PRESET_HALLWAY          {12,     1.8f,   1.00f, -1000,  -300,   0,   1.49f,  0.59f, 1.0f,  -1219, 0.007f, { 0.0f,0.0f,0.0f },   441, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00474 #define FSOUND_PRESET_STONECORRIDOR    {13,     13.5f,  1.00f, -1000,  -237,   0,   2.70f,  0.79f, 1.0f,  -1214, 0.013f, { 0.0f,0.0f,0.0f },   395, 0.020f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00475 #define FSOUND_PRESET_ALLEY            {14,     7.5f,   0.30f, -1000,  -270,   0,   1.49f,  0.86f, 1.0f,  -1204, 0.007f, { 0.0f,0.0f,0.0f },    -4, 0.011f, { 0.0f,0.0f,0.0f }, 0.125f, 0.95f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00476 #define FSOUND_PRESET_FOREST           {15,     38.0f,  0.30f, -1000,  -3300,  0,   1.49f,  0.54f, 1.0f,  -2560, 0.162f, { 0.0f,0.0f,0.0f },  -229, 0.088f, { 0.0f,0.0f,0.0f }, 0.125f, 1.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f,  79.0f, 100.0f, 0x3f }
00477 #define FSOUND_PRESET_CITY             {16,     7.5f,   0.50f, -1000,  -800,   0,   1.49f,  0.67f, 1.0f,  -2273, 0.007f, { 0.0f,0.0f,0.0f }, -1691, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f,  50.0f, 100.0f, 0x3f }
00478 #define FSOUND_PRESET_MOUNTAINS        {17,     100.0f, 0.27f, -1000,  -2500,  0,   1.49f,  0.21f, 1.0f,  -2780, 0.300f, { 0.0f,0.0f,0.0f }, -1434, 0.100f, { 0.0f,0.0f,0.0f }, 0.250f, 1.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f,  27.0f, 100.0f, 0x1f }
00479 #define FSOUND_PRESET_QUARRY           {18,     17.5f,  1.00f, -1000,  -1000,  0,   1.49f,  0.83f, 1.0f, -10000, 0.061f, { 0.0f,0.0f,0.0f },   500, 0.025f, { 0.0f,0.0f,0.0f }, 0.125f, 0.70f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00480 #define FSOUND_PRESET_PLAIN            {19,     42.5f,  0.21f, -1000,  -2000,  0,   1.49f,  0.50f, 1.0f,  -2466, 0.179f, { 0.0f,0.0f,0.0f }, -1926, 0.100f, { 0.0f,0.0f,0.0f }, 0.250f, 1.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f,  21.0f, 100.0f, 0x3f }
00481 #define FSOUND_PRESET_PARKINGLOT       {20,     8.3f,   1.00f, -1000,  0,      0,   1.65f,  1.50f, 1.0f,  -1363, 0.008f, { 0.0f,0.0f,0.0f }, -1153, 0.012f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
00482 #define FSOUND_PRESET_SEWERPIPE        {21,     1.7f,   0.80f, -1000,  -1000,  0,   2.81f,  0.14f, 1.0f,    429, 0.014f, { 0.0f,0.0f,0.0f },  1023, 0.021f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f,  80.0f,  60.0f, 0x3f }
00483 #define FSOUND_PRESET_UNDERWATER       {22,     1.8f,   1.00f, -1000,  -4000,  0,   1.49f,  0.10f, 1.0f,   -449, 0.007f, { 0.0f,0.0f,0.0f },  1700, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 1.18f, 0.348f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
00484 
00485 /* Non I3DL2 presets */
00486 
00487 #define FSOUND_PRESET_DRUGGED          {23,     1.9f,   0.50f, -1000,  0,      0,   8.39f,  1.39f, 1.0f,  -115,  0.002f, { 0.0f,0.0f,0.0f },   985, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
00488 #define FSOUND_PRESET_DIZZY            {24,     1.8f,   0.60f, -1000,  -400,   0,   17.23f, 0.56f, 1.0f,  -1713, 0.020f, { 0.0f,0.0f,0.0f },  -613, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 1.00f, 0.81f, 0.310f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
00489 #define FSOUND_PRESET_PSYCHOTIC        {25,     1.0f,   0.50f, -1000,  -151,   0,   7.56f,  0.91f, 1.0f,  -626,  0.020f, { 0.0f,0.0f,0.0f },   774, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 4.00f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
00490 
00491 /* PlayStation 2 Only presets */
00492 
00493 #define FSOUND_PRESET_PS2_ROOM         {1,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00494 #define FSOUND_PRESET_PS2_STUDIO_A     {2,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00495 #define FSOUND_PRESET_PS2_STUDIO_B     {3,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00496 #define FSOUND_PRESET_PS2_STUDIO_C     {4,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00497 #define FSOUND_PRESET_PS2_HALL         {5,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00498 #define FSOUND_PRESET_PS2_SPACE        {6,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00499 #define FSOUND_PRESET_PS2_ECHO         {7,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00500 #define FSOUND_PRESET_PS2_DELAY        {8,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00501 #define FSOUND_PRESET_PS2_PIPE         {9,      0,          0,         0,  0,      0,   0.0f,   0.0f,  0.0f,     0,  0.000f, { 0.0f,0.0f,0.0f },     0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f,  0.0f, 0000.0f,   0.0f, 0.0f,   0.0f,   0.0f, 0x31f }
00502 
00503 /* [DEFINE_END] */
00504 
00505 
00506 /*
00507 [STRUCTURE] 
00508 [
00509     [DESCRIPTION]
00510     Structure defining the properties for a reverb source, related to a FSOUND channel.
00511     For more indepth descriptions of the reverb properties under win32, please see the EAX3
00512     documentation at http://developer.creative.com/ under the 'downloads' section.
00513     If they do not have the EAX3 documentation, then most information can be attained from
00514     the EAX2 documentation, as EAX3 only adds some more parameters and functionality on top of 
00515     EAX2.
00516     
00517     Note the default reverb properties are the same as the FSOUND_PRESET_GENERIC preset.
00518     Note that integer values that typically range from -10,000 to 1000 are represented in 
00519     decibels, and are of a logarithmic scale, not linear, wheras float values are typically linear.
00520     PORTABILITY: Each member has the platform it supports in braces ie (win32/xbox).  
00521     Some reverb parameters are only supported in win32 and some only on xbox. If all parameters are set then
00522     the reverb should product a similar effect on either platform.
00523     Linux and FMODCE do not support the reverb api.
00524     
00525     The numerical values listed below are the maximum, minimum and default values for each variable respectively.
00526 
00527     [SEE_ALSO]
00528     FSOUND_Reverb_SetChannelProperties
00529     FSOUND_Reverb_GetChannelProperties
00530     FSOUND_REVERB_CHANNELFLAGS
00531 ]
00532 */
00533 typedef struct _FSOUND_REVERB_CHANNELPROPERTIES /* MIN     MAX    DEFAULT */
00534 {                                   
00535     int    Direct;                              /* -10000, 1000,  0,    direct path level (at low and mid frequencies) (WIN32/XBOX) */
00536     int    DirectHF;                            /* -10000, 0,     0,    relative direct path level at high frequencies (WIN32/XBOX) */
00537     int    Room;                                /* -10000, 1000,  0,    room effect level (at low and mid frequencies) (WIN32/XBOX/PS2) */
00538     int    RoomHF;                              /* -10000, 0,     0,    relative room effect level at high frequencies (WIN32/XBOX) */
00539     int    Obstruction;                         /* -10000, 0,     0,    main obstruction control (attenuation at high frequencies)  (WIN32/XBOX) */
00540     float  ObstructionLFRatio;                  /* 0.0,    1.0,   0.0,  obstruction low-frequency level re. main control (WIN32/XBOX) */
00541     int    Occlusion;                           /* -10000, 0,     0,    main occlusion control (attenuation at high frequencies) (WIN32/XBOX) */
00542     float  OcclusionLFRatio;                    /* 0.0,    1.0,   0.25, occlusion low-frequency level re. main control (WIN32/XBOX) */
00543     float  OcclusionRoomRatio;                  /* 0.0,    10.0,  1.5,  relative occlusion control for room effect (WIN32) */
00544     float  OcclusionDirectRatio;                /* 0.0,    10.0,  1.0,  relative occlusion control for direct path (WIN32) */
00545     int    Exclusion;                           /* -10000, 0,     0,    main exlusion control (attenuation at high frequencies) (WIN32) */
00546     float  ExclusionLFRatio;                    /* 0.0,    1.0,   1.0,  exclusion low-frequency level re. main control (WIN32) */
00547     int    OutsideVolumeHF;                     /* -10000, 0,     0,    outside sound cone level at high frequencies (WIN32) */
00548     float  DopplerFactor;                       /* 0.0,    10.0,  0.0,  like DS3D flDopplerFactor but per source (WIN32) */
00549     float  RolloffFactor;                       /* 0.0,    10.0,  0.0,  like DS3D flRolloffFactor but per source (WIN32) */
00550     float  RoomRolloffFactor;                   /* 0.0,    10.0,  0.0,  like DS3D flRolloffFactor but for room effect (WIN32/XBOX) */
00551     float  AirAbsorptionFactor;                 /* 0.0,    10.0,  1.0,  multiplies AirAbsorptionHF member of FSOUND_REVERB_PROPERTIES (WIN32) */
00552     int    Flags;                               /* FSOUND_REVERB_CHANNELFLAGS - modifies the behavior of properties (WIN32) */
00553 } FSOUND_REVERB_CHANNELPROPERTIES;
00554 
00555 
00556 /*
00557 [DEFINE_START] 
00558 [
00559     [NAME] 
00560     FSOUND_REVERB_CHANNELFLAGS
00561     
00562     [DESCRIPTION]
00563     Values for the Flags member of the FSOUND_REVERB_CHANNELPROPERTIES structure.
00564 
00565     [SEE_ALSO]
00566     FSOUND_REVERB_CHANNELPROPERTIES
00567 ]
00568 */
00569 #define FSOUND_REVERB_CHANNELFLAGS_DIRECTHFAUTO  0x00000001 /* Automatic setting of 'Direct'  due to distance from listener */
00570 #define FSOUND_REVERB_CHANNELFLAGS_ROOMAUTO      0x00000002 /* Automatic setting of 'Room'  due to distance from listener */
00571 #define FSOUND_REVERB_CHANNELFLAGS_ROOMHFAUTO    0x00000004 /* Automatic setting of 'RoomHF' due to distance from listener */
00572 #define FSOUND_REVERB_CHANNELFLAGS_DEFAULT       (FSOUND_REVERB_CHANNELFLAGS_DIRECTHFAUTO |   \
00573                                                   FSOUND_REVERB_CHANNELFLAGS_ROOMAUTO|        \
00574                                                   FSOUND_REVERB_CHANNELFLAGS_ROOMHFAUTO)
00575 /* [DEFINE_END] */
00576 
00577 
00578 /*
00579 [ENUM] 
00580 [
00581     [DESCRIPTION]
00582     These values are used with FSOUND_FX_Enable to enable DirectX 8 FX for a channel.
00583 
00584     [SEE_ALSO]
00585     FSOUND_FX_Enable
00586     FSOUND_FX_Disable
00587     FSOUND_FX_SetChorus
00588     FSOUND_FX_SetCompressor
00589     FSOUND_FX_SetDistortion
00590     FSOUND_FX_SetEcho
00591     FSOUND_FX_SetFlanger
00592     FSOUND_FX_SetGargle
00593     FSOUND_FX_SetI3DL2Reverb
00594     FSOUND_FX_SetParamEQ
00595     FSOUND_FX_SetWavesReverb
00596 ]
00597 */
00598 enum FSOUND_FX_MODES
00599 {
00600     FSOUND_FX_CHORUS,
00601     FSOUND_FX_COMPRESSOR,
00602     FSOUND_FX_DISTORTION,
00603     FSOUND_FX_ECHO,
00604     FSOUND_FX_FLANGER,
00605     FSOUND_FX_GARGLE,
00606     FSOUND_FX_I3DL2REVERB,
00607     FSOUND_FX_PARAMEQ,
00608     FSOUND_FX_WAVES_REVERB,
00609 
00610     FSOUND_FX_MAX
00611 };
00612 
00613 /*
00614 [ENUM]
00615 [
00616     [DESCRIPTION]   
00617     These are speaker types defined for use with the FSOUND_SetSpeakerMode command.
00618     Note - Only reliably works with FSOUND_OUTPUT_DSOUND or FSOUND_OUTPUT_XBOX output modes.  Other output modes will only 
00619     interpret FSOUND_SPEAKERMODE_MONO and set everything else to be stereo.
00620 
00621     Using either DolbyDigital or DTS will use whatever 5.1 digital mode is available if destination hardware is unsure.
00622 
00623     [SEE_ALSO]
00624     FSOUND_SetSpeakerMode
00625 
00626 ]
00627 */
00628 enum FSOUND_SPEAKERMODES
00629 {
00630     FSOUND_SPEAKERMODE_DOLBYDIGITAL,        /* Dolby Digital Output (XBOX or PC only). */
00631     FSOUND_SPEAKERMODE_HEADPHONES,          /* The speakers are headphones. */
00632     FSOUND_SPEAKERMODE_MONO,                /* The speakers are monaural. */
00633     FSOUND_SPEAKERMODE_QUAD,                /* The speakers are quadraphonic.  */
00634     FSOUND_SPEAKERMODE_STEREO,              /* The speakers are stereo (default value). */
00635     FSOUND_SPEAKERMODE_SURROUND,            /* The speakers are surround sound. */
00636     FSOUND_SPEAKERMODE_DTS,                 /* DTS output (XBOX only). */
00637     FSOUND_SPEAKERMODE_PROLOGIC2,           /* Dolby Prologic 2.  Playstation 2 and Gamecube only.  PlayStation 2 doesnt support interior panning, but supports 48 voices simultaneously. */
00638     FSOUND_SPEAKERMODE_PROLOGIC2_INTERIOR   /* Dolby Prologic 2.  Playstation 2 and Gamecube only.  PlayStation 2 does support interior panning, but only supports 24 voices simultaneously. */
00639 };
00640 
00641 
00642 /*
00643 [DEFINE_START] 
00644 [
00645     [NAME] 
00646     FSOUND_INIT_FLAGS
00647     
00648     [DESCRIPTION]   
00649     Initialization flags.  Use them with FSOUND_Init in the flags parameter to change various behaviour.
00650     
00651     FSOUND_INIT_ENABLESYSTEMCHANNELFX Is an init mode which enables the FSOUND mixer buffer to be affected by DirectX 8 effects.
00652     Note that due to limitations of DirectSound, FSOUND_Init may fail if this is enabled because the buffersize is too small.
00653     This can be fixed with FSOUND_SetBufferSize.  Increase the BufferSize until it works.
00654     When it is enabled you can use the FSOUND_FX api, and use FSOUND_SYSTEMCHANNEL as the channel id when setting parameters.
00655 
00656     [SEE_ALSO]
00657     FSOUND_Init
00658 ]
00659 */
00660 #define FSOUND_INIT_USEDEFAULTMIDISYNTH     0x0001    /* Win32 only - Causes MIDI playback to force software decoding. */
00661 #define FSOUND_INIT_GLOBALFOCUS             0x0002    /* Win32 only - For DirectSound output - sound is not muted when window is out of focus. */
00662 #define FSOUND_INIT_ENABLESYSTEMCHANNELFX   0x0004    /* Win32 only - For DirectSound output - Allows FSOUND_FX api to be used on global software mixer output! (use FSOUND_SYSTEMCHANNEL as channel id) */
00663 #define FSOUND_INIT_ACCURATEVULEVELS        0x0008    /* This latency adjusts FSOUND_GetCurrentLevels, but incurs a small cpu and memory hit */
00664 #define FSOUND_INIT_PS2_DISABLECORE0REVERB  0x0010    /* PS2 only   - Disable reverb on CORE 0 (SPU2 voices 00-23) to regain SRAM */
00665 #define FSOUND_INIT_PS2_DISABLECORE1REVERB  0x0020    /* PS2 only   - Disable reverb on CORE 1 (SPU2 voices 24-47) to regain SRAM */
00666 #define FSOUND_INIT_PS2_SWAPDMACORES        0x0040    /* PS2 only   - By default FMOD uses DMA CH0 for mixing, CH1 for uploads, this flag swaps them around */
00667 #define FSOUND_INIT_DONTLATENCYADJUST       0x0080    /* Callbacks are not latency adjusted, and are called at mix time.  Also information functions are immediate */
00668 #define FSOUND_INIT_GC_INITLIBS             0x0100    /* GC only    - Initializes GC audio libraries */
00669 #define FSOUND_INIT_STREAM_FROM_MAIN_THREAD 0x0200    /* Turns off fmod streamer thread, and makes streaming update from FSOUND_Update called by the user */
00670 #define FSOUND_INIT_PS2_USEVOLUMERAMPING    0x0400    /* PS2 only   - Turns on volume ramping system to remove hardware clicks. */
00671 #define FSOUND_INIT_DSOUND_DEFERRED         0x0800    /* Win32 only - For DirectSound output.  3D commands are batched together and executed at FSOUND_Update. */
00672 #define FSOUND_INIT_DSOUND_HRTF_LIGHT       0x1000    /* Win32 only - For DirectSound output.  FSOUND_HW3D buffers use a slightly higher quality algorithm when 3d hardware acceleration is not present. */
00673 #define FSOUND_INIT_DSOUND_HRTF_FULL        0x2000    /* Win32 only - For DirectSound output.  FSOUND_HW3D buffers use full quality 3d playback when 3d hardware acceleration is not present. */
00674 /* [DEFINE_END] */
00675 
00676 
00677 /*
00678 [ENUM]
00679 [
00680     [DESCRIPTION]   
00681     Status values for internet streams. Use FSOUND_Stream_Net_GetStatus to get the current status of an internet stream.
00682 
00683     [SEE_ALSO]
00684     FSOUND_Stream_Net_GetStatus
00685 ]
00686 */
00687 enum FSOUND_STREAM_NET_STATUS
00688 {
00689     FSOUND_STREAM_NET_NOTCONNECTED = 0,     /* Stream hasn't connected yet */
00690     FSOUND_STREAM_NET_CONNECTING,           /* Stream is connecting to remote host */
00691     FSOUND_STREAM_NET_BUFFERING,            /* Stream is buffering data */
00692     FSOUND_STREAM_NET_READY,                /* Stream is ready to play */
00693     FSOUND_STREAM_NET_ERROR                 /* Stream has suffered a fatal error */
00694 };
00695 
00696 
00697 /*
00698 [ENUM]
00699 [
00700     [DESCRIPTION]   
00701     Describes the type of a particular tag field.
00702 
00703     [SEE_ALSO]
00704     FSOUND_Stream_GetNumTagFields
00705     FSOUND_Stream_GetTagField
00706     FSOUND_Stream_FindTagField
00707 ]
00708 */
00709 enum FSOUND_TAGFIELD_TYPE
00710 {
00711     FSOUND_TAGFIELD_VORBISCOMMENT = 0,      /* A vorbis comment */
00712     FSOUND_TAGFIELD_ID3V1,                  /* Part of an ID3v1 tag */
00713     FSOUND_TAGFIELD_ID3V2,                  /* An ID3v2 frame */
00714     FSOUND_TAGFIELD_SHOUTCAST,              /* A SHOUTcast header line */
00715     FSOUND_TAGFIELD_ICECAST,                /* An Icecast header line */
00716     FSOUND_TAGFIELD_ASF                     /* An Advanced Streaming Format header line */
00717 };
00718 
00719 
00720 /*
00721 [DEFINE_START] 
00722 [
00723     [NAME] 
00724     FSOUND_STATUS_FLAGS
00725     
00726     [DESCRIPTION]   
00727     These values describe the protocol and format of an internet stream. Use FSOUND_Stream_Net_GetStatus to retrieve this information for an open internet stream.
00728     
00729     [SEE_ALSO]
00730     FSOUND_Stream_Net_GetStatus
00731 ]
00732 */
00733 #define FSOUND_PROTOCOL_SHOUTCAST   0x00000001
00734 #define FSOUND_PROTOCOL_ICECAST     0x00000002
00735 #define FSOUND_PROTOCOL_HTTP        0x00000004
00736 #define FSOUND_FORMAT_MPEG          0x00010000
00737 #define FSOUND_FORMAT_OGGVORBIS     0x00020000
00738 /* [DEFINE_END] */
00739 
00740 
00741 /*
00742 [STRUCTURE] 
00743 [
00744     [DESCRIPTION]
00745     Structure defining a CD table of contents. This structure is returned as a tag from FSOUND_Stream_FindTagField when the tag name "CD_TOC" is specified.
00746     Note: All tracks on the CD - including data tracks- will be represented in this structure so it's use for anything other than generating disc id information is not recommended.
00747     See the cdda example program for info on retrieving and using this structure.
00748 
00749     [SEE_ALSO]
00750     FSOUND_Stream_Open
00751     FSOUND_Stream_FindTagField
00752 ]
00753 */
00754 typedef struct _FSOUND_TOC_TAG
00755 {
00756     char name[4];                           /* The string "TOC", just in case this structure is accidentally treated as a string */
00757     int  numtracks;                         /* The number of tracks on the CD */
00758     int  min[100];                          /* The start offset of each track in minutes */
00759     int  sec[100];                          /* The start offset of each track in seconds */
00760     int  frame[100];                        /* The start offset of each track in frames */
00761 
00762 } FSOUND_TOC_TAG;
00763 
00764 
00765 /* ========================================================================================== */
00766 /* FUNCTION PROTOTYPES                                                                        */
00767 /* ========================================================================================== */
00768 
00769 #ifdef __cplusplus
00770 extern "C" {
00771 #endif
00772 
00773 /* ================================== */
00774 /* Initialization / Global functions. */
00775 /* ================================== */
00776 
00777 /* 
00778     PRE - FSOUND_Init functions. These can't be called after FSOUND_Init is 
00779     called (they will fail). They set up FMOD system functionality. 
00780 */
00781 
00782 DLL_API signed char     F_API FSOUND_SetOutput(int outputtype);
00783 DLL_API signed char     F_API FSOUND_SetDriver(int driver);
00784 DLL_API signed char     F_API FSOUND_SetMixer(int mixer);
00785 DLL_API signed char     F_API FSOUND_SetBufferSize(int len_ms);
00786 DLL_API signed char     F_API FSOUND_SetHWND(void *hwnd);
00787 DLL_API signed char     F_API FSOUND_SetMinHardwareChannels(int min);
00788 DLL_API signed char     F_API FSOUND_SetMaxHardwareChannels(int max);
00789 DLL_API signed char     F_API FSOUND_SetMemorySystem(void *pool, 
00790                                                      int poollen, 
00791                                                      FSOUND_ALLOCCALLBACK   useralloc,
00792                                                      FSOUND_REALLOCCALLBACK userrealloc,
00793                                                      FSOUND_FREECALLBACK    userfree);
00794 /* 
00795     Main initialization / closedown functions.
00796     Note : Use FSOUND_INIT_USEDEFAULTMIDISYNTH with FSOUND_Init for software override 
00797            with MIDI playback.
00798          : Use FSOUND_INIT_GLOBALFOCUS with FSOUND_Init to make sound audible no matter 
00799            which window is in focus. (FSOUND_OUTPUT_DSOUND only)
00800 */
00801 
00802 DLL_API signed char     F_API FSOUND_Init(int mixrate, int maxsoftwarechannels, unsigned int flags);
00803 DLL_API void            F_API FSOUND_Close();
00804 
00805 /* 
00806     Runtime system level functions 
00807 */
00808 
00809 DLL_API void            F_API FSOUND_Update();   /* This is called to update 3d sound / non-realtime output */
00810 
00811 DLL_API void            F_API FSOUND_SetSpeakerMode(unsigned int speakermode);
00812 DLL_API void            F_API FSOUND_SetSFXMasterVolume(int volume);
00813 DLL_API void            F_API FSOUND_SetPanSeperation(float pansep);
00814 DLL_API void            F_API FSOUND_File_SetCallbacks(FSOUND_OPENCALLBACK  useropen,
00815                                                        FSOUND_CLOSECALLBACK userclose,
00816                                                        FSOUND_READCALLBACK  userread,
00817                                                        FSOUND_SEEKCALLBACK  userseek,
00818                                                        FSOUND_TELLCALLBACK  usertell);
00819 
00820 /* 
00821     System information functions. 
00822 */
00823 
00824 DLL_API int             F_API FSOUND_GetError();
00825 DLL_API float           F_API FSOUND_GetVersion();
00826 DLL_API int             F_API FSOUND_GetOutput();
00827 DLL_API void *          F_API FSOUND_GetOutputHandle();
00828 DLL_API int             F_API FSOUND_GetDriver();
00829 DLL_API int             F_API FSOUND_GetMixer();
00830 DLL_API int             F_API FSOUND_GetNumDrivers();
00831 DLL_API const char *    F_API FSOUND_GetDriverName(int id);
00832 DLL_API signed char     F_API FSOUND_GetDriverCaps(int id, unsigned int *caps);
00833 DLL_API int             F_API FSOUND_GetOutputRate();
00834 DLL_API int             F_API FSOUND_GetMaxChannels();
00835 DLL_API int             F_API FSOUND_GetMaxSamples();
00836 DLL_API int             F_API FSOUND_GetSFXMasterVolume();
00837 DLL_API signed char     F_API FSOUND_GetNumHWChannels(int *num2d, int *num3d, int *total);
00838 DLL_API int             F_API FSOUND_GetChannelsPlaying();
00839 DLL_API float           F_API FSOUND_GetCPUUsage();
00840 DLL_API void            F_API FSOUND_GetMemoryStats(unsigned int *currentalloced, unsigned int *maxalloced);
00841 
00842 /* =================================== */
00843 /* Sample management / load functions. */
00844 /* =================================== */
00845 
00846 /* 
00847     Sample creation and management functions
00848     Note : Use FSOUND_LOADMEMORY   flag with FSOUND_Sample_Load to load from memory.
00849            Use FSOUND_LOADRAW      flag with FSOUND_Sample_Load to treat as as raw pcm data.
00850 */
00851 
00852 DLL_API FSOUND_SAMPLE * F_API FSOUND_Sample_Load(int index, const char *name_or_data, unsigned int mode, int offset, int length);
00853 DLL_API FSOUND_SAMPLE * F_API FSOUND_Sample_Alloc(int index, int length, unsigned int mode, int deffreq, int defvol, int defpan, int defpri);
00854 DLL_API void            F_API FSOUND_Sample_Free(FSOUND_SAMPLE *sptr);
00855 DLL_API signed char     F_API FSOUND_Sample_Upload(FSOUND_SAMPLE *sptr, void *srcdata, unsigned int mode);
00856 DLL_API signed char     F_API FSOUND_Sample_Lock(FSOUND_SAMPLE *sptr, int offset, int length, void **ptr1, void **ptr2, unsigned int *len1, unsigned int *len2);
00857 DLL_API signed char     F_API FSOUND_Sample_Unlock(FSOUND_SAMPLE *sptr, void *ptr1, void *ptr2, unsigned int len1, unsigned int len2);
00858 
00859 /*
00860     Sample control functions
00861 */
00862 
00863 DLL_API signed char     F_API FSOUND_Sample_SetMode(FSOUND_SAMPLE *sptr, unsigned int mode);
00864 DLL_API signed char     F_API FSOUND_Sample_SetLoopPoints(FSOUND_SAMPLE *sptr, int loopstart, int loopend);
00865 DLL_API signed char     F_API FSOUND_Sample_SetDefaults(FSOUND_SAMPLE *sptr, int deffreq, int defvol, int defpan, int defpri);
00866 DLL_API signed char     F_API FSOUND_Sample_SetDefaultsEx(FSOUND_SAMPLE *sptr, int deffreq, int defvol, int defpan, int defpri, int varfreq, int varvol, int varpan);
00867 DLL_API signed char     F_API FSOUND_Sample_SetMinMaxDistance(FSOUND_SAMPLE *sptr, float min, float max);
00868 DLL_API signed char     F_API FSOUND_Sample_SetMaxPlaybacks(FSOUND_SAMPLE *sptr, int max);
00869 
00870 /* 
00871     Sample information functions
00872 */
00873 
00874 DLL_API FSOUND_SAMPLE * F_API FSOUND_Sample_Get(int sampno);
00875 DLL_API const char *    F_API FSOUND_Sample_GetName(FSOUND_SAMPLE *sptr);
00876 DLL_API unsigned int    F_API FSOUND_Sample_GetLength(FSOUND_SAMPLE *sptr);
00877 DLL_API signed char     F_API FSOUND_Sample_GetLoopPoints(FSOUND_SAMPLE *sptr, int *loopstart, int *loopend);
00878 DLL_API signed char     F_API FSOUND_Sample_GetDefaults(FSOUND_SAMPLE *sptr, int *deffreq, int *defvol, int *defpan, int *defpri);
00879 DLL_API signed char     F_API FSOUND_Sample_GetDefaultsEx(FSOUND_SAMPLE *sptr, int *deffreq, int *defvol, int *defpan, int *defpri, int *varfreq, int *varvol, int *varpan);
00880 DLL_API unsigned int    F_API FSOUND_Sample_GetMode(FSOUND_SAMPLE *sptr);
00881 DLL_API signed char     F_API FSOUND_Sample_GetMinMaxDistance(FSOUND_SAMPLE *sptr, float *min, float *max);
00882   
00883 /* ============================ */
00884 /* Channel control functions.   */
00885 /* ============================ */
00886 
00887 /* 
00888     Playing and stopping sounds.  
00889     Note : Use FSOUND_FREE as the 'channel' variable, to let FMOD pick a free channel for you.
00890            Use FSOUND_ALL as the 'channel' variable to control ALL channels with one function call!
00891 */
00892 
00893 DLL_API int             F_API FSOUND_PlaySound(int channel, FSOUND_SAMPLE *sptr);
00894 DLL_API int             F_API FSOUND_PlaySoundEx(int channel, FSOUND_SAMPLE *sptr, FSOUND_DSPUNIT *dsp, signed char startpaused);
00895 DLL_API signed char     F_API FSOUND_StopSound(int channel);
00896 
00897 /* 
00898     Functions to control playback of a channel.
00899     Note : FSOUND_ALL can be used on most of these functions as a channel value.
00900 */
00901 
00902 DLL_API signed char     F_API FSOUND_SetFrequency(int channel, int freq);
00903 DLL_API signed char     F_API FSOUND_SetVolume(int channel, int vol);
00904 DLL_API signed char     F_API FSOUND_SetVolumeAbsolute(int channel, int vol);
00905 DLL_API signed char     F_API FSOUND_SetPan(int channel, int pan);
00906 DLL_API signed char     F_API FSOUND_SetSurround(int channel, signed char surround);
00907 DLL_API signed char     F_API FSOUND_SetMute(int channel, signed char mute);
00908 DLL_API signed char     F_API FSOUND_SetPriority(int channel, int priority);
00909 DLL_API signed char     F_API FSOUND_SetReserved(int channel, signed char reserved);
00910 DLL_API signed char     F_API FSOUND_SetPaused(int channel, signed char paused);
00911 DLL_API signed char     F_API FSOUND_SetLoopMode(int channel, unsigned int loopmode);
00912 DLL_API signed char     F_API FSOUND_SetCurrentPosition(int channel, unsigned int offset);
00913 DLL_API signed char     F_API FSOUND_3D_SetAttributes(int channel, const float *pos, const float *vel);
00914 DLL_API signed char     F_API FSOUND_3D_SetMinMaxDistance(int channel, float min, float max);
00915 
00916 /* 
00917     Channel information functions.
00918 */
00919 
00920 DLL_API signed char     F_API FSOUND_IsPlaying(int channel);
00921 DLL_API int             F_API FSOUND_GetFrequency(int channel);
00922 DLL_API int             F_API FSOUND_GetVolume(int channel);
00923 DLL_API int             F_API FSOUND_GetAmplitude(int channel);
00924 DLL_API int             F_API FSOUND_GetPan(int channel);
00925 DLL_API signed char     F_API FSOUND_GetSurround(int channel);
00926 DLL_API signed char     F_API FSOUND_GetMute(int channel);
00927 DLL_API int             F_API FSOUND_GetPriority(int channel);
00928 DLL_API signed char     F_API FSOUND_GetReserved(int channel);
00929 DLL_API signed char     F_API FSOUND_GetPaused(int channel);
00930 DLL_API unsigned int    F_API FSOUND_GetLoopMode(int channel);
00931 DLL_API unsigned int    F_API FSOUND_GetCurrentPosition(int channel);
00932 DLL_API FSOUND_SAMPLE * F_API FSOUND_GetCurrentSample(int channel);
00933 DLL_API signed char     F_API FSOUND_GetCurrentLevels(int channel, float *l, float *r);
00934 DLL_API int             F_API FSOUND_GetNumSubChannels(int channel);
00935 DLL_API int             F_API FSOUND_GetSubChannel(int channel, int subchannel);
00936 DLL_API signed char     F_API FSOUND_3D_GetAttributes(int channel, float *pos, float *vel);
00937 DLL_API signed char     F_API FSOUND_3D_GetMinMaxDistance(int channel, float *min, float *max);
00938 
00939 /* ========================== */
00940 /* Global 3D sound functions. */
00941 /* ========================== */
00942 
00943 /*
00944     See also 3d sample and channel based functions above.
00945     Call FSOUND_Update once a frame to process 3d information.
00946 */
00947 
00948 DLL_API void            F_API FSOUND_3D_Listener_SetAttributes(const float *pos, const float *vel, float fx, float fy, float fz, float tx, float ty, float tz);
00949 DLL_API void            F_API FSOUND_3D_Listener_GetAttributes(float *pos, float *vel, float *fx, float *fy, float *fz, float *tx, float *ty, float *tz);
00950 DLL_API void            F_API FSOUND_3D_Listener_SetCurrent(int current, int numlisteners);  /* use this if you use multiple listeners / splitscreen */
00951 DLL_API void            F_API FSOUND_3D_SetDopplerFactor(float scale);
00952 DLL_API void            F_API FSOUND_3D_SetDistanceFactor(float scale);
00953 DLL_API void            F_API FSOUND_3D_SetRolloffFactor(float scale);
00954 
00955 /* =================== */
00956 /* FX functions.       */
00957 /* =================== */
00958 
00959 /* 
00960     Functions to control DX8 only effects processing.
00961 
00962     - FX enabled samples can only be played once at a time, not multiple times at once.
00963     - Sounds have to be created with FSOUND_HW2D or FSOUND_HW3D for this to work.
00964     - FSOUND_INIT_ENABLESYSTEMCHANNELFX can be used to apply hardware effect processing to the
00965       global mixed output of FMOD's software channels.
00966     - FSOUND_FX_Enable returns an FX handle that you can use to alter fx parameters.
00967     - FSOUND_FX_Enable can be called multiple times in a row, even on the same FX type,
00968       it will return a unique handle for each FX.
00969     - FSOUND_FX_Enable cannot be called if the sound is playing or locked.
00970     - FSOUND_FX_Disable must be called to reset/clear the FX from a channel.
00971 */
00972 
00973 DLL_API int             F_API FSOUND_FX_Enable(int channel, unsigned int fxtype);    /* See FSOUND_FX_MODES */
00974 DLL_API signed char     F_API FSOUND_FX_Disable(int channel);                        /* Disables all effects */
00975 
00976 DLL_API signed char     F_API FSOUND_FX_SetChorus(int fxid, float WetDryMix, float Depth, float Feedback, float Frequency, int Waveform, float Delay, int Phase);
00977 DLL_API signed char     F_API FSOUND_FX_SetCompressor(int fxid, float Gain, float Attack, float Release, float Threshold, float Ratio, float Predelay);
00978 DLL_API signed char     F_API FSOUND_FX_SetDistortion(int fxid, float Gain, float Edge, float PostEQCenterFrequency, float PostEQBandwidth, float PreLowpassCutoff);
00979 DLL_API signed char     F_API FSOUND_FX_SetEcho(int fxid, float WetDryMix, float Feedback, float LeftDelay, float RightDelay, int PanDelay);
00980 DLL_API signed char     F_API FSOUND_FX_SetFlanger(int fxid, float WetDryMix, float Depth, float Feedback, float Frequency, int Waveform, float Delay, int Phase);
00981 DLL_API signed char     F_API FSOUND_FX_SetGargle(int fxid, int RateHz, int WaveShape);
00982 DLL_API signed char     F_API FSOUND_FX_SetI3DL2Reverb(int fxid, int Room, int RoomHF, float RoomRolloffFactor, float DecayTime, float DecayHFRatio, int Reflections, float ReflectionsDelay, int Reverb, float ReverbDelay, float Diffusion, float Density, float HFReference);
00983 DLL_API signed char     F_API FSOUND_FX_SetParamEQ(int fxid, float Center, float Bandwidth, float Gain);
00984 DLL_API signed char     F_API FSOUND_FX_SetWavesReverb(int fxid, float InGain, float ReverbMix, float ReverbTime, float HighFreqRTRatio);  
00985  
00986 /* ========================= */
00987 /* File Streaming functions. */
00988 /* ========================= */
00989 
00990 /*
00991     Note : Use FSOUND_LOADMEMORY   flag with FSOUND_Stream_Open to stream from memory.
00992            Use FSOUND_LOADRAW      flag with FSOUND_Stream_Open to treat stream as raw pcm data.
00993            Use FSOUND_MPEGACCURATE flag with FSOUND_Stream_Open to open mpegs in 'accurate mode' for settime/gettime/getlengthms.
00994            Use FSOUND_FREE as the 'channel' variable, to let FMOD pick a free channel for you.
00995 */
00996 
00997 DLL_API signed char        F_API FSOUND_Stream_SetBufferSize(int ms);      /* call this before opening streams, not after */
00998                            
00999 DLL_API FSOUND_STREAM *    F_API FSOUND_Stream_Open(const char *name_or_data, unsigned int mode, int offset, int length);
01000 DLL_API FSOUND_STREAM *    F_API FSOUND_Stream_Create(FSOUND_STREAMCALLBACK callback, int length, unsigned int mode, int samplerate, void *userdata);
01001 DLL_API signed char        F_API FSOUND_Stream_Close(FSOUND_STREAM *stream);
01002                            
01003 DLL_API int                F_API FSOUND_Stream_Play(int channel, FSOUND_STREAM *stream);
01004 DLL_API int                F_API FSOUND_Stream_PlayEx(int channel, FSOUND_STREAM *stream, FSOUND_DSPUNIT *dsp, signed char startpaused);
01005 DLL_API signed char        F_API FSOUND_Stream_Stop(FSOUND_STREAM *stream);
01006                            
01007 DLL_API signed char        F_API FSOUND_Stream_SetPosition(FSOUND_STREAM *stream, unsigned int position);
01008 DLL_API unsigned int       F_API FSOUND_Stream_GetPosition(FSOUND_STREAM *stream);
01009 DLL_API signed char        F_API FSOUND_Stream_SetTime(FSOUND_STREAM *stream, int ms);
01010 DLL_API int                F_API FSOUND_Stream_GetTime(FSOUND_STREAM *stream);
01011 DLL_API int                F_API FSOUND_Stream_GetLength(FSOUND_STREAM *stream);
01012 DLL_API int                F_API FSOUND_Stream_GetLengthMs(FSOUND_STREAM *stream);
01013                            
01014 DLL_API signed char        F_API FSOUND_Stream_SetMode(FSOUND_STREAM *stream, unsigned int mode);
01015 DLL_API unsigned int       F_API FSOUND_Stream_GetMode(FSOUND_STREAM *stream);
01016 DLL_API signed char        F_API FSOUND_Stream_SetLoopPoints(FSOUND_STREAM *stream, unsigned int loopstartpcm, unsigned int loopendpcm);
01017 DLL_API signed char        F_API FSOUND_Stream_SetLoopCount(FSOUND_STREAM *stream, int count);
01018 DLL_API int                F_API FSOUND_Stream_GetOpenState(FSOUND_STREAM *stream);                /* use with FSOUND_NONBLOCKING opened streams */
01019 DLL_API FSOUND_SAMPLE *    F_API FSOUND_Stream_GetSample(FSOUND_STREAM *stream);
01020 DLL_API FSOUND_DSPUNIT *   F_API FSOUND_Stream_CreateDSP(FSOUND_STREAM *stream, FSOUND_DSPCALLBACK callback, int priority, void *userdata);
01021                            
01022 DLL_API signed char        F_API FSOUND_Stream_SetEndCallback(FSOUND_STREAM *stream, FSOUND_STREAMCALLBACK callback, void *userdata);
01023 DLL_API signed char        F_API FSOUND_Stream_SetSyncCallback(FSOUND_STREAM *stream, FSOUND_STREAMCALLBACK callback, void *userdata);
01024 
01025 DLL_API FSOUND_SYNCPOINT * F_API FSOUND_Stream_AddSyncPoint(FSOUND_STREAM *stream, unsigned int pcmoffset, const char *name);
01026 DLL_API signed char        F_API FSOUND_Stream_DeleteSyncPoint(FSOUND_SYNCPOINT *point);
01027 DLL_API int                F_API FSOUND_Stream_GetNumSyncPoints(FSOUND_STREAM *stream);
01028 DLL_API FSOUND_SYNCPOINT * F_API FSOUND_Stream_GetSyncPoint(FSOUND_STREAM *stream, int index);
01029 DLL_API char *             F_API FSOUND_Stream_GetSyncPointInfo(FSOUND_SYNCPOINT *point, unsigned int *pcmoffset);
01030 
01031 DLL_API signed char        F_API FSOUND_Stream_SetSubStream(FSOUND_STREAM *stream, int index);     /* For FMOD .FSB bank files. */
01032 DLL_API int                F_API FSOUND_Stream_GetNumSubStreams(FSOUND_STREAM *stream);            /* For FMOD .FSB bank files. */
01033 DLL_API signed char        F_API FSOUND_Stream_SetSubStreamSentence(FSOUND_STREAM *stream, const int *sentencelist, int numitems);
01034 
01035 DLL_API signed char        F_API FSOUND_Stream_GetNumTagFields(FSOUND_STREAM *stream, int *num);
01036 DLL_API signed char        F_API FSOUND_Stream_GetTagField(FSOUND_STREAM *stream, int num, int *type, char **name, void **value, int *length);
01037 DLL_API signed char        F_API FSOUND_Stream_FindTagField(FSOUND_STREAM *stream, int type, const char *name, void **value, int *length);
01038 
01039 /*
01040     Internet streaming functions
01041 */
01042 
01043 DLL_API signed char        F_API FSOUND_Stream_Net_SetProxy(const char *proxy);
01044 DLL_API char *             F_API FSOUND_Stream_Net_GetLastServerStatus();
01045 DLL_API signed char        F_API FSOUND_Stream_Net_SetBufferProperties(int buffersize, int prebuffer_percent, int rebuffer_percent);
01046 DLL_API signed char        F_API FSOUND_Stream_Net_GetBufferProperties(int *buffersize, int *prebuffer_percent, int *rebuffer_percent);
01047 DLL_API signed char        F_API FSOUND_Stream_Net_SetMetadataCallback(FSOUND_STREAM *stream, FSOUND_METADATACALLBACK callback, void *userdata);
01048 DLL_API signed char        F_API FSOUND_Stream_Net_GetStatus(FSOUND_STREAM *stream, int *status, int *bufferpercentused, int *bitrate, unsigned int *flags);
01049 
01050 /* =================== */
01051 /* CD audio functions. */
01052 /* =================== */
01053 
01054 /*
01055     Note : 0 = default cdrom.  Otherwise specify the drive letter, for example. 'D'. 
01056 */
01057 
01058 DLL_API signed char     F_API FSOUND_CD_Play(char drive, int track);
01059 DLL_API void            F_API FSOUND_CD_SetPlayMode(char drive, signed char mode);
01060 DLL_API signed char     F_API FSOUND_CD_Stop(char drive);
01061 DLL_API signed char     F_API FSOUND_CD_SetPaused(char drive, signed char paused);
01062 DLL_API signed char     F_API FSOUND_CD_SetVolume(char drive, int volume);
01063 DLL_API signed char     F_API FSOUND_CD_SetTrackTime(char drive, unsigned int ms);
01064 DLL_API signed char     F_API FSOUND_CD_OpenTray(char drive, signed char open);
01065 
01066 DLL_API signed char     F_API FSOUND_CD_GetPaused(char drive);
01067 DLL_API int             F_API FSOUND_CD_GetTrack(char drive);
01068 DLL_API int             F_API FSOUND_CD_GetNumTracks(char drive);
01069 DLL_API int             F_API FSOUND_CD_GetVolume(char drive);
01070 DLL_API int             F_API FSOUND_CD_GetTrackLength(char drive, int track); 
01071 DLL_API int             F_API FSOUND_CD_GetTrackTime(char drive);
01072 
01073 /* ============== */
01074 /* DSP functions. */
01075 /* ============== */
01076 
01077 /* 
01078     DSP Unit control and information functions. 
01079     These functions allow you access to the mixed stream that FMOD uses to play back sound on.
01080 */
01081 
01082 DLL_API FSOUND_DSPUNIT *F_API FSOUND_DSP_Create(FSOUND_DSPCALLBACK callback, int priority, void *userdata);
01083 DLL_API void            F_API FSOUND_DSP_Free(FSOUND_DSPUNIT *unit);
01084 DLL_API void            F_API FSOUND_DSP_SetPriority(FSOUND_DSPUNIT *unit, int priority);
01085 DLL_API int             F_API FSOUND_DSP_GetPriority(FSOUND_DSPUNIT *unit);
01086 DLL_API void            F_API FSOUND_DSP_SetActive(FSOUND_DSPUNIT *unit, signed char active);
01087 DLL_API signed char     F_API FSOUND_DSP_GetActive(FSOUND_DSPUNIT *unit);
01088 
01089 /* 
01090     Functions to get hold of FSOUND 'system DSP unit' handles. 
01091 */
01092 
01093 DLL_API FSOUND_DSPUNIT *F_API FSOUND_DSP_GetClearUnit();
01094 DLL_API FSOUND_DSPUNIT *F_API FSOUND_DSP_GetSFXUnit();
01095 DLL_API FSOUND_DSPUNIT *F_API FSOUND_DSP_GetMusicUnit();
01096 DLL_API FSOUND_DSPUNIT *F_API FSOUND_DSP_GetFFTUnit();
01097 DLL_API FSOUND_DSPUNIT *F_API FSOUND_DSP_GetClipAndCopyUnit();
01098 
01099 /* 
01100     Miscellaneous DSP functions 
01101     Note for the spectrum analysis function to work, you have to enable the FFT DSP unit with 
01102     the following code FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), TRUE);
01103     It is off by default to save cpu usage.
01104 */
01105 
01106 DLL_API signed char     F_API FSOUND_DSP_MixBuffers(void *destbuffer, void *srcbuffer, int len, int freq, int vol, int pan, unsigned int mode);
01107 DLL_API void            F_API FSOUND_DSP_ClearMixBuffer();
01108 DLL_API int             F_API FSOUND_DSP_GetBufferLength();      /* Length of each DSP update */
01109 DLL_API int             F_API FSOUND_DSP_GetBufferLengthTotal(); /* Total buffer length due to FSOUND_SetBufferSize */
01110 DLL_API float *         F_API FSOUND_DSP_GetSpectrum();          /* Array of 512 floats - call FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), TRUE)) for this to work. */
01111 
01112 /* =================================================================================== */
01113 /* Reverb functions. (eax2/eax3 reverb)  (ONLY SUPPORTED ON WIN32 W/ FSOUND_HW3D FLAG) */
01114 /* =================================================================================== */
01115 
01116 /*
01117     See top of file for definitions and information on the reverb parameters.
01118 */
01119 
01120 DLL_API signed char     F_API FSOUND_Reverb_SetProperties(const FSOUND_REVERB_PROPERTIES *prop);
01121 DLL_API signed char     F_API FSOUND_Reverb_GetProperties(FSOUND_REVERB_PROPERTIES *prop);
01122 DLL_API signed char     F_API FSOUND_Reverb_SetChannelProperties(int channel, const FSOUND_REVERB_CHANNELPROPERTIES *prop);
01123 DLL_API signed char     F_API FSOUND_Reverb_GetChannelProperties(int channel, FSOUND_REVERB_CHANNELPROPERTIES *prop);
01124 
01125 /* ===================================================== */
01126 /* Recording functions  (ONLY SUPPORTED IN WIN32, WINCE) */
01127 /* ===================================================== */
01128 
01129 /*
01130     Recording initialization functions
01131 */
01132 
01133 DLL_API signed char     F_API FSOUND_Record_SetDriver(int outputtype);
01134 DLL_API int             F_API FSOUND_Record_GetNumDrivers();
01135 DLL_API const char *    F_API FSOUND_Record_GetDriverName(int id);
01136 DLL_API int             F_API FSOUND_Record_GetDriver();
01137 
01138 /*
01139     Recording functionality.  Only one recording session will work at a time.
01140 */
01141 
01142 DLL_API signed char     F_API FSOUND_Record_StartSample(FSOUND_SAMPLE *sptr, signed char loop);
01143 DLL_API signed char     F_API FSOUND_Record_Stop();
01144 DLL_API int             F_API FSOUND_Record_GetPosition();  
01145 
01146 /* ========================================================================================== */
01147 /* FMUSIC API (MOD,S3M,XM,IT,MIDI PLAYBACK)                                                   */
01148 /* ========================================================================================== */
01149 
01150 /* 
01151     Song management / playback functions.
01152 */
01153 
01154 DLL_API FMUSIC_MODULE * F_API FMUSIC_LoadSong(const char *name);
01155 DLL_API FMUSIC_MODULE * F_API FMUSIC_LoadSongEx(const char *name_or_data, int offset, int length, unsigned int mode, const int *samplelist, int samplelistnum);
01156 DLL_API int             F_API FMUSIC_GetOpenState(FMUSIC_MODULE *mod);
01157 DLL_API signed char     F_API FMUSIC_FreeSong(FMUSIC_MODULE *mod);
01158 DLL_API signed char     F_API FMUSIC_PlaySong(FMUSIC_MODULE *mod);
01159 DLL_API signed char     F_API FMUSIC_StopSong(FMUSIC_MODULE *mod);
01160 DLL_API void            F_API FMUSIC_StopAllSongs();
01161 
01162 DLL_API signed char     F_API FMUSIC_SetZxxCallback(FMUSIC_MODULE *mod, FMUSIC_CALLBACK callback);
01163 DLL_API signed char     F_API FMUSIC_SetRowCallback(FMUSIC_MODULE *mod, FMUSIC_CALLBACK callback, int rowstep);
01164 DLL_API signed char     F_API FMUSIC_SetOrderCallback(FMUSIC_MODULE *mod, FMUSIC_CALLBACK callback, int orderstep);
01165 DLL_API signed char     F_API FMUSIC_SetInstCallback(FMUSIC_MODULE *mod, FMUSIC_CALLBACK callback, int instrument);
01166 
01167 DLL_API signed char     F_API FMUSIC_SetSample(FMUSIC_MODULE *mod, int sampno, FSOUND_SAMPLE *sptr);
01168 DLL_API signed char     F_API FMUSIC_SetUserData(FMUSIC_MODULE *mod, void *userdata);
01169 DLL_API signed char     F_API FMUSIC_OptimizeChannels(FMUSIC_MODULE *mod, int maxchannels, int minvolume);
01170 
01171 /*
01172     Runtime song functions. 
01173 */
01174 
01175 DLL_API signed char     F_API FMUSIC_SetReverb(signed char reverb);             /* MIDI only */
01176 DLL_API signed char     F_API FMUSIC_SetLooping(FMUSIC_MODULE *mod, signed char looping);
01177 DLL_API signed char     F_API FMUSIC_SetOrder(FMUSIC_MODULE *mod, int order);
01178 DLL_API signed char     F_API FMUSIC_SetPaused(FMUSIC_MODULE *mod, signed char pause);
01179 DLL_API signed char     F_API FMUSIC_SetMasterVolume(FMUSIC_MODULE *mod, int volume);
01180 DLL_API signed char     F_API FMUSIC_SetMasterSpeed(FMUSIC_MODULE *mode, float speed);
01181 DLL_API signed char     F_API FMUSIC_SetPanSeperation(FMUSIC_MODULE *mod, float pansep);
01182  
01183 /* 
01184     Static song information functions.
01185 */
01186 
01187 DLL_API const char *    F_API FMUSIC_GetName(FMUSIC_MODULE *mod);
01188 DLL_API int             F_API FMUSIC_GetType(FMUSIC_MODULE *mod);
01189 DLL_API int             F_API FMUSIC_GetNumOrders(FMUSIC_MODULE *mod);
01190 DLL_API int             F_API FMUSIC_GetNumPatterns(FMUSIC_MODULE *mod);
01191 DLL_API int             F_API FMUSIC_GetNumInstruments(FMUSIC_MODULE *mod);
01192 DLL_API int             F_API FMUSIC_GetNumSamples(FMUSIC_MODULE *mod);
01193 DLL_API int             F_API FMUSIC_GetNumChannels(FMUSIC_MODULE *mod);
01194 DLL_API FSOUND_SAMPLE * F_API FMUSIC_GetSample(FMUSIC_MODULE *mod, int sampno);
01195 DLL_API int             F_API FMUSIC_GetPatternLength(FMUSIC_MODULE *mod, int orderno);
01196  
01197 /* 
01198     Runtime song information.
01199 */
01200 
01201 DLL_API signed char     F_API FMUSIC_IsFinished(FMUSIC_MODULE *mod);
01202 DLL_API signed char     F_API FMUSIC_IsPlaying(FMUSIC_MODULE *mod);
01203 DLL_API int             F_API FMUSIC_GetMasterVolume(FMUSIC_MODULE *mod);
01204 DLL_API int             F_API FMUSIC_GetGlobalVolume(FMUSIC_MODULE *mod);
01205 DLL_API int             F_API FMUSIC_GetOrder(FMUSIC_MODULE *mod);
01206 DLL_API int             F_API FMUSIC_GetPattern(FMUSIC_MODULE *mod);
01207 DLL_API int             F_API FMUSIC_GetSpeed(FMUSIC_MODULE *mod);
01208 DLL_API int             F_API FMUSIC_GetBPM(FMUSIC_MODULE *mod);
01209 DLL_API int             F_API FMUSIC_GetRow(FMUSIC_MODULE *mod);
01210 DLL_API signed char     F_API FMUSIC_GetPaused(FMUSIC_MODULE *mod);
01211 DLL_API int             F_API FMUSIC_GetTime(FMUSIC_MODULE *mod);
01212 DLL_API int             F_API FMUSIC_GetRealChannel(FMUSIC_MODULE *mod, int modchannel);
01213 DLL_API void *          F_API FMUSIC_GetUserData(FMUSIC_MODULE *mod);
01214 
01215 #ifdef __cplusplus
01216 }
01217 #endif
01218 
01219 #endif

Generated on Sun Jun 5 15:47:03 2005 for Defacto by  doxygen 1.4.3