PonyTracker
Un projet de tracker de musique
 Tout Structures de données Fichiers Fonctions Pages
fmod.h
1 /*$ preserve start $*/
2 
3 /* ============================================================================================ */
4 /* FMOD Ex - Main C/C++ header file. Copyright (c), Firelight Technologies Pty, Ltd. 2004-2014. */
5 /* */
6 /* This header is the base header for all other FMOD headers. If you are programming in C */
7 /* use this exclusively, or if you are programming C++ use this in conjunction with FMOD.HPP */
8 /* */
9 /* ============================================================================================ */
10 
11 #ifndef _FMOD_H
12 #define _FMOD_H
13 
14 /*
15  FMOD version number. Check this against FMOD::System::getVersion.
16  0xaaaabbcc -> aaaa = major version number. bb = minor version number. cc = development version number.
17 */
18 
19 #define FMOD_VERSION 0x00044433
20 
21 /*
22  Compiler specific settings.
23 */
24 
25 #if defined(__CYGWIN32__)
26  #define F_CDECL __cdecl
27  #define F_STDCALL __stdcall
28  #define F_DECLSPEC __declspec
29  #define F_DLLEXPORT ( dllexport )
30 #elif defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || defined(_WIN64)
31  #define F_CDECL _cdecl
32  #define F_STDCALL _stdcall
33  #define F_DECLSPEC __declspec
34  #define F_DLLEXPORT ( dllexport )
35 #elif defined(__MACH__) || defined(__ANDROID__) || defined(__linux__) || defined(__QNX__)
36  #define F_CDECL
37  #define F_STDCALL
38  #define F_DECLSPEC
39  #define F_DLLEXPORT __attribute__ ((visibility("default")))
40 #else
41  #define F_CDECL
42  #define F_STDCALL
43  #define F_DECLSPEC
44  #define F_DLLEXPORT
45 #endif
46 
47 #ifdef DLL_EXPORTS
48  #if defined(__MACH__) || defined(__ANDROID__) || defined(__linux__) || defined(__QNX__)
49  #define F_API __attribute__ ((visibility("default")))
50  #else
51  #define F_API __declspec(dllexport) F_STDCALL
52  #endif
53 #else
54  #define F_API F_STDCALL
55 #endif
56 
57 #define F_CALLBACK F_STDCALL
58 
59 /*
60  FMOD types.
61 */
62 
63 typedef int FMOD_BOOL;
64 typedef struct FMOD_SYSTEM FMOD_SYSTEM;
65 typedef struct FMOD_SOUND FMOD_SOUND;
66 typedef struct FMOD_CHANNEL FMOD_CHANNEL;
67 typedef struct FMOD_CHANNELGROUP FMOD_CHANNELGROUP;
68 typedef struct FMOD_SOUNDGROUP FMOD_SOUNDGROUP;
69 typedef struct FMOD_REVERB FMOD_REVERB;
70 typedef struct FMOD_DSP FMOD_DSP;
71 typedef struct FMOD_DSPCONNECTION FMOD_DSPCONNECTION;
72 typedef struct FMOD_POLYGON FMOD_POLYGON;
73 typedef struct FMOD_GEOMETRY FMOD_GEOMETRY;
74 typedef struct FMOD_SYNCPOINT FMOD_SYNCPOINT;
75 typedef unsigned int FMOD_MODE;
76 typedef unsigned int FMOD_TIMEUNIT;
77 typedef unsigned int FMOD_INITFLAGS;
78 typedef unsigned int FMOD_CAPS;
79 typedef unsigned int FMOD_DEBUGLEVEL;
80 typedef unsigned int FMOD_MEMORY_TYPE;
81 
82 /*$ fmod result start $*/
83 /*
84 [ENUM]
85 [
86  [DESCRIPTION]
87  error codes. Returned from every function.
88 
89  [REMARKS]
90 
91  [PLATFORMS]
92  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
93 
94  [SEE_ALSO]
95 ]
96 */
97 typedef enum
98 {
99  FMOD_OK, /* No errors. */
100  FMOD_ERR_ALREADYLOCKED, /* Tried to call lock a second time before unlock was called. */
101  FMOD_ERR_BADCOMMAND, /* Tried to call a function on a data type that does not allow this type of functionality (ie calling Sound::lock on a streaming sound). */
102  FMOD_ERR_CDDA_DRIVERS, /* Neither NTSCSI nor ASPI could be initialised. */
103  FMOD_ERR_CDDA_INIT, /* An error occurred while initialising the CDDA subsystem. */
104  FMOD_ERR_CDDA_INVALID_DEVICE, /* Couldn't find the specified device. */
105  FMOD_ERR_CDDA_NOAUDIO, /* No audio tracks on the specified disc. */
106  FMOD_ERR_CDDA_NODEVICES, /* No CD/DVD devices were found. */
107  FMOD_ERR_CDDA_NODISC, /* No disc present in the specified drive. */
108  FMOD_ERR_CDDA_READ, /* A CDDA read error occurred. */
109  FMOD_ERR_CHANNEL_ALLOC, /* Error trying to allocate a channel. */
110  FMOD_ERR_CHANNEL_STOLEN, /* The specified channel has been reused to play another sound. */
111  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. */
112  FMOD_ERR_DMA, /* DMA Failure. See debug output for more information. */
113  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). */
114  FMOD_ERR_DSP_FORMAT, /* DSP Format error. A DSP unit may have attempted to connect to this network with the wrong format. */
115  FMOD_ERR_DSP_NOTFOUND, /* DSP connection error. Couldn't find the DSP unit specified. */
116  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. */
117  FMOD_ERR_DSP_TOOMANYCONNECTIONS,/* DSP connection error. The unit being connected to or disconnected should only have 1 input or output. */
118  FMOD_ERR_FILE_BAD, /* Error loading file. */
119  FMOD_ERR_FILE_COULDNOTSEEK, /* Couldn't perform seek operation. This is a limitation of the medium (ie netstreams) or the file format. */
120  FMOD_ERR_FILE_DISKEJECTED, /* Media was ejected while reading. */
121  FMOD_ERR_FILE_EOF, /* End of file unexpectedly reached while trying to read essential data (truncated data?). */
122  FMOD_ERR_FILE_NOTFOUND, /* File not found. */
123  FMOD_ERR_FILE_UNWANTED, /* Unwanted file access occured. */
124  FMOD_ERR_FORMAT, /* Unsupported file or audio format. */
125  FMOD_ERR_HTTP, /* A HTTP error occurred. This is a catch-all for HTTP errors not listed elsewhere. */
126  FMOD_ERR_HTTP_ACCESS, /* The specified resource requires authentication or is forbidden. */
127  FMOD_ERR_HTTP_PROXY_AUTH, /* Proxy authentication is required to access the specified resource. */
128  FMOD_ERR_HTTP_SERVER_ERROR, /* A HTTP server error occurred. */
129  FMOD_ERR_HTTP_TIMEOUT, /* The HTTP request timed out. */
130  FMOD_ERR_INITIALIZATION, /* FMOD was not initialized correctly to support this function. */
131  FMOD_ERR_INITIALIZED, /* Cannot call this command after System::init. */
132  FMOD_ERR_INTERNAL, /* An error occured that wasn't supposed to. Contact support. */
133  FMOD_ERR_INVALID_ADDRESS, /* On Xbox 360, this memory address passed to FMOD must be physical, (ie allocated with XPhysicalAlloc.) */
134  FMOD_ERR_INVALID_FLOAT, /* Value passed in was a NaN, Inf or denormalized float. */
135  FMOD_ERR_INVALID_HANDLE, /* An invalid object handle was used. */
136  FMOD_ERR_INVALID_PARAM, /* An invalid parameter was passed to this function. */
137  FMOD_ERR_INVALID_POSITION, /* An invalid seek position was passed to this function. */
138  FMOD_ERR_INVALID_SPEAKER, /* An invalid speaker was passed to this function based on the current speaker mode. */
139  FMOD_ERR_INVALID_SYNCPOINT, /* The syncpoint did not come from this sound handle. */
140  FMOD_ERR_INVALID_VECTOR, /* The vectors passed in are not unit length, or perpendicular. */
141  FMOD_ERR_MAXAUDIBLE, /* Reached maximum audible playback count for this sound's soundgroup. */
142  FMOD_ERR_MEMORY, /* Not enough memory or resources. */
143  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. */
144  FMOD_ERR_MEMORY_SRAM, /* Not enough memory or resources on console sound ram. */
145  FMOD_ERR_NEEDS2D, /* Tried to call a command on a 3d sound when the command was meant for 2d sound. */
146  FMOD_ERR_NEEDS3D, /* Tried to call a command on a 2d sound when the command was meant for 3d sound. */
147  FMOD_ERR_NEEDSHARDWARE, /* Tried to use a feature that requires hardware support. (ie trying to play a GCADPCM compressed sound in software on Wii). */
148  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. */
149  FMOD_ERR_NET_CONNECT, /* Couldn't connect to the specified host. */
150  FMOD_ERR_NET_SOCKET_ERROR, /* A socket error occurred. This is a catch-all for socket-related errors not listed elsewhere. */
151  FMOD_ERR_NET_URL, /* The specified URL couldn't be resolved. */
152  FMOD_ERR_NET_WOULD_BLOCK, /* Operation on a non-blocking socket could not complete immediately. */
153  FMOD_ERR_NOTREADY, /* Operation could not be performed because specified sound/DSP connection is not ready. */
154  FMOD_ERR_OUTPUT_ALLOCATED, /* Error initializing output device, but more specifically, the output device is already in use and cannot be reused. */
155  FMOD_ERR_OUTPUT_CREATEBUFFER, /* Error creating hardware sound buffer. */
156  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. */
157  FMOD_ERR_OUTPUT_ENUMERATION, /* Error enumerating the available driver list. List may be inconsistent due to a recent device addition or removal. */
158  FMOD_ERR_OUTPUT_FORMAT, /* Soundcard does not support the minimum features needed for this soundsystem (16bit stereo output). */
159  FMOD_ERR_OUTPUT_INIT, /* Error initializing output device. */
160  FMOD_ERR_OUTPUT_NOHARDWARE, /* FMOD_HARDWARE was specified but the sound card does not have the resources necessary to play it. */
161  FMOD_ERR_OUTPUT_NOSOFTWARE, /* Attempted to create a software sound but no software channels were specified in System::init. */
162  FMOD_ERR_PAN, /* Panning only works with mono or stereo sound sources. */
163  FMOD_ERR_PLUGIN, /* An unspecified error has been returned from a 3rd party plugin. */
164  FMOD_ERR_PLUGIN_INSTANCES, /* The number of allowed instances of a plugin has been exceeded. */
165  FMOD_ERR_PLUGIN_MISSING, /* A requested output, dsp unit type or codec was not available. */
166  FMOD_ERR_PLUGIN_RESOURCE, /* A resource that the plugin requires cannot be found. (ie the DLS file for MIDI playback or other DLLs that it needs to load) */
167  FMOD_ERR_PRELOADED, /* The specified sound is still in use by the event system, call EventSystem::unloadFSB before trying to release it. */
168  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. */
169  FMOD_ERR_RECORD, /* An error occured trying to initialize the recording device. */
170  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. */
171  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. */
172  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. */
173  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. */
174  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. */
175  FMOD_ERR_TAGNOTFOUND, /* The specified tag could not be found or there are no tags. */
176  FMOD_ERR_TOOMANYCHANNELS, /* The sound created exceeds the allowable input channel count. This can be increased using the maxinputchannels parameter in System::setSoftwareFormat. */
177  FMOD_ERR_UNIMPLEMENTED, /* Something in FMOD hasn't been implemented when it should be! contact support! */
178  FMOD_ERR_UNINITIALIZED, /* This command failed because System::init or System::setDriver was not called. */
179  FMOD_ERR_UNSUPPORTED, /* A command issued was not supported by this object. Possibly a plugin without certain callbacks specified. */
180  FMOD_ERR_UPDATE, /* An error caused by System::update occured. */
181  FMOD_ERR_VERSION, /* The version number of this file format is not supported. */
182 
183  FMOD_ERR_EVENT_FAILED, /* An Event failed to be retrieved, most likely due to 'just fail' being specified as the max playbacks behavior. */
184  FMOD_ERR_EVENT_INFOONLY, /* Can't execute this command on an EVENT_INFOONLY event. */
185  FMOD_ERR_EVENT_INTERNAL, /* An error occured that wasn't supposed to. See debug log for reason. */
186  FMOD_ERR_EVENT_MAXSTREAMS, /* Event failed because 'Max streams' was hit when FMOD_EVENT_INIT_FAIL_ON_MAXSTREAMS was specified. */
187  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. */
188  FMOD_ERR_EVENT_NAMECONFLICT, /* A category with the same name already exists. */
189  FMOD_ERR_EVENT_NOTFOUND, /* The requested event, event group, event category or event property could not be found. */
190  FMOD_ERR_EVENT_NEEDSSIMPLE, /* Tried to call a function on a complex event that's only supported by simple events. */
191  FMOD_ERR_EVENT_GUIDCONFLICT, /* An event with the same GUID already exists. */
192  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. */
193 
194  FMOD_ERR_MUSIC_UNINITIALIZED, /* Music system is not initialized probably because no music data is loaded. */
195  FMOD_ERR_MUSIC_NOTFOUND, /* The requested music entity could not be found. */
196  FMOD_ERR_MUSIC_NOCALLBACK, /* The music callback is required, but it has not been set. */
197 
198  FMOD_RESULT_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
199 } FMOD_RESULT;
200 /*$ fmod result end $*/
201 
202 
203 /*
204 [STRUCTURE]
205 [
206  [DESCRIPTION]
207  Structure describing a point in 3D space.
208 
209  [REMARKS]
210  FMOD uses a left handed co-ordinate system by default.<br>
211  To use a right handed co-ordinate system specify FMOD_INIT_3D_RIGHTHANDED from FMOD_INITFLAGS in System::init.
212 
213  [PLATFORMS]
214  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
215 
216  [SEE_ALSO]
217  System::set3DListenerAttributes
218  System::get3DListenerAttributes
219  Channel::set3DAttributes
220  Channel::get3DAttributes
221  Channel::set3DCustomRolloff
222  Channel::get3DCustomRolloff
223  Sound::set3DCustomRolloff
224  Sound::get3DCustomRolloff
225  Geometry::addPolygon
226  Geometry::setPolygonVertex
227  Geometry::getPolygonVertex
228  Geometry::setRotation
229  Geometry::getRotation
230  Geometry::setPosition
231  Geometry::getPosition
232  Geometry::setScale
233  Geometry::getScale
234  FMOD_INITFLAGS
235 ]
236 */
237 typedef struct
238 {
239  float x; /* X co-ordinate in 3D space. */
240  float y; /* Y co-ordinate in 3D space. */
241  float z; /* Z co-ordinate in 3D space. */
242 } FMOD_VECTOR;
243 
244 /*
245 [STRUCTURE]
246 [
247  [DESCRIPTION]
248  Structure describing a globally unique identifier.
249 
250  [REMARKS]
251 
252  [PLATFORMS]
253  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
254 
255  [SEE_ALSO]
256  System::getDriverInfo
257 ]
258 */
259 typedef struct
260 {
261  unsigned int Data1; /* Specifies the first 8 hexadecimal digits of the GUID */
262  unsigned short Data2; /* Specifies the first group of 4 hexadecimal digits. */
263  unsigned short Data3; /* Specifies the second group of 4 hexadecimal digits. */
264  unsigned char Data4[8]; /* 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. */
265 } FMOD_GUID;
266 
267 /*
268 [STRUCTURE]
269 [
270  [DESCRIPTION]
271  Structure that is passed into FMOD_FILE_ASYNCREADCALLBACK. Use the information in this structure to perform
272 
273  [REMARKS]
274  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
275  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
276  <br>
277  Instructions: write to 'buffer', and 'bytesread' <b>BEFORE</b> setting 'result'.<br>
278  As soon as result is set, FMOD will asynchronously continue internally using the data provided in this structure.<br>
279  <br>
280  Set 'result' to the result expected from a normal file read callback.<br>
281  If the read was successful, set it to FMOD_OK.<br>
282  If it read some data but hit the end of the file, set it to FMOD_ERR_FILE_EOF.<br>
283  If a bad error occurred, return FMOD_ERR_FILE_BAD<br>
284  If a disk was ejected, return FMOD_ERR_FILE_DISKEJECTED.<br>
285 
286  [PLATFORMS]
287  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
288 
289  [SEE_ALSO]
290  FMOD_FILE_ASYNCREADCALLBACK
291  FMOD_FILE_ASYNCCANCELCALLBACK
292 ]
293 */
294 typedef struct
295 {
296  void *handle; /* [r] The file handle that was filled out in the open callback. */
297  unsigned int offset; /* [r] Seek position, make sure you read from this file offset. */
298  unsigned int sizebytes; /* [r] how many bytes requested for read. */
299  int priority; /* [r] 0 = low importance. 100 = extremely important (ie 'must read now or stuttering may occur') */
300 
301  void *buffer; /* [w] Buffer to read file data into. */
302  unsigned int bytesread; /* [w] Fill this in before setting result code to tell FMOD how many bytes were read. */
303  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. */
304 
305  void *userdata; /* [r] User data pointer. */
307 
308 
309 /*
310 [ENUM]
311 [
312  [DESCRIPTION]
313  These output types are used with System::setOutput / System::getOutput, to choose which output method to use.
314 
315  [REMARKS]
316  To pass information to the driver when initializing fmod use the extradriverdata parameter in System::init for the following reasons.<br>
317  <li>FMOD_OUTPUTTYPE_WAVWRITER - extradriverdata is a pointer to a char * filename that the wav writer will output to.
318  <li>FMOD_OUTPUTTYPE_WAVWRITER_NRT - extradriverdata is a pointer to a char * filename that the wav writer will output to.
319  <li>FMOD_OUTPUTTYPE_DSOUND - extradriverdata is a pointer to a HWND so that FMOD can set the focus on the audio for a particular window.
320  <li>FMOD_OUTPUTTYPE_PS3 - extradriverdata is a pointer to a FMOD_PS3_EXTRADRIVERDATA struct. This can be found in fmodps3.h.
321  <li>FMOD_OUTPUTTYPE_GC - extradriverdata is a pointer to a FMOD_GC_INFO struct. This can be found in fmodgc.h.
322  <li>FMOD_OUTPUTTYPE_WII - extradriverdata is a pointer to a FMOD_WII_INFO struct. This can be found in fmodwii.h.
323  <li>FMOD_OUTPUTTYPE_ALSA - extradriverdata is a pointer to a FMOD_LINUX_EXTRADRIVERDATA struct. This can be found in fmodlinux.h.<br>
324  <br>
325  Currently these are the only FMOD drivers that take extra information. Other unknown plugins may have different requirements.
326  <br><br>
327  Note! If FMOD_OUTPUTTYPE_WAVWRITER_NRT or FMOD_OUTPUTTYPE_NOSOUND_NRT are used, and if the System::update function is being called
328  very quickly (ie for a non realtime decode) it may be being called too quickly for the FMOD streamer thread to respond to.
329  The result will be a skipping/stuttering output in the captured audio.<br>
330  <br>
331  To remedy this, disable the FMOD Ex streamer thread, and use FMOD_INIT_STREAM_FROM_UPDATE to avoid skipping in the output stream,
332  as it will lock the mixer and the streamer together in the same thread.
333 
334  [PLATFORMS]
335  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
336 
337  [SEE_ALSO]
338  System::setOutput
339  System::getOutput
340  System::setSoftwareFormat
341  System::getSoftwareFormat
342  System::init
343  System::update
344  FMOD_INITFLAGS
345 ]
346 */
347 typedef enum
348 {
349  FMOD_OUTPUTTYPE_AUTODETECT, /* Picks the best output mode for the platform. This is the default. */
350 
351  FMOD_OUTPUTTYPE_UNKNOWN, /* All - 3rd party plugin, unknown. This is for use with System::getOutput only. */
352  FMOD_OUTPUTTYPE_NOSOUND, /* All - All calls in this mode succeed but make no sound. */
353  FMOD_OUTPUTTYPE_WAVWRITER, /* All - Writes output to fmodoutput.wav by default. Use the 'extradriverdata' parameter in System::init, by simply passing the filename as a string, to set the wav filename. */
354  FMOD_OUTPUTTYPE_NOSOUND_NRT, /* All - Non-realtime version of FMOD_OUTPUTTYPE_NOSOUND. User can drive mixer with System::update at whatever rate they want. */
355  FMOD_OUTPUTTYPE_WAVWRITER_NRT, /* All - Non-realtime version of FMOD_OUTPUTTYPE_WAVWRITER. User can drive mixer with System::update at whatever rate they want. */
356 
357  FMOD_OUTPUTTYPE_DSOUND, /* Win32/Win64 - DirectSound output. (Default on Windows XP and below) */
358  FMOD_OUTPUTTYPE_WINMM, /* Win32/Win64 - Windows Multimedia output. */
359  FMOD_OUTPUTTYPE_WASAPI, /* Win32 - Windows Audio Session API. (Default on Windows Vista and above) */
360  FMOD_OUTPUTTYPE_ASIO, /* Win32 - Low latency ASIO 2.0 driver. */
361  FMOD_OUTPUTTYPE_OSS, /* Linux/Linux64 - Open Sound System output. (Default on Linux, third preference) */
362  FMOD_OUTPUTTYPE_ALSA, /* Linux/Linux64 - Advanced Linux Sound Architecture output. (Default on Linux, second preference if available) */
363  FMOD_OUTPUTTYPE_ESD, /* Linux/Linux64 - Enlightment Sound Daemon output. */
364  FMOD_OUTPUTTYPE_PULSEAUDIO, /* Linux/Linux64 - PulseAudio output. (Default on Linux, first preference if available) */
365  FMOD_OUTPUTTYPE_COREAUDIO, /* Mac - Macintosh CoreAudio output. (Default on Mac) */
366  FMOD_OUTPUTTYPE_XBOX360, /* Xbox 360 - Native Xbox360 output. (Default on Xbox 360) */
367  FMOD_OUTPUTTYPE_PSP, /* PSP - Native PSP output. (Default on PSP) */
368  FMOD_OUTPUTTYPE_PS3, /* PS3 - Native PS3 output. (Default on PS3) */
369  FMOD_OUTPUTTYPE_NGP, /* NGP - Native NGP output. (Default on NGP) */
370  FMOD_OUTPUTTYPE_WII, /* Wii - Native Wii output. (Default on Wii) */
371  FMOD_OUTPUTTYPE_3DS, /* 3DS - Native 3DS output (Default on 3DS) */
372  FMOD_OUTPUTTYPE_AUDIOTRACK, /* Android - Java Audio Track output. (Default on Android 2.2 and below) */
373  FMOD_OUTPUTTYPE_OPENSL, /* Android - OpenSL ES output. (Default on Android 2.3 and above) */
374  FMOD_OUTPUTTYPE_NACL, /* Native Client - Native Client output. (Default on Native Client) */
375  FMOD_OUTPUTTYPE_WIIU, /* Wii U - Native Wii U output. (Default on Wii U) */
376  FMOD_OUTPUTTYPE_ASOUND, /* BlackBerry - Native BlackBerry asound output. (Default on BlackBerry) */
377  FMOD_OUTPUTTYPE_AUDIOOUT, /* Orbis - Audio Out output. (Default on Orbis) */
378  FMOD_OUTPUTTYPE_XAUDIO, /* Durango - XAudio2 output. */
379 
380  FMOD_OUTPUTTYPE_MAX, /* Maximum number of output types supported. */
381  FMOD_OUTPUTTYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
382 } FMOD_OUTPUTTYPE;
383 
384 
385 /*
386 [DEFINE]
387 [
388  [NAME]
389  FMOD_CAPS
390 
391  [DESCRIPTION]
392  Bit fields to use with System::getDriverCaps to determine the capabilities of a card / output device.
393 
394  [REMARKS]
395  It is important to check FMOD_CAPS_HARDWARE_EMULATED on windows machines, to then adjust System::setDSPBufferSize to (1024, 10) to compensate for the higher latency.
396 
397  [PLATFORMS]
398  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
399 
400  [SEE_ALSO]
401  System::getDriverCaps
402  System::setDSPBufferSize
403 ]
404 */
405 #define FMOD_CAPS_NONE 0x00000000 /* Device has no special capabilities. */
406 #define FMOD_CAPS_HARDWARE 0x00000001 /* Device supports hardware mixing. */
407 #define FMOD_CAPS_HARDWARE_EMULATED 0x00000002 /* User has device set to 'Hardware acceleration = off' in control panel, and now extra 200ms latency is incurred. */
408 #define FMOD_CAPS_OUTPUT_MULTICHANNEL 0x00000004 /* Device can do multichannel output, ie greater than 2 channels. */
409 #define FMOD_CAPS_OUTPUT_FORMAT_PCM8 0x00000008 /* Device can output to 8bit integer PCM. */
410 #define FMOD_CAPS_OUTPUT_FORMAT_PCM16 0x00000010 /* Device can output to 16bit integer PCM. */
411 #define FMOD_CAPS_OUTPUT_FORMAT_PCM24 0x00000020 /* Device can output to 24bit integer PCM. */
412 #define FMOD_CAPS_OUTPUT_FORMAT_PCM32 0x00000040 /* Device can output to 32bit integer PCM. */
413 #define FMOD_CAPS_OUTPUT_FORMAT_PCMFLOAT 0x00000080 /* Device can output to 32bit floating point PCM. */
414 #define FMOD_CAPS_REVERB_LIMITED 0x00002000 /* Device supports some form of limited hardware reverb, maybe parameterless and only selectable by environment. */
415 #define FMOD_CAPS_LOOPBACK 0x00004000 /* Device is a loopback recording device */
416 /* [DEFINE_END] */
417 
418 /*
419 [DEFINE]
420 [
421  [NAME]
422  FMOD_DEBUGLEVEL
423 
424  [DESCRIPTION]
425  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).
426 
427  [REMARKS]
428 
429  [PLATFORMS]
430  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
431 
432  [SEE_ALSO]
433  Debug_SetLevel
434  Debug_GetLevel
435 ]
436 */
437 #define FMOD_DEBUG_LEVEL_NONE 0x00000000
438 #define FMOD_DEBUG_LEVEL_LOG 0x00000001 /* Will display generic logging messages. */
439 #define FMOD_DEBUG_LEVEL_ERROR 0x00000002 /* Will display errors. */
440 #define FMOD_DEBUG_LEVEL_WARNING 0x00000004 /* Will display warnings that are not fatal. */
441 #define FMOD_DEBUG_LEVEL_HINT 0x00000008 /* Will hint to you if there is something possibly better you could be doing. */
442 #define FMOD_DEBUG_LEVEL_ALL 0x000000FF
443 #define FMOD_DEBUG_TYPE_MEMORY 0x00000100 /* Show FMOD memory related logging messages. */
444 #define FMOD_DEBUG_TYPE_THREAD 0x00000200 /* Show FMOD thread related logging messages. */
445 #define FMOD_DEBUG_TYPE_FILE 0x00000400 /* Show FMOD file system related logging messages. */
446 #define FMOD_DEBUG_TYPE_NET 0x00000800 /* Show FMOD network related logging messages. */
447 #define FMOD_DEBUG_TYPE_EVENT 0x00001000 /* Show FMOD Event related logging messages. */
448 #define FMOD_DEBUG_TYPE_ALL 0x0000FFFF
449 #define FMOD_DEBUG_DISPLAY_TIMESTAMPS 0x01000000 /* Display the timestamp of the log entry in milliseconds. */
450 #define FMOD_DEBUG_DISPLAY_LINENUMBERS 0x02000000 /* Display the FMOD Ex source code line numbers, for debugging purposes. */
451 #define FMOD_DEBUG_DISPLAY_COMPRESS 0x04000000 /* 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. */
452 #define FMOD_DEBUG_DISPLAY_THREAD 0x08000000 /* Display the thread ID of the calling function that caused this log entry to appear. */
453 #define FMOD_DEBUG_DISPLAY_ALL 0x0F000000
454 #define FMOD_DEBUG_ALL 0xFFFFFFFF
455 /* [DEFINE_END] */
456 
457 
458 /*
459 [DEFINE]
460 [
461  [NAME]
462  FMOD_MEMORY_TYPE
463 
464  [DESCRIPTION]
465  Bit fields for memory allocation type being passed into FMOD memory callbacks.
466 
467  [REMARKS]
468  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.<br>
469  Bits can be excluded if you want during Memory_Initialize so that you never get them.
470 
471  [PLATFORMS]
472  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
473 
474  [SEE_ALSO]
475  FMOD_MEMORY_ALLOCCALLBACK
476  FMOD_MEMORY_REALLOCCALLBACK
477  FMOD_MEMORY_FREECALLBACK
478  Memory_Initialize
479 
480 ]
481 */
482 #define FMOD_MEMORY_NORMAL 0x00000000 /* Standard memory. */
483 #define FMOD_MEMORY_STREAM_FILE 0x00000001 /* Stream file buffer, size controllable with System::setStreamBufferSize. */
484 #define FMOD_MEMORY_STREAM_DECODE 0x00000002 /* Stream decode buffer, size controllable with FMOD_CREATESOUNDEXINFO::decodebuffersize. */
485 #define FMOD_MEMORY_SAMPLEDATA 0x00000004 /* Sample data buffer. Raw audio data, usually PCM/MPEG/ADPCM/XMA data. */
486 #define FMOD_MEMORY_DSP_OUTPUTBUFFER 0x00000008 /* DSP memory block allocated when more than 1 output exists on a DSP node. */
487 #define FMOD_MEMORY_XBOX360_PHYSICAL 0x00100000 /* Requires XPhysicalAlloc / XPhysicalFree. */
488 #define FMOD_MEMORY_PERSISTENT 0x00200000 /* Persistent memory. Memory will be freed when System::release is called. */
489 #define FMOD_MEMORY_SECONDARY 0x00400000 /* Secondary memory. Allocation should be in secondary memory. For example RSX on the PS3. */
490 #define FMOD_MEMORY_ALL 0xFFFFFFFF
491 /* [DEFINE_END] */
492 
493 
494 /*
495 [ENUM]
496 [
497  [DESCRIPTION]
498  These are speaker types defined for use with the System::setSpeakerMode or System::getSpeakerMode command.
499 
500  [REMARKS]
501  These are important notes on speaker modes in regards to sounds created with FMOD_SOFTWARE.<br>
502  Note below the phrase 'sound channels' is used. These are the subchannels inside a sound, they are not related and
503  have nothing to do with the FMOD class "Channel".<br>
504  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".<br>
505  <br>
506  FMOD_SPEAKERMODE_RAW<br>
507  ---------------------<br>
508  This mode is for output devices that are not specifically mono/stereo/quad/surround/5.1 or 7.1, but are multichannel.<br>
509  Use System::setSoftwareFormat to specify the number of speakers you want to address, otherwise it will default to 2 (stereo).<br>
510  Sound channels map to speakers sequentially, so a mono sound maps to output speaker 0, stereo sound maps to output speaker 0 & 1.<br>
511  The user assumes knowledge of the speaker order. FMOD_SPEAKER enumerations may not apply, so raw channel indices should be used.<br>
512  Multichannel sounds map input channels to output channels 1:1. <br>
513  Channel::setPan and Channel::setSpeakerMix do not work.<br>
514  Speaker levels must be manually set with Channel::setSpeakerLevels.<br>
515  <br>
516  FMOD_SPEAKERMODE_MONO<br>
517  ---------------------<br>
518  This mode is for a 1 speaker arrangement.<br>
519  Panning does not work in this speaker mode.<br>
520  Mono, stereo and multichannel sounds have each sound channel played on the one speaker unity.<br>
521  Mix behavior for multichannel sounds can be set with Channel::setSpeakerLevels.<br>
522  Channel::setSpeakerMix does not work.<br>
523  <br>
524  FMOD_SPEAKERMODE_STEREO<br>
525  -----------------------<br>
526  This mode is for 2 speaker arrangements that have a left and right speaker.<br>
527  <li>Mono sounds default to an even distribution between left and right. They can be panned with Channel::setPan.<br>
528  <li>Stereo sounds default to the middle, or full left in the left speaker and full right in the right speaker.
529  <li>They can be cross faded with Channel::setPan.<br>
530  <li>Multichannel sounds have each sound channel played on each speaker at unity.<br>
531  <li>Mix behavior for multichannel sounds can be set with Channel::setSpeakerLevels.<br>
532  <li>Channel::setSpeakerMix works but only front left and right parameters are used, the rest are ignored.<br>
533  <br>
534  FMOD_SPEAKERMODE_QUAD<br>
535  ------------------------<br>
536  This mode is for 4 speaker arrangements that have a front left, front right, rear left and a rear right speaker.<br>
537  <li>Mono sounds default to an even distribution between front left and front right. They can be panned with Channel::setPan.<br>
538  <li>Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right.<br>
539  <li>They can be cross faded with Channel::setPan.<br>
540  <li>Multichannel sounds default to all of their sound channels being played on each speaker in order of input.<br>
541  <li>Mix behavior for multichannel sounds can be set with Channel::setSpeakerLevels.<br>
542  <li>Channel::setSpeakerMix works but side left, side right, center and lfe are ignored.<br>
543  <br>
544  FMOD_SPEAKERMODE_SURROUND<br>
545  ------------------------<br>
546  This mode is for 5 speaker arrangements that have a left/right/center/rear left/rear right.<br>
547  <li>Mono sounds default to the center speaker. They can be panned with Channel::setPan.<br>
548  <li>Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right.
549  <li>They can be cross faded with Channel::setPan.<br>
550  <li>Multichannel sounds default to all of their sound channels being played on each speaker in order of input.
551  <li>Mix behavior for multichannel sounds can be set with Channel::setSpeakerLevels.<br>
552  <li>Channel::setSpeakerMix works but side left / side right are ignored.<br>
553  <br>
554  FMOD_SPEAKERMODE_5POINT1<br>
555  ------------------------<br>
556  This mode is for 5.1 speaker arrangements that have a left/right/center/rear left/rear right and a subwoofer speaker.<br>
557  <li>Mono sounds default to the center speaker. They can be panned with Channel::setPan.<br>
558  <li>Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right.
559  <li>They can be cross faded with Channel::setPan.<br>
560  <li>Multichannel sounds default to all of their sound channels being played on each speaker in order of input.
561  <li>Mix behavior for multichannel sounds can be set with Channel::setSpeakerLevels.<br>
562  <li>Channel::setSpeakerMix works but side left / side right are ignored.<br>
563  <br>
564  FMOD_SPEAKERMODE_7POINT1<br>
565  ------------------------<br>
566  This mode is for 7.1 speaker arrangements that have a left/right/center/rear left/rear right/side left/side right
567  and a subwoofer speaker.<br>
568  <li>Mono sounds default to the center speaker. They can be panned with Channel::setPan.<br>
569  <li>Stereo sounds default to the left sound channel played on the front left, and the right sound channel played on the front right.
570  <li>They can be cross faded with Channel::setPan.<br>
571  <li>Multichannel sounds default to all of their sound channels being played on each speaker in order of input.
572  <li>Mix behavior for multichannel sounds can be set with Channel::setSpeakerLevels.<br>
573  <li>Channel::setSpeakerMix works and every parameter is used to set the balance of a sound in any speaker.<br>
574  <br>
575  FMOD_SPEAKERMODE_SRS5_1_MATRIX<br>
576  ------------------------------------------------------<br>
577  This mode is for mono, stereo, 5.1 and 6.1 speaker arrangements, as it is backwards and forwards compatible with
578  stereo, but to get a surround effect a SRS 5.1, Prologic or Prologic 2 hardware decoder / amplifier is needed or
579  a compatible SRS equipped device (e.g., laptop, TV, etc.) or accessory (e.g., headphone).<br>
580  Pan behavior is the same as FMOD_SPEAKERMODE_5POINT1.<br>
581  <br>
582  If this function is called the numoutputchannels setting in System::setSoftwareFormat is overwritten.<br>
583  <br>
584  Output rate must be 44100, 48000 or 96000 for this to work otherwise FMOD_ERR_OUTPUT_INIT will be returned.<br>
585  <br>
586  FMOD_SPEAKERMODE_DOLBY5_1_MATRIX<br>
587  ------------------------------------------------------<br>
588  This mode is for 5.1 speaker arrangements using a stereo signal, to get a surround effect a Dolby Pro Logic II
589  hardware decoder / amplifier is needed.<br>
590  Pan behavior is the same as FMOD_SPEAKERMODE_5POINT1.<br>
591  <br>
592  If this function is called the numoutputchannels setting in System::setSoftwareFormat is overwritten.<br>
593  <br>
594  Output rate must be 32000, 44100 or 48000 for this to work otherwise FMOD_ERR_OUTPUT_INIT will be returned.<br>
595  <br>
596  FMOD_SPEAKERMODE_MYEARS<br>
597  ------------------------------------------------------<br>
598  This mode is for headphones. This will attempt to load a MyEars profile (see myears.net.au) and use it to generate
599  surround sound on headphones using a personalized HRTF algorithm, for realistic 3d sound.<br>
600  Pan behavior is the same as FMOD_SPEAKERMODE_7POINT1.<br>
601  MyEars speaker mode will automatically be set if the speakermode is FMOD_SPEAKERMODE_STEREO and the MyEars profile exists.<br>
602  If this mode is set explicitly, FMOD_INIT_DISABLE_MYEARS_AUTODETECT has no effect.<br>
603  If this mode is set explicitly and the MyEars profile does not exist, FMOD_ERR_OUTPUT_DRIVERCALL will be returned.
604 
605  [PLATFORMS]
606  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
607 
608  [SEE_ALSO]
609  System::setSpeakerMode
610  System::getSpeakerMode
611  System::getDriverCaps
612  System::setSoftwareFormat
613  Channel::setSpeakerLevels
614 ]
615 */
616 typedef enum
617 {
618  FMOD_SPEAKERMODE_RAW, /* There is no specific speakermode. Sound channels are mapped in order of input to output. Use System::setSoftwareFormat to specify speaker count. See remarks for more information. */
619  FMOD_SPEAKERMODE_MONO, /* The speakers are monaural. */
620  FMOD_SPEAKERMODE_STEREO, /* The speakers are stereo (DEFAULT). */
621  FMOD_SPEAKERMODE_QUAD, /* 4 speaker setup. This includes front left, front right, rear left, rear right. */
622  FMOD_SPEAKERMODE_SURROUND, /* 5 speaker setup. This includes front left, front right, center, rear left, rear right. */
623  FMOD_SPEAKERMODE_5POINT1, /* 5.1 speaker setup. This includes front left, front right, center, rear left, rear right and a subwoofer. */
624  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. */
625 
626  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.*/
627  FMOD_SPEAKERMODE_DOLBY5_1_MATRIX, /* Stereo compatible output, embedded with surround information. Dolby Pro Logic II decoders will split the signal into a 5.1 speaker set-up. */
628  FMOD_SPEAKERMODE_MYEARS, /* Stereo output, but data is encoded using personalized HRTF algorithms. See myears.net.au */
629 
630  FMOD_SPEAKERMODE_MAX, /* Maximum number of speaker modes supported. */
631  FMOD_SPEAKERMODE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
632 } FMOD_SPEAKERMODE;
633 
634 
635 /*
636 [ENUM]
637 [
638  [DESCRIPTION]
639  These are speaker types defined for use with the Channel::setSpeakerLevels command.
640  It can also be used for speaker placement in the System::set3DSpeakerPosition command.
641 
642  [REMARKS]
643  If you are using FMOD_SPEAKERMODE_RAW and speaker assignments are meaningless, just cast a raw integer value to this type.<br>
644  For example (FMOD_SPEAKER)7 would use the 7th speaker (also the same as FMOD_SPEAKER_SIDE_RIGHT).<br>
645  Values higher than this can be used if an output system has more than 8 speaker types / output channels. 15 is the current maximum.<br>
646  <br>
647  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
648  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
649  clearer what speaker is being addressed on that platform.
650 
651  [PLATFORMS]
652  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
653 
654  [SEE_ALSO]
655  FMOD_SPEAKERMODE
656  Channel::setSpeakerLevels
657  Channel::getSpeakerLevels
658  System::set3DSpeakerPosition
659  System::get3DSpeakerPosition
660 ]
661 */
662 typedef enum
663 {
664  FMOD_SPEAKER_FRONT_LEFT,
665  FMOD_SPEAKER_FRONT_RIGHT,
666  FMOD_SPEAKER_FRONT_CENTER,
667  FMOD_SPEAKER_LOW_FREQUENCY,
668  FMOD_SPEAKER_BACK_LEFT,
669  FMOD_SPEAKER_BACK_RIGHT,
670  FMOD_SPEAKER_SIDE_LEFT,
671  FMOD_SPEAKER_SIDE_RIGHT,
672 
673  FMOD_SPEAKER_MAX, /* Maximum number of speaker types supported. */
674  FMOD_SPEAKER_MONO = FMOD_SPEAKER_FRONT_LEFT, /* For use with FMOD_SPEAKERMODE_MONO and Channel::SetSpeakerLevels. Mapped to same value as FMOD_SPEAKER_FRONT_LEFT. */
675  FMOD_SPEAKER_NULL = 65535, /* A non speaker. Use this with ASIO mapping to ignore a speaker. */
676  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. */
677  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. */
678  FMOD_SPEAKER_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
679 } FMOD_SPEAKER;
680 
681 
682 /*
683 [ENUM]
684 [
685  [DESCRIPTION]
686  These are plugin types defined for use with the System::getNumPlugins,
687  System::getPluginInfo and System::unloadPlugin functions.
688 
689  [REMARKS]
690 
691  [PLATFORMS]
692  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
693 
694  [SEE_ALSO]
695  System::getNumPlugins
696  System::getPluginInfo
697  System::unloadPlugin
698 ]
699 */
700 typedef enum
701 {
702  FMOD_PLUGINTYPE_OUTPUT, /* The plugin type is an output module. FMOD mixed audio will play through one of these devices */
703  FMOD_PLUGINTYPE_CODEC, /* The plugin type is a file format codec. FMOD will use these codecs to load file formats for playback. */
704  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. */
705 
706  FMOD_PLUGINTYPE_MAX, /* Maximum number of plugin types supported. */
707  FMOD_PLUGINTYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
708 } FMOD_PLUGINTYPE;
709 
710 
711 /*
712 [DEFINE]
713 [
714  [NAME]
715  FMOD_INITFLAGS
716 
717  [DESCRIPTION]
718  Initialization flags. Use them with System::init in the flags parameter to change various behavior.
719 
720  [REMARKS]
721  Use System::setAdvancedSettings to adjust settings for some of the features that are enabled by these flags.
722 
723  [PLATFORMS]
724  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
725 
726  [SEE_ALSO]
727  System::init
728  System::update
729  System::setAdvancedSettings
730  Channel::set3DOcclusion
731 ]
732 */
733 #define FMOD_INIT_NORMAL 0x00000000 /* All platforms - Initialize normally */
734 #define FMOD_INIT_STREAM_FROM_UPDATE 0x00000001 /* All platforms - No stream thread is created internally. Streams are driven from System::update. Mainly used with non-realtime outputs. */
735 #define FMOD_INIT_3D_RIGHTHANDED 0x00000002 /* All platforms - FMOD will treat +X as right, +Y as up and +Z as backwards (towards you). */
736 #define FMOD_INIT_SOFTWARE_DISABLE 0x00000004 /* All platforms - Disable software mixer to save memory. Anything created with FMOD_SOFTWARE will fail and DSP will not work. */
737 #define FMOD_INIT_OCCLUSION_LOWPASS 0x00000008 /* 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 Channel::set3DOcclusion is used or the geometry API. */
738 #define FMOD_INIT_HRTF_LOWPASS 0x00000010 /* 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 System::setAdvancedSettings to adjust cutoff frequency. */
739 #define FMOD_INIT_DISTANCE_FILTERING 0x00000200 /* 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 System::setAdvancedSettings to adjust the center frequency. */
740 #define FMOD_INIT_REVERB_PREALLOCBUFFERS 0x00000040 /* All platforms - FMOD Software reverb will preallocate enough buffers for reverb per channel, rather than allocating them and freeing them at runtime. */
741 #define FMOD_INIT_ENABLE_PROFILE 0x00000020 /* 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. */
742 #define FMOD_INIT_VOL0_BECOMES_VIRTUAL 0x00000080 /* All platforms - Any sounds that are 0 volume will go virtual and not be processed except for having their positions updated virtually. Use System::setAdvancedSettings to adjust what volume besides zero to switch to virtual at. */
743 #define FMOD_INIT_WASAPI_EXCLUSIVE 0x00000100 /* 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. */
744 #define FMOD_INIT_PS3_PREFERDTS 0x00800000 /* 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. */
745 #define FMOD_INIT_PS3_FORCE2CHLPCM 0x01000000 /* PS3 only - Force PS3 system output mode to 2 channel LPCM. */
746 #define FMOD_INIT_DISABLEDOLBY 0x00100000 /* Wii / 3DS - Disable Dolby Pro Logic surround. Speakermode will be set to STEREO even if user has selected surround in the system settings. */
747 #define FMOD_INIT_SYSTEM_MUSICMUTENOTPAUSE 0x00200000 /* 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. */
748 #define FMOD_INIT_SYNCMIXERWITHUPDATE 0x00400000 /* Win32/Wii/PS3/Xbox/Xbox 360 - FMOD Mixer thread is woken up to do a mix when System::update is called rather than waking periodically on its own timer. */
749 #define FMOD_INIT_GEOMETRY_USECLOSEST 0x04000000 /* All platforms - With the geometry engine, only process the closest polygon rather than accumulating all polygons the sound to listener line intersects. */
750 #define FMOD_INIT_DISABLE_MYEARS_AUTODETECT 0x08000000 /* 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. */
751 #define FMOD_INIT_PS3_DISABLEDTS 0x10000000 /* PS3 only - Disable DTS output mode selection */
752 #define FMOD_INIT_PS3_DISABLEDOLBYDIGITAL 0x20000000 /* PS3 only - Disable Dolby Digital output mode selection */
753 #define FMOD_INIT_7POINT1_DOLBYMAPPING 0x40000000 /* PS3/PS4 only - FMOD uses the WAVEFORMATEX Microsoft 7.1 speaker mapping where the last 2 pairs of speakers are 'rears' then 'sides', but on PS3/PS4 these are mapped to 'surrounds' and 'backs'. Use this flag to swap fmod's last 2 pair of speakers on PS3/PS4 to avoid needing to do a special case for these platforms. */
754 /* [DEFINE_END] */
755 
756 
757 /*
758 [ENUM]
759 [
760  [DESCRIPTION]
761  These definitions describe the type of song being played.
762 
763  [REMARKS]
764 
765  [PLATFORMS]
766  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
767 
768  [SEE_ALSO]
769  Sound::getFormat
770 ]
771 */
772 typedef enum
773 {
774  FMOD_SOUND_TYPE_UNKNOWN, /* 3rd party / unknown plugin format. */
775  FMOD_SOUND_TYPE_AIFF, /* AIFF. */
776  FMOD_SOUND_TYPE_ASF, /* Microsoft Advanced Systems Format (ie WMA/ASF/WMV). */
777  FMOD_SOUND_TYPE_AT3, /* Sony ATRAC 3 format */
778  FMOD_SOUND_TYPE_CDDA, /* Digital CD audio. */
779  FMOD_SOUND_TYPE_DLS, /* Sound font / downloadable sound bank. */
780  FMOD_SOUND_TYPE_FLAC, /* FLAC lossless codec. */
781  FMOD_SOUND_TYPE_FSB, /* FMOD Sample Bank. */
782  FMOD_SOUND_TYPE_GCADPCM, /* Nintendo GameCube/Wii ADPCM */
783  FMOD_SOUND_TYPE_IT, /* Impulse Tracker. */
784  FMOD_SOUND_TYPE_MIDI, /* MIDI. extracodecdata is a pointer to an FMOD_MIDI_EXTRACODECDATA structure. */
785  FMOD_SOUND_TYPE_MOD, /* Protracker / Fasttracker MOD. */
786  FMOD_SOUND_TYPE_MPEG, /* MP2/MP3 MPEG. */
787  FMOD_SOUND_TYPE_OGGVORBIS, /* Ogg vorbis. */
788  FMOD_SOUND_TYPE_PLAYLIST, /* Information only from ASX/PLS/M3U/WAX playlists */
789  FMOD_SOUND_TYPE_RAW, /* Raw PCM data. */
790  FMOD_SOUND_TYPE_S3M, /* ScreamTracker 3. */
791  FMOD_SOUND_TYPE_SF2, /* Sound font 2 format. */
792  FMOD_SOUND_TYPE_USER, /* User created sound. */
793  FMOD_SOUND_TYPE_WAV, /* Microsoft WAV. */
794  FMOD_SOUND_TYPE_XM, /* FastTracker 2 XM. */
795  FMOD_SOUND_TYPE_XMA, /* Xbox360 XMA */
796  FMOD_SOUND_TYPE_VAG, /* PlayStation Portable ADPCM VAG format. */
797  FMOD_SOUND_TYPE_AUDIOQUEUE, /* iPhone hardware decoder, supports AAC, ALAC and MP3. extracodecdata is a pointer to an FMOD_AUDIOQUEUE_EXTRACODECDATA structure. */
798  FMOD_SOUND_TYPE_XWMA, /* Xbox360 XWMA */
799  FMOD_SOUND_TYPE_BCWAV, /* 3DS BCWAV container format for DSP ADPCM and PCM */
800  FMOD_SOUND_TYPE_AT9, /* NGP ATRAC 9 format */
801  FMOD_SOUND_TYPE_VORBIS, /* Raw vorbis */
802  FMOD_SOUND_TYPE_MEDIA_FOUNDATION,/* Microsoft Media Foundation wrappers, supports ASF/WMA */
803 
804  FMOD_SOUND_TYPE_MAX, /* Maximum number of sound types supported. */
805  FMOD_SOUND_TYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
806 } FMOD_SOUND_TYPE;
807 
808 
809 /*
810 [ENUM]
811 [
812  [DESCRIPTION]
813  These definitions describe the native format of the hardware or software buffer that will be used.
814 
815  [REMARKS]
816  This is the format the native hardware or software buffer will be or is created in.
817 
818  [PLATFORMS]
819  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
820 
821  [SEE_ALSO]
822  System::createSound
823  Sound::getFormat
824 ]
825 */
826 typedef enum
827 {
828  FMOD_SOUND_FORMAT_NONE, /* Unitialized / unknown. */
829  FMOD_SOUND_FORMAT_PCM8, /* 8bit integer PCM data. */
830  FMOD_SOUND_FORMAT_PCM16, /* 16bit integer PCM data. */
831  FMOD_SOUND_FORMAT_PCM24, /* 24bit integer PCM data. */
832  FMOD_SOUND_FORMAT_PCM32, /* 32bit integer PCM data. */
833  FMOD_SOUND_FORMAT_PCMFLOAT, /* 32bit floating point PCM data. */
834  FMOD_SOUND_FORMAT_GCADPCM, /* Compressed Nintendo 3DS/Wii DSP data. */
835  FMOD_SOUND_FORMAT_IMAADPCM, /* Compressed IMA ADPCM data. */
836  FMOD_SOUND_FORMAT_VAG, /* Compressed PlayStation Portable ADPCM data. */
837  FMOD_SOUND_FORMAT_HEVAG, /* Compressed PSVita ADPCM data. */
838  FMOD_SOUND_FORMAT_XMA, /* Compressed Xbox360 XMA data. */
839  FMOD_SOUND_FORMAT_MPEG, /* Compressed MPEG layer 2 or 3 data. */
840  FMOD_SOUND_FORMAT_CELT, /* Compressed CELT data. */
841  FMOD_SOUND_FORMAT_AT9, /* Compressed PSVita ATRAC9 data. */
842  FMOD_SOUND_FORMAT_XWMA, /* Compressed Xbox360 xWMA data. */
843  FMOD_SOUND_FORMAT_VORBIS, /* Compressed Vorbis data. */
844 
845  FMOD_SOUND_FORMAT_MAX, /* Maximum number of sound formats supported. */
846  FMOD_SOUND_FORMAT_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
847 } FMOD_SOUND_FORMAT;
848 
849 
850 /*
851 [DEFINE]
852 [
853  [NAME]
854  FMOD_MODE
855 
856  [DESCRIPTION]
857  Sound description bitfields, bitwise OR them together for loading and describing sounds.
858 
859  [REMARKS]
860  By default a sound will open as a static sound that is decompressed fully into memory to PCM. (ie equivalent of FMOD_CREATESAMPLE)<br>
861  To have a sound stream instead, use FMOD_CREATESTREAM, or use the wrapper function System::createStream.<br>
862  Some opening modes (ie FMOD_OPENUSER, FMOD_OPENMEMORY, FMOD_OPENMEMORY_POINT, FMOD_OPENRAW) will need extra information.<br>
863  This can be provided using the FMOD_CREATESOUNDEXINFO structure.
864  <br>
865  Specifying FMOD_OPENMEMORY_POINT will POINT to your memory rather allocating its own sound buffers and duplicating it internally.<br>
866  <b><u>This means you cannot free the memory while FMOD is using it, until after Sound::release is called.</b></u>
867  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.<br>
868  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.<br>
869  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.<br>
870  <br>
871  <b>Xbox 360 memory</b> On Xbox 360 Specifying FMOD_OPENMEMORY_POINT to a virtual memory address will cause FMOD_ERR_INVALID_ADDRESS
872  to be returned. Use physical memory only for this functionality.<br>
873  <br>
874  FMOD_LOWMEM is used on a sound if you want to minimize the memory overhead, by having FMOD not allocate memory for certain
875  features that are not likely to be used in a game environment. These are :<br>
876  1. Sound::getName functionality is removed. 256 bytes per sound is saved.<br>
877 
878  [PLATFORMS]
879  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
880 
881  [SEE_ALSO]
882  System::createSound
883  System::createStream
884  Sound::setMode
885  Sound::getMode
886  Channel::setMode
887  Channel::getMode
888  Sound::set3DCustomRolloff
889  Channel::set3DCustomRolloff
890  Sound::getOpenState
891 ]
892 */
893 #define FMOD_DEFAULT 0x00000000 /* Default for all modes listed below. FMOD_LOOP_OFF, FMOD_2D, FMOD_HARDWARE */
894 #define FMOD_LOOP_OFF 0x00000001 /* For non looping sounds. (DEFAULT). Overrides FMOD_LOOP_NORMAL / FMOD_LOOP_BIDI. */
895 #define FMOD_LOOP_NORMAL 0x00000002 /* For forward looping sounds. */
896 #define FMOD_LOOP_BIDI 0x00000004 /* For bidirectional looping sounds. (only works on software mixed static sounds). */
897 #define FMOD_2D 0x00000008 /* Ignores any 3d processing. (DEFAULT). */
898 #define FMOD_3D 0x00000010 /* Makes the sound positionable in 3D. Overrides FMOD_2D. */
899 #define FMOD_HARDWARE 0x00000020 /* 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. */
900 #define FMOD_SOFTWARE 0x00000040 /* 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. */
901 #define FMOD_CREATESTREAM 0x00000080 /* 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. */
902 #define FMOD_CREATESAMPLE 0x00000100 /* 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. */
903 #define FMOD_CREATECOMPRESSEDSAMPLE 0x00000200 /* Load MP2/MP3/IMAADPCM/CELT/Vorbis/AT9 or XMA into memory and leave it compressed. CELT/Vorbis/AT9 encoding only supported in the FSB file format. 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 one of the supported formats, it will behave as if it was created with FMOD_CREATESAMPLE and decode the sound into PCM. */
904 #define FMOD_OPENUSER 0x00000400 /* 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 Sound::lock and Sound::unlock to place sound data into the sound if this is the case. */
905 #define FMOD_OPENMEMORY 0x00000800 /* "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.*/
906 #define FMOD_OPENMEMORY_POINT 0x10000000 /* "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 Sound::release. Will not work if the data is compressed and FMOD_CREATECOMPRESSEDSAMPLE is not used. */
907 #define FMOD_OPENRAW 0x00001000 /* 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. */
908 #define FMOD_OPENONLY 0x00002000 /* Just open the file, dont prebuffer or read. Good for fast opens for info, or when sound::readData is to be used. */
909 #define FMOD_ACCURATETIME 0x00004000 /* For System::createSound - for accurate Sound::getLength/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. */
910 #define FMOD_MPEGSEARCH 0x00008000 /* 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. */
911 #define FMOD_NONBLOCKING 0x00010000 /* For opening sounds and getting streamed subsounds (seeking) asyncronously. Use Sound::getOpenState to poll the state of the sound as it opens or retrieves the subsound in the background. */
912 #define FMOD_UNIQUE 0x00020000 /* Unique sound, can only be played one at a time */
913 #define FMOD_3D_HEADRELATIVE 0x00040000 /* Make the sound's position, velocity and orientation relative to the listener. */
914 #define FMOD_3D_WORLDRELATIVE 0x00080000 /* Make the sound's position, velocity and orientation absolute (relative to the world). (DEFAULT) */
915 #define FMOD_3D_INVERSEROLLOFF 0x00100000 /* 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) */
916 #define FMOD_3D_LINEARROLLOFF 0x00200000 /* This sound will follow a linear rolloff model where mindistance = full volume, maxdistance = silence. Rolloffscale is ignored. */
917 #define FMOD_3D_LINEARSQUAREROLLOFF 0x00400000 /* This sound will follow a linear-square rolloff model where mindistance = full volume, maxdistance = silence. Rolloffscale is ignored. */
918 #define FMOD_3D_CUSTOMROLLOFF 0x04000000 /* This sound will follow a rolloff model defined by Sound::set3DCustomRolloff / Channel::set3DCustomRolloff. */
919 #define FMOD_3D_IGNOREGEOMETRY 0x40000000 /* Is not affect by geometry occlusion. If not specified in Sound::setMode, or Channel::setMode, the flag is cleared and it is affected by geometry again. */
920 #define FMOD_UNICODE 0x01000000 /* Filename is double-byte unicode. */
921 #define FMOD_IGNORETAGS 0x02000000 /* Skips id3v2/asf/etc tag checks when opening a sound, to reduce seek/read overhead when opening files (helps with CD performance). */
922 #define FMOD_LOWMEM 0x08000000 /* Removes some features from samples to give a lower memory overhead, like Sound::getName. See remarks. */
923 #define FMOD_LOADSECONDARYRAM 0x20000000 /* Load sound into the secondary RAM of supported platform. On PS3, sounds will be loaded into RSX/VRAM. */
924 #define FMOD_VIRTUAL_PLAYFROMSTART 0x80000000 /* 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. */
925 
926 /* [DEFINE_END] */
927 
928 
929 /*
930 [ENUM]
931 [
932  [DESCRIPTION]
933  These values describe what state a sound is in after FMOD_NONBLOCKING has been used to open it.
934 
935  [REMARKS]
936  With streams, if you are using FMOD_NONBLOCKING, note that if the user calls Sound::getSubSound, a stream will go into FMOD_OPENSTATE_SEEKING state and sound related commands will return FMOD_ERR_NOTREADY.<br>
937  With streams, if you are using FMOD_NONBLOCKING, note that if the user calls Channel::getPosition, a stream will go into FMOD_OPENSTATE_SETPOSITION state and sound related commands will return FMOD_ERR_NOTREADY.<br>
938 
939  [PLATFORMS]
940  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
941 
942  [SEE_ALSO]
943  Sound::getOpenState
944  FMOD_MODE
945 ]
946 */
947 typedef enum
948 {
949  FMOD_OPENSTATE_READY = 0, /* Opened and ready to play. */
950  FMOD_OPENSTATE_LOADING, /* Initial load in progress. */
951  FMOD_OPENSTATE_ERROR, /* Failed to open - file not found, out of memory etc. See return value of Sound::getOpenState for what happened. */
952  FMOD_OPENSTATE_CONNECTING, /* Connecting to remote host (internet sounds only). */
953  FMOD_OPENSTATE_BUFFERING, /* Buffering data. */
954  FMOD_OPENSTATE_SEEKING, /* Seeking to subsound and re-flushing stream buffer. */
955  FMOD_OPENSTATE_PLAYING, /* Ready and playing, but not possible to release at this time without stalling the main thread. */
956  FMOD_OPENSTATE_SETPOSITION, /* Seeking within a stream to a different position. */
957 
958  FMOD_OPENSTATE_MAX, /* Maximum number of open state types. */
959  FMOD_OPENSTATE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
960 } FMOD_OPENSTATE;
961 
962 
963 /*
964 [ENUM]
965 [
966  [DESCRIPTION]
967  These flags are used with SoundGroup::setMaxAudibleBehavior to determine what happens when more sounds
968  are played than are specified with SoundGroup::setMaxAudible.
969 
970  [REMARKS]
971  When using FMOD_SOUNDGROUP_BEHAVIOR_MUTE, SoundGroup::setMuteFadeSpeed can be used to stop a sudden transition.
972  Instead, the time specified will be used to cross fade between the sounds that go silent and the ones that become audible.
973 
974  [PLATFORMS]
975  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
976 
977  [SEE_ALSO]
978  SoundGroup::setMaxAudibleBehavior
979  SoundGroup::getMaxAudibleBehavior
980  SoundGroup::setMaxAudible
981  SoundGroup::getMaxAudible
982  SoundGroup::setMuteFadeSpeed
983  SoundGroup::getMuteFadeSpeed
984 ]
985 */
986 typedef enum
987 {
988  FMOD_SOUNDGROUP_BEHAVIOR_FAIL, /* Any sound played that puts the sound count over the SoundGroup::setMaxAudible setting, will simply fail during System::playSound. */
989  FMOD_SOUNDGROUP_BEHAVIOR_MUTE, /* Any sound played that puts the sound count over the SoundGroup::setMaxAudible setting, will be silent, then if another sound in the group stops the sound that was silent before becomes audible again. */
990  FMOD_SOUNDGROUP_BEHAVIOR_STEALLOWEST, /* Any sound played that puts the sound count over the SoundGroup::setMaxAudible setting, will steal the quietest / least important sound playing in the group. */
991 
992  FMOD_SOUNDGROUP_BEHAVIOR_MAX, /* Maximum number of open state types. */
993  FMOD_SOUNDGROUP_BEHAVIOR_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
994 } FMOD_SOUNDGROUP_BEHAVIOR;
995 
996 
997 /*
998 [ENUM]
999 [
1000  [DESCRIPTION]
1001  These callback types are used with Channel::setCallback.
1002 
1003  [REMARKS]
1004  Each callback has commanddata parameters passed as int unique to the type of callback.<br>
1005  See reference to FMOD_CHANNEL_CALLBACK to determine what they might mean for each type of callback.<br>
1006  <br>
1007  <b>Note!</b> Currently the user must call System::update for these callbacks to trigger!
1008 
1009  [PLATFORMS]
1010  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1011 
1012  [SEE_ALSO]
1013  Channel::setCallback
1014  FMOD_CHANNEL_CALLBACK
1015  System::update
1016 ]
1017 */
1018 typedef enum
1019 {
1020  FMOD_CHANNEL_CALLBACKTYPE_END, /* Called when a sound ends. */
1021  FMOD_CHANNEL_CALLBACKTYPE_VIRTUALVOICE, /* Called when a voice is swapped out or swapped in. */
1022  FMOD_CHANNEL_CALLBACKTYPE_SYNCPOINT, /* Called when a syncpoint is encountered. Can be from wav file markers. */
1023  FMOD_CHANNEL_CALLBACKTYPE_OCCLUSION, /* Called when the channel has its geometry occlusion value calculated. Can be used to clamp or change the value. */
1024 
1025  FMOD_CHANNEL_CALLBACKTYPE_MAX, /* Maximum number of callback types supported. */
1026  FMOD_CHANNEL_CALLBACKTYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1027 } FMOD_CHANNEL_CALLBACKTYPE;
1028 
1029 
1030 /*
1031 [ENUM]
1032 [
1033  [DESCRIPTION]
1034  These callback types are used with System::setCallback.
1035 
1036  [REMARKS]
1037  Each callback has commanddata parameters passed as void* unique to the type of callback.<br>
1038  See reference to FMOD_SYSTEM_CALLBACK to determine what they might mean for each type of callback.<br>
1039  <br>
1040  <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.
1041  <br>
1042  <b>Note!</b> The 'system' object pointer will be null for FMOD_SYSTEM_CALLBACKTYPE_MEMORYALLOCATIONFAILED callback.
1043 
1044  [PLATFORMS]
1045  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1046 
1047  [SEE_ALSO]
1048  System::setCallback
1049  FMOD_SYSTEM_CALLBACK
1050  System::update
1051  DSP::addInput
1052 ]
1053 */
1054 typedef enum
1055 {
1056  FMOD_SYSTEM_CALLBACKTYPE_DEVICELISTCHANGED, /* Called from System::update when the enumerated list of devices has changed. */
1057  FMOD_SYSTEM_CALLBACKTYPE_DEVICELOST, /* Called from System::update when an output device has been lost due to control panel parameter changes and FMOD cannot automatically recover. */
1058  FMOD_SYSTEM_CALLBACKTYPE_MEMORYALLOCATIONFAILED, /* Called directly when a memory allocation fails somewhere in FMOD. (NOTE - 'system' will be NULL in this callback type.)*/
1059  FMOD_SYSTEM_CALLBACKTYPE_THREADCREATED, /* Called directly when a thread is created. */
1060  FMOD_SYSTEM_CALLBACKTYPE_BADDSPCONNECTION, /* Called when a bad connection was made with DSP::addInput. Usually called from mixer thread because that is where the connections are made. */
1061  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. */
1062  FMOD_SYSTEM_CALLBACKTYPE_THREADDESTROYED, /* Called directly when a thread is destroyed. */
1063 
1064  FMOD_SYSTEM_CALLBACKTYPE_MAX, /* Maximum number of callback types supported. */
1065  FMOD_SYSTEM_CALLBACKTYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1066 } FMOD_SYSTEM_CALLBACKTYPE;
1067 
1068 
1069 /*
1070  FMOD Callbacks
1071 */
1072 typedef FMOD_RESULT (F_CALLBACK *FMOD_SYSTEM_CALLBACK) (FMOD_SYSTEM *system, FMOD_SYSTEM_CALLBACKTYPE type, void *commanddata1, void *commanddata2);
1073 
1074 typedef FMOD_RESULT (F_CALLBACK *FMOD_CHANNEL_CALLBACK) (FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACKTYPE type, void *commanddata1, void *commanddata2);
1075 
1076 typedef FMOD_RESULT (F_CALLBACK *FMOD_SOUND_NONBLOCKCALLBACK)(FMOD_SOUND *sound, FMOD_RESULT result);
1077 typedef FMOD_RESULT (F_CALLBACK *FMOD_SOUND_PCMREADCALLBACK)(FMOD_SOUND *sound, void *data, unsigned int datalen);
1078 typedef FMOD_RESULT (F_CALLBACK *FMOD_SOUND_PCMSETPOSCALLBACK)(FMOD_SOUND *sound, int subsound, unsigned int position, FMOD_TIMEUNIT postype);
1079 
1080 typedef FMOD_RESULT (F_CALLBACK *FMOD_FILE_OPENCALLBACK) (const char *name, int unicode, unsigned int *filesize, void **handle, void **userdata);
1081 typedef FMOD_RESULT (F_CALLBACK *FMOD_FILE_CLOSECALLBACK) (void *handle, void *userdata);
1082 typedef FMOD_RESULT (F_CALLBACK *FMOD_FILE_READCALLBACK) (void *handle, void *buffer, unsigned int sizebytes, unsigned int *bytesread, void *userdata);
1083 typedef FMOD_RESULT (F_CALLBACK *FMOD_FILE_SEEKCALLBACK) (void *handle, unsigned int pos, void *userdata);
1084 typedef FMOD_RESULT (F_CALLBACK *FMOD_FILE_ASYNCREADCALLBACK)(FMOD_ASYNCREADINFO *info, void *userdata);
1085 typedef FMOD_RESULT (F_CALLBACK *FMOD_FILE_ASYNCCANCELCALLBACK)(void *handle, void *userdata);
1086 
1087 typedef void * (F_CALLBACK *FMOD_MEMORY_ALLOCCALLBACK) (unsigned int size, FMOD_MEMORY_TYPE type, const char *sourcestr);
1088 typedef void * (F_CALLBACK *FMOD_MEMORY_REALLOCCALLBACK)(void *ptr, unsigned int size, FMOD_MEMORY_TYPE type, const char *sourcestr);
1089 typedef void (F_CALLBACK *FMOD_MEMORY_FREECALLBACK) (void *ptr, FMOD_MEMORY_TYPE type, const char *sourcestr);
1090 
1091 typedef float (F_CALLBACK *FMOD_3D_ROLLOFFCALLBACK) (FMOD_CHANNEL *channel, float distance);
1092 
1093 
1094 /*
1095 [ENUM]
1096 [
1097  [DESCRIPTION]
1098  List of windowing methods used in spectrum analysis to reduce leakage / transient signals intefering with the analysis.<br>
1099  This is a problem with analysis of continuous signals that only have a small portion of the signal sample (the fft window size).<br>
1100  Windowing the signal with a curve or triangle tapers the sides of the fft window to help alleviate this problem.
1101 
1102  [REMARKS]
1103  Cyclic signals such as a sine wave that repeat their cycle in a multiple of the window size do not need windowing.<br>
1104  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.<br>
1105  Not windowing is the same as FMOD_DSP_FFT_WINDOW_RECT, which is the default.<br>
1106  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.<br>
1107  <exclude>
1108  <br>
1109  FMOD_DSP_FFT_WINDOW_RECT.<br>
1110  <img src="..\static\rectangle.gif"></img><br>
1111  <br>
1112  FMOD_DSP_FFT_WINDOW_TRIANGLE.<br>
1113  <img src="..\static\triangle.gif"></img><br>
1114  <br>
1115  FMOD_DSP_FFT_WINDOW_HAMMING.<br>
1116  <img src="..\static\hamming.gif"></img><br>
1117  <br>
1118  FMOD_DSP_FFT_WINDOW_HANNING.<br>
1119  <img src="..\static\hanning.gif"></img><br>
1120  <br>
1121  FMOD_DSP_FFT_WINDOW_BLACKMAN.<br>
1122  <img src="..\static\blackman.gif"></img><br>
1123  <br>
1124  FMOD_DSP_FFT_WINDOW_BLACKMANHARRIS.<br>
1125  <img src="..\static\blackmanharris.gif"></img>
1126  </exclude>
1127 
1128  [PLATFORMS]
1129  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1130 
1131  [SEE_ALSO]
1132  System::getSpectrum
1133  Channel::getSpectrum
1134 ]
1135 */
1136 typedef enum
1137 {
1138  FMOD_DSP_FFT_WINDOW_RECT, /* w[n] = 1.0 */
1139  FMOD_DSP_FFT_WINDOW_TRIANGLE, /* w[n] = TRI(2n/N) */
1140  FMOD_DSP_FFT_WINDOW_HAMMING, /* w[n] = 0.54 - (0.46 * COS(n/N) ) */
1141  FMOD_DSP_FFT_WINDOW_HANNING, /* w[n] = 0.5 * (1.0 - COS(n/N) ) */
1142  FMOD_DSP_FFT_WINDOW_BLACKMAN, /* w[n] = 0.42 - (0.5 * COS(n/N) ) + (0.08 * COS(2.0 * n/N) ) */
1143  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)) */
1144 
1145  FMOD_DSP_FFT_WINDOW_MAX, /* Maximum number of FFT window types supported. */
1146  FMOD_DSP_FFT_WINDOW_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1147 } FMOD_DSP_FFT_WINDOW;
1148 
1149 
1150 /*
1151 [ENUM]
1152 [
1153  [DESCRIPTION]
1154  List of interpolation types that the FMOD Ex software mixer supports.
1155 
1156  [REMARKS]
1157  The default resampler type is FMOD_DSP_RESAMPLER_LINEAR.<br>
1158  Use System::setSoftwareFormat to tell FMOD the resampling quality you require for FMOD_SOFTWARE based sounds.
1159 
1160  [PLATFORMS]
1161  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1162 
1163  [SEE_ALSO]
1164  System::setSoftwareFormat
1165  System::getSoftwareFormat
1166 ]
1167 */
1168 typedef enum
1169 {
1170  FMOD_DSP_RESAMPLER_NOINTERP, /* No interpolation. High frequency aliasing hiss will be audible depending on the sample rate of the sound. */
1171  FMOD_DSP_RESAMPLER_LINEAR, /* Linear interpolation (default method). Fast and good quality, causes very slight lowpass effect on low frequency sounds. */
1172  FMOD_DSP_RESAMPLER_CUBIC, /* Cubic interpolation. Slower than linear interpolation but better quality. */
1173  FMOD_DSP_RESAMPLER_SPLINE, /* 5 point spline interpolation. Slowest resampling method but best quality. */
1174 
1175  FMOD_DSP_RESAMPLER_MAX, /* Maximum number of resample methods supported. */
1176  FMOD_DSP_RESAMPLER_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1177 } FMOD_DSP_RESAMPLER;
1178 
1179 
1180 /*
1181 [ENUM]
1182 [
1183  [DESCRIPTION]
1184  List of tag types that could be stored within a sound. These include id3 tags, metadata from netstreams and vorbis/asf data.
1185 
1186  [REMARKS]
1187 
1188  [PLATFORMS]
1189  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1190 
1191  [SEE_ALSO]
1192  Sound::getTag
1193 ]
1194 */
1195 typedef enum
1196 {
1197  FMOD_TAGTYPE_UNKNOWN = 0,
1198  FMOD_TAGTYPE_ID3V1,
1199  FMOD_TAGTYPE_ID3V2,
1200  FMOD_TAGTYPE_VORBISCOMMENT,
1201  FMOD_TAGTYPE_SHOUTCAST,
1202  FMOD_TAGTYPE_ICECAST,
1203  FMOD_TAGTYPE_ASF,
1204  FMOD_TAGTYPE_MIDI,
1205  FMOD_TAGTYPE_PLAYLIST,
1206  FMOD_TAGTYPE_FMOD,
1207  FMOD_TAGTYPE_USER,
1208 
1209  FMOD_TAGTYPE_MAX, /* Maximum number of tag types supported. */
1210  FMOD_TAGTYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1211 } FMOD_TAGTYPE;
1212 
1213 
1214 /*
1215 [ENUM]
1216 [
1217  [DESCRIPTION]
1218  List of data types that can be returned by Sound::getTag
1219 
1220  [REMARKS]
1221 
1222  [PLATFORMS]
1223  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1224 
1225  [SEE_ALSO]
1226  Sound::getTag
1227 ]
1228 */
1229 typedef enum
1230 {
1231  FMOD_TAGDATATYPE_BINARY = 0,
1232  FMOD_TAGDATATYPE_INT,
1233  FMOD_TAGDATATYPE_FLOAT,
1234  FMOD_TAGDATATYPE_STRING,
1235  FMOD_TAGDATATYPE_STRING_UTF16,
1236  FMOD_TAGDATATYPE_STRING_UTF16BE,
1237  FMOD_TAGDATATYPE_STRING_UTF8,
1238  FMOD_TAGDATATYPE_CDTOC,
1239 
1240  FMOD_TAGDATATYPE_MAX, /* Maximum number of tag datatypes supported. */
1241  FMOD_TAGDATATYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1242 } FMOD_TAGDATATYPE;
1243 
1244 
1245 /*
1246 [ENUM]
1247 [
1248  [DESCRIPTION]
1249  Types of delay that can be used with Channel::setDelay / Channel::getDelay.
1250 
1251  [REMARKS]
1252  If you haven't called Channel::setDelay yet, if you call Channel::getDelay with FMOD_DELAYTYPE_DSPCLOCK_START it will return the
1253  equivalent global DSP clock value to determine when a channel started, so that you can use it for other channels to sync against.<br>
1254  <br>
1255  Use System::getDSPClock to also get the current dspclock time, a base for future calls to Channel::setDelay.<br>
1256  <br>
1257  Use FMOD_64BIT_ADD or FMOD_64BIT_SUB to add a hi/lo combination together and cope with wraparound.
1258  <br>
1259  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.
1260 
1261  [PLATFORMS]
1262  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1263 
1264  [SEE_ALSO]
1265  Channel::setDelay
1266  Channel::getDelay
1267  System::getDSPClock
1268 ]
1269 */
1270 typedef enum
1271 {
1272  FMOD_DELAYTYPE_END_MS, /* Delay at the end of the sound in milliseconds. Use delayhi only. Channel::isPlaying will remain true until this delay has passed even though the sound itself has stopped playing.*/
1273  FMOD_DELAYTYPE_DSPCLOCK_START, /* Time the sound started if Channel::getDelay is used, or if Channel::setDelay is used, the sound will delay playing until this exact tick. */
1274  FMOD_DELAYTYPE_DSPCLOCK_END, /* Time the sound should end. If this is non-zero, the channel will go silent at this exact tick. */
1275  FMOD_DELAYTYPE_DSPCLOCK_PAUSE, /* Time the sound should pause. If this is non-zero, the channel will pause at this exact tick. */
1276 
1277  FMOD_DELAYTYPE_MAX, /* Maximum number of tag datatypes supported. */
1278  FMOD_DELAYTYPE_FORCEINT = 65536 /* Makes sure this enum is signed 32bit. */
1279 } FMOD_DELAYTYPE;
1280 
1281 
1282 #define FMOD_64BIT_ADD(_hi1, _lo1, _hi2, _lo2) _hi1 += ((_hi2) + ((((_lo1) + (_lo2)) < (_lo1)) ? 1 : 0)); (_lo1) += (_lo2);
1283 #define FMOD_64BIT_SUB(_hi1, _lo1, _hi2, _lo2) _hi1 -= ((_hi2) + ((((_lo1) - (_lo2)) > (_lo1)) ? 1 : 0)); (_lo1) -= (_lo2);
1284 
1285 
1286 /*
1287 [STRUCTURE]
1288 [
1289  [DESCRIPTION]
1290  Structure describing a piece of tag data.
1291 
1292  [REMARKS]
1293  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
1294  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
1295 
1296  [PLATFORMS]
1297  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1298 
1299  [SEE_ALSO]
1300  Sound::getTag
1301  FMOD_TAGTYPE
1302  FMOD_TAGDATATYPE
1303 ]
1304 */
1305 typedef struct FMOD_TAG
1306 {
1307  FMOD_TAGTYPE type; /* [r] The type of this tag. */
1308  FMOD_TAGDATATYPE datatype; /* [r] The type of data that this tag contains */
1309  char *name; /* [r] The name of this tag i.e. "TITLE", "ARTIST" etc. */
1310  void *data; /* [r] Pointer to the tag data - its format is determined by the datatype member */
1311  unsigned int datalen; /* [r] Length of the data contained in this tag */
1312  FMOD_BOOL updated; /* [r] True if this tag has been updated since last being accessed with Sound::getTag */
1313 } FMOD_TAG;
1314 
1315 
1316 /*
1317 [STRUCTURE]
1318 [
1319  [DESCRIPTION]
1320  Structure describing a CD/DVD table of contents
1321 
1322  [REMARKS]
1323  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
1324  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
1325 
1326  [PLATFORMS]
1327  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1328 
1329  [SEE_ALSO]
1330  Sound::getTag
1331 ]
1332 */
1333 typedef struct FMOD_CDTOC
1334 {
1335  int numtracks; /* [r] The number of tracks on the CD */
1336  int min[100]; /* [r] The start offset of each track in minutes */
1337  int sec[100]; /* [r] The start offset of each track in seconds */
1338  int frame[100]; /* [r] The start offset of each track in frames */
1339 } FMOD_CDTOC;
1340 
1341 
1342 /*
1343 [DEFINE]
1344 [
1345  [NAME]
1346  FMOD_TIMEUNIT
1347 
1348  [DESCRIPTION]
1349  List of time types that can be returned by Sound::getLength and used with Channel::setPosition or Channel::getPosition.
1350 
1351  [REMARKS]
1352  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.
1353  Do not combine flags except FMOD_TIMEUNIT_BUFFERED.
1354 
1355  [PLATFORMS]
1356  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1357 
1358  [SEE_ALSO]
1359  Sound::getLength
1360  Channel::setPosition
1361  Channel::getPosition
1362 ]
1363 */
1364 #define FMOD_TIMEUNIT_MS 0x00000001 /* Milliseconds. */
1365 #define FMOD_TIMEUNIT_PCM 0x00000002 /* PCM samples, related to milliseconds * samplerate / 1000. */
1366 #define FMOD_TIMEUNIT_PCMBYTES 0x00000004 /* Bytes, related to PCM samples * channels * datawidth (ie 16bit = 2 bytes). */
1367 #define FMOD_TIMEUNIT_RAWBYTES 0x00000008 /* Raw file bytes of (compressed) sound data (does not include headers). Only used by Sound::getLength and Channel::getPosition. */
1368 #define FMOD_TIMEUNIT_PCMFRACTION 0x00000010 /* Fractions of 1 PCM sample. Unsigned int range 0 to 0xFFFFFFFF. Used for sub-sample granularity for DSP purposes. */
1369 #define FMOD_TIMEUNIT_MODORDER 0x00000100 /* MOD/S3M/XM/IT. Order in a sequenced module format. Use Sound::getFormat to determine the PCM format being decoded to. */
1370 #define FMOD_TIMEUNIT_MODROW 0x00000200 /* MOD/S3M/XM/IT. Current row in a sequenced module format. Sound::getLength will return the number of rows in the currently playing or seeked to pattern. */
1371 #define FMOD_TIMEUNIT_MODPATTERN 0x00000400 /* MOD/S3M/XM/IT. Current pattern in a sequenced module format. Sound::getLength will return the number of patterns in the song and Channel::getPosition will return the currently playing pattern. */
1372 #define FMOD_TIMEUNIT_SENTENCE_MS 0x00010000 /* Currently playing subsound in a sentence time in milliseconds. */
1373 #define FMOD_TIMEUNIT_SENTENCE_PCM 0x00020000 /* Currently playing subsound in a sentence time in PCM Samples, related to milliseconds * samplerate / 1000. */
1374 #define FMOD_TIMEUNIT_SENTENCE_PCMBYTES 0x00040000 /* Currently playing subsound in a sentence time in bytes, related to PCM samples * channels * datawidth (ie 16bit = 2 bytes). */
1375 #define FMOD_TIMEUNIT_SENTENCE 0x00080000 /* Currently playing sentence index according to the channel. */
1376 #define FMOD_TIMEUNIT_SENTENCE_SUBSOUND 0x00100000 /* Currently playing subsound index in a sentence. */
1377 #define FMOD_TIMEUNIT_BUFFERED 0x10000000 /* Time value as seen by buffered stream. This is always ahead of audible time, and is only used for processing. */
1378 /* [DEFINE_END] */
1379 
1380 
1381 /*
1382 [ENUM]
1383 [
1384  [DESCRIPTION]
1385  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.<br>
1386  Another example is a stereo sound. It will default to left = front left, right = front right.<br>
1387  <br>
1388  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.
1389 
1390  [REMARKS]
1391  For full flexibility of speaker assignments, use Channel::setSpeakerLevels.
1392 
1393  [PLATFORMS]
1394  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1395 
1396  [SEE_ALSO]
1397  FMOD_CREATESOUNDEXINFO
1398  Channel::setSpeakerLevels
1399 ]
1400 */
1401 typedef enum
1402 {
1403  FMOD_SPEAKERMAPTYPE_DEFAULT, /* This is the default, and just means FMOD decides which speakers it puts the source channels. */
1404  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. */
1405  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. */
1406  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. */
1407 } FMOD_SPEAKERMAPTYPE;
1408 
1409 
1410 /*
1411 [STRUCTURE]
1412 [
1413  [DESCRIPTION]
1414  Use this structure with System::createSound when more control is needed over loading.<br>
1415  The possible reasons to use this with System::createSound are:<br>
1416  <li>Loading a file from memory.
1417  <li>Loading a file from within another larger (possibly wad/pak) file, by giving the loader an offset and length.
1418  <li>To create a user created / non file based sound.
1419  <li>To specify a starting subsound to seek to within a multi-sample sounds (ie FSB/DLS/SF2) when created as a stream.
1420  <li>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.
1421  <li>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.
1422  <li>To specify a MIDI DLS/SF2 sample set file to load when opening a MIDI file.
1423  See below on what members to fill for each of the above types of sound you want to create.
1424 
1425  [REMARKS]
1426  This structure is optional! Specify 0 or NULL in System::createSound if you don't need it!<br>
1427  <br>
1428  <u>Loading a file from memory.</u><br>
1429  <li>Create the sound using the FMOD_OPENMEMORY flag.<br>
1430  <li>Mandatory. Specify 'length' for the size of the memory block in bytes.
1431  <li>Other flags are optional.
1432  <br>
1433  <br>
1434  <u>Loading a file from within another larger (possibly wad/pak) file, by giving the loader an offset and length.</u><br>
1435  <li>Mandatory. Specify 'fileoffset' and 'length'.
1436  <li>Other flags are optional.
1437  <br>
1438  <br>
1439  <u>To create a user created / non file based sound.</u><br>
1440  <li>Create the sound using the FMOD_OPENUSER flag.
1441  <li>Mandatory. Specify 'defaultfrequency, 'numchannels' and 'format'.
1442  <li>Other flags are optional.
1443  <br>
1444  <br>
1445  <u>To specify a starting subsound to seek to and flush with, within a multi-sample stream (ie FSB/DLS/SF2).</u><br>
1446  <br>
1447  <li>Mandatory. Specify 'initialsubsound'.
1448  <br>
1449  <br>
1450  <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><br>
1451  <br>
1452  <li>Mandatory. Specify 'inclusionlist' and 'inclusionlistnum'.
1453  <br>
1454  <br>
1455  <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><br>
1456  <br>
1457  <li>Mandatory. Specify 'pcmreadcallback' and 'pcmseekcallback'.
1458  <br>
1459  <br>
1460  <u>To specify a MIDI DLS/SF2 sample set file to load when opening a MIDI file.</u><br>
1461  <br>
1462  <li>Mandatory. Specify 'dlsname'.
1463  <br>
1464  <br>
1465  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
1466  altered with System::setStreamBufferSize. As an example of cpu intensive codecs, an mp3 file will take more cpu to decode than a PCM wav file.<br>
1467  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.<br>
1468  <br>
1469  <br>
1470  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
1471  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,
1472  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
1473  associated codec entries allocated along with it multiplied by 10,000.<br>
1474  <br>
1475  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
1476  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
1477 
1478  [PLATFORMS]
1479  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1480 
1481  [SEE_ALSO]
1482  System::createSound
1483  System::setStreamBufferSize
1484  FMOD_MODE
1485  FMOD_SOUND_FORMAT
1486  FMOD_SOUND_TYPE
1487  FMOD_SPEAKERMAPTYPE
1488 ]
1489 */
1491 {
1492  int 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. */
1493  unsigned int 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). */
1494  unsigned int 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. */
1495  int numchannels; /* [w] Optional. Specify 0 to ignore. Number of channels in a sound mandatory if FMOD_OPENUSER or FMOD_OPENRAW is used. */
1496  int 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. */
1497  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. */
1498  unsigned int 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. */
1499  int 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. */
1500  int 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 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. */
1501  int *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. */
1502  int inclusionlistnum; /* [w] Optional. Specify 0 to ignore. This is the number of integers contained within the inclusionlist array. */
1503  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. */
1504  FMOD_SOUND_PCMSETPOSCALLBACK pcmsetposcallback; /* [w] Optional. Specify 0 to ignore. Callback for when the user calls a seeking function such as Channel::setTime or Channel::setPosition within a multi-sample sound, and for when it is opened.*/
1505  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. Also called duing seeking, when setPosition is called or a stream is restarted. */
1506  const char *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. */
1507  const char *encryptionkey; /* [w] Optional. Specify 0 to ignore. Key for encrypted FSB file. Without this key an encrypted FSB file will not load. */
1508  int 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. */
1509  void *userdata; /* [w] Optional. Specify 0 to ignore. This is user data to be attached to the sound during creation. Access via Sound::getUserData. Note: This is not passed to FMOD_FILE_OPENCALLBACK, that is a different userdata that is file specific. */
1510  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. */
1511  FMOD_FILE_OPENCALLBACK useropen; /* [w] Optional. Specify 0 to ignore. Callback for opening this file. */
1512  FMOD_FILE_CLOSECALLBACK userclose; /* [w] Optional. Specify 0 to ignore. Callback for closing this file. */
1513  FMOD_FILE_READCALLBACK userread; /* [w] Optional. Specify 0 to ignore. Callback for reading from this file. */
1514  FMOD_FILE_SEEKCALLBACK userseek; /* [w] Optional. Specify 0 to ignore. Callback for seeking within this file. */
1515  FMOD_FILE_ASYNCREADCALLBACK userasyncread; /* [w] Optional. Specify 0 to ignore. Callback for seeking within this file. */
1516  FMOD_FILE_ASYNCCANCELCALLBACK userasynccancel; /* [w] Optional. Specify 0 to ignore. Callback for seeking within this file. */
1517  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. */
1518  FMOD_SOUNDGROUP *initialsoundgroup; /* [w] Optional. Specify 0 to ignore. Specify a sound group if required, to put sound in as it is created. */
1519  unsigned int initialseekposition;/* [w] Optional. Specify 0 to ignore. For streams. Specify an initial position to seek the stream to. */
1520  FMOD_TIMEUNIT initialseekpostype; /* [w] Optional. Specify 0 to ignore. For streams. Specify the time unit for the position set in initialseekposition. */
1521  int 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). */
1522  int 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. */
1523  unsigned int 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) */
1524  unsigned int 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). */
1525  int 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. */
1527 
1528 
1529 /*
1530 [STRUCTURE]
1531 [
1532  [DESCRIPTION]
1533  Structure defining a reverb environment.<br>
1534 
1535  [REMARKS]
1536  Note the default reverb properties are the same as the FMOD_PRESET_GENERIC preset.<br>
1537  Note that integer values that typically range from -10,000 to 1000 are represented in
1538  decibels, and are of a logarithmic scale, not linear, wheras float values are always linear.<br>
1539  <br>
1540  The numerical values listed below are the maximum, minimum and default values for each variable respectively.<br>
1541  <br>
1542  <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.<br>
1543  WII means Nintendo Wii hardware reverb (must use FMOD_HARDWARE).<br>
1544  PSP means Playstation Portable hardware reverb (must use FMOD_HARDWARE).<br>
1545  SFX means FMOD SFX software reverb. This works on any platform that uses FMOD_SOFTWARE for loading sounds.<br>
1546  --- means unsupported/deprecated. Will either be removed or supported by SFX in the future.
1547  <br>
1548  Nintendo Wii Notes:<br>
1549  This structure supports only limited parameters, and maps them to the Wii hardware reverb as follows.<br>
1550  DecayTime = 'time'<br>
1551  ReverbDelay = 'predelay'<br>
1552  ModulationDepth = 'damping'<br>
1553  Reflections = 'coloration'<br>
1554  EnvDiffusion = 'crosstalk'<br>
1555  Room = 'mix'<br>
1556  <br>
1557  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
1558  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
1559  Members marked with [r/w] are either read or write depending on if you are using System::setReverbProperties (w) or System::getReverbProperties (r).
1560 
1561  [PLATFORMS]
1562  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1563 
1564  [SEE_ALSO]
1565  System::setReverbProperties
1566  System::getReverbProperties
1567  FMOD_REVERB_PRESETS
1568  FMOD_REVERB_FLAGS
1569 ]
1570 */
1572 { /* MIN MAX DEFAULT DESCRIPTION */
1573  int Instance; /* [w] 0 3 0 Environment Instance. (SUPPORTED:SFX(4 instances) and Wii (3 instances)) */
1574  int Environment; /* [r/w] -1 25 -1 Sets all listener properties. -1 = OFF. (SUPPORTED:SFX(-1 only)/PSP) */
1575  float EnvDiffusion; /* [r/w] 0.0 1.0 1.0 Environment diffusion (SUPPORTED:WII) */
1576  int Room; /* [r/w] -10000 0 -1000 Room effect level (at mid frequencies) (SUPPORTED:SFX/WII/PSP) */
1577  int RoomHF; /* [r/w] -10000 0 -100 Relative room effect level at high frequencies (SUPPORTED:SFX) */
1578  int RoomLF; /* [r/w] -10000 0 0 Relative room effect level at low frequencies (SUPPORTED:SFX) */
1579  float DecayTime; /* [r/w] 0.1 20.0 1.49 Reverberation decay time at mid frequencies (SUPPORTED:SFX/WII) */
1580  float DecayHFRatio; /* [r/w] 0.1 2.0 0.83 High-frequency to mid-frequency decay time ratio (SUPPORTED:SFX) */
1581  float DecayLFRatio; /* [r/w] 0.1 2.0 1.0 Low-frequency to mid-frequency decay time ratio (SUPPORTED:---) */
1582  int Reflections; /* [r/w] -10000 1000 -2602 Early reflections level relative to room effect (SUPPORTED:SFX/WII) */
1583  float ReflectionsDelay; /* [r/w] 0.0 0.3 0.007 Initial reflection delay time (SUPPORTED:SFX) */
1584  int Reverb; /* [r/w] -10000 2000 200 Late reverberation level relative to room effect (SUPPORTED:SFX) */
1585  float ReverbDelay; /* [r/w] 0.0 0.1 0.011 Late reverberation delay time relative to initial reflection (SUPPORTED:SFX/WII) */
1586  float ModulationTime; /* [r/w] 0.04 4.0 0.25 Modulation time (SUPPORTED:---) */
1587  float ModulationDepth; /* [r/w] 0.0 1.0 0.0 Modulation depth (SUPPORTED:WII) */
1588  float HFReference; /* [r/w] 20.0 20000.0 5000.0 Reference high frequency (hz) (SUPPORTED:SFX) */
1589  float LFReference; /* [r/w] 20.0 1000.0 250.0 Reference low frequency (hz) (SUPPORTED:SFX) */
1590  float Diffusion; /* [r/w] 0.0 100.0 100.0 Value that controls the echo density in the late reverberation decay. (SUPPORTED:SFX) */
1591  float Density; /* [r/w] 0.0 100.0 100.0 Value that controls the modal density in the late reverberation decay (SUPPORTED:SFX) */
1592  unsigned int Flags; /* [r/w] FMOD_REVERB_FLAGS - modifies the behavior of above properties (SUPPORTED:WII) */
1594 
1595 
1596 /*
1597 [DEFINE]
1598 [
1599  [NAME]
1600  FMOD_REVERB_FLAGS
1601 
1602  [DESCRIPTION]
1603  Values for the Flags member of the FMOD_REVERB_PROPERTIES structure.
1604 
1605  [REMARKS]
1606 
1607  [PLATFORMS]
1608  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1609 
1610  [SEE_ALSO]
1611  FMOD_REVERB_PROPERTIES
1612 ]
1613 */
1614 #define FMOD_REVERB_FLAGS_HIGHQUALITYREVERB 0x00000400 /* Wii. Use high quality reverb */
1615 #define FMOD_REVERB_FLAGS_HIGHQUALITYDPL2REVERB 0x00000800 /* Wii. Use high quality DPL2 reverb */
1616 #define FMOD_REVERB_FLAGS_HARDWAREONLY 0x00001000 /* Don't create an SFX reverb for FMOD_SOFTWARE channels, hardware reverb only */
1617 #define FMOD_REVERB_FLAGS_DEFAULT 0x00000000
1618 /* [DEFINE_END] */
1619 
1620 
1621 /*
1622 [DEFINE]
1623 [
1624  [NAME]
1625  FMOD_REVERB_PRESETS
1626 
1627  [DESCRIPTION]
1628  A set of predefined environment PARAMETERS.<br>
1629  These are used to initialize an FMOD_REVERB_PROPERTIES structure statically.<br>
1630  i.e.<br>
1631  FMOD_REVERB_PROPERTIES prop = FMOD_PRESET_GENERIC;
1632 
1633  [REMARKS]
1634 
1635  [PLATFORMS]
1636  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1637 
1638  [SEE_ALSO]
1639  System::setReverbProperties
1640 ]
1641 */
1642 /* Inst Env Diffus Room RoomHF RmLF DecTm DecHF DecLF Refl RefDel Revb RevDel ModTm ModDp HFRef LFRef Diffus Densty FLAGS */
1643 #define FMOD_PRESET_OFF { 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, 0x33f }
1644 #define FMOD_PRESET_GENERIC { 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, 0x3f }
1645 #define FMOD_PRESET_PADDEDCELL { 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, 0x3f }
1646 #define FMOD_PRESET_ROOM { 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, 0x3f }
1647 #define FMOD_PRESET_BATHROOM { 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, 0x3f }
1648 #define FMOD_PRESET_LIVINGROOM { 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, 0x3f }
1649 #define FMOD_PRESET_STONEROOM { 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, 0x3f }
1650 #define FMOD_PRESET_AUDITORIUM { 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, 0x3f }
1651 #define FMOD_PRESET_CONCERTHALL { 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, 0x3f }
1652 #define FMOD_PRESET_CAVE { 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, 0x1f }
1653 #define FMOD_PRESET_ARENA { 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, 0x3f }
1654 #define FMOD_PRESET_HANGAR { 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, 0x3f }
1655 #define FMOD_PRESET_CARPETTEDHALLWAY { 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, 0x3f }
1656 #define FMOD_PRESET_HALLWAY { 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, 0x3f }
1657 #define FMOD_PRESET_STONECORRIDOR { 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, 0x3f }
1658 #define FMOD_PRESET_ALLEY { 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, 0x3f }
1659 #define FMOD_PRESET_FOREST { 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, 0x3f }
1660 #define FMOD_PRESET_CITY { 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, 0x3f }
1661 #define FMOD_PRESET_MOUNTAINS { 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, 0x1f }
1662 #define FMOD_PRESET_QUARRY { 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, 0x3f }
1663 #define FMOD_PRESET_PLAIN { 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, 0x3f }
1664 #define FMOD_PRESET_PARKINGLOT { 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, 0x1f }
1665 #define FMOD_PRESET_SEWERPIPE { 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, 0x3f }
1666 #define FMOD_PRESET_UNDERWATER { 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, 0x3f }
1667 
1668 /* PlayStation Portable Only presets */
1669 #define FMOD_PRESET_PSP_ROOM { 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, 0x31f }
1670 #define FMOD_PRESET_PSP_STUDIO_A { 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, 0x31f }
1671 #define FMOD_PRESET_PSP_STUDIO_B { 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, 0x31f }
1672 #define FMOD_PRESET_PSP_STUDIO_C { 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, 0x31f }
1673 #define FMOD_PRESET_PSP_HALL { 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, 0x31f }
1674 #define FMOD_PRESET_PSP_SPACE { 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, 0x31f }
1675 #define FMOD_PRESET_PSP_ECHO { 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, 0x31f }
1676 #define FMOD_PRESET_PSP_DELAY { 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, 0x31f }
1677 #define FMOD_PRESET_PSP_PIPE { 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, 0x31f }
1678 /* [DEFINE_END] */
1679 
1680 
1681 /*
1682 [STRUCTURE]
1683 [
1684  [DESCRIPTION]
1685  Structure defining the properties for a reverb source, related to a FMOD channel.<br>
1686  <br>
1687  Note the default reverb properties are the same as the FMOD_PRESET_GENERIC preset.<br>
1688  Note that integer values that typically range from -10,000 to 1000 are represented in
1689  decibels, and are of a logarithmic scale, not linear, wheras float values are typically linear.<br>
1690  PORTABILITY: Each member has the platform it supports in braces ie (win32/wii).<br>
1691  <br>
1692  The numerical values listed below are the maximum, minimum and default values for each variable respectively.<br>
1693 
1694  [REMARKS]
1695  <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.<br>
1696  WII means Nintendo Wii hardware reverb (must use FMOD_HARDWARE).<br>
1697  PSP means Playstation Portable hardware reverb (must use FMOD_HARDWARE).<br>
1698  SFX means FMOD SFX software reverb. This works on any platform that uses FMOD_SOFTWARE for loading sounds.<br>
1699  --- means unsupported/deprecated. Will either be removed or supported by SFX in the future.
1700  <br>
1701  <br>
1702  <b>'ConnectionPoint' Parameter.</b> This parameter is for the FMOD software reverb only (known as SFX in the list above).<br>
1703  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.<br>
1704  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).<br>
1705  Do not use if you are unaware of DSP network connection issues. Leave it at the default of NULL instead.<br>
1706  <br>
1707  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
1708  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
1709  Members marked with [r/w] are either read or write depending on if you are using Channel::setReverbProperties (w) or Channel::getReverbProperties (r).
1710 
1711  [PLATFORMS]
1712  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1713 
1714  [SEE_ALSO]
1715  Channel::setReverbProperties
1716  Channel::getReverbProperties
1717  FMOD_REVERB_CHANNELFLAGS
1718 ]
1719 */
1721 { /* MIN MAX DEFAULT DESCRIPTION */
1722  int Direct; /* [r/w] -10000 1000 0 Direct path level (SUPPORTED:SFX) */
1723  int Room; /* [r/w] -10000 1000 0 Room effect level (SUPPORTED:SFX) */
1724  unsigned int Flags; /* [r/w] FMOD_REVERB_CHANNELFLAGS - modifies the behavior of properties (SUPPORTED:SFX) */
1725  FMOD_DSP *ConnectionPoint; /* [r/w] See remarks. DSP network location to connect reverb for this channel. (SUPPORTED:SFX).*/
1727 
1728 
1729 /*
1730 [DEFINE]
1731 [
1732  [NAME]
1733  FMOD_REVERB_CHANNELFLAGS
1734 
1735  [DESCRIPTION]
1736  Values for the Flags member of the FMOD_REVERB_CHANNELPROPERTIES structure.
1737 
1738  [REMARKS]
1739  For SFX Reverb, there is support for multiple reverb environments.<br>
1740  Use FMOD_REVERB_CHANNELFLAGS_ENVIRONMENT0 to FMOD_REVERB_CHANNELFLAGS_ENVIRONMENT3 in the flags member
1741  of FMOD_REVERB_CHANNELPROPERTIES to specify which environment instance(s) to target. <br>
1742  - If you do not specify any instance the first reverb instance will be used.<br>
1743  - If you specify more than one instance with getReverbProperties, the first instance will be used.<br>
1744  - If you specify more than one instance with setReverbProperties, it will set more than 1 instance at once.<br>
1745 
1746  [PLATFORMS]
1747  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1748 
1749  [SEE_ALSO]
1750  FMOD_REVERB_CHANNELPROPERTIES
1751 ]
1752 */
1753 #define FMOD_REVERB_CHANNELFLAGS_INSTANCE0 0x00000010 /* SFX/Wii. Specify channel to target reverb instance 0. Default target. */
1754 #define FMOD_REVERB_CHANNELFLAGS_INSTANCE1 0x00000020 /* SFX/Wii. Specify channel to target reverb instance 1. */
1755 #define FMOD_REVERB_CHANNELFLAGS_INSTANCE2 0x00000040 /* SFX/Wii. Specify channel to target reverb instance 2. */
1756 #define FMOD_REVERB_CHANNELFLAGS_INSTANCE3 0x00000080 /* SFX. Specify channel to target reverb instance 3. */
1757 
1758 #define FMOD_REVERB_CHANNELFLAGS_DEFAULT FMOD_REVERB_CHANNELFLAGS_INSTANCE0
1759 /* [DEFINE_END] */
1760 
1761 
1762 /*
1763 [STRUCTURE]
1764 [
1765  [DESCRIPTION]
1766  Settings for advanced features like configuring memory and cpu usage for the FMOD_CREATECOMPRESSEDSAMPLE feature.
1767 
1768  [REMARKS]
1769  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.<br>
1770  <br>
1771  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
1772  *without* the FMOD_CREATECOMPRESSEDSAMPLE flag.
1773  <br>
1774  Memory will be allocated for codecs 'up front' (during 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.<br>
1775  <br>
1776  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.<br>
1777  <br>
1778  Members marked with [r] mean the variable is modified by FMOD and is for reading purposes only. Do not change this value.<br>
1779  Members marked with [w] mean the variable can be written to. The user can set the value.<br>
1780  Members marked with [r/w] are either read or write depending on if you are using System::setAdvancedSettings (w) or System::getAdvancedSettings (r).
1781 
1782  [PLATFORMS]
1783  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1784 
1785  [SEE_ALSO]
1786  System::setAdvancedSettings
1787  System::getAdvancedSettings
1788  System::init
1789  FMOD_MODE
1790 ]
1791 */
1793 {
1794  int cbsize; /* [w] Size of this structure. Use sizeof(FMOD_ADVANCEDSETTINGS) NOTE: This must be set before calling System::getAdvancedSettings! */
1795  int 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. */
1796  int 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. */
1797  int 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. */
1798  int 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. */
1799  int 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. */
1800  int maxAT9Codecs; /* [r/w] Optional. Specify 0 to ignore. For use with FMOD_CREATECOMPRESSEDSAMPLE only. AT9 codecs consume 8,720 bytes per instance and this number will determine how many AT9 channels can be played simultaneously. Default = 32. */
1801  int 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. */
1802  int ASIONumChannels; /* [r/w] Optional. Specify 0 to ignore. Number of channels available on the ASIO device. */
1803  char **ASIOChannelList; /* [r/w] Optional. Specify 0 to ignore. Pointer to an array of strings (number of entries defined by ASIONumChannels) with ASIO channel names. */
1804  FMOD_SPEAKER *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 System::init to remap ASIO output. */
1805  int max3DReverbDSPs; /* [r/w] Optional. Specify 0 to ignore. The max number of 3d reverb DSP's in the system. (NOTE: CURRENTLY DISABLED / UNUSED) */
1806  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. */
1807  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. */
1808  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. */
1809  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. */
1810  int 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. */
1811  unsigned int 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 */
1812  char *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 System::getAdvancedSettings, provide at least 256 bytes of memory to copy into. */
1813  unsigned short 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. */
1814  unsigned int 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. */
1815  unsigned int maxSpectrumWaveDataBuffers; /* [r/w] Optional. Specify 0 to ignore. Tells System::init to allocate a pool of wavedata/spectrum buffers to prevent memory fragmentation, any additional buffers will be allocated normally. */
1816  unsigned int 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. */
1817  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. */
1818  unsigned int 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) */
1819  unsigned int 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) */
1820  unsigned int 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) */
1822 
1823 
1824 /*
1825 [ENUM]
1826 [
1827  [DESCRIPTION]
1828  Special channel index values for FMOD functions.
1829 
1830  [REMARKS]
1831  To get 'all' of the channels, use System::getMasterChannelGroup.
1832 
1833  [PLATFORMS]
1834  Win32, Win64, Linux, Linux64, Macintosh, Xbox360, PlayStation Portable, PlayStation 3, Wii, iPhone, 3GS, NGP, Android
1835 
1836  [SEE_ALSO]
1837  System::playSound
1838  System::playDSP
1839  System::getChannel
1840  System::getMasterChannelGroup
1841 ]
1842 */
1843 typedef enum
1844 {
1845  FMOD_CHANNEL_FREE = -1, /* For a channel index, FMOD chooses a free voice using the priority system. */
1846  FMOD_CHANNEL_REUSE = -2 /* For a channel index, re-use the channel handle that was passed in. */
1847 } FMOD_CHANNELINDEX;
1848 
1849 #include "fmod_codec.h"
1850 #include "fmod_dsp.h"
1851 #include "fmod_memoryinfo.h"
1852 
1853 /* ========================================================================================== */
1854 /* FUNCTION PROTOTYPES */
1855 /* ========================================================================================== */
1856 
1857 #ifdef __cplusplus
1858 extern "C"
1859 {
1860 #endif
1861 
1862 /*
1863  FMOD global system functions (optional).
1864 */
1865 
1866 FMOD_RESULT F_API FMOD_Memory_Initialize (void *poolmem, int poollen, FMOD_MEMORY_ALLOCCALLBACK useralloc, FMOD_MEMORY_REALLOCCALLBACK userrealloc, FMOD_MEMORY_FREECALLBACK userfree, FMOD_MEMORY_TYPE memtypeflags);
1867 FMOD_RESULT F_API FMOD_Memory_GetStats (int *currentalloced, int *maxalloced, FMOD_BOOL blocking);
1868 FMOD_RESULT F_API FMOD_Debug_SetLevel (FMOD_DEBUGLEVEL level);
1869 FMOD_RESULT F_API FMOD_Debug_GetLevel (FMOD_DEBUGLEVEL *level);
1870 FMOD_RESULT F_API FMOD_File_SetDiskBusy (int busy);
1871 FMOD_RESULT F_API FMOD_File_GetDiskBusy (int *busy);
1872 
1873 /*
1874  FMOD System factory functions. Use this to create an FMOD System Instance. below you will see FMOD_System_Init/Close to get started.
1875 */
1876 
1877 FMOD_RESULT F_API FMOD_System_Create (FMOD_SYSTEM **system);
1878 FMOD_RESULT F_API FMOD_System_Release (FMOD_SYSTEM *system);
1879 
1880 /*$ preserve end $*/
1881 
1882 /*
1883  'System' API
1884 */
1885 
1886 /*
1887  Pre-init functions.
1888 */
1889 
1890 FMOD_RESULT F_API FMOD_System_SetOutput (FMOD_SYSTEM *system, FMOD_OUTPUTTYPE output);
1891 FMOD_RESULT F_API FMOD_System_GetOutput (FMOD_SYSTEM *system, FMOD_OUTPUTTYPE *output);
1892 FMOD_RESULT F_API FMOD_System_GetNumDrivers (FMOD_SYSTEM *system, int *numdrivers);
1893 FMOD_RESULT F_API FMOD_System_GetDriverInfo (FMOD_SYSTEM *system, int id, char *name, int namelen, FMOD_GUID *guid);
1894 FMOD_RESULT F_API FMOD_System_GetDriverInfoW (FMOD_SYSTEM *system, int id, short *name, int namelen, FMOD_GUID *guid);
1895 FMOD_RESULT F_API FMOD_System_GetDriverCaps (FMOD_SYSTEM *system, int id, FMOD_CAPS *caps, int *controlpaneloutputrate, FMOD_SPEAKERMODE *controlpanelspeakermode);
1896 FMOD_RESULT F_API FMOD_System_SetDriver (FMOD_SYSTEM *system, int driver);
1897 FMOD_RESULT F_API FMOD_System_GetDriver (FMOD_SYSTEM *system, int *driver);
1898 FMOD_RESULT F_API FMOD_System_SetHardwareChannels (FMOD_SYSTEM *system, int numhardwarechannels);
1899 FMOD_RESULT F_API FMOD_System_SetSoftwareChannels (FMOD_SYSTEM *system, int numsoftwarechannels);
1900 FMOD_RESULT F_API FMOD_System_GetSoftwareChannels (FMOD_SYSTEM *system, int *numsoftwarechannels);
1901 FMOD_RESULT F_API FMOD_System_SetSoftwareFormat (FMOD_SYSTEM *system, int samplerate, FMOD_SOUND_FORMAT format, int numoutputchannels, int maxinputchannels, FMOD_DSP_RESAMPLER resamplemethod);
1902 FMOD_RESULT F_API FMOD_System_GetSoftwareFormat (FMOD_SYSTEM *system, int *samplerate, FMOD_SOUND_FORMAT *format, int *numoutputchannels, int *maxinputchannels, FMOD_DSP_RESAMPLER *resamplemethod, int *bits);
1903 FMOD_RESULT F_API FMOD_System_SetDSPBufferSize (FMOD_SYSTEM *system, unsigned int bufferlength, int numbuffers);
1904 FMOD_RESULT F_API FMOD_System_GetDSPBufferSize (FMOD_SYSTEM *system, unsigned int *bufferlength, int *numbuffers);
1905 FMOD_RESULT F_API FMOD_System_SetFileSystem (FMOD_SYSTEM *system, FMOD_FILE_OPENCALLBACK useropen, FMOD_FILE_CLOSECALLBACK userclose, FMOD_FILE_READCALLBACK userread, FMOD_FILE_SEEKCALLBACK userseek, FMOD_FILE_ASYNCREADCALLBACK userasyncread, FMOD_FILE_ASYNCCANCELCALLBACK userasynccancel, int blockalign);
1906 FMOD_RESULT F_API FMOD_System_AttachFileSystem (FMOD_SYSTEM *system, FMOD_FILE_OPENCALLBACK useropen, FMOD_FILE_CLOSECALLBACK userclose, FMOD_FILE_READCALLBACK userread, FMOD_FILE_SEEKCALLBACK userseek);
1907 FMOD_RESULT F_API FMOD_System_SetAdvancedSettings (FMOD_SYSTEM *system, FMOD_ADVANCEDSETTINGS *settings);
1908 FMOD_RESULT F_API FMOD_System_GetAdvancedSettings (FMOD_SYSTEM *system, FMOD_ADVANCEDSETTINGS *settings);
1909 FMOD_RESULT F_API FMOD_System_SetSpeakerMode (FMOD_SYSTEM *system, FMOD_SPEAKERMODE speakermode);
1910 FMOD_RESULT F_API FMOD_System_GetSpeakerMode (FMOD_SYSTEM *system, FMOD_SPEAKERMODE *speakermode);
1911 FMOD_RESULT F_API FMOD_System_SetCallback (FMOD_SYSTEM *system, FMOD_SYSTEM_CALLBACK callback);
1912 
1913 /*
1914  Plug-in support
1915 */
1916 
1917 FMOD_RESULT F_API FMOD_System_SetPluginPath (FMOD_SYSTEM *system, const char *path);
1918 FMOD_RESULT F_API FMOD_System_LoadPlugin (FMOD_SYSTEM *system, const char *filename, unsigned int *handle, unsigned int priority);
1919 FMOD_RESULT F_API FMOD_System_UnloadPlugin (FMOD_SYSTEM *system, unsigned int handle);
1920 FMOD_RESULT F_API FMOD_System_GetNumPlugins (FMOD_SYSTEM *system, FMOD_PLUGINTYPE plugintype, int *numplugins);
1921 FMOD_RESULT F_API FMOD_System_GetPluginHandle (FMOD_SYSTEM *system, FMOD_PLUGINTYPE plugintype, int index, unsigned int *handle);
1922 FMOD_RESULT F_API FMOD_System_GetPluginInfo (FMOD_SYSTEM *system, unsigned int handle, FMOD_PLUGINTYPE *plugintype, char *name, int namelen, unsigned int *version);
1923 FMOD_RESULT F_API FMOD_System_SetOutputByPlugin (FMOD_SYSTEM *system, unsigned int handle);
1924 FMOD_RESULT F_API FMOD_System_GetOutputByPlugin (FMOD_SYSTEM *system, unsigned int *handle);
1925 FMOD_RESULT F_API FMOD_System_CreateDSPByPlugin (FMOD_SYSTEM *system, unsigned int handle, FMOD_DSP **dsp);
1926 FMOD_RESULT F_API FMOD_System_RegisterCodec (FMOD_SYSTEM *system, FMOD_CODEC_DESCRIPTION *description, unsigned int *handle, unsigned int priority);
1927 FMOD_RESULT F_API FMOD_System_RegisterDSP (FMOD_SYSTEM *system, FMOD_DSP_DESCRIPTION *description, unsigned int *handle);
1928 
1929 /*
1930  Init/Close
1931 */
1932 
1933 FMOD_RESULT F_API FMOD_System_Init (FMOD_SYSTEM *system, int maxchannels, FMOD_INITFLAGS flags, void *extradriverdata);
1934 FMOD_RESULT F_API FMOD_System_Close (FMOD_SYSTEM *system);
1935 
1936 /*
1937  General post-init system functions
1938 */
1939 
1940 FMOD_RESULT F_API FMOD_System_Update (FMOD_SYSTEM *system);
1941 
1942 FMOD_RESULT F_API FMOD_System_Set3DSettings (FMOD_SYSTEM *system, float dopplerscale, float distancefactor, float rolloffscale);
1943 FMOD_RESULT F_API FMOD_System_Get3DSettings (FMOD_SYSTEM *system, float *dopplerscale, float *distancefactor, float *rolloffscale);
1944 FMOD_RESULT F_API FMOD_System_Set3DNumListeners (FMOD_SYSTEM *system, int numlisteners);
1945 FMOD_RESULT F_API FMOD_System_Get3DNumListeners (FMOD_SYSTEM *system, int *numlisteners);
1946 FMOD_RESULT F_API FMOD_System_Set3DListenerAttributes(FMOD_SYSTEM *system, int listener, const FMOD_VECTOR *pos, const FMOD_VECTOR *vel, const FMOD_VECTOR *forward, const FMOD_VECTOR *up);
1947 FMOD_RESULT F_API FMOD_System_Get3DListenerAttributes(FMOD_SYSTEM *system, int listener, FMOD_VECTOR *pos, FMOD_VECTOR *vel, FMOD_VECTOR *forward, FMOD_VECTOR *up);
1948 FMOD_RESULT F_API FMOD_System_Set3DRolloffCallback (FMOD_SYSTEM *system, FMOD_3D_ROLLOFFCALLBACK callback);
1949 FMOD_RESULT F_API FMOD_System_Set3DSpeakerPosition (FMOD_SYSTEM *system, FMOD_SPEAKER speaker, float x, float y, FMOD_BOOL active);
1950 FMOD_RESULT F_API FMOD_System_Get3DSpeakerPosition (FMOD_SYSTEM *system, FMOD_SPEAKER speaker, float *x, float *y, FMOD_BOOL *active);
1951 
1952 FMOD_RESULT F_API FMOD_System_SetStreamBufferSize (FMOD_SYSTEM *system, unsigned int filebuffersize, FMOD_TIMEUNIT filebuffersizetype);
1953 FMOD_RESULT F_API FMOD_System_GetStreamBufferSize (FMOD_SYSTEM *system, unsigned int *filebuffersize, FMOD_TIMEUNIT *filebuffersizetype);
1954 
1955 /*
1956  System information functions.
1957 */
1958 
1959 FMOD_RESULT F_API FMOD_System_GetVersion (FMOD_SYSTEM *system, unsigned int *version);
1960 FMOD_RESULT F_API FMOD_System_GetOutputHandle (FMOD_SYSTEM *system, void **handle);
1961 FMOD_RESULT F_API FMOD_System_GetChannelsPlaying (FMOD_SYSTEM *system, int *channels);
1962 FMOD_RESULT F_API FMOD_System_GetHardwareChannels (FMOD_SYSTEM *system, int *numhardwarechannels);
1963 FMOD_RESULT F_API FMOD_System_GetCPUUsage (FMOD_SYSTEM *system, float *dsp, float *stream, float *geometry, float *update, float *total);
1964 FMOD_RESULT F_API FMOD_System_GetSoundRAM (FMOD_SYSTEM *system, int *currentalloced, int *maxalloced, int *total);
1965 FMOD_RESULT F_API FMOD_System_GetNumCDROMDrives (FMOD_SYSTEM *system, int *numdrives);
1966 FMOD_RESULT F_API FMOD_System_GetCDROMDriveName (FMOD_SYSTEM *system, int drive, char *drivename, int drivenamelen, char *scsiname, int scsinamelen, char *devicename, int devicenamelen);
1967 FMOD_RESULT F_API FMOD_System_GetSpectrum (FMOD_SYSTEM *system, float *spectrumarray, int numvalues, int channeloffset, FMOD_DSP_FFT_WINDOW windowtype);
1968 FMOD_RESULT F_API FMOD_System_GetWaveData (FMOD_SYSTEM *system, float *wavearray, int numvalues, int channeloffset);
1969 
1970 /*
1971  Sound/DSP/Channel/FX creation and retrieval.
1972 */
1973 
1974 FMOD_RESULT F_API FMOD_System_CreateSound (FMOD_SYSTEM *system, const char *name_or_data, FMOD_MODE mode, FMOD_CREATESOUNDEXINFO *exinfo, FMOD_SOUND **sound);
1975 FMOD_RESULT F_API FMOD_System_CreateStream (FMOD_SYSTEM *system, const char *name_or_data, FMOD_MODE mode, FMOD_CREATESOUNDEXINFO *exinfo, FMOD_SOUND **sound);
1976 FMOD_RESULT F_API FMOD_System_CreateDSP (FMOD_SYSTEM *system, FMOD_DSP_DESCRIPTION *description, FMOD_DSP **dsp);
1977 FMOD_RESULT F_API FMOD_System_CreateDSPByType (FMOD_SYSTEM *system, FMOD_DSP_TYPE type, FMOD_DSP **dsp);
1978 FMOD_RESULT F_API FMOD_System_CreateChannelGroup (FMOD_SYSTEM *system, const char *name, FMOD_CHANNELGROUP **channelgroup);
1979 FMOD_RESULT F_API FMOD_System_CreateSoundGroup (FMOD_SYSTEM *system, const char *name, FMOD_SOUNDGROUP **soundgroup);
1980 FMOD_RESULT F_API FMOD_System_CreateReverb (FMOD_SYSTEM *system, FMOD_REVERB **reverb);
1981 
1982 FMOD_RESULT F_API FMOD_System_PlaySound (FMOD_SYSTEM *system, FMOD_CHANNELINDEX channelid, FMOD_SOUND *sound, FMOD_BOOL paused, FMOD_CHANNEL **channel);
1983 FMOD_RESULT F_API FMOD_System_PlayDSP (FMOD_SYSTEM *system, FMOD_CHANNELINDEX channelid, FMOD_DSP *dsp, FMOD_BOOL paused, FMOD_CHANNEL **channel);
1984 FMOD_RESULT F_API FMOD_System_GetChannel (FMOD_SYSTEM *system, int channelid, FMOD_CHANNEL **channel);
1985 FMOD_RESULT F_API FMOD_System_GetMasterChannelGroup (FMOD_SYSTEM *system, FMOD_CHANNELGROUP **channelgroup);
1986 FMOD_RESULT F_API FMOD_System_GetMasterSoundGroup (FMOD_SYSTEM *system, FMOD_SOUNDGROUP **soundgroup);
1987 
1988 /*
1989  Reverb API
1990 */
1991 
1992 FMOD_RESULT F_API FMOD_System_SetReverbProperties (FMOD_SYSTEM *system, const FMOD_REVERB_PROPERTIES *prop);
1993 FMOD_RESULT F_API FMOD_System_GetReverbProperties (FMOD_SYSTEM *system, FMOD_REVERB_PROPERTIES *prop);
1994 FMOD_RESULT F_API FMOD_System_SetReverbAmbientProperties(FMOD_SYSTEM *system, FMOD_REVERB_PROPERTIES *prop);
1995 FMOD_RESULT F_API FMOD_System_GetReverbAmbientProperties(FMOD_SYSTEM *system, FMOD_REVERB_PROPERTIES *prop);
1996 
1997 /*
1998  System level DSP access.
1999 */
2000 
2001 FMOD_RESULT F_API FMOD_System_GetDSPHead (FMOD_SYSTEM *system, FMOD_DSP **dsp);
2002 FMOD_RESULT F_API FMOD_System_AddDSP (FMOD_SYSTEM *system, FMOD_DSP *dsp, FMOD_DSPCONNECTION **connection);
2003 FMOD_RESULT F_API FMOD_System_LockDSP (FMOD_SYSTEM *system);
2004 FMOD_RESULT F_API FMOD_System_UnlockDSP (FMOD_SYSTEM *system);
2005 FMOD_RESULT F_API FMOD_System_GetDSPClock (FMOD_SYSTEM *system, unsigned int *hi, unsigned int *lo);
2006 
2007 /*
2008  Recording API.
2009 */
2010 
2011 FMOD_RESULT F_API FMOD_System_GetRecordNumDrivers (FMOD_SYSTEM *system, int *numdrivers);
2012 FMOD_RESULT F_API FMOD_System_GetRecordDriverInfo (FMOD_SYSTEM *system, int id, char *name, int namelen, FMOD_GUID *guid);
2013 FMOD_RESULT F_API FMOD_System_GetRecordDriverInfoW (FMOD_SYSTEM *system, int id, short *name, int namelen, FMOD_GUID *guid);
2014 FMOD_RESULT F_API FMOD_System_GetRecordDriverCaps (FMOD_SYSTEM *system, int id, FMOD_CAPS *caps, int *minfrequency, int *maxfrequency);
2015 FMOD_RESULT F_API FMOD_System_GetRecordPosition (FMOD_SYSTEM *system, int id, unsigned int *position);
2016 
2017 FMOD_RESULT F_API FMOD_System_RecordStart (FMOD_SYSTEM *system, int id, FMOD_SOUND *sound, FMOD_BOOL loop);
2018 FMOD_RESULT F_API FMOD_System_RecordStop (FMOD_SYSTEM *system, int id);
2019 FMOD_RESULT F_API FMOD_System_IsRecording (FMOD_SYSTEM *system, int id, FMOD_BOOL *recording);
2020 
2021 /*
2022  Geometry API.
2023 */
2024 
2025 FMOD_RESULT F_API FMOD_System_CreateGeometry (FMOD_SYSTEM *system, int maxpolygons, int maxvertices, FMOD_GEOMETRY **geometry);
2026 FMOD_RESULT F_API FMOD_System_SetGeometrySettings (FMOD_SYSTEM *system, float maxworldsize);
2027 FMOD_RESULT F_API FMOD_System_GetGeometrySettings (FMOD_SYSTEM *system, float *maxworldsize);
2028 FMOD_RESULT F_API FMOD_System_LoadGeometry (FMOD_SYSTEM *system, const void *data, int datasize, FMOD_GEOMETRY **geometry);
2029 FMOD_RESULT F_API FMOD_System_GetGeometryOcclusion (FMOD_SYSTEM *system, const FMOD_VECTOR *listener, const FMOD_VECTOR *source, float *direct, float *reverb);
2030 
2031 /*
2032  Network functions.
2033 */
2034 
2035 FMOD_RESULT F_API FMOD_System_SetNetworkProxy (FMOD_SYSTEM *system, const char *proxy);
2036 FMOD_RESULT F_API FMOD_System_GetNetworkProxy (FMOD_SYSTEM *system, char *proxy, int proxylen);
2037 FMOD_RESULT F_API FMOD_System_SetNetworkTimeout (FMOD_SYSTEM *system, int timeout);
2038 FMOD_RESULT F_API FMOD_System_GetNetworkTimeout (FMOD_SYSTEM *system, int *timeout);
2039 
2040 /*
2041  Userdata set/get.
2042 */
2043 
2044 FMOD_RESULT F_API FMOD_System_SetUserData (FMOD_SYSTEM *system, void *userdata);
2045 FMOD_RESULT F_API FMOD_System_GetUserData (FMOD_SYSTEM *system, void **userdata);
2046 
2047 FMOD_RESULT F_API FMOD_System_GetMemoryInfo (FMOD_SYSTEM *system, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2048 
2049 /*
2050  'Sound' API
2051 */
2052 
2053 FMOD_RESULT F_API FMOD_Sound_Release (FMOD_SOUND *sound);
2054 FMOD_RESULT F_API FMOD_Sound_GetSystemObject (FMOD_SOUND *sound, FMOD_SYSTEM **system);
2055 
2056 /*
2057  Standard sound manipulation functions.
2058 */
2059 
2060 FMOD_RESULT F_API FMOD_Sound_Lock (FMOD_SOUND *sound, unsigned int offset, unsigned int length, void **ptr1, void **ptr2, unsigned int *len1, unsigned int *len2);
2061 FMOD_RESULT F_API FMOD_Sound_Unlock (FMOD_SOUND *sound, void *ptr1, void *ptr2, unsigned int len1, unsigned int len2);
2062 FMOD_RESULT F_API FMOD_Sound_SetDefaults (FMOD_SOUND *sound, float frequency, float volume, float pan, int priority);
2063 FMOD_RESULT F_API FMOD_Sound_GetDefaults (FMOD_SOUND *sound, float *frequency, float *volume, float *pan, int *priority);
2064 FMOD_RESULT F_API FMOD_Sound_SetVariations (FMOD_SOUND *sound, float frequencyvar, float volumevar, float panvar);
2065 FMOD_RESULT F_API FMOD_Sound_GetVariations (FMOD_SOUND *sound, float *frequencyvar, float *volumevar, float *panvar);
2066 FMOD_RESULT F_API FMOD_Sound_Set3DMinMaxDistance (FMOD_SOUND *sound, float min, float max);
2067 FMOD_RESULT F_API FMOD_Sound_Get3DMinMaxDistance (FMOD_SOUND *sound, float *min, float *max);
2068 FMOD_RESULT F_API FMOD_Sound_Set3DConeSettings (FMOD_SOUND *sound, float insideconeangle, float outsideconeangle, float outsidevolume);
2069 FMOD_RESULT F_API FMOD_Sound_Get3DConeSettings (FMOD_SOUND *sound, float *insideconeangle, float *outsideconeangle, float *outsidevolume);
2070 FMOD_RESULT F_API FMOD_Sound_Set3DCustomRolloff (FMOD_SOUND *sound, FMOD_VECTOR *points, int numpoints);
2071 FMOD_RESULT F_API FMOD_Sound_Get3DCustomRolloff (FMOD_SOUND *sound, FMOD_VECTOR **points, int *numpoints);
2072 FMOD_RESULT F_API FMOD_Sound_SetSubSound (FMOD_SOUND *sound, int index, FMOD_SOUND *subsound);
2073 FMOD_RESULT F_API FMOD_Sound_GetSubSound (FMOD_SOUND *sound, int index, FMOD_SOUND **subsound);
2074 FMOD_RESULT F_API FMOD_Sound_SetSubSoundSentence (FMOD_SOUND *sound, int *subsoundlist, int numsubsounds);
2075 FMOD_RESULT F_API FMOD_Sound_GetName (FMOD_SOUND *sound, char *name, int namelen);
2076 FMOD_RESULT F_API FMOD_Sound_GetLength (FMOD_SOUND *sound, unsigned int *length, FMOD_TIMEUNIT lengthtype);
2077 FMOD_RESULT F_API FMOD_Sound_GetFormat (FMOD_SOUND *sound, FMOD_SOUND_TYPE *type, FMOD_SOUND_FORMAT *format, int *channels, int *bits);
2078 FMOD_RESULT F_API FMOD_Sound_GetNumSubSounds (FMOD_SOUND *sound, int *numsubsounds);
2079 FMOD_RESULT F_API FMOD_Sound_GetNumTags (FMOD_SOUND *sound, int *numtags, int *numtagsupdated);
2080 FMOD_RESULT F_API FMOD_Sound_GetTag (FMOD_SOUND *sound, const char *name, int index, FMOD_TAG *tag);
2081 FMOD_RESULT F_API FMOD_Sound_GetOpenState (FMOD_SOUND *sound, FMOD_OPENSTATE *openstate, unsigned int *percentbuffered, FMOD_BOOL *starving, FMOD_BOOL *diskbusy);
2082 FMOD_RESULT F_API FMOD_Sound_ReadData (FMOD_SOUND *sound, void *buffer, unsigned int lenbytes, unsigned int *read);
2083 FMOD_RESULT F_API FMOD_Sound_SeekData (FMOD_SOUND *sound, unsigned int pcm);
2084 
2085 FMOD_RESULT F_API FMOD_Sound_SetSoundGroup (FMOD_SOUND *sound, FMOD_SOUNDGROUP *soundgroup);
2086 FMOD_RESULT F_API FMOD_Sound_GetSoundGroup (FMOD_SOUND *sound, FMOD_SOUNDGROUP **soundgroup);
2087 
2088 /*
2089  Synchronization point API. These points can come from markers embedded in wav files, and can also generate channel callbacks.
2090 */
2091 
2092 FMOD_RESULT F_API FMOD_Sound_GetNumSyncPoints (FMOD_SOUND *sound, int *numsyncpoints);
2093 FMOD_RESULT F_API FMOD_Sound_GetSyncPoint (FMOD_SOUND *sound, int index, FMOD_SYNCPOINT **point);
2094 FMOD_RESULT F_API FMOD_Sound_GetSyncPointInfo (FMOD_SOUND *sound, FMOD_SYNCPOINT *point, char *name, int namelen, unsigned int *offset, FMOD_TIMEUNIT offsettype);
2095 FMOD_RESULT F_API FMOD_Sound_AddSyncPoint (FMOD_SOUND *sound, unsigned int offset, FMOD_TIMEUNIT offsettype, const char *name, FMOD_SYNCPOINT **point);
2096 FMOD_RESULT F_API FMOD_Sound_DeleteSyncPoint (FMOD_SOUND *sound, FMOD_SYNCPOINT *point);
2097 
2098 /*
2099  Functions also in Channel class but here they are the 'default' to save having to change it in Channel all the time.
2100 */
2101 
2102 FMOD_RESULT F_API FMOD_Sound_SetMode (FMOD_SOUND *sound, FMOD_MODE mode);
2103 FMOD_RESULT F_API FMOD_Sound_GetMode (FMOD_SOUND *sound, FMOD_MODE *mode);
2104 FMOD_RESULT F_API FMOD_Sound_SetLoopCount (FMOD_SOUND *sound, int loopcount);
2105 FMOD_RESULT F_API FMOD_Sound_GetLoopCount (FMOD_SOUND *sound, int *loopcount);
2106 FMOD_RESULT F_API FMOD_Sound_SetLoopPoints (FMOD_SOUND *sound, unsigned int loopstart, FMOD_TIMEUNIT loopstarttype, unsigned int loopend, FMOD_TIMEUNIT loopendtype);
2107 FMOD_RESULT F_API FMOD_Sound_GetLoopPoints (FMOD_SOUND *sound, unsigned int *loopstart, FMOD_TIMEUNIT loopstarttype, unsigned int *loopend, FMOD_TIMEUNIT loopendtype);
2108 
2109 /*
2110  For MOD/S3M/XM/IT/MID sequenced formats only.
2111 */
2112 
2113 FMOD_RESULT F_API FMOD_Sound_GetMusicNumChannels (FMOD_SOUND *sound, int *numchannels);
2114 FMOD_RESULT F_API FMOD_Sound_SetMusicChannelVolume (FMOD_SOUND *sound, int channel, float volume);
2115 FMOD_RESULT F_API FMOD_Sound_GetMusicChannelVolume (FMOD_SOUND *sound, int channel, float *volume);
2116 FMOD_RESULT F_API FMOD_Sound_SetMusicSpeed (FMOD_SOUND *sound, float speed);
2117 FMOD_RESULT F_API FMOD_Sound_GetMusicSpeed (FMOD_SOUND *sound, float *speed);
2118 
2119 /*
2120  Userdata set/get.
2121 */
2122 
2123 FMOD_RESULT F_API FMOD_Sound_SetUserData (FMOD_SOUND *sound, void *userdata);
2124 FMOD_RESULT F_API FMOD_Sound_GetUserData (FMOD_SOUND *sound, void **userdata);
2125 
2126 FMOD_RESULT F_API FMOD_Sound_GetMemoryInfo (FMOD_SOUND *sound, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2127 
2128 /*
2129  'Channel' API
2130 */
2131 
2132 FMOD_RESULT F_API FMOD_Channel_GetSystemObject (FMOD_CHANNEL *channel, FMOD_SYSTEM **system);
2133 
2134 FMOD_RESULT F_API FMOD_Channel_Stop (FMOD_CHANNEL *channel);
2135 FMOD_RESULT F_API FMOD_Channel_SetPaused (FMOD_CHANNEL *channel, FMOD_BOOL paused);
2136 FMOD_RESULT F_API FMOD_Channel_GetPaused (FMOD_CHANNEL *channel, FMOD_BOOL *paused);
2137 FMOD_RESULT F_API FMOD_Channel_SetVolume (FMOD_CHANNEL *channel, float volume);
2138 FMOD_RESULT F_API FMOD_Channel_GetVolume (FMOD_CHANNEL *channel, float *volume);
2139 FMOD_RESULT F_API FMOD_Channel_SetFrequency (FMOD_CHANNEL *channel, float frequency);
2140 FMOD_RESULT F_API FMOD_Channel_GetFrequency (FMOD_CHANNEL *channel, float *frequency);
2141 FMOD_RESULT F_API FMOD_Channel_SetPan (FMOD_CHANNEL *channel, float pan);
2142 FMOD_RESULT F_API FMOD_Channel_GetPan (FMOD_CHANNEL *channel, float *pan);
2143 FMOD_RESULT F_API FMOD_Channel_SetDelay (FMOD_CHANNEL *channel, FMOD_DELAYTYPE delaytype, unsigned int delayhi, unsigned int delaylo);
2144 FMOD_RESULT F_API FMOD_Channel_GetDelay (FMOD_CHANNEL *channel, FMOD_DELAYTYPE delaytype, unsigned int *delayhi, unsigned int *delaylo);
2145 FMOD_RESULT F_API FMOD_Channel_SetSpeakerMix (FMOD_CHANNEL *channel, float frontleft, float frontright, float center, float lfe, float backleft, float backright, float sideleft, float sideright);
2146 FMOD_RESULT F_API FMOD_Channel_GetSpeakerMix (FMOD_CHANNEL *channel, float *frontleft, float *frontright, float *center, float *lfe, float *backleft, float *backright, float *sideleft, float *sideright);
2147 FMOD_RESULT F_API FMOD_Channel_SetSpeakerLevels (FMOD_CHANNEL *channel, FMOD_SPEAKER speaker, float *levels, int numlevels);
2148 FMOD_RESULT F_API FMOD_Channel_GetSpeakerLevels (FMOD_CHANNEL *channel, FMOD_SPEAKER speaker, float *levels, int numlevels);
2149 FMOD_RESULT F_API FMOD_Channel_SetInputChannelMix (FMOD_CHANNEL *channel, float *levels, int numlevels);
2150 FMOD_RESULT F_API FMOD_Channel_GetInputChannelMix (FMOD_CHANNEL *channel, float *levels, int numlevels);
2151 FMOD_RESULT F_API FMOD_Channel_SetMute (FMOD_CHANNEL *channel, FMOD_BOOL mute);
2152 FMOD_RESULT F_API FMOD_Channel_GetMute (FMOD_CHANNEL *channel, FMOD_BOOL *mute);
2153 FMOD_RESULT F_API FMOD_Channel_SetPriority (FMOD_CHANNEL *channel, int priority);
2154 FMOD_RESULT F_API FMOD_Channel_GetPriority (FMOD_CHANNEL *channel, int *priority);
2155 FMOD_RESULT F_API FMOD_Channel_SetPosition (FMOD_CHANNEL *channel, unsigned int position, FMOD_TIMEUNIT postype);
2156 FMOD_RESULT F_API FMOD_Channel_GetPosition (FMOD_CHANNEL *channel, unsigned int *position, FMOD_TIMEUNIT postype);
2157 FMOD_RESULT F_API FMOD_Channel_SetReverbProperties (FMOD_CHANNEL *channel, const FMOD_REVERB_CHANNELPROPERTIES *prop);
2158 FMOD_RESULT F_API FMOD_Channel_GetReverbProperties (FMOD_CHANNEL *channel, FMOD_REVERB_CHANNELPROPERTIES *prop);
2159 FMOD_RESULT F_API FMOD_Channel_SetLowPassGain (FMOD_CHANNEL *channel, float gain);
2160 FMOD_RESULT F_API FMOD_Channel_GetLowPassGain (FMOD_CHANNEL *channel, float *gain);
2161 
2162 FMOD_RESULT F_API FMOD_Channel_SetChannelGroup (FMOD_CHANNEL *channel, FMOD_CHANNELGROUP *channelgroup);
2163 FMOD_RESULT F_API FMOD_Channel_GetChannelGroup (FMOD_CHANNEL *channel, FMOD_CHANNELGROUP **channelgroup);
2164 FMOD_RESULT F_API FMOD_Channel_SetCallback (FMOD_CHANNEL *channel, FMOD_CHANNEL_CALLBACK callback);
2165 
2166 /*
2167  3D functionality.
2168 */
2169 
2170 FMOD_RESULT F_API FMOD_Channel_Set3DAttributes (FMOD_CHANNEL *channel, const FMOD_VECTOR *pos, const FMOD_VECTOR *vel);
2171 FMOD_RESULT F_API FMOD_Channel_Get3DAttributes (FMOD_CHANNEL *channel, FMOD_VECTOR *pos, FMOD_VECTOR *vel);
2172 FMOD_RESULT F_API FMOD_Channel_Set3DMinMaxDistance (FMOD_CHANNEL *channel, float mindistance, float maxdistance);
2173 FMOD_RESULT F_API FMOD_Channel_Get3DMinMaxDistance (FMOD_CHANNEL *channel, float *mindistance, float *maxdistance);
2174 FMOD_RESULT F_API FMOD_Channel_Set3DConeSettings (FMOD_CHANNEL *channel, float insideconeangle, float outsideconeangle, float outsidevolume);
2175 FMOD_RESULT F_API FMOD_Channel_Get3DConeSettings (FMOD_CHANNEL *channel, float *insideconeangle, float *outsideconeangle, float *outsidevolume);
2176 FMOD_RESULT F_API FMOD_Channel_Set3DConeOrientation (FMOD_CHANNEL *channel, FMOD_VECTOR *orientation);
2177 FMOD_RESULT F_API FMOD_Channel_Get3DConeOrientation (FMOD_CHANNEL *channel, FMOD_VECTOR *orientation);
2178 FMOD_RESULT F_API FMOD_Channel_Set3DCustomRolloff (FMOD_CHANNEL *channel, FMOD_VECTOR *points, int numpoints);
2179 FMOD_RESULT F_API FMOD_Channel_Get3DCustomRolloff (FMOD_CHANNEL *channel, FMOD_VECTOR **points, int *numpoints);
2180 FMOD_RESULT F_API FMOD_Channel_Set3DOcclusion (FMOD_CHANNEL *channel, float directocclusion, float reverbocclusion);
2181 FMOD_RESULT F_API FMOD_Channel_Get3DOcclusion (FMOD_CHANNEL *channel, float *directocclusion, float *reverbocclusion);
2182 FMOD_RESULT F_API FMOD_Channel_Set3DSpread (FMOD_CHANNEL *channel, float angle);
2183 FMOD_RESULT F_API FMOD_Channel_Get3DSpread (FMOD_CHANNEL *channel, float *angle);
2184 FMOD_RESULT F_API FMOD_Channel_Set3DPanLevel (FMOD_CHANNEL *channel, float level);
2185 FMOD_RESULT F_API FMOD_Channel_Get3DPanLevel (FMOD_CHANNEL *channel, float *level);
2186 FMOD_RESULT F_API FMOD_Channel_Set3DDopplerLevel (FMOD_CHANNEL *channel, float level);
2187 FMOD_RESULT F_API FMOD_Channel_Get3DDopplerLevel (FMOD_CHANNEL *channel, float *level);
2188 FMOD_RESULT F_API FMOD_Channel_Set3DDistanceFilter (FMOD_CHANNEL *channel, FMOD_BOOL custom, float customLevel, float centerFreq);
2189 FMOD_RESULT F_API FMOD_Channel_Get3DDistanceFilter (FMOD_CHANNEL *channel, FMOD_BOOL *custom, float *customLevel, float *centerFreq);
2190 
2191 /*
2192  DSP functionality only for channels playing sounds created with FMOD_SOFTWARE.
2193 */
2194 
2195 FMOD_RESULT F_API FMOD_Channel_GetDSPHead (FMOD_CHANNEL *channel, FMOD_DSP **dsp);
2196 FMOD_RESULT F_API FMOD_Channel_AddDSP (FMOD_CHANNEL *channel, FMOD_DSP *dsp, FMOD_DSPCONNECTION **connection);
2197 
2198 /*
2199  Information only functions.
2200 */
2201 
2202 FMOD_RESULT F_API FMOD_Channel_IsPlaying (FMOD_CHANNEL *channel, FMOD_BOOL *isplaying);
2203 FMOD_RESULT F_API FMOD_Channel_IsVirtual (FMOD_CHANNEL *channel, FMOD_BOOL *isvirtual);
2204 FMOD_RESULT F_API FMOD_Channel_GetAudibility (FMOD_CHANNEL *channel, float *audibility);
2205 FMOD_RESULT F_API FMOD_Channel_GetCurrentSound (FMOD_CHANNEL *channel, FMOD_SOUND **sound);
2206 FMOD_RESULT F_API FMOD_Channel_GetSpectrum (FMOD_CHANNEL *channel, float *spectrumarray, int numvalues, int channeloffset, FMOD_DSP_FFT_WINDOW windowtype);
2207 FMOD_RESULT F_API FMOD_Channel_GetWaveData (FMOD_CHANNEL *channel, float *wavearray, int numvalues, int channeloffset);
2208 FMOD_RESULT F_API FMOD_Channel_GetIndex (FMOD_CHANNEL *channel, int *index);
2209 
2210 /*
2211  Functions also found in Sound class but here they can be set per channel.
2212 */
2213 
2214 FMOD_RESULT F_API FMOD_Channel_SetMode (FMOD_CHANNEL *channel, FMOD_MODE mode);
2215 FMOD_RESULT F_API FMOD_Channel_GetMode (FMOD_CHANNEL *channel, FMOD_MODE *mode);
2216 FMOD_RESULT F_API FMOD_Channel_SetLoopCount (FMOD_CHANNEL *channel, int loopcount);
2217 FMOD_RESULT F_API FMOD_Channel_GetLoopCount (FMOD_CHANNEL *channel, int *loopcount);
2218 FMOD_RESULT F_API FMOD_Channel_SetLoopPoints (FMOD_CHANNEL *channel, unsigned int loopstart, FMOD_TIMEUNIT loopstarttype, unsigned int loopend, FMOD_TIMEUNIT loopendtype);
2219 FMOD_RESULT F_API FMOD_Channel_GetLoopPoints (FMOD_CHANNEL *channel, unsigned int *loopstart, FMOD_TIMEUNIT loopstarttype, unsigned int *loopend, FMOD_TIMEUNIT loopendtype);
2220 
2221 /*
2222  Userdata set/get.
2223 */
2224 
2225 FMOD_RESULT F_API FMOD_Channel_SetUserData (FMOD_CHANNEL *channel, void *userdata);
2226 FMOD_RESULT F_API FMOD_Channel_GetUserData (FMOD_CHANNEL *channel, void **userdata);
2227 
2228 FMOD_RESULT F_API FMOD_Channel_GetMemoryInfo (FMOD_CHANNEL *channel, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2229 
2230 /*
2231  'ChannelGroup' API
2232 */
2233 
2234 FMOD_RESULT F_API FMOD_ChannelGroup_Release (FMOD_CHANNELGROUP *channelgroup);
2235 FMOD_RESULT F_API FMOD_ChannelGroup_GetSystemObject (FMOD_CHANNELGROUP *channelgroup, FMOD_SYSTEM **system);
2236 
2237 /*
2238  Channelgroup scale values. (changes attributes relative to the channels, doesn't overwrite them)
2239 */
2240 
2241 FMOD_RESULT F_API FMOD_ChannelGroup_SetVolume (FMOD_CHANNELGROUP *channelgroup, float volume);
2242 FMOD_RESULT F_API FMOD_ChannelGroup_GetVolume (FMOD_CHANNELGROUP *channelgroup, float *volume);
2243 FMOD_RESULT F_API FMOD_ChannelGroup_SetPitch (FMOD_CHANNELGROUP *channelgroup, float pitch);
2244 FMOD_RESULT F_API FMOD_ChannelGroup_GetPitch (FMOD_CHANNELGROUP *channelgroup, float *pitch);
2245 FMOD_RESULT F_API FMOD_ChannelGroup_Set3DOcclusion (FMOD_CHANNELGROUP *channelgroup, float directocclusion, float reverbocclusion);
2246 FMOD_RESULT F_API FMOD_ChannelGroup_Get3DOcclusion (FMOD_CHANNELGROUP *channelgroup, float *directocclusion, float *reverbocclusion);
2247 FMOD_RESULT F_API FMOD_ChannelGroup_SetPaused (FMOD_CHANNELGROUP *channelgroup, FMOD_BOOL paused);
2248 FMOD_RESULT F_API FMOD_ChannelGroup_GetPaused (FMOD_CHANNELGROUP *channelgroup, FMOD_BOOL *paused);
2249 FMOD_RESULT F_API FMOD_ChannelGroup_SetMute (FMOD_CHANNELGROUP *channelgroup, FMOD_BOOL mute);
2250 FMOD_RESULT F_API FMOD_ChannelGroup_GetMute (FMOD_CHANNELGROUP *channelgroup, FMOD_BOOL *mute);
2251 
2252 /*
2253  Channelgroup override values. (recursively overwrites whatever settings the channels had)
2254 */
2255 
2256 FMOD_RESULT F_API FMOD_ChannelGroup_Stop (FMOD_CHANNELGROUP *channelgroup);
2257 FMOD_RESULT F_API FMOD_ChannelGroup_OverrideVolume (FMOD_CHANNELGROUP *channelgroup, float volume);
2258 FMOD_RESULT F_API FMOD_ChannelGroup_OverrideFrequency(FMOD_CHANNELGROUP *channelgroup, float frequency);
2259 FMOD_RESULT F_API FMOD_ChannelGroup_OverridePan (FMOD_CHANNELGROUP *channelgroup, float pan);
2260 FMOD_RESULT F_API FMOD_ChannelGroup_OverrideReverbProperties(FMOD_CHANNELGROUP *channelgroup, const FMOD_REVERB_CHANNELPROPERTIES *prop);
2261 FMOD_RESULT F_API FMOD_ChannelGroup_Override3DAttributes(FMOD_CHANNELGROUP *channelgroup, const FMOD_VECTOR *pos, const FMOD_VECTOR *vel);
2262 FMOD_RESULT F_API FMOD_ChannelGroup_OverrideSpeakerMix(FMOD_CHANNELGROUP *channelgroup, float frontleft, float frontright, float center, float lfe, float backleft, float backright, float sideleft, float sideright);
2263 
2264 /*
2265  Nested channel groups.
2266 */
2267 
2268 FMOD_RESULT F_API FMOD_ChannelGroup_AddGroup (FMOD_CHANNELGROUP *channelgroup, FMOD_CHANNELGROUP *group);
2269 FMOD_RESULT F_API FMOD_ChannelGroup_GetNumGroups (FMOD_CHANNELGROUP *channelgroup, int *numgroups);
2270 FMOD_RESULT F_API FMOD_ChannelGroup_GetGroup (FMOD_CHANNELGROUP *channelgroup, int index, FMOD_CHANNELGROUP **group);
2271 FMOD_RESULT F_API FMOD_ChannelGroup_GetParentGroup (FMOD_CHANNELGROUP *channelgroup, FMOD_CHANNELGROUP **group);
2272 
2273 /*
2274  DSP functionality only for channel groups playing sounds created with FMOD_SOFTWARE.
2275 */
2276 
2277 FMOD_RESULT F_API FMOD_ChannelGroup_GetDSPHead (FMOD_CHANNELGROUP *channelgroup, FMOD_DSP **dsp);
2278 FMOD_RESULT F_API FMOD_ChannelGroup_AddDSP (FMOD_CHANNELGROUP *channelgroup, FMOD_DSP *dsp, FMOD_DSPCONNECTION **connection);
2279 
2280 /*
2281  Information only functions.
2282 */
2283 
2284 FMOD_RESULT F_API FMOD_ChannelGroup_GetName (FMOD_CHANNELGROUP *channelgroup, char *name, int namelen);
2285 FMOD_RESULT F_API FMOD_ChannelGroup_GetNumChannels (FMOD_CHANNELGROUP *channelgroup, int *numchannels);
2286 FMOD_RESULT F_API FMOD_ChannelGroup_GetChannel (FMOD_CHANNELGROUP *channelgroup, int index, FMOD_CHANNEL **channel);
2287 FMOD_RESULT F_API FMOD_ChannelGroup_GetSpectrum (FMOD_CHANNELGROUP *channelgroup, float *spectrumarray, int numvalues, int channeloffset, FMOD_DSP_FFT_WINDOW windowtype);
2288 FMOD_RESULT F_API FMOD_ChannelGroup_GetWaveData (FMOD_CHANNELGROUP *channelgroup, float *wavearray, int numvalues, int channeloffset);
2289 
2290 /*
2291  Userdata set/get.
2292 */
2293 
2294 FMOD_RESULT F_API FMOD_ChannelGroup_SetUserData (FMOD_CHANNELGROUP *channelgroup, void *userdata);
2295 FMOD_RESULT F_API FMOD_ChannelGroup_GetUserData (FMOD_CHANNELGROUP *channelgroup, void **userdata);
2296 
2297 FMOD_RESULT F_API FMOD_ChannelGroup_GetMemoryInfo (FMOD_CHANNELGROUP *channelgroup, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2298 
2299 /*
2300  'SoundGroup' API
2301 */
2302 
2303 FMOD_RESULT F_API FMOD_SoundGroup_Release (FMOD_SOUNDGROUP *soundgroup);
2304 FMOD_RESULT F_API FMOD_SoundGroup_GetSystemObject (FMOD_SOUNDGROUP *soundgroup, FMOD_SYSTEM **system);
2305 
2306 /*
2307  SoundGroup control functions.
2308 */
2309 
2310 FMOD_RESULT F_API FMOD_SoundGroup_SetMaxAudible (FMOD_SOUNDGROUP *soundgroup, int maxaudible);
2311 FMOD_RESULT F_API FMOD_SoundGroup_GetMaxAudible (FMOD_SOUNDGROUP *soundgroup, int *maxaudible);
2312 FMOD_RESULT F_API FMOD_SoundGroup_SetMaxAudibleBehavior(FMOD_SOUNDGROUP *soundgroup, FMOD_SOUNDGROUP_BEHAVIOR behavior);
2313 FMOD_RESULT F_API FMOD_SoundGroup_GetMaxAudibleBehavior(FMOD_SOUNDGROUP *soundgroup, FMOD_SOUNDGROUP_BEHAVIOR *behavior);
2314 FMOD_RESULT F_API FMOD_SoundGroup_SetMuteFadeSpeed (FMOD_SOUNDGROUP *soundgroup, float speed);
2315 FMOD_RESULT F_API FMOD_SoundGroup_GetMuteFadeSpeed (FMOD_SOUNDGROUP *soundgroup, float *speed);
2316 FMOD_RESULT F_API FMOD_SoundGroup_SetVolume (FMOD_SOUNDGROUP *soundgroup, float volume);
2317 FMOD_RESULT F_API FMOD_SoundGroup_GetVolume (FMOD_SOUNDGROUP *soundgroup, float *volume);
2318 FMOD_RESULT F_API FMOD_SoundGroup_Stop (FMOD_SOUNDGROUP *soundgroup);
2319 
2320 /*
2321  Information only functions.
2322 */
2323 
2324 FMOD_RESULT F_API FMOD_SoundGroup_GetName (FMOD_SOUNDGROUP *soundgroup, char *name, int namelen);
2325 FMOD_RESULT F_API FMOD_SoundGroup_GetNumSounds (FMOD_SOUNDGROUP *soundgroup, int *numsounds);
2326 FMOD_RESULT F_API FMOD_SoundGroup_GetSound (FMOD_SOUNDGROUP *soundgroup, int index, FMOD_SOUND **sound);
2327 FMOD_RESULT F_API FMOD_SoundGroup_GetNumPlaying (FMOD_SOUNDGROUP *soundgroup, int *numplaying);
2328 
2329 /*
2330  Userdata set/get.
2331 */
2332 
2333 FMOD_RESULT F_API FMOD_SoundGroup_SetUserData (FMOD_SOUNDGROUP *soundgroup, void *userdata);
2334 FMOD_RESULT F_API FMOD_SoundGroup_GetUserData (FMOD_SOUNDGROUP *soundgroup, void **userdata);
2335 
2336 FMOD_RESULT F_API FMOD_SoundGroup_GetMemoryInfo (FMOD_SOUNDGROUP *soundgroup, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2337 
2338 /*
2339  'DSP' API
2340 */
2341 
2342 FMOD_RESULT F_API FMOD_DSP_Release (FMOD_DSP *dsp);
2343 FMOD_RESULT F_API FMOD_DSP_GetSystemObject (FMOD_DSP *dsp, FMOD_SYSTEM **system);
2344 
2345 /*
2346  Connection / disconnection / input and output enumeration.
2347 */
2348 
2349 FMOD_RESULT F_API FMOD_DSP_AddInput (FMOD_DSP *dsp, FMOD_DSP *target, FMOD_DSPCONNECTION **connection);
2350 FMOD_RESULT F_API FMOD_DSP_DisconnectFrom (FMOD_DSP *dsp, FMOD_DSP *target);
2351 FMOD_RESULT F_API FMOD_DSP_DisconnectAll (FMOD_DSP *dsp, FMOD_BOOL inputs, FMOD_BOOL outputs);
2352 FMOD_RESULT F_API FMOD_DSP_Remove (FMOD_DSP *dsp);
2353 FMOD_RESULT F_API FMOD_DSP_GetNumInputs (FMOD_DSP *dsp, int *numinputs);
2354 FMOD_RESULT F_API FMOD_DSP_GetNumOutputs (FMOD_DSP *dsp, int *numoutputs);
2355 FMOD_RESULT F_API FMOD_DSP_GetInput (FMOD_DSP *dsp, int index, FMOD_DSP **input, FMOD_DSPCONNECTION **inputconnection);
2356 FMOD_RESULT F_API FMOD_DSP_GetOutput (FMOD_DSP *dsp, int index, FMOD_DSP **output, FMOD_DSPCONNECTION **outputconnection);
2357 
2358 /*
2359  DSP unit control.
2360 */
2361 
2362 FMOD_RESULT F_API FMOD_DSP_SetActive (FMOD_DSP *dsp, FMOD_BOOL active);
2363 FMOD_RESULT F_API FMOD_DSP_GetActive (FMOD_DSP *dsp, FMOD_BOOL *active);
2364 FMOD_RESULT F_API FMOD_DSP_SetBypass (FMOD_DSP *dsp, FMOD_BOOL bypass);
2365 FMOD_RESULT F_API FMOD_DSP_GetBypass (FMOD_DSP *dsp, FMOD_BOOL *bypass);
2366 FMOD_RESULT F_API FMOD_DSP_SetSpeakerActive (FMOD_DSP *dsp, FMOD_SPEAKER speaker, FMOD_BOOL active);
2367 FMOD_RESULT F_API FMOD_DSP_GetSpeakerActive (FMOD_DSP *dsp, FMOD_SPEAKER speaker, FMOD_BOOL *active);
2368 FMOD_RESULT F_API FMOD_DSP_Reset (FMOD_DSP *dsp);
2369 
2370 /*
2371  DSP parameter control.
2372 */
2373 
2374 FMOD_RESULT F_API FMOD_DSP_SetParameter (FMOD_DSP *dsp, int index, float value);
2375 FMOD_RESULT F_API FMOD_DSP_GetParameter (FMOD_DSP *dsp, int index, float *value, char *valuestr, int valuestrlen);
2376 FMOD_RESULT F_API FMOD_DSP_GetNumParameters (FMOD_DSP *dsp, int *numparams);
2377 FMOD_RESULT F_API FMOD_DSP_GetParameterInfo (FMOD_DSP *dsp, int index, char *name, char *label, char *description, int descriptionlen, float *min, float *max);
2378 FMOD_RESULT F_API FMOD_DSP_ShowConfigDialog (FMOD_DSP *dsp, void *hwnd, FMOD_BOOL show);
2379 
2380 /*
2381  DSP attributes.
2382 */
2383 
2384 FMOD_RESULT F_API FMOD_DSP_GetInfo (FMOD_DSP *dsp, char *name, unsigned int *version, int *channels, int *configwidth, int *configheight);
2385 FMOD_RESULT F_API FMOD_DSP_GetType (FMOD_DSP *dsp, FMOD_DSP_TYPE *type);
2386 FMOD_RESULT F_API FMOD_DSP_SetDefaults (FMOD_DSP *dsp, float frequency, float volume, float pan, int priority);
2387 FMOD_RESULT F_API FMOD_DSP_GetDefaults (FMOD_DSP *dsp, float *frequency, float *volume, float *pan, int *priority);
2388 
2389 /*
2390  Userdata set/get.
2391 */
2392 
2393 FMOD_RESULT F_API FMOD_DSP_SetUserData (FMOD_DSP *dsp, void *userdata);
2394 FMOD_RESULT F_API FMOD_DSP_GetUserData (FMOD_DSP *dsp, void **userdata);
2395 
2396 FMOD_RESULT F_API FMOD_DSP_GetMemoryInfo (FMOD_DSP *dsp, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2397 
2398 /*
2399  'DSPConnection' API
2400 */
2401 
2402 FMOD_RESULT F_API FMOD_DSPConnection_GetInput (FMOD_DSPCONNECTION *dspconnection, FMOD_DSP **input);
2403 FMOD_RESULT F_API FMOD_DSPConnection_GetOutput (FMOD_DSPCONNECTION *dspconnection, FMOD_DSP **output);
2404 FMOD_RESULT F_API FMOD_DSPConnection_SetMix (FMOD_DSPCONNECTION *dspconnection, float volume);
2405 FMOD_RESULT F_API FMOD_DSPConnection_GetMix (FMOD_DSPCONNECTION *dspconnection, float *volume);
2406 FMOD_RESULT F_API FMOD_DSPConnection_SetLevels (FMOD_DSPCONNECTION *dspconnection, FMOD_SPEAKER speaker, float *levels, int numlevels);
2407 FMOD_RESULT F_API FMOD_DSPConnection_GetLevels (FMOD_DSPCONNECTION *dspconnection, FMOD_SPEAKER speaker, float *levels, int numlevels);
2408 
2409 /*
2410  Userdata set/get.
2411 */
2412 
2413 FMOD_RESULT F_API FMOD_DSPConnection_SetUserData (FMOD_DSPCONNECTION *dspconnection, void *userdata);
2414 FMOD_RESULT F_API FMOD_DSPConnection_GetUserData (FMOD_DSPCONNECTION *dspconnection, void **userdata);
2415 
2416 FMOD_RESULT F_API FMOD_DSPConnection_GetMemoryInfo (FMOD_DSPCONNECTION *dspconnection, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2417 
2418 /*
2419  'Geometry' API
2420 */
2421 
2422 FMOD_RESULT F_API FMOD_Geometry_Release (FMOD_GEOMETRY *geometry);
2423 
2424 /*
2425  Polygon manipulation.
2426 */
2427 
2428 FMOD_RESULT F_API FMOD_Geometry_AddPolygon (FMOD_GEOMETRY *geometry, float directocclusion, float reverbocclusion, FMOD_BOOL doublesided, int numvertices, const FMOD_VECTOR *vertices, int *polygonindex);
2429 FMOD_RESULT F_API FMOD_Geometry_GetNumPolygons (FMOD_GEOMETRY *geometry, int *numpolygons);
2430 FMOD_RESULT F_API FMOD_Geometry_GetMaxPolygons (FMOD_GEOMETRY *geometry, int *maxpolygons, int *maxvertices);
2431 FMOD_RESULT F_API FMOD_Geometry_GetPolygonNumVertices(FMOD_GEOMETRY *geometry, int index, int *numvertices);
2432 FMOD_RESULT F_API FMOD_Geometry_SetPolygonVertex (FMOD_GEOMETRY *geometry, int index, int vertexindex, const FMOD_VECTOR *vertex);
2433 FMOD_RESULT F_API FMOD_Geometry_GetPolygonVertex (FMOD_GEOMETRY *geometry, int index, int vertexindex, FMOD_VECTOR *vertex);
2434 FMOD_RESULT F_API FMOD_Geometry_SetPolygonAttributes (FMOD_GEOMETRY *geometry, int index, float directocclusion, float reverbocclusion, FMOD_BOOL doublesided);
2435 FMOD_RESULT F_API FMOD_Geometry_GetPolygonAttributes (FMOD_GEOMETRY *geometry, int index, float *directocclusion, float *reverbocclusion, FMOD_BOOL *doublesided);
2436 
2437 /*
2438  Object manipulation.
2439 */
2440 
2441 FMOD_RESULT F_API FMOD_Geometry_SetActive (FMOD_GEOMETRY *geometry, FMOD_BOOL active);
2442 FMOD_RESULT F_API FMOD_Geometry_GetActive (FMOD_GEOMETRY *geometry, FMOD_BOOL *active);
2443 FMOD_RESULT F_API FMOD_Geometry_SetRotation (FMOD_GEOMETRY *geometry, const FMOD_VECTOR *forward, const FMOD_VECTOR *up);
2444 FMOD_RESULT F_API FMOD_Geometry_GetRotation (FMOD_GEOMETRY *geometry, FMOD_VECTOR *forward, FMOD_VECTOR *up);
2445 FMOD_RESULT F_API FMOD_Geometry_SetPosition (FMOD_GEOMETRY *geometry, const FMOD_VECTOR *position);
2446 FMOD_RESULT F_API FMOD_Geometry_GetPosition (FMOD_GEOMETRY *geometry, FMOD_VECTOR *position);
2447 FMOD_RESULT F_API FMOD_Geometry_SetScale (FMOD_GEOMETRY *geometry, const FMOD_VECTOR *scale);
2448 FMOD_RESULT F_API FMOD_Geometry_GetScale (FMOD_GEOMETRY *geometry, FMOD_VECTOR *scale);
2449 FMOD_RESULT F_API FMOD_Geometry_Save (FMOD_GEOMETRY *geometry, void *data, int *datasize);
2450 
2451 /*
2452  Userdata set/get.
2453 */
2454 
2455 FMOD_RESULT F_API FMOD_Geometry_SetUserData (FMOD_GEOMETRY *geometry, void *userdata);
2456 FMOD_RESULT F_API FMOD_Geometry_GetUserData (FMOD_GEOMETRY *geometry, void **userdata);
2457 
2458 FMOD_RESULT F_API FMOD_Geometry_GetMemoryInfo (FMOD_GEOMETRY *geometry, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2459 
2460 /*
2461  'Reverb' API
2462 */
2463 
2464 FMOD_RESULT F_API FMOD_Reverb_Release (FMOD_REVERB *reverb);
2465 
2466 /*
2467  Reverb manipulation.
2468 */
2469 
2470 FMOD_RESULT F_API FMOD_Reverb_Set3DAttributes (FMOD_REVERB *reverb, const FMOD_VECTOR *position, float mindistance, float maxdistance);
2471 FMOD_RESULT F_API FMOD_Reverb_Get3DAttributes (FMOD_REVERB *reverb, FMOD_VECTOR *position, float *mindistance, float *maxdistance);
2472 FMOD_RESULT F_API FMOD_Reverb_SetProperties (FMOD_REVERB *reverb, const FMOD_REVERB_PROPERTIES *properties);
2473 FMOD_RESULT F_API FMOD_Reverb_GetProperties (FMOD_REVERB *reverb, FMOD_REVERB_PROPERTIES *properties);
2474 FMOD_RESULT F_API FMOD_Reverb_SetActive (FMOD_REVERB *reverb, FMOD_BOOL active);
2475 FMOD_RESULT F_API FMOD_Reverb_GetActive (FMOD_REVERB *reverb, FMOD_BOOL *active);
2476 
2477 /*
2478  Userdata set/get.
2479 */
2480 
2481 FMOD_RESULT F_API FMOD_Reverb_SetUserData (FMOD_REVERB *reverb, void *userdata);
2482 FMOD_RESULT F_API FMOD_Reverb_GetUserData (FMOD_REVERB *reverb, void **userdata);
2483 
2484 FMOD_RESULT F_API FMOD_Reverb_GetMemoryInfo (FMOD_REVERB *reverb, unsigned int memorybits, unsigned int event_memorybits, unsigned int *memoryused, FMOD_MEMORY_USAGE_DETAILS *memoryused_details);
2485 /*$ preserve start $*/
2486 
2487 #ifdef __cplusplus
2488 }
2489 #endif
2490 
2491 #endif
2492 
2493 /*$ preserve end $*/
Definition: fmod.h:1333
Definition: fmod.h:1305
Definition: fmod.h:237
Definition: fmod_dsp.h:130
Definition: fmod.h:1792
Definition: fmod_codec.h:47
Definition: fmod.h:1720
Definition: fmod.h:259
Definition: fmod_memoryinfo.h:36
Definition: fmod.h:1571
Definition: fmod.h:1490
Definition: fmod.h:294