1 /* ========================================================================================== */
2 /* FMOD Main header file. Copyright (c), Firelight Technologies Pty, Ltd. 1999-2004. */
3 /* ========================================================================================== */
8 /* ========================================================================================== */
10 /* ========================================================================================== */
12 #if (!defined(WIN32) && !defined(_WIN32) && !defined(__WIN32__) && !defined(_WIN64) && !defined(_WIN32_WCE) && !defined(_XBOX)) || (defined(__GNUC__) && defined(WIN32))
21 #if defined(_WIN32_WCE)
23 #define F_CALLBACKAPI _cdecl
25 #define F_API __stdcall
26 #define F_CALLBACKAPI __stdcall
30 #define DLL_API __declspec(dllexport)
32 #if defined(__LCC__) || defined(__MINGW32__) || defined(__CYGWIN32__)
36 #endif /* __LCC__ || __MINGW32__ || __CYGWIN32__ */
37 #endif /* DLL_EXPORTS */
39 #define FMOD_VERSION 3.75f
44 typedef struct FSOUND_SAMPLE FSOUND_SAMPLE
;
45 typedef struct FSOUND_STREAM FSOUND_STREAM
;
46 typedef struct FSOUND_DSPUNIT FSOUND_DSPUNIT
;
47 typedef struct FSOUND_SYNCPOINT FSOUND_SYNCPOINT
;
48 typedef struct FMUSIC_MODULE FMUSIC_MODULE
;
53 typedef void * (F_CALLBACKAPI
*FSOUND_OPENCALLBACK
) (const char *name
);
54 typedef void (F_CALLBACKAPI
*FSOUND_CLOSECALLBACK
) (void *handle
);
55 typedef int (F_CALLBACKAPI
*FSOUND_READCALLBACK
) (void *buffer
, int size
, void *handle
);
56 typedef int (F_CALLBACKAPI
*FSOUND_SEEKCALLBACK
) (void *handle
, int pos
, signed char mode
);
57 typedef int (F_CALLBACKAPI
*FSOUND_TELLCALLBACK
) (void *handle
);
59 typedef void * (F_CALLBACKAPI
*FSOUND_ALLOCCALLBACK
) (unsigned int size
);
60 typedef void * (F_CALLBACKAPI
*FSOUND_REALLOCCALLBACK
) (void *ptr
, unsigned int size
);
61 typedef void (F_CALLBACKAPI
*FSOUND_FREECALLBACK
) (void *ptr
);
63 typedef void * (F_CALLBACKAPI
*FSOUND_DSPCALLBACK
) (void *originalbuffer
, void *newbuffer
, int length
, void *userdata
);
64 typedef signed char (F_CALLBACKAPI
*FSOUND_STREAMCALLBACK
) (FSOUND_STREAM
*stream
, void *buff
, int len
, void *userdata
);
65 typedef signed char (F_CALLBACKAPI
*FSOUND_METADATACALLBACK
)(char *name
, char *value
, void *userdata
);
66 typedef void (F_CALLBACKAPI
*FMUSIC_CALLBACK
) (FMUSIC_MODULE
*mod
, unsigned char param
);
73 On failure of commands in FMOD, use FSOUND_GetError to attain what happened.
81 FMOD_ERR_NONE
, /* No errors */
82 FMOD_ERR_BUSY
, /* Cannot call this command after FSOUND_Init. Call FSOUND_Close first. */
83 FMOD_ERR_UNINITIALIZED
, /* This command failed because FSOUND_Init or FSOUND_SetOutput was not called */
84 FMOD_ERR_INIT
, /* Error initializing output device. */
85 FMOD_ERR_ALLOCATED
, /* Error initializing output device, but more specifically, the output device is already in use and cannot be reused. */
86 FMOD_ERR_PLAY
, /* Playing the sound failed. */
87 FMOD_ERR_OUTPUT_FORMAT
, /* Soundcard does not support the features needed for this soundsystem (16bit stereo output) */
88 FMOD_ERR_COOPERATIVELEVEL
, /* Error setting cooperative level for hardware. */
89 FMOD_ERR_CREATEBUFFER
, /* Error creating hardware sound buffer. */
90 FMOD_ERR_FILE_NOTFOUND
, /* File not found */
91 FMOD_ERR_FILE_FORMAT
, /* Unknown file format */
92 FMOD_ERR_FILE_BAD
, /* Error loading file */
93 FMOD_ERR_MEMORY
, /* Not enough memory or resources */
94 FMOD_ERR_VERSION
, /* The version number of this file format is not supported */
95 FMOD_ERR_INVALID_PARAM
, /* An invalid parameter was passed to this function */
96 FMOD_ERR_NO_EAX
, /* Tried to use an EAX command on a non EAX enabled channel or output. */
97 FMOD_ERR_CHANNEL_ALLOC
, /* Failed to allocate a new channel */
98 FMOD_ERR_RECORD
, /* Recording is not supported on this machine */
99 FMOD_ERR_MEDIAPLAYER
, /* Windows Media Player not installed so cannot play wma or use internet streaming. */
100 FMOD_ERR_CDDEVICE
/* An error occured trying to open the specified CD device */
108 These output types are used with FSOUND_SetOutput, to choose which output driver to use.
110 FSOUND_OUTPUT_DSOUND will not support hardware 3d acceleration if the sound card driver
111 does not support DirectX 6 Voice Manager Extensions.
113 FSOUND_OUTPUT_WINMM is recommended for NT and CE.
120 enum FSOUND_OUTPUTTYPES
122 FSOUND_OUTPUT_NOSOUND
, /* NoSound driver, all calls to this succeed but do nothing. */
123 FSOUND_OUTPUT_WINMM
, /* Windows Multimedia driver. */
124 FSOUND_OUTPUT_DSOUND
, /* DirectSound driver. You need this to get EAX2 or EAX3 support, or FX api support. */
125 FSOUND_OUTPUT_A3D
, /* A3D driver. */
127 FSOUND_OUTPUT_OSS
, /* Linux/Unix OSS (Open Sound System) driver, i.e. the kernel sound drivers. */
128 FSOUND_OUTPUT_ESD
, /* Linux/Unix ESD (Enlightment Sound Daemon) driver. */
129 FSOUND_OUTPUT_ALSA
, /* Linux Alsa driver. */
131 FSOUND_OUTPUT_ASIO
, /* Low latency ASIO driver */
132 FSOUND_OUTPUT_XBOX
, /* Xbox driver */
133 FSOUND_OUTPUT_PS2
, /* PlayStation 2 driver */
134 FSOUND_OUTPUT_MAC
, /* Mac SoundManager driver */
135 FSOUND_OUTPUT_GC
, /* Gamecube driver */
136 FSOUND_OUTPUT_PSP
, /* PlayStation Portable driver */
138 FSOUND_OUTPUT_NOSOUND_NONREALTIME
/* This is the same as nosound, but the sound generation is driven by FSOUND_Update */
146 These mixer types are used with FSOUND_SetMixer, to choose which mixer to use, or to act
147 upon for other reasons using FSOUND_GetMixer.
148 It is not nescessary to set the mixer. FMOD will autodetect the best mixer for you.
155 enum FSOUND_MIXERTYPES
157 FSOUND_MIXER_AUTODETECT
, /* CE/PS2/GC Only - Non interpolating/low quality mixer. */
158 FSOUND_MIXER_BLENDMODE
, /* Removed / obsolete. */
159 FSOUND_MIXER_MMXP5
, /* Removed / obsolete. */
160 FSOUND_MIXER_MMXP6
, /* Removed / obsolete. */
162 FSOUND_MIXER_QUALITY_AUTODETECT
,/* All platforms - Autodetect the fastest quality mixer based on your cpu. */
163 FSOUND_MIXER_QUALITY_FPU
, /* Win32/Linux only - Interpolating/volume ramping FPU mixer. */
164 FSOUND_MIXER_QUALITY_MMXP5
, /* Win32/Linux only - Interpolating/volume ramping P5 MMX mixer. */
165 FSOUND_MIXER_QUALITY_MMXP6
, /* Win32/Linux only - Interpolating/volume ramping ppro+ MMX mixer. */
167 FSOUND_MIXER_MONO
, /* CE/PS2/GC only - MONO non interpolating/low quality mixer. For speed*/
168 FSOUND_MIXER_QUALITY_MONO
, /* CE/PS2/GC only - MONO Interpolating mixer. For speed */
178 These definitions describe the type of song being played.
187 FMUSIC_TYPE_MOD
, /* Protracker / Fasttracker */
188 FMUSIC_TYPE_S3M
, /* ScreamTracker 3 */
189 FMUSIC_TYPE_XM
, /* FastTracker 2 */
190 FMUSIC_TYPE_IT
, /* Impulse Tracker. */
191 FMUSIC_TYPE_MIDI
, /* MIDI file */
192 FMUSIC_TYPE_FSB
/* FMOD Sample Bank file */
200 FSOUND_DSP_PRIORITIES
203 These default priorities are used by FMOD internal system DSP units. They describe the
204 position of the DSP chain, and the order of how audio processing is executed.
205 You can actually through the use of FSOUND_DSP_GetxxxUnit (where xxx is the name of the DSP
206 unit), disable or even change the priority of a DSP unit.
210 FSOUND_DSP_SetPriority
211 FSOUND_DSP_GetSpectrum
214 #define FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT 0 /* DSP CLEAR unit - done first */
215 #define FSOUND_DSP_DEFAULTPRIORITY_SFXUNIT 100 /* DSP SFX unit - done second */
216 #define FSOUND_DSP_DEFAULTPRIORITY_MUSICUNIT 200 /* DSP MUSIC unit - done third */
217 #define FSOUND_DSP_DEFAULTPRIORITY_USER 300 /* User priority, use this as reference for your own DSP units */
218 #define FSOUND_DSP_DEFAULTPRIORITY_FFTUNIT 900 /* This reads data for FSOUND_DSP_GetSpectrum, so it comes after user units */
219 #define FSOUND_DSP_DEFAULTPRIORITY_CLIPANDCOPYUNIT 1000 /* DSP CLIP AND COPY unit - last */
230 Driver description bitfields. Use FSOUND_Driver_GetCaps to determine if a driver enumerated
231 has the settings you are after. The enumerated driver depends on the output mode, see
239 #define FSOUND_CAPS_HARDWARE 0x1 /* This driver supports hardware accelerated 3d sound. */
240 #define FSOUND_CAPS_EAX2 0x2 /* This driver supports EAX 2 reverb */
241 #define FSOUND_CAPS_EAX3 0x10 /* This driver supports EAX 3 reverb */
252 Sample description bitfields, OR them together for loading and describing samples.
253 NOTE. If the file format being loaded already has a defined format, such as WAV or MP3, then
254 trying to override the pre-defined format with a new set of format flags will not work. For
255 example, an 8 bit WAV file will not load as 16bit if you specify FSOUND_16BITS. It will just
256 ignore the flag and go ahead loading it as 8bits. For these type of formats the only flags
257 you can specify that will really alter the behaviour of how it is loaded, are the following.
259 Looping behaviour - FSOUND_LOOP_OFF, FSOUND_LOOP_NORMAL, FSOUND_LOOP_BIDI
260 Load destination - FSOUND_HW3D, FSOUND_HW2D, FSOUND_2D
261 Loading behaviour - FSOUND_NONBLOCKING, FSOUND_LOADMEMORY, FSOUND_LOADRAW, FSOUND_MPEGACCURATE, FSOUND_MPEGHALFRATE, FSOUND_FORCEMONO
262 Playback behaviour - FSOUND_STREAMABLE, FSOUND_ENABLEFX
263 PlayStation 2 only - FSOUND_USECORE0, FSOUND_USECORE1, FSOUND_LOADMEMORYIOP
265 See flag descriptions for what these do.
268 #define FSOUND_LOOP_OFF 0x00000001 /* For non looping samples. */
269 #define FSOUND_LOOP_NORMAL 0x00000002 /* For forward looping samples. */
270 #define FSOUND_LOOP_BIDI 0x00000004 /* For bidirectional looping samples. (no effect if in hardware). */
271 #define FSOUND_8BITS 0x00000008 /* For 8 bit samples. */
272 #define FSOUND_16BITS 0x00000010 /* For 16 bit samples. */
273 #define FSOUND_MONO 0x00000020 /* For mono samples. */
274 #define FSOUND_STEREO 0x00000040 /* For stereo samples. */
275 #define FSOUND_UNSIGNED 0x00000080 /* For user created source data containing unsigned samples. */
276 #define FSOUND_SIGNED 0x00000100 /* For user created source data containing signed data. */
277 #define FSOUND_DELTA 0x00000200 /* For user created source data stored as delta values. */
278 #define FSOUND_IT214 0x00000400 /* For user created source data stored using IT214 compression. */
279 #define FSOUND_IT215 0x00000800 /* For user created source data stored using IT215 compression. */
280 #define FSOUND_HW3D 0x00001000 /* Attempts to make samples use 3d hardware acceleration. (if the card supports it) */
281 #define FSOUND_2D 0x00002000 /* Tells software (not hardware) based sample not to be included in 3d processing. */
282 #define FSOUND_STREAMABLE 0x00004000 /* For a streamimg sound where you feed the data to it. */
283 #define FSOUND_LOADMEMORY 0x00008000 /* "name" will be interpreted as a pointer to data for streaming and samples. */
284 #define FSOUND_LOADRAW 0x00010000 /* Will ignore file format and treat as raw pcm. */
285 #define FSOUND_MPEGACCURATE 0x00020000 /* For FSOUND_Stream_Open - for accurate FSOUND_Stream_GetLengthMs/FSOUND_Stream_SetTime. WARNING, see FSOUND_Stream_Open for inital opening time performance issues. */
286 #define FSOUND_FORCEMONO 0x00040000 /* For forcing stereo streams and samples to be mono - needed if using FSOUND_HW3D and stereo data - incurs a small speed hit for streams */
287 #define FSOUND_HW2D 0x00080000 /* 2D hardware sounds. allows hardware specific effects */
288 #define FSOUND_ENABLEFX 0x00100000 /* Allows DX8 FX to be played back on a sound. Requires DirectX 8 - Note these sounds cannot be played more than once, be 8 bit, be less than a certain size, or have a changing frequency */
289 #define FSOUND_MPEGHALFRATE 0x00200000 /* For FMODCE only - decodes mpeg streams using a lower quality decode, but faster execution */
290 #define FSOUND_IMAADPCM 0x00400000 /* Contents are stored compressed as IMA ADPCM */
291 #define FSOUND_VAG 0x00800000 /* For PS2 only - Contents are compressed as Sony VAG format */
292 #define FSOUND_NONBLOCKING 0x01000000 /* For FSOUND_Stream_Open/FMUSIC_LoadSong - Causes stream or music to open in the background and not block the foreground app. See FSOUND_Stream_GetOpenState or FMUSIC_GetOpenState to determine when it IS ready. */
293 #define FSOUND_GCADPCM 0x02000000 /* For Gamecube only - Contents are compressed as Gamecube DSP-ADPCM format */
294 #define FSOUND_MULTICHANNEL 0x04000000 /* For PS2 and Gamecube only - Contents are interleaved into a multi-channel (more than stereo) format */
295 #define FSOUND_USECORE0 0x08000000 /* For PS2 only - Sample/Stream is forced to use hardware voices 00-23 */
296 #define FSOUND_USECORE1 0x10000000 /* For PS2 only - Sample/Stream is forced to use hardware voices 24-47 */
297 #define FSOUND_LOADMEMORYIOP 0x20000000 /* For PS2 only - "name" will be interpreted as a pointer to data for streaming and samples. The address provided will be an IOP address */
298 #define FSOUND_IGNORETAGS 0x40000000 /* Skips id3v2 etc tag checks when opening a stream, to reduce seek/read overhead when opening files (helps with CD performance) */
299 #define FSOUND_STREAM_NET 0x80000000 /* Specifies an internet stream */
301 #define FSOUND_NORMAL (FSOUND_16BITS | FSOUND_SIGNED | FSOUND_MONO)
313 Playback method for a CD Audio track, with FSOUND_CD_SetPlayMode
316 FSOUND_CD_SetPlayMode
320 #define FSOUND_CD_PLAYCONTINUOUS 0 /* Starts from the current track and plays to end of CD. */
321 #define FSOUND_CD_PLAYONCE 1 /* Plays the specified track then stops. */
322 #define FSOUND_CD_PLAYLOOPED 2 /* Plays the specified track looped, forever until stopped manually. */
323 #define FSOUND_CD_PLAYRANDOM 3 /* Plays tracks in random order */
334 Miscellaneous values for FMOD functions.
344 #define FSOUND_FREE -1 /* value to play on any free channel, or to allocate a sample in a free sample slot. */
345 #define FSOUND_UNMANAGED -2 /* value to allocate a sample that is NOT managed by FSOUND or placed in a sample slot. */
346 #define FSOUND_ALL -3 /* for a channel index , this flag will affect ALL channels available! Not supported by every function. */
347 #define FSOUND_STEREOPAN -1 /* value for FSOUND_SetPan so that stereo sounds are not played at half volume. See FSOUND_SetPan for more on this. */
348 #define FSOUND_SYSTEMCHANNEL -1000 /* special 'channel' ID for all channel based functions that want to alter the global FSOUND software mixing output channel */
349 #define FSOUND_SYSTEMSAMPLE -1000 /* special 'sample' ID for all sample based functions that want to alter the global FSOUND software mixing output sample */
358 Structure defining a reverb environment.
359 For more indepth descriptions of the reverb properties under win32, please see the EAX2 and EAX3
360 documentation at http://developer.creative.com/ under the 'downloads' section.
361 If they do not have the EAX3 documentation, then most information can be attained from
362 the EAX2 documentation, as EAX3 only adds some more parameters and functionality on top of EAX2.
363 Note the default reverb properties are the same as the FSOUND_PRESET_GENERIC preset.
364 Note that integer values that typically range from -10,000 to 1000 are represented in decibels, and are of a logarithmic scale, not linear, wheras float values are typically linear.
365 PORTABILITY: Each member has the platform it supports in braces ie (win32/xbox).
366 Some reverb parameters are only supported in win32 and some only on xbox. If all parameters are set then the reverb should product a similar effect on either platform.
368 The numerical values listed below are the maximum, minimum and default values for each variable respectively.
371 FSOUND_Reverb_SetProperties
372 FSOUND_Reverb_GetProperties
373 FSOUND_REVERB_PRESETS
377 typedef struct _FSOUND_REVERB_PROPERTIES
/* MIN MAX DEFAULT DESCRIPTION */
379 unsigned int Environment
; /* 0 , 25 , 0 , sets all listener properties (WIN32/PS2 only) */
380 float EnvSize
; /* 1.0 , 100.0 , 7.5 , environment size in meters (WIN32 only) */
381 float EnvDiffusion
; /* 0.0 , 1.0 , 1.0 , environment diffusion (WIN32/XBOX) */
382 int Room
; /* -10000, 0 , -1000 , room effect level (at mid frequencies) (WIN32/XBOX/PS2) */
383 int RoomHF
; /* -10000, 0 , -100 , relative room effect level at high frequencies (WIN32/XBOX) */
384 int RoomLF
; /* -10000, 0 , 0 , relative room effect level at low frequencies (WIN32 only) */
385 float DecayTime
; /* 0.1 , 20.0 , 1.49 , reverberation decay time at mid frequencies (WIN32/XBOX) */
386 float DecayHFRatio
; /* 0.1 , 2.0 , 0.83 , high-frequency to mid-frequency decay time ratio (WIN32/XBOX) */
387 float DecayLFRatio
; /* 0.1 , 2.0 , 1.0 , low-frequency to mid-frequency decay time ratio (WIN32 only) */
388 int Reflections
; /* -10000, 1000 , -2602 , early reflections level relative to room effect (WIN32/XBOX) */
389 float ReflectionsDelay
; /* 0.0 , 0.3 , 0.007 , initial reflection delay time (WIN32/XBOX) */
390 float ReflectionsPan
[3]; /* , , [0,0,0], early reflections panning vector (WIN32 only) */
391 int Reverb
; /* -10000, 2000 , 200 , late reverberation level relative to room effect (WIN32/XBOX) */
392 float ReverbDelay
; /* 0.0 , 0.1 , 0.011 , late reverberation delay time relative to initial reflection (WIN32/XBOX) */
393 float ReverbPan
[3]; /* , , [0,0,0], late reverberation panning vector (WIN32 only) */
394 float EchoTime
; /* .075 , 0.25 , 0.25 , echo time (WIN32/PS2 only. PS2 = Delay time for ECHO/DELAY modes only) */
395 float EchoDepth
; /* 0.0 , 1.0 , 0.0 , echo depth (WIN32/PS2 only. PS2 = Feedback level for ECHO mode only) */
396 float ModulationTime
; /* 0.04 , 4.0 , 0.25 , modulation time (WIN32 only) */
397 float ModulationDepth
; /* 0.0 , 1.0 , 0.0 , modulation depth (WIN32 only) */
398 float AirAbsorptionHF
; /* -100 , 0.0 , -5.0 , change in level per meter at high frequencies (WIN32 only) */
399 float HFReference
; /* 1000.0, 20000 , 5000.0 , reference high frequency (hz) (WIN32/XBOX) */
400 float LFReference
; /* 20.0 , 1000.0, 250.0 , reference low frequency (hz) (WIN32 only) */
401 float RoomRolloffFactor
; /* 0.0 , 10.0 , 0.0 , like FSOUND_3D_SetRolloffFactor but for room effect (WIN32/XBOX) */
402 float Diffusion
; /* 0.0 , 100.0 , 100.0 , Value that controls the echo density in the late reverberation decay. (XBOX only) */
403 float Density
; /* 0.0 , 100.0 , 100.0 , Value that controls the modal density in the late reverberation decay (XBOX only) */
404 unsigned int Flags
; /* FSOUND_REVERB_FLAGS - modifies the behavior of above properties (WIN32/PS2 only) */
405 } FSOUND_REVERB_PROPERTIES
;
415 Values for the Flags member of the FSOUND_REVERB_PROPERTIES structure.
418 FSOUND_REVERB_PROPERTIES
421 #define FSOUND_REVERB_FLAGS_DECAYTIMESCALE 0x00000001 /* 'EnvSize' affects reverberation decay time */
422 #define FSOUND_REVERB_FLAGS_REFLECTIONSSCALE 0x00000002 /* 'EnvSize' affects reflection level */
423 #define FSOUND_REVERB_FLAGS_REFLECTIONSDELAYSCALE 0x00000004 /* 'EnvSize' affects initial reflection delay time */
424 #define FSOUND_REVERB_FLAGS_REVERBSCALE 0x00000008 /* 'EnvSize' affects reflections level */
425 #define FSOUND_REVERB_FLAGS_REVERBDELAYSCALE 0x00000010 /* 'EnvSize' affects late reverberation delay time */
426 #define FSOUND_REVERB_FLAGS_DECAYHFLIMIT 0x00000020 /* AirAbsorptionHF affects DecayHFRatio */
427 #define FSOUND_REVERB_FLAGS_ECHOTIMESCALE 0x00000040 /* 'EnvSize' affects echo time */
428 #define FSOUND_REVERB_FLAGS_MODULATIONTIMESCALE 0x00000080 /* 'EnvSize' affects modulation time */
429 #define FSOUND_REVERB_FLAGS_CORE0 0x00000100 /* PS2 Only - Reverb is applied to CORE0 (hw voices 0-23) */
430 #define FSOUND_REVERB_FLAGS_CORE1 0x00000200 /* PS2 Only - Reverb is applied to CORE1 (hw voices 24-47) */
431 #define FSOUND_REVERB_FLAGS_DEFAULT (FSOUND_REVERB_FLAGS_DECAYTIMESCALE | \
432 FSOUND_REVERB_FLAGS_REFLECTIONSSCALE | \
433 FSOUND_REVERB_FLAGS_REFLECTIONSDELAYSCALE | \
434 FSOUND_REVERB_FLAGS_REVERBSCALE | \
435 FSOUND_REVERB_FLAGS_REVERBDELAYSCALE | \
436 FSOUND_REVERB_FLAGS_DECAYHFLIMIT | \
437 FSOUND_REVERB_FLAGS_CORE0 | \
438 FSOUND_REVERB_FLAGS_CORE1 )
448 FSOUND_REVERB_PRESETS
451 A set of predefined environment PARAMETERS, created by Creative Labs
452 These are used to initialize an FSOUND_REVERB_PROPERTIES structure statically.
454 FSOUND_REVERB_PROPERTIES prop = FSOUND_PRESET_GENERIC;
457 FSOUND_Reverb_SetProperties
460 /* Env Size Diffus Room RoomHF RmLF DecTm DecHF DecLF Refl RefDel RefPan Revb RevDel ReverbPan EchoTm EchDp ModTm ModDp AirAbs HFRef LFRef RRlOff Diffus Densty FLAGS */
461 #define FSOUND_PRESET_OFF {0, 7.5f, 1.00f, -10000, -10000, 0, 1.00f, 1.00f, 1.0f, -2602, 0.007f, { 0.0f,0.0f,0.0f }, 200, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 0.0f, 0.0f, 0x33f }
462 #define FSOUND_PRESET_GENERIC {0, 7.5f, 1.00f, -1000, -100, 0, 1.49f, 0.83f, 1.0f, -2602, 0.007f, { 0.0f,0.0f,0.0f }, 200, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
463 #define FSOUND_PRESET_PADDEDCELL {1, 1.4f, 1.00f, -1000, -6000, 0, 0.17f, 0.10f, 1.0f, -1204, 0.001f, { 0.0f,0.0f,0.0f }, 207, 0.002f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
464 #define FSOUND_PRESET_ROOM {2, 1.9f, 1.00f, -1000, -454, 0, 0.40f, 0.83f, 1.0f, -1646, 0.002f, { 0.0f,0.0f,0.0f }, 53, 0.003f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
465 #define FSOUND_PRESET_BATHROOM {3, 1.4f, 1.00f, -1000, -1200, 0, 1.49f, 0.54f, 1.0f, -370, 0.007f, { 0.0f,0.0f,0.0f }, 1030, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 60.0f, 0x3f }
466 #define FSOUND_PRESET_LIVINGROOM {4, 2.5f, 1.00f, -1000, -6000, 0, 0.50f, 0.10f, 1.0f, -1376, 0.003f, { 0.0f,0.0f,0.0f }, -1104, 0.004f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
467 #define FSOUND_PRESET_STONEROOM {5, 11.6f, 1.00f, -1000, -300, 0, 2.31f, 0.64f, 1.0f, -711, 0.012f, { 0.0f,0.0f,0.0f }, 83, 0.017f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
468 #define FSOUND_PRESET_AUDITORIUM {6, 21.6f, 1.00f, -1000, -476, 0, 4.32f, 0.59f, 1.0f, -789, 0.020f, { 0.0f,0.0f,0.0f }, -289, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
469 #define FSOUND_PRESET_CONCERTHALL {7, 19.6f, 1.00f, -1000, -500, 0, 3.92f, 0.70f, 1.0f, -1230, 0.020f, { 0.0f,0.0f,0.0f }, -2, 0.029f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
470 #define FSOUND_PRESET_CAVE {8, 14.6f, 1.00f, -1000, 0, 0, 2.91f, 1.30f, 1.0f, -602, 0.015f, { 0.0f,0.0f,0.0f }, -302, 0.022f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
471 #define FSOUND_PRESET_ARENA {9, 36.2f, 1.00f, -1000, -698, 0, 7.24f, 0.33f, 1.0f, -1166, 0.020f, { 0.0f,0.0f,0.0f }, 16, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
472 #define FSOUND_PRESET_HANGAR {10, 50.3f, 1.00f, -1000, -1000, 0, 10.05f, 0.23f, 1.0f, -602, 0.020f, { 0.0f,0.0f,0.0f }, 198, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
473 #define FSOUND_PRESET_CARPETTEDHALLWAY {11, 1.9f, 1.00f, -1000, -4000, 0, 0.30f, 0.10f, 1.0f, -1831, 0.002f, { 0.0f,0.0f,0.0f }, -1630, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
474 #define FSOUND_PRESET_HALLWAY {12, 1.8f, 1.00f, -1000, -300, 0, 1.49f, 0.59f, 1.0f, -1219, 0.007f, { 0.0f,0.0f,0.0f }, 441, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
475 #define FSOUND_PRESET_STONECORRIDOR {13, 13.5f, 1.00f, -1000, -237, 0, 2.70f, 0.79f, 1.0f, -1214, 0.013f, { 0.0f,0.0f,0.0f }, 395, 0.020f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
476 #define FSOUND_PRESET_ALLEY {14, 7.5f, 0.30f, -1000, -270, 0, 1.49f, 0.86f, 1.0f, -1204, 0.007f, { 0.0f,0.0f,0.0f }, -4, 0.011f, { 0.0f,0.0f,0.0f }, 0.125f, 0.95f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
477 #define FSOUND_PRESET_FOREST {15, 38.0f, 0.30f, -1000, -3300, 0, 1.49f, 0.54f, 1.0f, -2560, 0.162f, { 0.0f,0.0f,0.0f }, -229, 0.088f, { 0.0f,0.0f,0.0f }, 0.125f, 1.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 79.0f, 100.0f, 0x3f }
478 #define FSOUND_PRESET_CITY {16, 7.5f, 0.50f, -1000, -800, 0, 1.49f, 0.67f, 1.0f, -2273, 0.007f, { 0.0f,0.0f,0.0f }, -1691, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 50.0f, 100.0f, 0x3f }
479 #define FSOUND_PRESET_MOUNTAINS {17, 100.0f, 0.27f, -1000, -2500, 0, 1.49f, 0.21f, 1.0f, -2780, 0.300f, { 0.0f,0.0f,0.0f }, -1434, 0.100f, { 0.0f,0.0f,0.0f }, 0.250f, 1.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 27.0f, 100.0f, 0x1f }
480 #define FSOUND_PRESET_QUARRY {18, 17.5f, 1.00f, -1000, -1000, 0, 1.49f, 0.83f, 1.0f, -10000, 0.061f, { 0.0f,0.0f,0.0f }, 500, 0.025f, { 0.0f,0.0f,0.0f }, 0.125f, 0.70f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
481 #define FSOUND_PRESET_PLAIN {19, 42.5f, 0.21f, -1000, -2000, 0, 1.49f, 0.50f, 1.0f, -2466, 0.179f, { 0.0f,0.0f,0.0f }, -1926, 0.100f, { 0.0f,0.0f,0.0f }, 0.250f, 1.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 21.0f, 100.0f, 0x3f }
482 #define FSOUND_PRESET_PARKINGLOT {20, 8.3f, 1.00f, -1000, 0, 0, 1.65f, 1.50f, 1.0f, -1363, 0.008f, { 0.0f,0.0f,0.0f }, -1153, 0.012f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
483 #define FSOUND_PRESET_SEWERPIPE {21, 1.7f, 0.80f, -1000, -1000, 0, 2.81f, 0.14f, 1.0f, 429, 0.014f, { 0.0f,0.0f,0.0f }, 1023, 0.021f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 0.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 80.0f, 60.0f, 0x3f }
484 #define FSOUND_PRESET_UNDERWATER {22, 1.8f, 1.00f, -1000, -4000, 0, 1.49f, 0.10f, 1.0f, -449, 0.007f, { 0.0f,0.0f,0.0f }, 1700, 0.011f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 1.18f, 0.348f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x3f }
486 /* Non I3DL2 presets */
488 #define FSOUND_PRESET_DRUGGED {23, 1.9f, 0.50f, -1000, 0, 0, 8.39f, 1.39f, 1.0f, -115, 0.002f, { 0.0f,0.0f,0.0f }, 985, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 0.25f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
489 #define FSOUND_PRESET_DIZZY {24, 1.8f, 0.60f, -1000, -400, 0, 17.23f, 0.56f, 1.0f, -1713, 0.020f, { 0.0f,0.0f,0.0f }, -613, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 1.00f, 0.81f, 0.310f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
490 #define FSOUND_PRESET_PSYCHOTIC {25, 1.0f, 0.50f, -1000, -151, 0, 7.56f, 0.91f, 1.0f, -626, 0.020f, { 0.0f,0.0f,0.0f }, 774, 0.030f, { 0.0f,0.0f,0.0f }, 0.250f, 0.00f, 4.00f, 1.000f, -5.0f, 5000.0f, 250.0f, 0.0f, 100.0f, 100.0f, 0x1f }
492 /* PlayStation 2 and PlayStation Portable only presets */
494 #define FSOUND_PRESET_PS2_ROOM {1, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
495 #define FSOUND_PRESET_PS2_STUDIO_A {2, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
496 #define FSOUND_PRESET_PS2_STUDIO_B {3, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
497 #define FSOUND_PRESET_PS2_STUDIO_C {4, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
498 #define FSOUND_PRESET_PS2_HALL {5, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
499 #define FSOUND_PRESET_PS2_SPACE {6, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
500 #define FSOUND_PRESET_PS2_ECHO {7, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
501 #define FSOUND_PRESET_PS2_DELAY {8, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
502 #define FSOUND_PRESET_PS2_PIPE {9, 0, 0, 0, 0, 0, 0.0f, 0.0f, 0.0f, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0, 0.000f, { 0.0f,0.0f,0.0f }, 0.000f, 0.00f, 0.00f, 0.000f, 0.0f, 0000.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0x31f }
511 Structure defining the properties for a reverb source, related to a FSOUND channel.
512 For more indepth descriptions of the reverb properties under win32, please see the EAX3
513 documentation at http://developer.creative.com/ under the 'downloads' section.
514 If they do not have the EAX3 documentation, then most information can be attained from
515 the EAX2 documentation, as EAX3 only adds some more parameters and functionality on top of
518 Note the default reverb properties are the same as the FSOUND_PRESET_GENERIC preset.
519 Note that integer values that typically range from -10,000 to 1000 are represented in
520 decibels, and are of a logarithmic scale, not linear, wheras float values are typically linear.
521 PORTABILITY: Each member has the platform it supports in braces ie (win32/xbox).
522 Some reverb parameters are only supported in win32 and some only on xbox. If all parameters are set then
523 the reverb should product a similar effect on either platform.
524 Linux and FMODCE do not support the reverb api.
526 The numerical values listed below are the maximum, minimum and default values for each variable respectively.
529 FSOUND_Reverb_SetChannelProperties
530 FSOUND_Reverb_GetChannelProperties
531 FSOUND_REVERB_CHANNELFLAGS
534 typedef struct _FSOUND_REVERB_CHANNELPROPERTIES
/* MIN MAX DEFAULT */
536 int Direct
; /* -10000, 1000, 0, direct path level (at low and mid frequencies) (WIN32/XBOX) */
537 int DirectHF
; /* -10000, 0, 0, relative direct path level at high frequencies (WIN32/XBOX) */
538 int Room
; /* -10000, 1000, 0, room effect level (at low and mid frequencies) (WIN32/XBOX/PS2) */
539 int RoomHF
; /* -10000, 0, 0, relative room effect level at high frequencies (WIN32/XBOX) */
540 int Obstruction
; /* -10000, 0, 0, main obstruction control (attenuation at high frequencies) (WIN32/XBOX) */
541 float ObstructionLFRatio
; /* 0.0, 1.0, 0.0, obstruction low-frequency level re. main control (WIN32/XBOX) */
542 int Occlusion
; /* -10000, 0, 0, main occlusion control (attenuation at high frequencies) (WIN32/XBOX) */
543 float OcclusionLFRatio
; /* 0.0, 1.0, 0.25, occlusion low-frequency level re. main control (WIN32/XBOX) */
544 float OcclusionRoomRatio
; /* 0.0, 10.0, 1.5, relative occlusion control for room effect (WIN32) */
545 float OcclusionDirectRatio
; /* 0.0, 10.0, 1.0, relative occlusion control for direct path (WIN32) */
546 int Exclusion
; /* -10000, 0, 0, main exlusion control (attenuation at high frequencies) (WIN32) */
547 float ExclusionLFRatio
; /* 0.0, 1.0, 1.0, exclusion low-frequency level re. main control (WIN32) */
548 int OutsideVolumeHF
; /* -10000, 0, 0, outside sound cone level at high frequencies (WIN32) */
549 float DopplerFactor
; /* 0.0, 10.0, 0.0, like DS3D flDopplerFactor but per source (WIN32) */
550 float RolloffFactor
; /* 0.0, 10.0, 0.0, like DS3D flRolloffFactor but per source (WIN32) */
551 float RoomRolloffFactor
; /* 0.0, 10.0, 0.0, like DS3D flRolloffFactor but for room effect (WIN32/XBOX) */
552 float AirAbsorptionFactor
; /* 0.0, 10.0, 1.0, multiplies AirAbsorptionHF member of FSOUND_REVERB_PROPERTIES (WIN32) */
553 int Flags
; /* FSOUND_REVERB_CHANNELFLAGS - modifies the behavior of properties (WIN32) */
554 } FSOUND_REVERB_CHANNELPROPERTIES
;
561 FSOUND_REVERB_CHANNELFLAGS
564 Values for the Flags member of the FSOUND_REVERB_CHANNELPROPERTIES structure.
567 FSOUND_REVERB_CHANNELPROPERTIES
570 #define FSOUND_REVERB_CHANNELFLAGS_DIRECTHFAUTO 0x00000001 /* Automatic setting of 'Direct' due to distance from listener */
571 #define FSOUND_REVERB_CHANNELFLAGS_ROOMAUTO 0x00000002 /* Automatic setting of 'Room' due to distance from listener */
572 #define FSOUND_REVERB_CHANNELFLAGS_ROOMHFAUTO 0x00000004 /* Automatic setting of 'RoomHF' due to distance from listener */
573 #define FSOUND_REVERB_CHANNELFLAGS_DEFAULT (FSOUND_REVERB_CHANNELFLAGS_DIRECTHFAUTO | \
574 FSOUND_REVERB_CHANNELFLAGS_ROOMAUTO| \
575 FSOUND_REVERB_CHANNELFLAGS_ROOMHFAUTO)
583 These values are used with FSOUND_FX_Enable to enable DirectX 8 FX for a channel.
589 FSOUND_FX_SetCompressor
590 FSOUND_FX_SetDistortion
594 FSOUND_FX_SetI3DL2Reverb
596 FSOUND_FX_SetWavesReverb
602 FSOUND_FX_COMPRESSOR
,
603 FSOUND_FX_DISTORTION
,
607 FSOUND_FX_I3DL2REVERB
,
609 FSOUND_FX_WAVES_REVERB
,
618 These are speaker types defined for use with the FSOUND_SetSpeakerMode command.
619 Note - Only reliably works with FSOUND_OUTPUT_DSOUND or FSOUND_OUTPUT_XBOX output modes. Other output modes will only
620 interpret FSOUND_SPEAKERMODE_MONO and set everything else to be stereo.
622 Using either DolbyDigital or DTS will use whatever 5.1 digital mode is available if destination hardware is unsure.
625 FSOUND_SetSpeakerMode
629 enum FSOUND_SPEAKERMODES
631 FSOUND_SPEAKERMODE_DOLBYDIGITAL
, /* Dolby Digital Output (XBOX or PC only). */
632 FSOUND_SPEAKERMODE_HEADPHONES
, /* The speakers are headphones. */
633 FSOUND_SPEAKERMODE_MONO
, /* The speakers are monaural. */
634 FSOUND_SPEAKERMODE_QUAD
, /* The speakers are quadraphonic. */
635 FSOUND_SPEAKERMODE_STEREO
, /* The speakers are stereo (default value). */
636 FSOUND_SPEAKERMODE_SURROUND
, /* The speakers are surround sound. */
637 FSOUND_SPEAKERMODE_DTS
, /* DTS output (XBOX only). */
638 FSOUND_SPEAKERMODE_PROLOGIC2
, /* Dolby Prologic 2. Playstation 2 and Gamecube only. PlayStation 2 doesnt support interior panning, but supports 48 voices simultaneously. */
639 FSOUND_SPEAKERMODE_PROLOGIC2_INTERIOR
/* Dolby Prologic 2. Playstation 2 and Gamecube only. PlayStation 2 does support interior panning, but only supports 24 voices simultaneously. */
650 Initialization flags. Use them with FSOUND_Init in the flags parameter to change various behaviour.
652 FSOUND_INIT_ENABLESYSTEMCHANNELFX Is an init mode which enables the FSOUND mixer buffer to be affected by DirectX 8 effects.
653 Note that due to limitations of DirectSound, FSOUND_Init may fail if this is enabled because the buffersize is too small.
654 This can be fixed with FSOUND_SetBufferSize. Increase the BufferSize until it works.
655 When it is enabled you can use the FSOUND_FX api, and use FSOUND_SYSTEMCHANNEL as the channel id when setting parameters.
661 #define FSOUND_INIT_USEDEFAULTMIDISYNTH 0x0001 /* Win32 only - Causes MIDI playback to force software decoding. */
662 #define FSOUND_INIT_GLOBALFOCUS 0x0002 /* Win32 only - For DirectSound output - sound is not muted when window is out of focus. */
663 #define FSOUND_INIT_ENABLESYSTEMCHANNELFX 0x0004 /* Win32 only - For DirectSound output - Allows FSOUND_FX api to be used on global software mixer output! (use FSOUND_SYSTEMCHANNEL as channel id) */
664 #define FSOUND_INIT_ACCURATEVULEVELS 0x0008 /* This latency adjusts FSOUND_GetCurrentLevels, but incurs a small cpu and memory hit */
665 #define FSOUND_INIT_PS2_DISABLECORE0REVERB 0x0010 /* PS2 only - Disable reverb on CORE 0 (SPU2 voices 00-23) to regain SRAM */
666 #define FSOUND_INIT_PS2_DISABLECORE1REVERB 0x0020 /* PS2 only - Disable reverb on CORE 1 (SPU2 voices 24-47) to regain SRAM */
667 #define FSOUND_INIT_PS2_SWAPDMACORES 0x0040 /* PS2 only - By default FMOD uses DMA CH0 for mixing, CH1 for uploads, this flag swaps them around */
668 #define FSOUND_INIT_DONTLATENCYADJUST 0x0080 /* Callbacks are not latency adjusted, and are called at mix time. Also information functions are immediate */
669 #define FSOUND_INIT_GC_INITLIBS 0x0100 /* GC only - Initializes GC audio libraries */
670 #define FSOUND_INIT_STREAM_FROM_MAIN_THREAD 0x0200 /* Turns off fmod streamer thread, and makes streaming update from FSOUND_Update called by the user */
671 #define FSOUND_INIT_PS2_USEVOLUMERAMPING 0x0400 /* PS2 only - Turns on volume ramping system to remove hardware clicks. */
672 #define FSOUND_INIT_DSOUND_DEFERRED 0x0800 /* Win32 only - For DirectSound output. 3D commands are batched together and executed at FSOUND_Update. */
673 #define FSOUND_INIT_DSOUND_HRTF_LIGHT 0x1000 /* Win32 only - For DirectSound output. FSOUND_HW3D buffers use a slightly higher quality algorithm when 3d hardware acceleration is not present. */
674 #define FSOUND_INIT_DSOUND_HRTF_FULL 0x2000 /* Win32 only - For DirectSound output. FSOUND_HW3D buffers use full quality 3d playback when 3d hardware acceleration is not present. */
675 #define FSOUND_INIT_XBOX_REMOVEHEADROOM 0x4000 /* XBox only - By default directsound attenuates all sound by 6db to avoid clipping/distortion. CAUTION. If you use this flag you are responsible for the final mix to make sure clipping / distortion doesn't happen. */
676 #define FSOUND_INIT_PSP_SILENCEONUNDERRUN 0x8000 /* PSP only - If streams skip / stutter when device is powered on, either increase stream buffersize, or use this flag instead to play silence while the UMD is recovering. */
684 Status values for internet streams. Use FSOUND_Stream_Net_GetStatus to get the current status of an internet stream.
687 FSOUND_Stream_Net_GetStatus
690 enum FSOUND_STREAM_NET_STATUS
692 FSOUND_STREAM_NET_NOTCONNECTED
= 0, /* Stream hasn't connected yet */
693 FSOUND_STREAM_NET_CONNECTING
, /* Stream is connecting to remote host */
694 FSOUND_STREAM_NET_BUFFERING
, /* Stream is buffering data */
695 FSOUND_STREAM_NET_READY
, /* Stream is ready to play */
696 FSOUND_STREAM_NET_ERROR
/* Stream has suffered a fatal error */
704 Describes the type of a particular tag field.
707 FSOUND_Stream_GetNumTagFields
708 FSOUND_Stream_GetTagField
709 FSOUND_Stream_FindTagField
712 enum FSOUND_TAGFIELD_TYPE
714 FSOUND_TAGFIELD_VORBISCOMMENT
= 0, /* A vorbis comment */
715 FSOUND_TAGFIELD_ID3V1
, /* Part of an ID3v1 tag */
716 FSOUND_TAGFIELD_ID3V2
, /* An ID3v2 frame */
717 FSOUND_TAGFIELD_SHOUTCAST
, /* A SHOUTcast header line */
718 FSOUND_TAGFIELD_ICECAST
, /* An Icecast header line */
719 FSOUND_TAGFIELD_ASF
/* An Advanced Streaming Format header line */
730 These values describe the protocol and format of an internet stream. Use FSOUND_Stream_Net_GetStatus to retrieve this information for an open internet stream.
733 FSOUND_Stream_Net_GetStatus
736 #define FSOUND_PROTOCOL_SHOUTCAST 0x00000001
737 #define FSOUND_PROTOCOL_ICECAST 0x00000002
738 #define FSOUND_PROTOCOL_HTTP 0x00000004
739 #define FSOUND_FORMAT_MPEG 0x00010000
740 #define FSOUND_FORMAT_OGGVORBIS 0x00020000
748 Structure defining a CD table of contents. This structure is returned as a tag from FSOUND_Stream_FindTagField when the tag name "CD_TOC" is specified.
749 Note: All tracks on the CD - including data tracks- will be represented in this structure so it's use for anything other than generating disc id information is not recommended.
750 See the cdda example program for info on retrieving and using this structure.
754 FSOUND_Stream_FindTagField
757 typedef struct _FSOUND_TOC_TAG
759 char name
[4]; /* The string "TOC", just in case this structure is accidentally treated as a string */
760 int numtracks
; /* The number of tracks on the CD */
761 int min
[100]; /* The start offset of each track in minutes */
762 int sec
[100]; /* The start offset of each track in seconds */
763 int frame
[100]; /* The start offset of each track in frames */
768 /* ========================================================================================== */
769 /* FUNCTION PROTOTYPES */
770 /* ========================================================================================== */
776 /* ================================== */
777 /* Initialization / Global functions. */
778 /* ================================== */
781 PRE - FSOUND_Init functions. These can't be called after FSOUND_Init is
782 called (they will fail). They set up FMOD system functionality.
785 DLL_API
signed char F_API
FSOUND_SetOutput(int outputtype
);
786 DLL_API
signed char F_API
FSOUND_SetDriver(int driver
);
787 DLL_API
signed char F_API
FSOUND_SetMixer(int mixer
);
788 DLL_API
signed char F_API
FSOUND_SetBufferSize(int len_ms
);
789 DLL_API
signed char F_API
FSOUND_SetHWND(void *hwnd
);
790 DLL_API
signed char F_API
FSOUND_SetMinHardwareChannels(int min
);
791 DLL_API
signed char F_API
FSOUND_SetMaxHardwareChannels(int max
);
792 DLL_API
signed char F_API
FSOUND_SetMemorySystem(void *pool
,
794 FSOUND_ALLOCCALLBACK useralloc
,
795 FSOUND_REALLOCCALLBACK userrealloc
,
796 FSOUND_FREECALLBACK userfree
);
798 Main initialization / closedown functions.
799 Note : Use FSOUND_INIT_USEDEFAULTMIDISYNTH with FSOUND_Init for software override
801 : Use FSOUND_INIT_GLOBALFOCUS with FSOUND_Init to make sound audible no matter
802 which window is in focus. (FSOUND_OUTPUT_DSOUND only)
805 DLL_API
signed char F_API
FSOUND_Init(int mixrate
, int maxsoftwarechannels
, unsigned int flags
);
806 DLL_API
void F_API
FSOUND_Close();
809 Runtime system level functions
812 DLL_API
void F_API
FSOUND_Update(); /* This is called to update 3d sound / non-realtime output */
814 DLL_API
void F_API
FSOUND_SetSpeakerMode(unsigned int speakermode
);
815 DLL_API
void F_API
FSOUND_SetSFXMasterVolume(int volume
);
816 DLL_API
void F_API
FSOUND_SetPanSeperation(float pansep
);
817 DLL_API
void F_API
FSOUND_File_SetCallbacks(FSOUND_OPENCALLBACK useropen
,
818 FSOUND_CLOSECALLBACK userclose
,
819 FSOUND_READCALLBACK userread
,
820 FSOUND_SEEKCALLBACK userseek
,
821 FSOUND_TELLCALLBACK usertell
);
824 System information functions.
827 DLL_API
int F_API
FSOUND_GetError();
828 DLL_API
float F_API
FSOUND_GetVersion();
829 DLL_API
int F_API
FSOUND_GetOutput();
830 DLL_API
void * F_API
FSOUND_GetOutputHandle();
831 DLL_API
int F_API
FSOUND_GetDriver();
832 DLL_API
int F_API
FSOUND_GetMixer();
833 DLL_API
int F_API
FSOUND_GetNumDrivers();
834 DLL_API
const char * F_API
FSOUND_GetDriverName(int id
);
835 DLL_API
signed char F_API
FSOUND_GetDriverCaps(int id
, unsigned int *caps
);
836 DLL_API
int F_API
FSOUND_GetOutputRate();
837 DLL_API
int F_API
FSOUND_GetMaxChannels();
838 DLL_API
int F_API
FSOUND_GetMaxSamples();
839 DLL_API
unsigned int F_API
FSOUND_GetSpeakerMode();
840 DLL_API
int F_API
FSOUND_GetSFXMasterVolume();
841 DLL_API
signed char F_API
FSOUND_GetNumHWChannels(int *num2d
, int *num3d
, int *total
);
842 DLL_API
int F_API
FSOUND_GetChannelsPlaying();
843 DLL_API
float F_API
FSOUND_GetCPUUsage();
844 DLL_API
void F_API
FSOUND_GetMemoryStats(unsigned int *currentalloced
, unsigned int *maxalloced
);
846 /* =================================== */
847 /* Sample management / load functions. */
848 /* =================================== */
851 Sample creation and management functions
852 Note : Use FSOUND_LOADMEMORY flag with FSOUND_Sample_Load to load from memory.
853 Use FSOUND_LOADRAW flag with FSOUND_Sample_Load to treat as as raw pcm data.
856 DLL_API FSOUND_SAMPLE
* F_API
FSOUND_Sample_Load(int index
, const char *name_or_data
, unsigned int mode
, int offset
, int length
);
857 DLL_API FSOUND_SAMPLE
* F_API
FSOUND_Sample_Alloc(int index
, int length
, unsigned int mode
, int deffreq
, int defvol
, int defpan
, int defpri
);
858 DLL_API
void F_API
FSOUND_Sample_Free(FSOUND_SAMPLE
*sptr
);
859 DLL_API
signed char F_API
FSOUND_Sample_Upload(FSOUND_SAMPLE
*sptr
, void *srcdata
, unsigned int mode
);
860 DLL_API
signed char F_API
FSOUND_Sample_Lock(FSOUND_SAMPLE
*sptr
, int offset
, int length
, void **ptr1
, void **ptr2
, unsigned int *len1
, unsigned int *len2
);
861 DLL_API
signed char F_API
FSOUND_Sample_Unlock(FSOUND_SAMPLE
*sptr
, void *ptr1
, void *ptr2
, unsigned int len1
, unsigned int len2
);
864 Sample control functions
867 DLL_API
signed char F_API
FSOUND_Sample_SetMode(FSOUND_SAMPLE
*sptr
, unsigned int mode
);
868 DLL_API
signed char F_API
FSOUND_Sample_SetLoopPoints(FSOUND_SAMPLE
*sptr
, int loopstart
, int loopend
);
869 DLL_API
signed char F_API
FSOUND_Sample_SetDefaults(FSOUND_SAMPLE
*sptr
, int deffreq
, int defvol
, int defpan
, int defpri
);
870 DLL_API
signed char F_API
FSOUND_Sample_SetDefaultsEx(FSOUND_SAMPLE
*sptr
, int deffreq
, int defvol
, int defpan
, int defpri
, int varfreq
, int varvol
, int varpan
);
871 DLL_API
signed char F_API
FSOUND_Sample_SetMinMaxDistance(FSOUND_SAMPLE
*sptr
, float min
, float max
);
872 DLL_API
signed char F_API
FSOUND_Sample_SetMaxPlaybacks(FSOUND_SAMPLE
*sptr
, int max
);
875 Sample information functions
878 DLL_API FSOUND_SAMPLE
* F_API
FSOUND_Sample_Get(int sampno
);
879 DLL_API
const char * F_API
FSOUND_Sample_GetName(FSOUND_SAMPLE
*sptr
);
880 DLL_API
unsigned int F_API
FSOUND_Sample_GetLength(FSOUND_SAMPLE
*sptr
);
881 DLL_API
signed char F_API
FSOUND_Sample_GetLoopPoints(FSOUND_SAMPLE
*sptr
, int *loopstart
, int *loopend
);
882 DLL_API
signed char F_API
FSOUND_Sample_GetDefaults(FSOUND_SAMPLE
*sptr
, int *deffreq
, int *defvol
, int *defpan
, int *defpri
);
883 DLL_API
signed char F_API
FSOUND_Sample_GetDefaultsEx(FSOUND_SAMPLE
*sptr
, int *deffreq
, int *defvol
, int *defpan
, int *defpri
, int *varfreq
, int *varvol
, int *varpan
);
884 DLL_API
unsigned int F_API
FSOUND_Sample_GetMode(FSOUND_SAMPLE
*sptr
);
885 DLL_API
signed char F_API
FSOUND_Sample_GetMinMaxDistance(FSOUND_SAMPLE
*sptr
, float *min
, float *max
);
887 /* ============================ */
888 /* Channel control functions. */
889 /* ============================ */
892 Playing and stopping sounds.
893 Note : Use FSOUND_FREE as the 'channel' variable, to let FMOD pick a free channel for you.
894 Use FSOUND_ALL as the 'channel' variable to control ALL channels with one function call!
897 DLL_API
int F_API
FSOUND_PlaySound(int channel
, FSOUND_SAMPLE
*sptr
);
898 DLL_API
int F_API
FSOUND_PlaySoundEx(int channel
, FSOUND_SAMPLE
*sptr
, FSOUND_DSPUNIT
*dsp
, signed char startpaused
);
899 DLL_API
signed char F_API
FSOUND_StopSound(int channel
);
902 Functions to control playback of a channel.
903 Note : FSOUND_ALL can be used on most of these functions as a channel value.
906 DLL_API
signed char F_API
FSOUND_SetFrequency(int channel
, int freq
);
907 DLL_API
signed char F_API
FSOUND_SetVolume(int channel
, int vol
);
908 DLL_API
signed char F_API
FSOUND_SetVolumeAbsolute(int channel
, int vol
);
909 DLL_API
signed char F_API
FSOUND_SetPan(int channel
, int pan
);
910 DLL_API
signed char F_API
FSOUND_SetSurround(int channel
, signed char surround
);
911 DLL_API
signed char F_API
FSOUND_SetMute(int channel
, signed char mute
);
912 DLL_API
signed char F_API
FSOUND_SetPriority(int channel
, int priority
);
913 DLL_API
signed char F_API
FSOUND_SetReserved(int channel
, signed char reserved
);
914 DLL_API
signed char F_API
FSOUND_SetPaused(int channel
, signed char paused
);
915 DLL_API
signed char F_API
FSOUND_SetLoopMode(int channel
, unsigned int loopmode
);
916 DLL_API
signed char F_API
FSOUND_SetCurrentPosition(int channel
, unsigned int offset
);
917 DLL_API
signed char F_API
FSOUND_3D_SetAttributes(int channel
, const float *pos
, const float *vel
);
918 DLL_API
signed char F_API
FSOUND_3D_SetMinMaxDistance(int channel
, float min
, float max
);
921 Channel information functions.
924 DLL_API
signed char F_API
FSOUND_IsPlaying(int channel
);
925 DLL_API
int F_API
FSOUND_GetFrequency(int channel
);
926 DLL_API
int F_API
FSOUND_GetVolume(int channel
);
927 DLL_API
int F_API
FSOUND_GetAmplitude(int channel
);
928 DLL_API
int F_API
FSOUND_GetPan(int channel
);
929 DLL_API
signed char F_API
FSOUND_GetSurround(int channel
);
930 DLL_API
signed char F_API
FSOUND_GetMute(int channel
);
931 DLL_API
int F_API
FSOUND_GetPriority(int channel
);
932 DLL_API
signed char F_API
FSOUND_GetReserved(int channel
);
933 DLL_API
signed char F_API
FSOUND_GetPaused(int channel
);
934 DLL_API
unsigned int F_API
FSOUND_GetLoopMode(int channel
);
935 DLL_API
unsigned int F_API
FSOUND_GetCurrentPosition(int channel
);
936 DLL_API FSOUND_SAMPLE
* F_API
FSOUND_GetCurrentSample(int channel
);
937 DLL_API
signed char F_API
FSOUND_GetCurrentLevels(int channel
, float *l
, float *r
);
938 DLL_API
int F_API
FSOUND_GetNumSubChannels(int channel
);
939 DLL_API
int F_API
FSOUND_GetSubChannel(int channel
, int subchannel
);
940 DLL_API
signed char F_API
FSOUND_3D_GetAttributes(int channel
, float *pos
, float *vel
);
941 DLL_API
signed char F_API
FSOUND_3D_GetMinMaxDistance(int channel
, float *min
, float *max
);
943 /* ========================== */
944 /* Global 3D sound functions. */
945 /* ========================== */
948 See also 3d sample and channel based functions above.
949 Call FSOUND_Update once a frame to process 3d information.
952 DLL_API
void F_API
FSOUND_3D_Listener_SetAttributes(const float *pos
, const float *vel
, float fx
, float fy
, float fz
, float tx
, float ty
, float tz
);
953 DLL_API
void F_API
FSOUND_3D_Listener_GetAttributes(float *pos
, float *vel
, float *fx
, float *fy
, float *fz
, float *tx
, float *ty
, float *tz
);
954 DLL_API
void F_API
FSOUND_3D_Listener_SetCurrent(int current
, int numlisteners
); /* use this if you use multiple listeners / splitscreen */
955 DLL_API
void F_API
FSOUND_3D_SetDopplerFactor(float scale
);
956 DLL_API
void F_API
FSOUND_3D_SetDistanceFactor(float scale
);
957 DLL_API
void F_API
FSOUND_3D_SetRolloffFactor(float scale
);
959 /* =================== */
961 /* =================== */
964 Functions to control DX8 only effects processing.
966 - FX enabled samples can only be played once at a time, not multiple times at once.
967 - Sounds have to be created with FSOUND_HW2D or FSOUND_HW3D for this to work.
968 - FSOUND_INIT_ENABLESYSTEMCHANNELFX can be used to apply hardware effect processing to the
969 global mixed output of FMOD's software channels.
970 - FSOUND_FX_Enable returns an FX handle that you can use to alter fx parameters.
971 - FSOUND_FX_Enable can be called multiple times in a row, even on the same FX type,
972 it will return a unique handle for each FX.
973 - FSOUND_FX_Enable cannot be called if the sound is playing or locked.
974 - FSOUND_FX_Disable must be called to reset/clear the FX from a channel.
977 DLL_API
int F_API
FSOUND_FX_Enable(int channel
, unsigned int fxtype
); /* See FSOUND_FX_MODES */
978 DLL_API
signed char F_API
FSOUND_FX_Disable(int channel
); /* Disables all effects */
980 DLL_API
signed char F_API
FSOUND_FX_SetChorus(int fxid
, float WetDryMix
, float Depth
, float Feedback
, float Frequency
, int Waveform
, float Delay
, int Phase
);
981 DLL_API
signed char F_API
FSOUND_FX_SetCompressor(int fxid
, float Gain
, float Attack
, float Release
, float Threshold
, float Ratio
, float Predelay
);
982 DLL_API
signed char F_API
FSOUND_FX_SetDistortion(int fxid
, float Gain
, float Edge
, float PostEQCenterFrequency
, float PostEQBandwidth
, float PreLowpassCutoff
);
983 DLL_API
signed char F_API
FSOUND_FX_SetEcho(int fxid
, float WetDryMix
, float Feedback
, float LeftDelay
, float RightDelay
, int PanDelay
);
984 DLL_API
signed char F_API
FSOUND_FX_SetFlanger(int fxid
, float WetDryMix
, float Depth
, float Feedback
, float Frequency
, int Waveform
, float Delay
, int Phase
);
985 DLL_API
signed char F_API
FSOUND_FX_SetGargle(int fxid
, int RateHz
, int WaveShape
);
986 DLL_API
signed char F_API
FSOUND_FX_SetI3DL2Reverb(int fxid
, int Room
, int RoomHF
, float RoomRolloffFactor
, float DecayTime
, float DecayHFRatio
, int Reflections
, float ReflectionsDelay
, int Reverb
, float ReverbDelay
, float Diffusion
, float Density
, float HFReference
);
987 DLL_API
signed char F_API
FSOUND_FX_SetParamEQ(int fxid
, float Center
, float Bandwidth
, float Gain
);
988 DLL_API
signed char F_API
FSOUND_FX_SetWavesReverb(int fxid
, float InGain
, float ReverbMix
, float ReverbTime
, float HighFreqRTRatio
);
990 /* ========================= */
991 /* File Streaming functions. */
992 /* ========================= */
995 Note : Use FSOUND_LOADMEMORY flag with FSOUND_Stream_Open to stream from memory.
996 Use FSOUND_LOADRAW flag with FSOUND_Stream_Open to treat stream as raw pcm data.
997 Use FSOUND_MPEGACCURATE flag with FSOUND_Stream_Open to open mpegs in 'accurate mode' for settime/gettime/getlengthms.
998 Use FSOUND_FREE as the 'channel' variable, to let FMOD pick a free channel for you.
1001 DLL_API
signed char F_API
FSOUND_Stream_SetBufferSize(int ms
); /* call this before opening streams, not after */
1003 DLL_API FSOUND_STREAM
* F_API
FSOUND_Stream_Open(const char *name_or_data
, unsigned int mode
, int offset
, int length
);
1004 DLL_API FSOUND_STREAM
* F_API
FSOUND_Stream_Create(FSOUND_STREAMCALLBACK callback
, int length
, unsigned int mode
, int samplerate
, void *userdata
);
1005 DLL_API
signed char F_API
FSOUND_Stream_Close(FSOUND_STREAM
*stream
);
1007 DLL_API
int F_API
FSOUND_Stream_Play(int channel
, FSOUND_STREAM
*stream
);
1008 DLL_API
int F_API
FSOUND_Stream_PlayEx(int channel
, FSOUND_STREAM
*stream
, FSOUND_DSPUNIT
*dsp
, signed char startpaused
);
1009 DLL_API
signed char F_API
FSOUND_Stream_Stop(FSOUND_STREAM
*stream
);
1011 DLL_API
signed char F_API
FSOUND_Stream_SetPosition(FSOUND_STREAM
*stream
, unsigned int position
);
1012 DLL_API
unsigned int F_API
FSOUND_Stream_GetPosition(FSOUND_STREAM
*stream
);
1013 DLL_API
signed char F_API
FSOUND_Stream_SetTime(FSOUND_STREAM
*stream
, int ms
);
1014 DLL_API
int F_API
FSOUND_Stream_GetTime(FSOUND_STREAM
*stream
);
1015 DLL_API
int F_API
FSOUND_Stream_GetLength(FSOUND_STREAM
*stream
);
1016 DLL_API
int F_API
FSOUND_Stream_GetLengthMs(FSOUND_STREAM
*stream
);
1018 DLL_API
signed char F_API
FSOUND_Stream_SetMode(FSOUND_STREAM
*stream
, unsigned int mode
);
1019 DLL_API
unsigned int F_API
FSOUND_Stream_GetMode(FSOUND_STREAM
*stream
);
1020 DLL_API
signed char F_API
FSOUND_Stream_SetLoopPoints(FSOUND_STREAM
*stream
, unsigned int loopstartpcm
, unsigned int loopendpcm
);
1021 DLL_API
signed char F_API
FSOUND_Stream_SetLoopCount(FSOUND_STREAM
*stream
, int count
);
1022 DLL_API
int F_API
FSOUND_Stream_GetOpenState(FSOUND_STREAM
*stream
); /* use with FSOUND_NONBLOCKING opened streams */
1023 DLL_API FSOUND_SAMPLE
* F_API
FSOUND_Stream_GetSample(FSOUND_STREAM
*stream
);
1024 DLL_API FSOUND_DSPUNIT
* F_API
FSOUND_Stream_CreateDSP(FSOUND_STREAM
*stream
, FSOUND_DSPCALLBACK callback
, int priority
, void *userdata
);
1026 DLL_API
signed char F_API
FSOUND_Stream_SetEndCallback(FSOUND_STREAM
*stream
, FSOUND_STREAMCALLBACK callback
, void *userdata
);
1027 DLL_API
signed char F_API
FSOUND_Stream_SetSyncCallback(FSOUND_STREAM
*stream
, FSOUND_STREAMCALLBACK callback
, void *userdata
);
1029 DLL_API FSOUND_SYNCPOINT
* F_API
FSOUND_Stream_AddSyncPoint(FSOUND_STREAM
*stream
, unsigned int pcmoffset
, const char *name
);
1030 DLL_API
signed char F_API
FSOUND_Stream_DeleteSyncPoint(FSOUND_SYNCPOINT
*point
);
1031 DLL_API
int F_API
FSOUND_Stream_GetNumSyncPoints(FSOUND_STREAM
*stream
);
1032 DLL_API FSOUND_SYNCPOINT
* F_API
FSOUND_Stream_GetSyncPoint(FSOUND_STREAM
*stream
, int index
);
1033 DLL_API
char * F_API
FSOUND_Stream_GetSyncPointInfo(FSOUND_SYNCPOINT
*point
, unsigned int *pcmoffset
);
1035 DLL_API
signed char F_API
FSOUND_Stream_SetSubStream(FSOUND_STREAM
*stream
, int index
); /* For FMOD .FSB bank files. */
1036 DLL_API
int F_API
FSOUND_Stream_GetNumSubStreams(FSOUND_STREAM
*stream
); /* For FMOD .FSB bank files. */
1037 DLL_API
signed char F_API
FSOUND_Stream_SetSubStreamSentence(FSOUND_STREAM
*stream
, const int *sentencelist
, int numitems
);
1039 DLL_API
signed char F_API
FSOUND_Stream_GetNumTagFields(FSOUND_STREAM
*stream
, int *num
);
1040 DLL_API
signed char F_API
FSOUND_Stream_GetTagField(FSOUND_STREAM
*stream
, int num
, int *type
, char **name
, void **value
, int *length
);
1041 DLL_API
signed char F_API
FSOUND_Stream_FindTagField(FSOUND_STREAM
*stream
, int type
, const char *name
, void **value
, int *length
);
1044 Internet streaming functions
1047 DLL_API
signed char F_API
FSOUND_Stream_Net_SetProxy(const char *proxy
);
1048 DLL_API
signed char F_API
FSOUND_Stream_Net_SetTimeout(int timeout
);
1049 DLL_API
char * F_API
FSOUND_Stream_Net_GetLastServerStatus();
1050 DLL_API
signed char F_API
FSOUND_Stream_Net_SetBufferProperties(int buffersize
, int prebuffer_percent
, int rebuffer_percent
);
1051 DLL_API
signed char F_API
FSOUND_Stream_Net_GetBufferProperties(int *buffersize
, int *prebuffer_percent
, int *rebuffer_percent
);
1052 DLL_API
signed char F_API
FSOUND_Stream_Net_SetMetadataCallback(FSOUND_STREAM
*stream
, FSOUND_METADATACALLBACK callback
, void *userdata
);
1053 DLL_API
signed char F_API
FSOUND_Stream_Net_GetStatus(FSOUND_STREAM
*stream
, int *status
, int *bufferpercentused
, int *bitrate
, unsigned int *flags
);
1055 /* =================== */
1056 /* CD audio functions. */
1057 /* =================== */
1060 Note : 0 = default cdrom. Otherwise specify the drive letter, for example. 'D'.
1063 DLL_API
signed char F_API
FSOUND_CD_Play(char drive
, int track
);
1064 DLL_API
void F_API
FSOUND_CD_SetPlayMode(char drive
, signed char mode
);
1065 DLL_API
signed char F_API
FSOUND_CD_Stop(char drive
);
1066 DLL_API
signed char F_API
FSOUND_CD_SetPaused(char drive
, signed char paused
);
1067 DLL_API
signed char F_API
FSOUND_CD_SetVolume(char drive
, int volume
);
1068 DLL_API
signed char F_API
FSOUND_CD_SetTrackTime(char drive
, unsigned int ms
);
1069 DLL_API
signed char F_API
FSOUND_CD_OpenTray(char drive
, signed char open
);
1071 DLL_API
signed char F_API
FSOUND_CD_GetPaused(char drive
);
1072 DLL_API
int F_API
FSOUND_CD_GetTrack(char drive
);
1073 DLL_API
int F_API
FSOUND_CD_GetNumTracks(char drive
);
1074 DLL_API
int F_API
FSOUND_CD_GetVolume(char drive
);
1075 DLL_API
int F_API
FSOUND_CD_GetTrackLength(char drive
, int track
);
1076 DLL_API
int F_API
FSOUND_CD_GetTrackTime(char drive
);
1078 /* ============== */
1079 /* DSP functions. */
1080 /* ============== */
1083 DSP Unit control and information functions.
1084 These functions allow you access to the mixed stream that FMOD uses to play back sound on.
1087 DLL_API FSOUND_DSPUNIT
*F_API
FSOUND_DSP_Create(FSOUND_DSPCALLBACK callback
, int priority
, void *userdata
);
1088 DLL_API
void F_API
FSOUND_DSP_Free(FSOUND_DSPUNIT
*unit
);
1089 DLL_API
void F_API
FSOUND_DSP_SetPriority(FSOUND_DSPUNIT
*unit
, int priority
);
1090 DLL_API
int F_API
FSOUND_DSP_GetPriority(FSOUND_DSPUNIT
*unit
);
1091 DLL_API
void F_API
FSOUND_DSP_SetActive(FSOUND_DSPUNIT
*unit
, signed char active
);
1092 DLL_API
signed char F_API
FSOUND_DSP_GetActive(FSOUND_DSPUNIT
*unit
);
1095 Functions to get hold of FSOUND 'system DSP unit' handles.
1098 DLL_API FSOUND_DSPUNIT
*F_API
FSOUND_DSP_GetClearUnit();
1099 DLL_API FSOUND_DSPUNIT
*F_API
FSOUND_DSP_GetSFXUnit();
1100 DLL_API FSOUND_DSPUNIT
*F_API
FSOUND_DSP_GetMusicUnit();
1101 DLL_API FSOUND_DSPUNIT
*F_API
FSOUND_DSP_GetFFTUnit();
1102 DLL_API FSOUND_DSPUNIT
*F_API
FSOUND_DSP_GetClipAndCopyUnit();
1105 Miscellaneous DSP functions
1106 Note for the spectrum analysis function to work, you have to enable the FFT DSP unit with
1107 the following code FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), TRUE);
1108 It is off by default to save cpu usage.
1111 DLL_API
signed char F_API
FSOUND_DSP_MixBuffers(void *destbuffer
, void *srcbuffer
, int len
, int freq
, int vol
, int pan
, unsigned int mode
);
1112 DLL_API
void F_API
FSOUND_DSP_ClearMixBuffer();
1113 DLL_API
int F_API
FSOUND_DSP_GetBufferLength(); /* Length of each DSP update */
1114 DLL_API
int F_API
FSOUND_DSP_GetBufferLengthTotal(); /* Total buffer length due to FSOUND_SetBufferSize */
1115 DLL_API
float * F_API
FSOUND_DSP_GetSpectrum(); /* Array of 512 floats - call FSOUND_DSP_SetActive(FSOUND_DSP_GetFFTUnit(), TRUE)) for this to work. */
1117 /* =================================================================================== */
1118 /* Reverb functions. (eax2/eax3 reverb) (ONLY SUPPORTED ON WIN32 W/ FSOUND_HW3D FLAG) */
1119 /* =================================================================================== */
1122 See top of file for definitions and information on the reverb parameters.
1125 DLL_API
signed char F_API
FSOUND_Reverb_SetProperties(const FSOUND_REVERB_PROPERTIES
*prop
);
1126 DLL_API
signed char F_API
FSOUND_Reverb_GetProperties(FSOUND_REVERB_PROPERTIES
*prop
);
1127 DLL_API
signed char F_API
FSOUND_Reverb_SetChannelProperties(int channel
, const FSOUND_REVERB_CHANNELPROPERTIES
*prop
);
1128 DLL_API
signed char F_API
FSOUND_Reverb_GetChannelProperties(int channel
, FSOUND_REVERB_CHANNELPROPERTIES
*prop
);
1130 /* ===================================================== */
1131 /* Recording functions (ONLY SUPPORTED IN WIN32, WINCE) */
1132 /* ===================================================== */
1135 Recording initialization functions
1138 DLL_API
signed char F_API
FSOUND_Record_SetDriver(int outputtype
);
1139 DLL_API
int F_API
FSOUND_Record_GetNumDrivers();
1140 DLL_API
const char * F_API
FSOUND_Record_GetDriverName(int id
);
1141 DLL_API
int F_API
FSOUND_Record_GetDriver();
1144 Recording functionality. Only one recording session will work at a time.
1147 DLL_API
signed char F_API
FSOUND_Record_StartSample(FSOUND_SAMPLE
*sptr
, signed char loop
);
1148 DLL_API
signed char F_API
FSOUND_Record_Stop();
1149 DLL_API
int F_API
FSOUND_Record_GetPosition();
1151 /* ========================================================================================== */
1152 /* FMUSIC API (MOD,S3M,XM,IT,MIDI PLAYBACK) */
1153 /* ========================================================================================== */
1156 Song management / playback functions.
1159 DLL_API FMUSIC_MODULE
* F_API
FMUSIC_LoadSong(const char *name
);
1160 DLL_API FMUSIC_MODULE
* F_API
FMUSIC_LoadSongEx(const char *name_or_data
, int offset
, int length
, unsigned int mode
, const int *samplelist
, int samplelistnum
);
1161 DLL_API
int F_API
FMUSIC_GetOpenState(FMUSIC_MODULE
*mod
);
1162 DLL_API
signed char F_API
FMUSIC_FreeSong(FMUSIC_MODULE
*mod
);
1163 DLL_API
signed char F_API
FMUSIC_PlaySong(FMUSIC_MODULE
*mod
);
1164 DLL_API
signed char F_API
FMUSIC_StopSong(FMUSIC_MODULE
*mod
);
1165 DLL_API
void F_API
FMUSIC_StopAllSongs();
1167 DLL_API
signed char F_API
FMUSIC_SetZxxCallback(FMUSIC_MODULE
*mod
, FMUSIC_CALLBACK callback
);
1168 DLL_API
signed char F_API
FMUSIC_SetRowCallback(FMUSIC_MODULE
*mod
, FMUSIC_CALLBACK callback
, int rowstep
);
1169 DLL_API
signed char F_API
FMUSIC_SetOrderCallback(FMUSIC_MODULE
*mod
, FMUSIC_CALLBACK callback
, int orderstep
);
1170 DLL_API
signed char F_API
FMUSIC_SetInstCallback(FMUSIC_MODULE
*mod
, FMUSIC_CALLBACK callback
, int instrument
);
1172 DLL_API
signed char F_API
FMUSIC_SetSample(FMUSIC_MODULE
*mod
, int sampno
, FSOUND_SAMPLE
*sptr
);
1173 DLL_API
signed char F_API
FMUSIC_SetUserData(FMUSIC_MODULE
*mod
, void *userdata
);
1174 DLL_API
signed char F_API
FMUSIC_OptimizeChannels(FMUSIC_MODULE
*mod
, int maxchannels
, int minvolume
);
1177 Runtime song functions.
1180 DLL_API
signed char F_API
FMUSIC_SetReverb(signed char reverb
); /* MIDI only */
1181 DLL_API
signed char F_API
FMUSIC_SetLooping(FMUSIC_MODULE
*mod
, signed char looping
);
1182 DLL_API
signed char F_API
FMUSIC_SetOrder(FMUSIC_MODULE
*mod
, int order
);
1183 DLL_API
signed char F_API
FMUSIC_SetPaused(FMUSIC_MODULE
*mod
, signed char pause
);
1184 DLL_API
signed char F_API
FMUSIC_SetMasterVolume(FMUSIC_MODULE
*mod
, int volume
);
1185 DLL_API
signed char F_API
FMUSIC_SetMasterSpeed(FMUSIC_MODULE
*mode
, float speed
);
1186 DLL_API
signed char F_API
FMUSIC_SetPanSeperation(FMUSIC_MODULE
*mod
, float pansep
);
1189 Static song information functions.
1192 DLL_API
const char * F_API
FMUSIC_GetName(FMUSIC_MODULE
*mod
);
1193 DLL_API
int F_API
FMUSIC_GetType(FMUSIC_MODULE
*mod
);
1194 DLL_API
int F_API
FMUSIC_GetNumOrders(FMUSIC_MODULE
*mod
);
1195 DLL_API
int F_API
FMUSIC_GetNumPatterns(FMUSIC_MODULE
*mod
);
1196 DLL_API
int F_API
FMUSIC_GetNumInstruments(FMUSIC_MODULE
*mod
);
1197 DLL_API
int F_API
FMUSIC_GetNumSamples(FMUSIC_MODULE
*mod
);
1198 DLL_API
int F_API
FMUSIC_GetNumChannels(FMUSIC_MODULE
*mod
);
1199 DLL_API FSOUND_SAMPLE
* F_API
FMUSIC_GetSample(FMUSIC_MODULE
*mod
, int sampno
);
1200 DLL_API
int F_API
FMUSIC_GetPatternLength(FMUSIC_MODULE
*mod
, int orderno
);
1203 Runtime song information.
1206 DLL_API
signed char F_API
FMUSIC_IsFinished(FMUSIC_MODULE
*mod
);
1207 DLL_API
signed char F_API
FMUSIC_IsPlaying(FMUSIC_MODULE
*mod
);
1208 DLL_API
int F_API
FMUSIC_GetMasterVolume(FMUSIC_MODULE
*mod
);
1209 DLL_API
int F_API
FMUSIC_GetGlobalVolume(FMUSIC_MODULE
*mod
);
1210 DLL_API
int F_API
FMUSIC_GetOrder(FMUSIC_MODULE
*mod
);
1211 DLL_API
int F_API
FMUSIC_GetPattern(FMUSIC_MODULE
*mod
);
1212 DLL_API
int F_API
FMUSIC_GetSpeed(FMUSIC_MODULE
*mod
);
1213 DLL_API
int F_API
FMUSIC_GetBPM(FMUSIC_MODULE
*mod
);
1214 DLL_API
int F_API
FMUSIC_GetRow(FMUSIC_MODULE
*mod
);
1215 DLL_API
signed char F_API
FMUSIC_GetPaused(FMUSIC_MODULE
*mod
);
1216 DLL_API
int F_API
FMUSIC_GetTime(FMUSIC_MODULE
*mod
);
1217 DLL_API
int F_API
FMUSIC_GetRealChannel(FMUSIC_MODULE
*mod
, int modchannel
);
1218 DLL_API
void * F_API
FMUSIC_GetUserData(FMUSIC_MODULE
*mod
);