Music in BMax

BlitzMax Forums/BlitzMax Beginners Area/Music in BMax

Will be something like fmod implemented?
Music module, for background music.

I started work on a Fmod module a while ago, hasn't got all commands in it, though.

http://drago-tech.net/FmodWin32.zip
http://drago-tech.net/FmodLinux.tar.gz

you need to get the fmod lib from fmod though. check the readme for more info.

laters

Maybe I can save you guys some typing...

Mostly untested but all the commands/consts/structs are there.

Module pub.fmod

Import "libfmod.a"

'FSOUND_CAPS
Const FSOUND_CAPS_HARDWARE	=$1 ' This driver supports hardware accelerated 3d sound.  
Const FSOUND_CAPS_EAX2		=$2 ' This driver supports EAX 2 reverb.
Const FSOUND_CAPS_EAX3		=$10 ' This driver supports EAX 3 reverb.

'FSOUND_CDPLAYMODES
Const FSOUND_CD_PLAYCONTINUOUS	=0 ' Starts from the current track And plays To End of CD.   
Const FSOUND_CD_PLAYONCE		=1 ' Plays the specified track Then stops. 
Const FSOUND_CD_PLAYLOOPED		=2 ' Plays the specified track looped, Forever Until stopped manually. 
Const FSOUND_CD_PLAYRANDOM		=3 ' Plays tracks in random order 

'FSOUND_DSP_PRIORITIES
Const FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT		=0 ' DSP CLEAR unit - done first 
Const FSOUND_DSP_DEFAULTPRIORITY_SFXUNIT		=100 ' DSP SFX unit - done second 
Const FSOUND_DSP_DEFAULTPRIORITY_MUSICUNIT		=200 ' DSP MUSIC unit - done third 
Const FSOUND_DSP_DEFAULTPRIORITY_USER			=300 ' User priority, use this as reference For your own DSP units 
Const FSOUND_DSP_DEFAULTPRIORITY_FFTUNIT		=900 ' This reads data For FSOUND_DSP_GetSpectrum, so it comes after user units 
Const FSOUND_DSP_DEFAULTPRIORITY_CLIPANDCOPYUNIT	=1000 ' DSP CLIP And COPY unit - last 

'FSOUND_MODES
Const FSOUND_LOOP_OFF			=$00000001 ' For non looping samples. 
Const FSOUND_LOOP_NORMAL		=$00000002 ' For forward looping samples. 
Const FSOUND_LOOP_BIDI			=$00000004 ' For bidirectional looping samples. (no effect If in hardware). 
Const FSOUND_8BITS			=$00000008 ' For 8 bit samples. 
Const FSOUND_16BITS			=$00000010 ' For 16 bit samples. 
Const FSOUND_MONO				=$00000020 ' For mono samples. 
Const FSOUND_STEREO			=$00000040 ' For stereo samples. 
Const FSOUND_UNSIGNED			=$00000080 ' For user created source data containing unsigned samples. 
Const FSOUND_SIGNED			=$00000100 ' For user created source data containing signed data. 
Const FSOUND_DELTA			=$00000200 ' For user created source data stored as delta values. 
Const FSOUND_IT214			=$00000400 ' For user created source data stored using IT214 compression. 
Const FSOUND_IT215			=$00000800 ' For user created source data stored using IT215 compression. 
Const FSOUND_HW3D				=$00001000 ' Attempts To make samples use 3d hardware acceleration. (If the card supports it) 
Const FSOUND_2D				=$00002000 ' Tells software (Not hardware) based sample Not To be included in 3d processing. 
Const FSOUND_STREAMABLE		=$00004000 ' For a streamimg sound where you feed the data To it. 
Const FSOUND_LOADMEMORY		=$00008000 ' "name" will be interpreted as a pointer To data For streaming And samples. 
Const FSOUND_LOADRAW			=$00010000 ' Will ignore file format And treat as raw pcm. 
Const FSOUND_MPEGACCURATE		=$00020000 ' For FSOUND_Stream_Open - For accurate FSOUND_Stream_GetLengthMs/FSOUND_Stream_SetTime. WARNING, see FSOUND_Stream_Open For inital opening time performance issues. 
Const FSOUND_FORCEMONO			=$00040000 ' For forcing stereo streams And samples To be mono - needed If using FSOUND_HW3D And stereo data - incurs a small speed hit For streams 
Const FSOUND_HW2D				=$00080000 ' 2D hardware sounds. allows hardware specific effects 
Const FSOUND_ENABLEFX			=$00100000 ' 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 
Const FSOUND_MPEGHALFRATE		=$00200000 ' For FMODCE only - decodes mpeg streams using a Lower quality decode, but faster execution 
Const FSOUND_IMAADPCM			=$00400000 ' Contents are stored compressed as IMA ADPCM 
Const FSOUND_VAG				=$00800000 ' For PS2 only - Contents are compressed as Sony VAG format 
Const FSOUND_NONBLOCKING		=$01000000 ' 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. 
Const FSOUND_GCADPCM			=$02000000 ' For Gamecube only - Contents are compressed as Gamecube DSP-ADPCM format 
Const FSOUND_MULTICHANNEL		=$04000000 ' For PS2 And Gamecube only - Contents are interleaved into a multi-channel (more than stereo) format 
Const FSOUND_USECORE0			=$08000000 ' For PS2 only - Sample/Stream is forced To use hardware voices 00-23 
Const FSOUND_USECORE1			=$10000000 ' For PS2 only - Sample/Stream is forced To use hardware voices 24-47 
Const FSOUND_LOADMEMORYIOP		=$20000000 ' For PS2 only - "name" will be interpreted as a pointer To data For streaming And samples. The address provided will be an IOP address 
Const FSOUND_IGNORETAGS		=$40000000 ' Skips id3v2 etc tag checks when opening a stream, To reduce seek/read overhead when opening files (helps with CD performance) 
Const FSOUND_STREAM_NET		=$80000000 ' Specifies an internet stream */  
Const FSOUND_NORMAL			=(FSOUND_16BITS | FSOUND_SIGNED | FSOUND_MONO)  

Rem
FSOUND_REVERB_PRESETS
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
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 }  
End Rem

Type FSOUND_REVERB_PROPERTIES
	Field Environment 			' 0 , 25 , 0 , sets all listener properties (WIN32/PS2 only) 
	Field EnvSize:Float 			' 1.0 , 100.0 , 7.5 , environment size in meters (WIN32 only) 
	Field EnvDiffusion:Float 		' 0.0 , 1.0 , 1.0 , environment diffusion (WIN32/XBOX) 
	Field Room 					' -10000, 0 , -1000 , room effect level (at Mid frequencies) (WIN32/XBOX/PS2) 
	Field RoomHF 					' -10000, 0 , -100 , relative room effect level at high frequencies (WIN32/XBOX) 
	Field RoomLF 					' -10000, 0 , 0 , relative room effect level at low frequencies (WIN32 only) 
	Field DecayTime:Float 			' 0.1 , 20.0 , 1.49 , reverberation decay time at Mid frequencies (WIN32/XBOX) 
	Field DecayHFRatio:Float 		' 0.1 , 2.0 , 0.83 , high-frequency To Mid-frequency decay time ratio (WIN32/XBOX) 
	Field DecayLFRatio:Float 		' 0.1 , 2.0 , 1.0 , low-frequency To Mid-frequency decay time ratio (WIN32 only) 
	Field Reflections 			' -10000, 1000 , -2602 , early reflections level relative To room effect (WIN32/XBOX) 
	Field ReflectionsDelay:Float 	' 0.0 , 0.3 , 0.007 , initial reflection Delay time (WIN32/XBOX) 
	Field ReflectionsPan:Float[3] 	' , , [0,0,0], early reflections panning vector (WIN32 only) 
	Field Reverb 					' -10000, 2000 , 200 , late reverberation level relative To room effect (WIN32/XBOX) 
	Field ReverbDelay:Float 		' 0.0 , 0.1 , 0.011 , late reverberation Delay time relative To initial reflection (WIN32/XBOX) 
	Field ReverbPan:Float[3] 		' , , [0,0,0], late reverberation panning vector (WIN32 only) 
	Field EchoTime:Float 			' .075 , 0.25 , 0.25 , echo time (WIN32/PS2 only. PS2 = Delay time For ECHO/Delay modes only) 
	Field EchoDepth:Float 			' 0.0 , 1.0 , 0.0 , echo depth (WIN32/PS2 only. PS2 = Feedback level For ECHO mode only) 
	Field ModulationTime:Float 	' 0.04 , 4.0 , 0.25 , modulation time (WIN32 only) 
	Field ModulationDepth:Float 	' 0.0 , 1.0 , 0.0 , modulation depth (WIN32 only) 
	Field AirAbsorptionHF:Float 	' -100 , 0.0 , -5.0 , change in level per meter at high frequencies (WIN32 only) 
	Field HFReference:Float 		' 1000.0, 20000 , 5000.0 , reference high frequency (hz) (WIN32/XBOX) 
	Field LFReference:Float 		' 20.0 , 1000.0, 250.0 , reference low frequency (hz) (WIN32 only) 
	Field RoomRolloffFactor:Float 	' 0.0 , 10.0 , 0.0 , like FSOUND_3D_SetRolloffFactor but For room effect (WIN32/XBOX) 
	Field Diffusion:Float 			' 0.0 , 100.0 , 100.0 , Value that controls the echo density in the late reverberation decay. (XBOX only) 
	Field Density:Float 			' 0.0 , 100.0 , 100.0 , Value that controls the modal density in the late reverberation decay (XBOX only) 
	Field Flags 					' FSOUND_REVERB_FLAGS - modifies the behavior of above properties (WIN32/PS2 only) 
End Type

Type FSOUND_REVERB_CHANNELPROPERTIES
	Field Direct 						' -10000, 1000, 0, direct path level (at low And Mid frequencies) (WIN32/XBOX)
	Field DirectHF 					' -10000, 0, 0, relative direct path level at high frequencies (WIN32/XBOX)
	Field Room 						' -10000, 1000, 0, room effect level (at low And Mid frequencies) (WIN32/XBOX/PS2)
	Field RoomHF 						' -10000, 0, 0, relative room effect level at high frequencies (WIN32/XBOX)
	Field Obstruction 				' -10000, 0, 0, main obstruction control (attenuation at high frequencies) (WIN32/XBOX)
	Field ObstructionLFRatio:Float 		' 0.0, 1.0, 0.0, obstruction low-frequency level re. main control (WIN32/XBOX)
	Field Occlusion 					' -10000, 0, 0, main occlusion control (attenuation at high frequencies) (WIN32/XBOX)
	Field OcclusionLFRatio:Float 		' 0.0, 1.0, 0.25, occlusion low-frequency level re. main control (WIN32/XBOX)
	Field OcclusionRoomRatio:Float 		' 0.0, 10.0, 1.5, relative occlusion control For room effect (WIN32)
	Field OcclusionDirectRatio:Float 	' 0.0, 10.0, 1.0, relative occlusion control For direct path (WIN32)
	Field Exclusion 					' -10000, 0, 0, main exlusion control (attenuation at high frequencies) (WIN32)
	Field ExclusionLFRatio:Float 		' 0.0, 1.0, 1.0, exclusion low-frequency level re. main control (WIN32)
	Field OutsideVolumeHF 				' -10000, 0, 0, outside sound cone level at high frequencies (WIN32)
	Field DopplerFactor:Float 			' 0.0, 10.0, 0.0, like DS3D flDopplerFactor but per source (WIN32)
	Field RolloffFactor:Float 			' 0.0, 10.0, 0.0, like DS3D flRolloffFactor but per source (WIN32)
	Field RoomRolloffFactor:Float 		' 0.0, 10.0, 0.0, like DS3D flRolloffFactor but For room effect (WIN32/XBOX)
	Field AirAbsorptionFactor:Float 	' 0.0, 10.0, 1.0, multiplies AirAbsorptionHF member of FSOUND_REVERB_PROPERTIES (WIN32)
	Field Flags 						' FSOUND_REVERB_CHANNELFLAGS - modifies the behavior of properties (WIN32)
End Type

Type FSOUND_TOC_TAG
	Field name[4] 	' The String "TOC", just in Case this structure is accidentally treated as a String */
	Field numtracks 	' The number of tracks on the CD
	Field minoff[100] ' The start offset of each track in minutes
	Field sec[100] 	' The start offset of each track in seconds
	Field frame[100] 	' The start offset of each track in frames
End Type

'FSOUND_MISC_VALUES
Const FSOUND_FREE 		=-1 ' value To play on any free channel, Or To allocate a sample in a free sample slot. 
Const FSOUND_UNMANAGED		=-2 ' value To allocate a sample that is Not managed by FSOUND Or placed in a sample slot. 
Const FSOUND_ALL			=-3 ' For a channel index , this flag will affect ALL channels available! Not supported by every function. 
Const FSOUND_STEREOPAN		=-1 ' value For FSOUND_SetPan so that stereo sounds are Not played at half volume. See FSOUND_SetPan For more on this. 
Const FSOUND_SYSTEMCHANNEL	=-1000 ' special 'channel' ID for all channel based functions that want to alter the global FSOUND software mixing output channel 
Const FSOUND_SYSTEMSAMPLE	=-1000 ' special 'sample' ID for all sample based functions that want to alter the global FSOUND software mixing output sample 

'FSOUND_MIXERTYPES
Const FSOUND_MIXER_AUTODETECT			=1 ' CE/PS2/GC Only - Non interpolating/low quality mixer. 
Const FSOUND_MIXER_BLENDMODE			=2 ' Removed / obsolete. 
Const FSOUND_MIXER_MMXP5				=3 ' Removed / obsolete. 
Const FSOUND_MIXER_MMXP6				=4 ' Removed / obsolete. 
Const FSOUND_MIXER_QUALITY_AUTODETECT	=5
Const FSOUND_MIXER_QUALITY_FPU			=6 ' Win32/Linux only - Interpolating/volume ramping FPU mixer. 
Const FSOUND_MIXER_QUALITY_MMXP5		=7 ' Win32/Linux only - Interpolating/volume ramping P5 MMX mixer. 
Const FSOUND_MIXER_QUALITY_MMXP6		=8 ' Win32/Linux only - Interpolating/volume ramping ppro+ MMX mixer. 
Const FSOUND_MIXER_MONO				=9 ' CE/PS2/GC only - MONO non interpolating/low quality mixer. For speed
Const FSOUND_MIXER_QUALITY_MONO			=10 ' CE/PS2/GC only - MONO Interpolating mixer. For speed 
Const FSOUND_MIXER_MAX					=11

'FSOUND_OUTPUTTYPES
Const FSOUND_OUTPUT_NOSOUND			=1 ' NoSound driver, all calls To this succeed but do nothing. 
Const FSOUND_OUTPUT_WINMM				=2 ' Windows Multimedia driver. 
Const FSOUND_OUTPUT_DSOUND				=3 ' DirectSound driver. You need this To get EAX2 Or EAX3 support, Or FX api support. 
Const FSOUND_OUTPUT_A3D				=4 ' A3D driver. 
Const FSOUND_OUTPUT_OSS				=5 ' Linux/Unix OSS (Open Sound System) driver, i.e. the kernel sound drivers. 
Const FSOUND_OUTPUT_ESD				=6 ' Linux/Unix ESD (Enlightment Sound Daemon) driver. 
Const FSOUND_OUTPUT_ALSA				=7 ' Linux Alsa driver. 
Const FSOUND_OUTPUT_ASIO				=8 ' Low latency ASIO driver 
Const FSOUND_OUTPUT_XBOX				=9 ' Xbox driver 
Const FSOUND_OUTPUT_PS2				=10 ' PlayStation 2 driver 
Const FSOUND_OUTPUT_MAC				=11 ' Mac SoundManager driver 
Const FSOUND_OUTPUT_GC					=12 ' Gamecube driver 
Const FSOUND_OUTPUT_NOSOUND_NONREALTIME	=13 ' This is the same as nosound, but the sound generation is driven by FSOUND_Update 

Extern "win32"
	'Pre Initialization/Initialization/Enumeration Functions
	Function FSOUND_Init( mixrate,maxsoftwarechannels,flags ) = "FSOUND_Init@12"
	Function FSOUND_Close() = "FSOUND_Close@0"
	Function FSOUND_File_SetCallbacks( useropen,userclose,userread,userseek,usertell ) = "FSOUND_File_SetCallbacks@20"
	Function FSOUND_SetBufferSize( len_ms ) = "FSOUND_SetBufferSize@4"
	Function FSOUND_SetDriver( driver ) = "FSOUND_SetDriver@4"
	Function FSOUND_SetHWND( hwnd:Byte Ptr ) = "FSOUND_SetHWND@4"
	Function FSOUND_SetMaxHardwareChannels( maxchn ) = "FSOUND_SetMaxHardwareChannels@4"
	Function FSOUND_SetMemorySystem( poolmem:Byte Ptr,poollen,useralloc,userrealloc,userfree ) = "FSOUND_SetMemorySystem@20"
	Function FSOUND_SetMinHardwareChannels( minchn ) = "FSOUND_SetMinHardwareChannels@4"
	Function FSOUND_SetMixer( mixer ) = "FSOUND_SetMixer@4"
	Function FSOUND_SetOutput( outputtype ) = "FSOUND_SetOutput@4"

	'Global run-time update functions
	Function FSOUND_SetPanSeperation( pansep ) = "FSOUND_SetPanSeperation@4"
	Function FSOUND_SetSFXMasterVolume( volume ) = "FSOUND_SetSFXMasterVolume@4"
	Function FSOUND_SetSpeakerMode( speakermode ) = "FSOUND_SetSpeakerMode@4"
	Function FSOUND_Update() = "FSOUND_Update@0"

	'Global run-time information functions
	Function FSOUND_GetCPUUsage:Float() = "FSOUND_GetCPUUsage@0"
	Function FSOUND_GetChannelsPlaying() = "GetChannelsPlaying@0"
	Function FSOUND_GetDriver() = "FSOUND_GetDriver@0"
	Function FSOUND_GetDriverCaps( id,caps:Byte Ptr ) = "FSOUND_GetDriverCaps@8"
	Function FSOUND_GetDriverName( id ) = "FSOUND_GetDriverName@4"
	Function FSOUND_GetMaxSamples() = "FSOUND_GetMaxSamples@0"
	Function FSOUND_GetMaxChannels() = "FSOUND_GetMaxChannels@0"
	Function FSOUND_GetMemoryStats( currentalloced:Byte Ptr,maxalloced:Byte Ptr ) = "FSOUND_GetMemoryStats@8"
	Function FSOUND_GetNumDrivers() = "FSOUND_GetNumDrivers@0"
	Function FSOUND_GetNumHWChannels( num2d:Byte Ptr,num3d:Byte Ptr,total:Byte Ptr ) = "FSOUND_GetNumHWChannels@12"
	Function FSOUND_GetOutput() = "FSOUND_GetOutput@0"
	Function FSOUND_GetOutputHandle:Byte Ptr() = "FSOUND_GetOutputHandle@0"
	Function FSOUND_GetOutputRate() = "FSOUND_GetOutputRate@0"
	Function FSOUND_GetSFXMasterVolume() = "FSOUND_GetSFXMasterVolume@0"
	Function FSOUND_GetVersion:Float() = "FSOUND_GetVersion@0"
	Function FSOUND_GetError() = "FSOUND_GetError@0"
	
	'Sample Functions
	Function FSOUND_Sample_Alloc:Byte Ptr( index,length,mode,deffreq,defvol,defpan,defpri ) = "FSOUND_Sample_Alloc@28"
	Function FSOUND_Sample_Free( sptr:Byte Ptr ) = "FSOUND_Sample_Free@4"
	Function FSOUND_Sample_Get:Byte Ptr( sampno ) = "FSOUND_Sample_Get@4"
	Function FSOUND_Sample_GetDefaults( sptr:Byte Ptr,deffreq:Byte Ptr,defvol:Byte Ptr,defpan:Byte Ptr,defpri:Byte Ptr ) = "FSOUND_Sample_GetDefaults@20"
	Function FSOUND_Sample_GetDefaultsEx( sptr:Byte Ptr,deffreq:Byte Ptr,defvol:Byte Ptr,defpan:Byte Ptr,defpri:Byte Ptr,varfreq:Byte Ptr,varvol:Byte Ptr,varpan:Byte Ptr ) = "FSOUND_Sample_GetDefaultsEx@32"
	Function FSOUND_Sample_GetLength( sptr:Byte Ptr ) = "FSOUND_Sample_GetLength@4"
	Function FSOUND_Sample_GetLoopPoints( sptr:Byte Ptr,loopstart:Byte Ptr,loopend:Byte Ptr )
	Function FSOUND_Sample_GetMinMaxDistance( sptr:Byte Ptr, minval:Byte Ptr,maxval:Byte Ptr ) = "FSOUND_Sample_GetMinMaxDistance@12"
	Function FSOUND_Sample_GetMode( sptr:Byte Ptr ) = "FSOUND_Sample_GetMode@4"
	Function FSOUND_Sample_GetName( sptr:Byte Ptr ) = "FSOUND_Sample_GetName@4"
	Function FSOUND_Sample_Load( index,name_or_data:Byte Ptr,inputmode,offset,length ) = "FSOUND_Sample_Load@20"
	Function FSOUND_Sample_Lock( sptr:Byte Ptr,offset,length,ptr1:Byte Ptr,ptr2:Byte Ptr,len1:Byte Ptr,len2:Byte Ptr ) = "FSOUND_Sample_Lock@28"
	Function FSOUND_Sample_SetDefaults( sptr:Byte Ptr,deffreq,defvol,defpan,defpri ) = "FSOUND_Sample_SetDefaults@20"
	Function FSOUND_Sample_SetDefaultsEx( sptr:Byte Ptr,deffreq,defvol,defpan,defpri,varfreq,varvol,varpan ) = "FSOUND_Sample_SetDefaultsEx@32"
	Function FSOUND_Sample_SetMaxPlaybacks( sptr:Byte Ptr,maxval ) = "FSOUND_Sample_SetMaxPlaybacks@8"
	Function FSOUND_Sample_SetMinMaxDistance( sptr:Byte Ptr,minval:Float,maxval:Float ) = "FSOUND_Sample_SetMinMaxDistance@12"
	Function FSOUND_Sample_SetMode( sptr:Byte Ptr,mode ) = "FSOUND_Sample_SetMode@8"
	Function FSOUND_Sample_SetLoopPoints( sptr:Byte Ptr,loopstart,loopend ) = "FSOUND_Sample_SetLoopPoints@12"
	Function FSOUND_Sample_Unlock( sptr:Byte Ptr,ptr1:Byte Ptr,ptr2:Byte Ptr,len1,len2 ) = "FSOUND_Sample_Unlock@20"
	Function FSOUND_Sample_Upload( sptr:Byte Ptr,srcdata:Byte Ptr,mode_in ) = "FSOUND_Sample_Upload@12"

	'Channel Functions
	Function FSOUND_PlaySound( channel,sptr:Byte Ptr ) = "FSOUND_PlaySound@8"
	Function FSOUND_PlaySoundEx( channel,sptr:Byte Ptr,dspunit:Byte Ptr,startpaused ) = "FSOUND_PlaySoundEx@16"
	Function FSOUND_StopSound( channel ) = "FSOUND_StopSound@4"
	Function FSOUND_SetFrequency( channel,freq ) = "FSOUND_SetFrequency@8"
	Function FSOUND_SetLevels( channel,frontleft,center,frontright,backleft,backright,lfe ) = "FSOUND_SetLevels@24"
	Function FSOUND_SetLoopMode( channel,loopmode ) = "FSOUND_SetLoopMode@8"
	Function FSOUND_SetMute( channel,mute ) = "FSOUND_SetMute@8"
	Function FSOUND_SetPan( channel,pan ) = "FSOUND_SetPan@8"
	Function FSOUND_SetPaused( channel,paused ) = "FSOUND_SetPaused@8"
	Function FSOUND_SetPriority( channel,priority ) = "FSOUND_SetPriority@8"
	Function FSOUND_SetReserved( channel,reserved ) = "FSOUND_SetReserved@8"
	Function FSOUND_SetSurround( channel,surround ) = "FSOUND_SetSurround@8"
	Function FSOUND_SetVolume( channel,vol ) = "FSOUND_SetVolume@8"
	Function FSOUND_SetVolumeAbsolute( channel,vol ) = "FSOUND_SetVolumeAbsolute@8"
	Function FSOUND_GetVolume( channel ) = "FSOUND_GetVolume@4"
	Function FSOUND_GetAmplitude( channel ) = "FSOUND_GetAmplitude@4"
	Function FSOUND_3D_SetAttributes( channel,pos:Byte Ptr,vel:Byte Ptr ) = "FSOUND_3D_SetAttributes@12"
	Function FSOUND_3D_SetMinMaxDistance( channel,minval,maxval ) = "FSOUND_3D_SetMinMaxDistance@12"
	Function FSOUND_SetCurrentPosition( channel,pos ) = "FSOUND_SetCurrentPosition@8"
	Function FSOUND_GetCurrentPosition( channel ) = "FSOUND_GetCurrentPosition@4"
	Function FSOUND_GetCurrentSample:Byte Ptr( channel ) = "FSOUND_GetCurrentSample@4"
	Function FSOUND_GetCurrentLevels( channel,l:Byte Ptr,r:Byte Ptr ) = "FSOUND_GetCurrentLevels@12"
	Function FSOUND_GetFrequency( channel ) = "FSOUND_GetFrequency@4"
	Function FSOUND_GetLoopMode( channel ) = "FSOUND_GetLoopMode@4"
	Function FSOUND_GetMixer() = "FSOUND_GetMixer@0"
	Function FSOUND_GetMute( channel ) = "FSOUND_GetMute@4"
	Function FSOUND_GetNumSubChannels( channel ) = "FSOUND_GetNumSubChannels@4"
	Function FSOUND_GetPan( channel ) = "FSOUND_GetPan@4"
	Function FSOUND_GetPaused( channel ) = "FSOUND_GetPaused@4"
	Function FSOUND_GetPriority( channel ) = "FSOUND_GetPriority@4"
	Function FSOUND_GetReserved( channel ) = "FSOUND_GetReserved@4"
	Function FSOUND_GetSubChannel( channel,subchannel ) = "FSOUND_GetSubChannel@8"
	Function FSOUND_GetSurround( channel ) = "FSOUND_GetSurround@4"
	Function FSOUND_IsPlaying( channel ) = "FSOUND_IsPlaying@8"
	Function FSOUND_3D_GetAttributes( channel,pos:Byte Ptr,vel:Byte Ptr ) = "FSOUND_3D_GetAttributes@12"
	Function FSOUND_3D_GetMinMaxDistance( channel,mindistance:Byte Ptr,maxdistance:Byte Ptr ) = "FSOUND_3D_GetMinMaxDistance@12"

	'3D Sound Functions
	Function FSOUND_3D_Listener_GetAttributes( pos:Byte Ptr,vel:Byte Ptr,fx:Byte Ptr,fy:Byte Ptr,fz:Byte Ptr,tx:Byte Ptr,ty:Byte Ptr,tz:Byte Ptr ) = "FSOUND_3D_Listener_GetAttributes@32"
	Function FSOUND_3D_Listener_SetAttributes( pos:Byte Ptr,vel:Byte Ptr,fx:Byte Ptr,fy:Byte Ptr,fz:Byte Ptr,tx:Byte Ptr,ty:Byte Ptr,tz:Byte Ptr ) = "FSOUND_3D_Listener_SetAttributes@32"
	Function FSOUND_3D_Listener_SetCurrent( current,numlisteners ) = "FSOUND_3D_Listener_SetCurrent@8"
	Function FSOUND_3D_SetDistanceFactor( factor ) = "FSOUND_3D_SetDistanceFactor@4"
	Function FSOUND_3D_SetDopplerFactor( scale ) = "FSOUND_3D_SetDopplerFactor@4"
	Function FSOUND_3D_SetRolloffFactor( factor ) = "FSOUND_3D_SetRolloffFactor@4"

	'Stream Functions
	Function FSOUND_Stream_AddSyncPoint:Byte Ptr( stream:Byte Ptr,pcmoffset,name:Byte Ptr ) = "FSOUND_Stream_AddSyncPoint@12"
	Function FSOUND_Stream_Close( stream:Byte Ptr ) = "FSOUND_Stream_Close@4"
	Function FSOUND_Stream_Create:Byte Ptr( callback,lenbytes,mode,samplerate,userdata:Byte Ptr ) = "FSOUND_Stream_Create@20"
	Function FSOUND_Stream_CreateDSP:Byte Ptr( stream:Byte Ptr,callback,priority,userdata:Byte Ptr ) = "FSOUND_Stream_CreateDSP@16"
	Function FSOUND_Stream_DeleteSyncPoint( point:Byte Ptr ) = "FSOUND_Stream_DeleteSyncPoint@4"
	Function FSOUND_Stream_FindTagField( stream:Byte Ptr,fieldtype,name:Byte Ptr,value:Byte Ptr,length:Byte Ptr ) = "FSOUND_Stream_FindTagField@20"
	Function FSOUND_Stream_GetLength( stream:Byte Ptr ) = "FSOUND_Stream_GetLength@4"
	Function FSOUND_Stream_GetLengthMs( stream:Byte Ptr ) = "FSOUND_Stream_GetLengthMs@4"
	Function FSOUND_Stream_GetMode( stream:Byte Ptr ) = "FSOUND_Stream_GetMode@4"
	Function FSOUND_Stream_GetNumSubStreams( stream:Byte Ptr ) = "FSOUND_Stream_GetNumSubStreams@4"
	Function FSOUND_Stream_GetNumSyncPoints( stream:Byte Ptr ) = "FSOUND_Stream_GetNumSyncPoints@4"
	Function FSOUND_Stream_GetNumTagFields( stream:Byte Ptr,num:Byte Ptr ) = "FSOUND_Stream_GetNumTagFields@8"
	Function FSOUND_Stream_GetOpenState( stream:Byte Ptr ) = "FSOUND_Stream_GetOpenState@4"
	Function FSOUND_Stream_GetPosition( stream:Byte Ptr ) = "FSOUND_Stream_GetPosition@4"
	Function FSOUND_Stream_GetSample( stream:Byte Ptr ) = "FSOUND_STREAM@4"
	Function FSOUND_Stream_GetSyncPoint:Byte Ptr( stream:Byte Ptr,index ) = "FSOUND_Stream_GetSyncPoint@8"
	Function FSOUND_Stream_GetSyncPointInfo:Byte Ptr( point:Byte Ptr,pcmoffset:Byte Ptr ) = "FSOUND_Stream_GetSyncPointInfo@8"
	Function FSOUND_Stream_GetTagField( stream:Byte Ptr,num,tagtype:Byte Ptr,name:Byte Ptr,value:Byte Ptr,length:Byte Ptr ) = "FSOUND_Stream_GetTagField@24"
	Function FSOUND_Stream_GetTime( stream:Byte Ptr ) = "FSOUND_Stream_GetTime@4"
	Function FSOUND_Stream_Net_GetBufferProperties( buffersize:Byte Ptr,prebuffer_percent:Byte Ptr,rebuffer_percent:Byte Ptr ) = "FSOUND_Stream_Net_GetBufferProperties@12"
	Function FSOUND_Stream_Net_GetLastServerStatus( ) = "FSOUND_Stream_Net_GetLastServerStatus@0"
	Function FSOUND_Stream_Net_GetStatus( stream:Byte Ptr,status:Byte Ptr,bufferused:Byte Ptr,bitrate:Byte Ptr,flags:Byte Ptr ) = "FSOUND_Stream_Net_GetStatus@20"
	Function FSOUND_Stream_Net_SetBufferProperties( buffersize,prebuffer_percent,rebuffer_percent ) = "FSOUND_Stream_Net_SetBufferProperties@12"
	Function FSOUND_Stream_Net_SetMetadataCallback( stream:Byte Ptr,callback,userdata:Byte Ptr ) = "FSOUND_Stream_Net_SetMetadataCallback@12"
	Function FSOUND_Stream_Net_SetProxy( proxy:Byte Ptr ) = "FSOUND_Stream_Net_SetProxy@4"
	Function FSOUND_Stream_Open:Byte Ptr( name_or_data:Byte Ptr,mode,offset,length ) = "FSOUND_Stream_Open@16"
	Function FSOUND_Stream_Play( channel,stream:Byte Ptr ) = "FSOUND_Stream_Play@8"
	Function FSOUND_Stream_PlayEx( channel,stream:Byte Ptr,dspunit:Byte Ptr,paused ) = "FSOUND_Stream_PlayEx@16"
	Function FSOUND_Stream_SetBufferSize( ms ) = "FSOUND_Stream_SetBufferSize@4"
	Function FSOUND_Stream_SetEndCallback( stream,callback,userdata:Byte Ptr ) = "FSOUND_Stream_SetEndCallback@12"
	Function FSOUND_Stream_SetLoopCount( stream:Byte Ptr,count ) = "FSOUND_Stream_SetLoopCount@8"
	Function FSOUND_Stream_SetLoopPoints( stream:Byte Ptr,loopstart,loopend ) = "FSOUND_Stream_SetLoopPoints@12"
	Function FSOUND_Stream_SetMode( stream:Byte Ptr,mode ) = "FSOUND_Stream_SetMode@8"
	Function FSOUND_Stream_SetPosition( stream:Byte Ptr,position ) = "FSOUND_Stream_SetPosition@8"
	Function FSOUND_Stream_SetSubStream( stream:Byte Ptr,index ) = "FSOUND_Stream_SetSubStream@8"
	Function FSOUND_Stream_SetSubStreamSentence( stream:Byte Ptr,sentencelist:Byte Ptr,numitems ) = "FSOUND_Stream_SetSubStreamSentence@12"
	Function FSOUND_Stream_SetSyncCallback( stream:Byte Ptr,callback,userdata:Byte Ptr ) = "FSOUND_Stream_SetSyncCallback@12"
	Function FSOUND_Stream_SetTime( stream:Byte Ptr,ms ) = "FSOUND_Stream_SetTime@8"
	Function FSOUND_Stream_Stop( stream:Byte Ptr ) = "FSOUND_Stream_Stop@4"

	'CD Functions
	Function FSOUND_CD_GetNumTracks( drive ) = "FSOUND_CD_GetNumTracks@4"
	Function FSOUND_CD_GetPaused( drive ) = "FSOUND_CD_GetPaused@4"
	Function FSOUND_CD_GetTrack( drive ) = "FSOUND_CD_GetTrack@4"
	Function FSOUND_CD_GetTrackLength( drive,track ) = "FSOUND_CD_GetTrackLength@8"
	Function FSOUND_CD_GetTrackTime( drive ) = "FSOUND_CD_GetTrackTime@4"
	Function FSOUND_CD_OpenTray( drive,open ) = "FSOUND_CD_OpenTray@8"
	Function FSOUND_CD_Play( drive,track ) = "FSOUND_CD_Play@8"
	Function FSOUND_CD_SetPaused( drive,paused ) = "FSOUND_CD_SetPaused@8"
	Function FSOUND_CD_SetPlayMode( drive,mode ) = "FSOUND_CD_SetPlayMode@8"
	Function FSOUND_CD_SetTrackTime( drive,ms ) = "FSOUND_CD_SetTrackTime@8"
	Function FSOUND_CD_SetVolume( drive,volume ) = "FSOUND_CD_SetVolume@8"
	Function FSOUND_CD_Stop( drive ) = "FSOUND_CD_Stop@4"

	'DSP Functions
	Function FSOUND_DSP_ClearMixBuffer( ) = "FSOUND_DSP_ClearMixBuffer@0"
	Function FSOUND_DSP_Create:Byte Ptr( callback,priority,userdata:Byte Ptr ) = "FSOUND_DSP_Create@12"
	Function FSOUND_DSP_Free( unit:Byte Ptr ) = "FSOUND_DSP_Free@4"
	Function FSOUND_DSP_SetActive( unit:Byte Ptr,active ) = "FSOUND_DSP_SetActive@8"
	Function FSOUND_DSP_GetActive( unit:Byte Ptr ) = "FSOUND_DSP_GetActive@4"
	Function FSOUND_DSP_GetBufferLength( ) = "FSOUND_DSP_GetBufferLength@0"
	Function FSOUND_DSP_GetBufferLengthTotal( ) = "FSOUND_DSP_GetBufferLengthTotal@0"
	Function FSOUND_DSP_SetPriority( unit:Byte Ptr,priority ) = "FSOUND_DSP_SetPriority@8"
	Function FSOUND_DSP_GetPriority( unit:Byte Ptr ) = "FSOUND_DSP_GetPriority@4"
	Function FSOUND_DSP_GetClearUnit:Byte Ptr( ) = "FSOUND_DSP_GetClearUnit@0"
	Function FSOUND_DSP_GetClipAndCopyUnit:Byte Ptr( ) = "FSOUND_DSP_GetClipAndCopyUnit@0"
	Function FSOUND_DSP_GetMusicUnit:Byte Ptr( ) = "FSOUND_DSP_GetMusicUnit@0"
	Function FSOUND_DSP_GetSFXUnit:Byte Ptr( ) = "FSOUND_DSP_GetSFXUnit@0"
	Function FSOUND_DSP_GetFFTUnit:Byte Ptr( ) = "FSOUND_DSP_GetFFTUnit@0"
	Function FSOUND_DSP_GetSpectrum:Byte Ptr( ) = "FSOUND_DSP_GetSpectrum@0"
	Function FSOUND_DSP_MixBuffers( destbuffer:Byte Ptr,srcbuffer:Byte Ptr,buflen,freq,vol,pan,mode ) = "FSOUND_DSP_MixBuffers@28"

	'FX Functions
	Function FSOUND_FX_Disable( channel ) = "FSOUND_FX_Disable@4"
	Function FSOUND_FX_Enable( channel,fxtype ) = "FSOUND_FX_Enable@8"
	Function FSOUND_FX_SetChorus( fxid,WetDryMix,Depth,Feedback,Frequency,Waveform,FXDelay,Phase ) = "FSOUND_FX_SetChorus@32"
	Function FSOUND_FX_SetCompressor( fxid,Gain,Attack,FXRelease,Threshold,Ratio,Predelay ) = "FSOUND_FX_SetCompressor@28"
	Function FSOUND_FX_SetDistortion( fxid,Gain,Edge,PostEQCenterFrequency,PostEQBandwidth,PreLowpassCutoff ) = "FSOUND_FX_SetDistortion@24"
	Function FSOUND_FX_SetEcho( fxid,WetDryMix,Feedback,LeftDelay,RightDelay,PanDelay ) = "FSOUND_FX_SetEcho@24"
	Function FSOUND_FX_SetFlanger( fxid,WetDryMix,Depth,Feedback,Frequency,Waveform,FXDelay,Phase ) = "FSOUND_FX_SetFlanger@32"
	Function FSOUND_FX_SetGargle( fxid,RateHz,WaveShape ) = "FSOUND_FX_SetGargle@12"
	Function FSOUND_FX_SetI3DL2Reverb( fxid,Room,RoomHF,RoomRolloffFactor,DecayTime,DecayHFRatio,Reflections,ReflectionsDelay,Reverb,ReverbDelay,Diffusion,Density,HFReference ) = "FSOUND_FX_SetI3DL2Reverb@52"
	Function FSOUND_FX_SetParamEQ( fxid,Center,Bandwidth,Gain ) = "FSOUND_FX_SetParamEQ@16"
	Function FSOUND_FX_SetWavesReverb( fxid,InGain,ReverbMix,ReverbTime,HighFreqRTRatio ) = "FSOUND_FX_SetWavesReverb@20"

	'Recording Functions
	Function FSOUND_Record_GetDriver( ) = "FSOUND_Record_GetDriver@0"
	Function FSOUND_Record_GetDriverName:Byte Ptr( id ) = "FSOUND_Record_GetDriverName@4"
	Function FSOUND_Record_GetNumDrivers( ) = "FSOUND_Record_GetNumDrivers@0"
	Function FSOUND_Record_GetPosition( ) = "FSOUND_Record_GetPosition@0"
	Function FSOUND_Record_SetDriver( driver ) = "FSOUND_Record_SetDriver@4"
	Function FSOUND_Record_StartSample( sptr:Byte Ptr,loop ) = "FSOUND_Record_StartSample@8"
	Function FSOUND_Record_Stop( ) = "FSOUND_Record_Stop@4"

	'Reverb Functions
	Function FSOUND_Reverb_SetProperties( props:Byte Ptr ) = "FSOUND_Reverb_SetProperties@4"
	Function FSOUND_Reverb_GetProperties( props:Byte Ptr ) = "FSOUND_Reverb_GetProperties@4"
	Function FSOUND_Reverb_SetChannelProperties( channel,prop:Byte Ptr ) = "FSOUND_Reverb_SetChannelProperties@8"
	Function FSOUND_Reverb_GetChannelProperties( channel,prop:Byte Ptr ) = "FSOUND_Reverb_GetChannelProperties@8"
EndExtern

'FMOD Errors
Const FMOD_ERR_NONE			=1
Const FMOD_ERR_BUSY			=2
Const FMOD_ERR_UNINITIALIZED	=3
Const FMOD_ERR_INIT			=4
Const FMOD_ERR_ALLOCATED		=5
Const FMOD_ERR_PLAY			=6
Const FMOD_ERR_OUTPUT_FORMAT	=7
Const FMOD_ERR_COOPERATIVELEVEL=8
Const FMOD_ERR_CREATEBUFFER	=9
Const FMOD_ERR_FILE_NOTFOUND	=10
Const FMOD_ERR_FILE_FORMAT		=11
Const FMOD_ERR_FILE_BAD		=12
Const FMOD_ERR_MEMORY			=13
Const FMOD_ERR_VERSION			=14
Const FMOD_ERR_INVALID_PARAM	=15
Const FMOD_ERR_NO_EAX			=16
Const FMOD_ERR_CHANNEL_ALLOC	=17
Const FMOD_ERR_RECORD			=18
Const FMOD_ERR_MEDIAPLAYER		=19
Const FMOD_ERR_CDDEVICE		=20

Function FMOD_ErrorString:String(errcode)
	Select errcode
		Case FMOD_ERR_NONE
			Return "No errors"
		Case FMOD_ERR_BUSY
			Return "Cannot call this command after FSOUND_Init.  Call FSOUND_Close first."
		Case FMOD_ERR_UNINITIALIZED
			Return "This command failed because FSOUND_Init was not called"
		Case FMOD_ERR_PLAY
			Return "Playing the sound failed."
		Case FMOD_ERR_INIT
			Return "Error initializing output device."
		Case FMOD_ERR_ALLOCATED
			Return "The output device is already in use and cannot be reused."
		Case FMOD_ERR_OUTPUT_FORMAT
			Return "Soundcard does not support the features needed for this soundsystem (16bit stereo output)"
		Case FMOD_ERR_COOPERATIVELEVEL
			Return "Error setting cooperative level for hardware."
		Case FMOD_ERR_CREATEBUFFER
			Return "Error creating hardware sound buffer."
		Case FMOD_ERR_FILE_NOTFOUND
			Return "File not found"
		Case FMOD_ERR_FILE_FORMAT
			Return "Unknown file format"
		Case FMOD_ERR_FILE_BAD
			Return "Error loading file"
		Case FMOD_ERR_MEMORY
			Return "Not enough memory "
		Case FMOD_ERR_VERSION
			Return "The version number of this file format is not supported"
		Case FMOD_ERR_INVALID_PARAM
			Return "An invalid parameter was passed to this function"
		Case FMOD_ERR_NO_EAX
			Return "Tried to use an EAX command on a non EAX enabled channel or output."
		Case FMOD_ERR_CHANNEL_ALLOC
			Return "Failed to allocate a new channel"
		Case FMOD_ERR_RECORD
			Return "Recording not supported on this device"
		Case FMOD_ERR_MEDIAPLAYER
			Return "Required Mediaplayer codec is not installed"
		Default
			Return "Unknown error"
	End Select
End Function


Thanks!

Hi there,

is the module finished, if so where can i get the finished version?

i would also like to know if there are any bugs.

I have try to install correctly the module and the .a but when executing
example i have an error message on

FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND);

??? An idea ?

I have heard blitz research state that there would be an official FMOD module.

I am asking politely if this is still intended?

It works fine on my computer.

Regards
Sveinung

How about Macos X ? can someone test this please.

OpenAL looks good. It is used in Many commercial games on all 3 platforms.

FMOD is great butis expensive.

Most people will find FMOD is free. have you ever released anything for sale?

If you haven't, then fmod is free.

Have you ever released shareware? if you have then fmod is $100.

It's not expensive when put into perspective - if you don't make at least $100 in a couple of weeks then your title isn't destined to be shareware :)

most people moan about the cost of middleware or sound, and they've never released anything for sale in their lives. Amazing really...

Not a critictism to you, but an observation.

Has anyone got this working under Macos X ?

@filax
I got the same thing when I used the content from Tea Virus. I think there is some bugs in that code. But the original from Drago works fine.

Regards
Sveinung

I have heard blitz research state that there would be an official FMOD module.

They once said they plan to have an official music module, -possibly- FMOD, but I would think OpenAL would be a better option.

Fish, I agree. I re-read the license agreement for FMOD and it looks like winner for BMAX. It is very feature rich, well tested and has a huge following. any shareware title that is released using it should be able to recoup the $100 license fee (although on 3 platforms--mac, win and linux, the license would be $200. still no big deal)

I would encourage BRL to release a mod for it and explicitly state that there is a license fee with it.

They once said they plan to have an official music module, -possibly- FMOD, but I would think OpenAL would be a better option.


Nope, they did specifically say that there would be an FMod "wrapper". In this thread :

http://www.blitzbasic.com/Community/posts.php?topic=35260

It's long, so the relevant quote is

We will also provide an FMOD 'wrapper' module that will drive the FMOD sound system. However, you will have to ship with the FMOD dll and negotiate a license with FMOD. Their shareware license is very reasonable though.



That doesn't mean they haven't changed their mind, of course. But they did definitely say there would be an FMod module, leaving us to license FMod as we needed to.

Where do I get this "libfmod.a" ?

Thanks for clarifying that there would be an official wrapper sybixsus! I had not seen that post.

@Badger

Download it from FMOD

Sveinung

Thanks.

Thanks Sybixsus. I remember that quote now =]

hum... cant get that fmod mod running get this error:
Compile Error
Identifier 'FSOUND_SetOutput' not found


I installed the fmod.dll and the libfmod.a as instructed. get that error when i run the example. On windows XP.