
===============================================================================
                           REVISION HISTORY : FMOD Ex
             Copyright (c) Firelight Technologies, Pty, Ltd, 2004-2007
                              http://www.fmod.org
===============================================================================
	      + Added feature or noticable improvement
	      - Bug fix or something removed
	      * Changed or Information
          ! Important - Take note!
===============================================================================

8/02/07 4.06.08 - Stable release update
---------------------------------------

!- Fix hang bug introduced in 4.06.07.
- Fix System::setStreamBufferSize and FMOD_TIMEUNIT_MS with FSB files.
- Event API - Fixed "Max playbacks behaviour" "Steal oldest"
- Event API - Fixed "Max playbacks behaviour" "Steal quietest"
- Event API - Fixed sound definition "Play mode" "RandomNoRepeat"
- Event API - Fixed EventSystem::update scaling cpu cost with project size
- Fix Channel::set3DOcclusion/get3DOcclusion documentation.
- Fixed DSP played with System::playDSP not being 3d if 
  Channel::setMode(FMOD_3D) was called. (Channel::set3DPanLevel(1.0f) would 
  have also fixed it.)

02/02/07 4.06.07 - Stable release update 
-------------------------------------------

[**** This version is now banned for use in release titles due to critical bug ***]

+ PS3 - getWaveData() now functional.
+ PS3 - Added FMOD_DSP_TYPE_FLANGE effect.

!- Fixed channel leak issue with virtual voices.
!- Fixed channels only playing wet path of reverb instead of wet + dry.  
   Bug recently introduced in 4.06.05.
- Wii - Fixed hardware reverb issues.
- Event API - Fixed EventSystem::getGroup/getEvent to be case insensitive
- Filled out documentation for DSP::setOutput*/setOutput* type functions.

* Sound::getUserData now works while sound is still loading nonblocking.

30/01/07 4.06.06 - Stable release update
----------------------------------------

- Mac - Fixed hang when using certain multi-channel FireWire devices.
- Event API - Fixed Vista networking issue

* Wii - Changed "remotespeakeroffifnosound" member in FMOD_WII_INFO to
       'muteremotespeakerifnosound'. If this member is set, the remote speaker
	will now be muted when no sounds are playing rather than switched off.

25/01/07 4.06.05 - Stable release update
----------------------------------------

+ FSBank - FSBank now pads data to 16 bytes to allow for better 
  FMOD_OPENMEMORY_POINT support.
+ Xbox 360 - Added 'xaudio' field to FMOD_THREAD_PROCESSOR_ASSIGNMENTS.

- Fix oscillators not going virtual and maybe causing crash when virtual 
  voices being used.
- FSBank - Fixed interleaved FSBs not being built correctly when syncpoints are
  present.
- Stopped FMOD_OPENUSER returning error if FMOD_CREATESOUNDEXINFO 
  'suggestedsoundtype' field was used.

23/01/07 4.06.04 - Stable release update
----------------------------------------

- Event API - Fix fev's with 0 or negative 'max playbacks' causing crash at runtime.
  Tool shouldn't have let this happen but this is a safety check.
- Event API - Fixed fev version problem


18/01/07 4.06.03 - Stable release update
----------------------------------------

+ Optimize virtual voices, so that System::update is faster.
+ Event API - Sped up loading time.  Reduced memory usage.

- PS3 Fix streams skipping/fastforwarding bug.
- PS3 Fix rare crash caused by DMA.
- PS3 dissapearing voices bug re-appeared after a 4 hour soak test, new fix
  should solve issue once and for all.
- Fix 3d Pan Level still 3d volume attenuating even when 0.0f or '2d'.
- Event API - Fix 'FMOD_ERR_INVALID_HANDLE' error when loading multiple .FEV files
  when FEV have nested categories under the "music" category.
- Wii - Fix compatibility problems with RVL SDK 2.4.
- Wii - Fix stereo/multichannel sounds being played as mono.

* Change stack size of file reader thread on non nintendo platforms from 4k to
  8k.

5/01/07 4.06.02 - Stable release update
----------------------------------------

- Fix PS3 dissapearing voices bug.
- Fix PS3 5.1 streams crashing mixer.
- Fix netstream example ignoring tags.  Fixed certain mp3 netstreams with tags 
  not opening correctly.
- Event API - Fix small audible click in FMOD software mixer when playing 
              more than 1 event.
- Event API - Fixed .fev forward compatibility


21/12/06 4.06.01 - Stable release update
----------------------------------------

- Fix C# header errors.
- Fix Channel::setChannelGroup wiping out Channel::set3DAttributes for 1 frame.
- Fix PS3 SPURS support.

* Make Sound::lock return FMOD_ERR_SUBSOUNDS instead of FMOD_ERR_INTERNAL 
  when trying to lock a parent sound which has no data and just contains sub
  sounds.

14/12/06 4.06.00 - Official stable branch release
-------------------------------------------------

+ Event API - Added EventGroup::getParentProject
+ Event API - Added "programmer_sound" example
+ Add FMOD_3D_IGNOREGEOMETRY flag.
!+ Event API - Large memory optimization for large projects.
!+ Added MP2 (MPEG Audio Layer 2) support to FSBank and FMOD Designer.  

- Removed randomly occuring 10ms stall in stream play/seek/close.
- FSbank / FMOD Designer - stop multichannel wavs from encoding to mp3, 
  now returns an error instead.
- Fixed ChannelGroup::getChannel to return FMOD_ERR_INVALID_PARAM for out of 
  range values of "index" instead of FMOD_ERR_INTERNAL.
- Fixed syncpoints/looppoints for riff-wrapped mp3 files.
- XBox 360 fixed TRC dashboard music issue with FMOD music not unpausing.
- Event API - Fixed Event::set3dAttributes to update "(distance)" parameters 
  immediately.
- Event API - Fixed EventCategory::getInfo sometimes returning wrong index.

* Added FMOD_MEMORY_XBOX360_PHYSICAL flag to streamed XMA codec allocations.

5/12/06 4.04.53 - Dev release update
------------------------------------

!+ Event API - Optimized idle non playing events from being active in the 
  software DSP network and using up a lot of CPU.
+ Added EVENT_LOADINFO structure for EventSystem::load
+ Event API - Added "sounddefentrylimit" member in EVENT_LOADINFO. Use it 
  to limit the number of sound definition entries loaded at runtime.
+ Added DSP::disconnectAll(bool inputs, bool outputs).  This is just a helper
  function but it is optimized so that it doesnt block, whereas 
  getNumInputs/getNumOuputs blocks.
+ Added FMOD::File_SetDiskBusy/FMOD::File_GetDiskBusy.  This is basically a 
  mutex/info for disk access.  When you set it and fmod is using the disk, 
  fmod's disk access blocks.  If FMOD has set it internally while you call this
  function, your app will block until fmod has finished reading.
+ FMOD thread names now appear in Visual Studio debugger.
+ PSP - Added support for hardware reverb effects. Use the same presets as for
        PS2.
+ PSP - Added support for VAG streaming.

- Fixed FMOD_CREATECOMPRESSEDSAMPLE and vbr mp3 files ending early.
- Fixed crash when System::init was called with maxchannels == 0.
- Fixed loop points in ADPCM compressed FSB files.

- Event API - Improved accuracy of "positionms" in EVENT_INFO over time.
- Event API - Fixed dependency on fmodps3.h in fmod_event_net.
- Event API - Fixed wavebank memory usage reporting in EVENT_INFO.
- Event API - Fixed problem when combining getEvent and loadEventData.
- Event API - Fixed getEvent* returning FMOD_ERR_CHANNEL_ALLOC instead of 
  FMOD_ERR_EVENT_FAIL like it was supposed to.

24/11/06 4.04.51 - Dev release update
-------------------------------------

[**** This version is now banned for use in release titles due to critical bug ***]

+ PS3 - Added fmod_event_net.
+ PS3 - Added simple network audition client.
+ Added FMOD::Debug_SetLevel / FMOD::Debug_GetLevel.
+ Added 'type' parameter to memory allocation callbacks.

!- Fix timing related crash/hang introduced in 4.04.49.
- Fix Channel::setOcclusion not working.
- PSP - Fixed crash in Codewarrior build when streaming hardware mp3/at3 files.

- Event API - Fixed EVENT_INFO_ONLY events being reference counted

* If a channelgroup has had overridePaused or overrideMute set to true, 
  moving a channel from one group to that group will now pause/mute 
  automatically.
  If overridePaused/overrideMute was set to false, then the channel will
  not do anything to its pause/mute status if moved to that group.

16/11/06 4.04.49 - Dev release update
-------------------------------------

[**** This version is now banned for use in release titles due to critical bug ***]

+ Added Channel::set3DDopplerLevel / get3DDopplerLevel.  Set doppler shift 
  scale per voice.
+ Event API - Sped up EventSystem::update considerably.
+ Huge speedup in playing/stoping sounds, connecting channelgroups in 
  FMOD_SOFTWARE mode.  Most noticable in event system.
+ Added FMOD_INIT_360_MUSICMUTENOTPAUSE for Xbox 360.  If dashboard music is 
  played, FMOD based music tracks can now mute but keep playing, instead of 
  pausing.

- PS3 - Fixed virtual voices crash.
- Fixed output plugins from crashing upon init in plugin mode.
- Fixed FMOD_INIT_DISABLESOFTWARE making System::init return 
  FMOD_ERR_NEEDSSOFTWARE if System::setAdvancedSettings was called to enable
  createcompressed codecs to be allocated.
- Xbox360 - improved support for nested channelgroups under the "music" 
  channelgroup when dashboard music is turned on and off.
- Fix geometry engine not updating, if geometry moved faster than the occlusion 
  fade in/out speed.
- Fixed issue with dsp unit added with addDSP being added(moved) to a different 
  channel and breaking the old channel (stopping it from playing).
- Fixed virtual voices causing FMOD_ERR_NEEDS3D error and generally making 
  things go wrong between 2d/3d voices.

- Event API - Fixed rare crash in EventGroup::freeEventData
- Event API - Fixed problem with various EventCategory functions
- Event API - Fixed problem with crossfade curves

9/11/06 4.04.47 - Dev release update
-------------------------------------

[**** This version is now banned for use in release titles due to critical bug ***]

+ Added codewarrior libs to PSP build.
+ Added event specific error codes. FMOD_ERR_EVENT_FAILED, 
  FMOD_ERR_EVENT_INTERNAL, FMOD_ERR_EVENT_NAMECONFLICT, 
  FMOD_ERR_EVENT_NOTFOUND.
+ Wii - Added FMOD_Channel_SetControllerSpeaker/FMOD_Channel_GetControllerSpeaker
	Wii specific functions. Use these functions to set channel to play out
	of Wii controller speaker(s).

- Wii - Removed FMOD_System_Controller_PlaySound Wii specific function.
- Fixed FMOD_ERR_DSP_NOTFOUND returning from Event::start and 
  Channel::setChannelGroup.
- Fixed 'sowt' compressed AIFFs not playing properly on little endian
  platforms. This also fixes problems with playing audio cds on x86 Mac.
- Removed warnings from PSP examples.

* Changed fmodD to fmodL to remove confusion about debug vs logging.
  FmodD was always 'release with logging' it was never a true debug lib
  as some people thought.

2/11/06 4.04.45 - Dev release update
-------------------------------------

+ PSP - Added mp3 support using the PSP hardware mp3 decoder.
+ Added Event "Mode", "3D Rolloff", "3D Min Distance", "3D Max Distance", 
  "3D Position", "3D Cone Inside Angle", "3D Cone Outside Angle" and
  "3D Cone Outside Volume" to be updated in realtime network auditioning.
+ PS3 - Added 'force5point1' and 'attenuateDDLFE' to FMOD_PS3_EXTRADRIVERDATA.
        These address current issues with Sony audio libraries and should
        always be set to 1 until the issues are resolved by Sony.

- PS3 - Fix bug with crackly sound if a lot of categories or 
  channelgroups were used.
- Fix crash if Sound::release was called on a streaming subsound, then the 
  parent sound was released.
- Geometry engine.  Fixed sounds starting paused, not being immediately 
  occluded if they started behind a polygon occluder.
- Fixed trying to play an oscillator dsp returning FMOD_ERR_DSP_CONNECTION.

- Event API - Remove rare chance that FMOD_ERR_INVALID_HANDLE could be returned
              from some event api calls if sound stopped before 
              EventSystem::update was called.
- Event API - Fix Event::set3DOcclusion.

26/10/06 4.04.43 - Dev release update
-------------------------------------

+ Memory optimizations with FMOD_CREATECOMPRESSEDSAMPLE.

- Fixed support for Channel::addDSP with virtual voices.  Sounds that go virtual 
  and come back as real will resume their previously added DSP effects as well 
  now.
- Fixed Channel::setSpeakerLevels crash on virtual voices.
- PSP - Fixed threads not being destroyed properly on shutdown.
- Linux - Fixed stream creation failing with FMOD_ERR_MEMORY sometimes.
- Fixed crash when using the combination of stereo speaker mode, reverb, and 
  6 channel / multichannel wave files.
- Memory leak from setReverbProperties fixed.
- Fixed memory leak whn using OutputNoSound_NRT

- Event API - Fixed Event::setVolume not working in some cases.
- Event API - Fixed Event::getInfo to return -1 for lengthms if any sound in 
  the event is looping
- Event API - Fixed category case sensitivity issue

* Change FMOD_ADVANCEDSETTINGS to make System::init allocate the 
  FMOD_CREATECOMPRESSEDSAMPLE codec pools up front, instead of 'on demand' 
  when sounds are loaded.  If values are 0 or FMOD_ADVANCEDSETTINGS is not 
  used, codec pools will be allocated on demand as usual.

19/10/06 4.04.41 - Dev release update
-------------------------------------

+ PS3 - Added FMOD_DSP_TYPE_DISTORTION and FMOD_DSP_TYPE_NORMALIZE effects.
+ Wii - Added 'remotespeakeroffifnosound' to FMOD_WII_INFO structure to allow
        remote speaker to turn on/off depending on whether a sound is playing.
+ Added FMOD_ERR_INVALID_VECTOR to detect non unit length orientation vectors and
  non perpendicular orientation vectors.
+ Added useropen, userclose, userread, userseek file callbacks to 
  FMOD_CREATESOUNDEXINFO so you can override the file system per sound, instead 
  of globally.

- Fix issues with virtual voices and channelgroups.
- Fix passing 0 or null into playsound as channel handle address crashing.
- Fix reverb crash if System::setDSPBufferSize was set to larger than 1024.
- Fix FMOD_CREATECOMPRESSEDSAMPLE and IMA ADPCM FSB if a mono sound was 
  created first, played then a stereo sound was created later.
- Fix audio cutting out if Reverb and virtual voices were used.
- Wii/GC - Fixed crash when loading files using FMOD_OPENMEMORY.
- Wii/GC - Fixed lowpass filter not being reset when new sounds are played.

- Event API - Fixed problem with loadEventData returning FMOD_ERR_INVALID_PARAM.

* Added "Win32" to Win32 build name to make it consistent with other platforms
* FMOD_INIT_OCCLUSION_LOWPASS switched from ITLOWPASS to LOWPASS_SIMPLE to 
  provide clearer sound.
* Wii - Renamed FMOD_Wii_Controller_Connect function to FMOD_Wii_Controller_Command,
        this function can now be used to manually turn on/off the remote speaker.

13/10/06 4.04.39 - Dev release update
-------------------------------------

- Xbox 360 - Fixed FMOD_THREAD_PROCESSOR_ASSIGNMENTS ignoring 'mixer' value.

- Event API - Fix FMOD_ERR_INVALID_PARAM from getEvent related to previous 
              change.
- Event API - Fix user file callbacks not being called with EventSystem::load.
- Event API - Event::setVolume and network auditioning fix.

* Event API - Made getGroup, getEvent, getParameter, getCategory, getReverb 
              getProject, getProperty, case insensitive.

12/10/06 4.04.37 - Dev release update
------------------------------------

+ Added DSP::getType
+ Added compression caching for FSBank and FMOD Designer bank building.
  As an example, speedups for XMA bank compilation in one test was from 27 
  seconds down to 3 seconds.

- Fix 'file not found' errors on xbox360 event system introduced in 4.04.35.
- Fixed stream related crash upon Sound::release when virtual 
  voices were involved.
- Fixed some very small memory leaks.
- Fixed stereo pan not working
- Fixed silent zones in 2D surround pan fold-down to stereo 

+ Event API - Increased event instance limit from 63 to 255
- Event API - Fixed FMOD_ERR_INVALID_PARAM on Event::start
- Event API - Fixed file close callback being called when file open failed
- Event API - Fixed EventGroup::freeEventData
- Event API - Fixed getEvent functions to only allocate instances for the 
  specified event not the whole group (use loadEventData if you want that)
- Event API - Fixed memory leaks on EventProject::release
- Event API - Fixed wavebank mismatch when wavebanks have same name

* Event API - Event::setVolume now scales volume rather than overriding it.


5/10/06 4.04.35 - Dev release update
------------------------------------

+ PS3 spu - Added FMOD_LOADSECONDARYRAM flag.  This allows sounds 
  to be loaded into into VRAM/RSX memory on PS3.

- Event API - Fix crash with null media path when using new
  EventSystem::registerMemoryFSB / unregisterMemoryFSB functions.
- Actually fixed v33 rare Sound::release crash if FMOD_NONBLOCKING 
  is used, the last version didn't do it properly.
- Fixed noise in FSB bank compilation for 8bit wav files compressed
  with ADPCM as target format.


4/10/06 4.04.33 - Dev release update
------------------------------------

+ PS3 spu - Added SPURS mixer support.  PS3 SPU version now non-beta!
+ PS3 spu - Added FMOD_DSP_TYPE_LOWPASS, FMOD_DSP_TYPE_ITLOWPASS,
            FMOD_DSP_TYPE_LOWPASS_SIMPLE, FMOD_DSP_TYPE_PARAMEQ, 
            FMOD_DSP_TYPE_HIGHPASS effects.
+ Added - FMOD_ERR_MEMORY_CANTPOINT.
+ Event API - Added EventSystem::registerMemoryFSB / unregisterMemoryFSB.
+ Event API - Added EventProject::getNumEvents.
+ Event API - Added EventGroup::getParentGroup.

- Fixed virtual voices swapping back to real and looping when they were 
  supposed to be one shot.
- Fix rare Sound::release crash if FMOD_NONBLOCKING is used.
- PS3 spu beta - Fixed channelgroup volume level issue again.
- Event API - Fixed loading crash introduced in v31.
- Event API - Changed EventCategory::getInfo to return a global index
              if more than one project is loaded, instead of a local 0 based 
              index.
- Event API - Stopped EventSystem::getReverb crashing instead of returning 
              FMOD_ERR_MEMORY if out of memory.
- Event API - EventSystem::getEventBySystemID wasn't respecting EVENT_INFOONLY, 
              fixed.
- Event API - Fixed projects not loading in v31 if max playbacks on events was
              > 63
- Mac - Fix possible issue with loading plugins in OS X 10.3

* FMOD_CREATECOMPRESSEDMEMSAMPLE flag changed to a more generic 
  FMOD_OPENMEMORY_POINT, which supports .WAV and .FSB based PCM data now as well.  
  To get the same behaviour as FMOD_CREATECOMPRESSEDMEMSAMPLE, 
  (FMOD_CREATECOMPRESSEDSAMPLE | FMOD_OPENMEMORY_POINT) must be used.

29/9/06 4.04.31 - Dev release update
------------------------------------
+ Wii - Added controller speaker support.
+ Event API : Added EventSystem::release to docs.
+ Event API : Implemented EventCategory::setPaused / getPaused.
+ Event API : Implemented EventCategory::setMute / getMute.
+ Event API : Added EventCategory::stopAllEvents.
+ Event API : Added positionms to FMOD::EVENT_INFO to get event play time. 
+ Event API : Added EventReverbI::getInfo.
+ Event API : Added EventSystem::getNumEvents
+ Event API : Added EventSystem::getEventBySystemID
+ Event API : Added 'systemid' and 'projectid' to EVENT_INFO structure.

- Fix rare System::stopSound crash.
- Fix rare stream crash.
- Fix possible instability when using FMOD_CREATECOMPRESSEDMEMSAMPLE
- PS3 spu beta - Fix SPU hang with EventSystem.
- PS3 spu beta - Fix distortion in SFX reverb.
- PS3 spu beta - Fix remaining random audio distortion in mixer.
- PS3 spu beta - Fix memory leak when loading MPEGs with FMOD_ACCURATETIME.
- PS3 spu beta - Fix memory leak when loading raw pcm data.
- PS3 spu beta - Fix channelgroup volume level issue.
- Xbox 360 - Fix XMA related hang when using virtual voices.
- Wii/GC - Fixed distorted audio when using the EventSystem.
- Made Channel::setLoopCount respect a count of 0 for FMOD_HARDWARE even 
  though FMOD_HARDWARE doesnt support loop counts.
- Fix memory leak in MPEG codec when failing to load as MPEG.
- Fix support for 24-bit AIFF files
- Fix click on oneshot sounds containing loop points
- Event API : Max playbacks on events hard limited to 63
- Event API : Fixed 'just fail' from not just failing in some cases.
- Event API : Fixed multiple FEVs being loaded and wrong sound definitions 
              playing.

* Event API : renamed EventProject::getEventById to 
              EventProject::getEventByProjectId to remove any confusion between
              event group index and project id terminology.
* PS3 - When downmix to stereo is required, FMOD's own downmixer is used rather
        than Sony's downmixer.

8/9/06 4.04.29 - Dev release update
------------------------------------

+ Added FMOD_DSP_LOWPASS_SIMPLE.  No resonance lowpass filter, which is a lot
  faster than FMOD_DSP_LOWPASS, but allows cutoff frequency from 0 to 22khz,
  unlike FMOD_DSP_ITLOWPASS which is fast, but has limited cutoff range.  
+ Roughly 30% speedup on FMOD_DSP_LOWPASS.  Still about 2-4x slower than the 
  new FMOD_DSP_LOWPASS_SIMPLE though.
+ Added FMOD_ERR_INVALID_FLOAT.  Channel::set3DAttributes and 
  System::set3DListenerAttributes now check for NaN, Inf, Denormals being 
  passed in, only in the debug build of FMOD. (ie fmodD library or dll).
+ Optimized pitch shift filter to ignore silent channels.  A 6 channel 
  pitch shift with a sound that is only coming out of 1 speaker will now
  be about 6x faster!  Make sure to use hard panning to get best performance.

+ PS3 - Added AT3 codec support.
+ PS3 - Added fmodps3.h, which contains a FMOD_PS3_EXTRADRIVERDATA structure
        to be passed into System::init. Please see header for more information.
+ PS3 - Added reverb support.
+ PS3 - Added echo support.
+ PS3 - Added spu based mp3 streaming.
+ PS3 - Added custom 8ch to stereo downmixer to bypass sony's currently low 
        quality version.

- Fix possible stutter when starting FSB streams.
- Fix possible glitch on first time playing FSB streams.
- Fix reverb not being active the first time a channel is played.
- Fix unwanted memory allocs when using FMOD_CREATECOMPRESSEDSAMPLE.
- Fix crash in ogg codec if running out of memory.
- Fix crash if out of memory when using FMOD_NONBLOCKING.
- Fix createSound returning FMOD_ERR_INVALID_PARAM instead of FMOD_ERR_MEMORY 
  in some cases when running out of memory.
- Fix memory leak with FMOD_ACCURATETIME, mp3 and FMOD_CREATECOMPRESSEDSAMPLE.

+ Event API : Added new EventProject class
+ Event API : EventProject::release replaces EventSystem::unload(fevhandle)
+ Event API : Added EventProject::getEventById which takes a project-unique
  event id (which is written out in programmer report and header file)
+ Event API : Added EventSystem::getProject/getProjectByIndex/getNumProjects
+ Event API : Added EventSystem::getNumReverbs
+ Event API : Added EventSystem::getGroup
+ Event API : Added EventSystem::getEvent
+ Event API : Added EVENT_CALLBACKTYPE_SOUNDDEF_INFO event callback type
+ Event API : Added "eventflags" parameter to EventSystem::init
+ Event API : Added EVENT_INIT_USER_ASSETMANAGER init flag
- Event API : Fixed possible EventGroup index mismatch issue.

31/8/06 4.04.28 - Stable release update
---------------------------------------

- Fix crash if out of memory when using FMOD_NONBLOCKING.
- Fix createSound returning FMOD_ERR_INVALID_PARAM instead of FMOD_ERR_MEMORY 
  in some cases when running out of memory.

* PS3 - Update to PS3 SDK 091 build.

22/8/06 4.04.27 - Dev release update
-----------------------------------

+ Optimizations for FMOD_DSP_ITLOWPASS, FMOD_DSP_PARAMEQ.
+ Optimization for System::setReverbProperties with software voices.

- Fixed System::setReverbProperties causing channels to appear twice as loud
  when set to FMOD_PRESET_OFF.
- Fixed rare random time based crackling noises for 
  FMOD_CREATECOMPRESSEDSAMPLE based sounds.
- Fixed FMOD_3D_LINEARROLLOFF for non-default values of "distancefactor".
- Fixed XMA looping gap introduced in previous version.
- Fixed Sound::getSubSound causing 'seeking forever' bug if the function was 
  called again while previous non blocking getSubSound was still happening.
- Win32 - Fixed linear rolloff panning mode for FMOD_HARDWARE based sounds.
- Mac - Fixed recording devices being enumerated as output devices.
- Mac - Fixed output not working with iMic and possibly other output
        devices.
+ Event API : Updated header file and programmer report written out by FMOD 
  Designer to include reverbs, categories and event parameters. Full paths 
  used now as well.
- Event API : Fixed "(distance)" parameter range.
- Event API : Fixed handling of '&' in .fdp files.
- PS3 (spu beta) - Fixed crackling when pitch bending.
- PS3 (spu beta) - Improved general stability.

22/8/06 4.04.26 - Stable release update
---------------------------------------

- Fixed rare random time based crackling noises for 
  FMOD_CREATECOMPRESSEDSAMPLE based sounds.
- Fixed XMA looping gap introduced in previous version.
- Fixed Sound::getSubSound causing 'seeking forever' bug if the function was 
  called again while previous non blocking getSubSound was still happening.
- Event API : Fixed "(distance)" parameter range.
- Mac - Fixed recording devices being enumerated as output devices.
- Mac - Fixed output not working with iMic and possibly other output
        devices.

10/8/06 4.04.25 - Dev release update
-----------------------------------

+ Add support for Channel::setSpeakerLevels for sounds on platforms that don't
  support multichannel sound formats.  
  For example on PS2, PSP, GC, Wii that only have mono hardware voices and 
  stereo output, you can now locate subchannels of a multichannel stream in 
  left/right speaker.

- Fix shut down crash introduced in v4.04.21/4.04.23.
- Fix crash in mod/s3m/xm/it/midi Sound::release.
- Fix software reverb mixing dry mix in twice, making sound too loud.
- Fix 3D panning on hardware voice platforms such as xbox/ps2/psp/gamecube/wii.
- PS3 (spu beta) - Fixed noise issue if sounds were played at 48khz.
- PS3 (spu beta) - Fixed stream crash (or sounds at 48khz in general).

+ Event API : Added EVENT_STATE_INFOONLY return from Event::getState.
- Event API : Removed 32 bank limit from EventSystem::getInfo.
- Event API : Fixed problem w/freeEventData causing events to never play again.
* Event API : Event parameters now automatically reset back to 0 on Event::start
  if they have non-null velocity and setValue hasn't been called on them.

10/8/06 4.04.24 - Stable release update
---------------------------------------

- Fixed Channel::setMode stopping streams from playing on certain platforms 
  if loop mode was not specified.
- Fixed extremely rare hang with FMOD_CREATECOMPRESSEDSAMPLE.
- Fixed SoundI::getSyncPointInfo always requiring "offset" parameter.
- Fixed problem channel-swapping when using DSPs and Sounds together.

* PS3 - Update to PS3 SDK 090 build.
  Note: PRX modules now need to be loaded before initializing FMOD, please refer
	to documentation and/or examples for details.

- Event API : Fixed "(distance)" parameters not updating properly.
- Event API : Fixed problem with rolloff settings.

4/8/06 4.04.23 - Dev release update
-----------------------------------

+ Added DSP::setOutputMix/getOutputMix, and DSP::setOutputLevels/getOutputLevels
  to compliment setting input levels.

- Removed blocking criticalsection call in DSP::setParameter for most filters,
  which means performance increase.
- Fixed crash if running out of memory with FSB.
- Fixed Channel::setMute not unmuting software voices properly.
- Fixed rare crash with new Channel::stop stream optimization, when a stream 
  was released immediately after being played then stopped with Channel::stop.
  (take 2).
- Fixed rare stream play hang.
- PS3 (spu beta) - Fixed streaming.
- PS3 (spu beta) - PCM support back in mixer, now user streams and wav files 
  work, 16bit PCM only at this time.
- PS3 (spu beta) - IMA ADPCM support back in the mixer, only through FSB files,
  because wav uses an inneficient block size.
- PS3 (spu beta) - Potential noise bug fixed.

* Xbox360 - Memory::Initialize and createSound with now check memory address 
  passed in to make sure it is valid and returns new FMOD_ERR_INVALID_ADDRESS
  error code if not.  (Memory must be physical, ie allocated with XPhysicalAlloc).

+ Event API : Added selective EventSystem::unload. Can now unload a specific fev.
* Event API : NOTE: EventSystem info functions may not report correct memory 
  usage. This is temporary and will be rectified in a future version.


31/7/06 4.04.21 - Dev release update
-------------------------------------

- Fixed linking issues on ps2/psp/gc/wii.
- PS3 (spu beta) - Fixed memory leaks.
- PS3 (spu beta) - Fixed hang when playing multiple FSB MP3 streams.
- PS3 (spu beta) - Fixed crash when releasing FMOD_CREATECOMPRESSEDSOUND.
- PS3 (spu beta) - Fixed crash when releasing streams that are still playing.

* Sound::release now blocks if it is non blocking and hasn't finished opening
  yet.

4/8/06 4.04.20 - Stable release update
---------------------------------------

- PS2 - fix issue with System::getSubSound and FMOD_NONBLOCKING causing lock up.
- Xbox 360 - Fix XMA hang.

27/7/06 4.04.19 - Dev release update
-------------------------------------

+ Add supper for per channel reverb mix in Channel::setReverbProperties and
  FMOD software based I3DL2 (SFX) reverb.
+ PS3 - SPU beta released!  Now mixing and decoding takes 0% of cpu time.

- PS2 - Fixed thread shutdown code.     
- Fixed rare crash with new Channel::stop stream optimization, when a stream 
  was released immediately after being played then stopped with Channel::stop.
- Fixed ADPCM support on FSB files with FMOD_CREATECOMPRESSEDSAMPLE when mono 
  and stereo sounds were mixed into the same FSB.

+ Event API : Added "event" parameter to EventGroup::freeEventData to allow 
  data for a particular event to be freed.
- Event API : Fixed streams sometimes not being freed properly.
- Event API : Fixed samplerefcnt in EVENT_WAVEBANKINFO being off by one.
- Event API : Fixed problem loading multiple projects with empty eventgroups.

27/7/06 4.04.18 - Stable release update
---------------------------------------

- Fixed memory leak when using a lot of dsp connections.
- Fixed panning issue, especially noticable with 3d sounds 
  (stable branch bug only).
- PS2 / PSP - Fixed various close/init issues, thanks to Matt from Vicarious
  Visions for most of these!
- Fixed wav fact chunk error on big endian machines.

- Event API : Fixed memory leak when wavebanks not found.
- Event API : Fixed problem with categories across multiple projects.

* Changed PSP message and error code when returning 'out of atrac instances' 
  type error.

21/7/06 4.04.17 - Dev release update
-------------------------------------

+ Wii - Added access to extra reverb slot for DPL2 High Quality reverb.
+ Wii/GameCube - Added FMOD_Channel_SetLowPassFilter/FMOD_Channel_GetLowPassFilter
	functions (in fmodwii.h and fmodgc.h) for hardware per channel low pass
	filtering.

- Fixed Prologic 2 encoding on software mixer for 3d sound and setSpeakerMix.
- Fixed stall on Channel::stop when stopping a streamed sound while others were
  playing.
- GameCube/Wii/PSP - Fixed Sound::release() not releasing hardware sounds 
  properly.
- Fixed click on end of one shot sounds with FMOD_CREATECOMPRESSEDSAMPLE.

- Event API : Fixed EventI::getNumProperties not always returning correct value.
- Event API : Fixed eventsystem plugin loading to occur in EventSystem::init.
* Event API : EventSystem::setPluginPath can now be passed NULL to tell FMOD 
  not to load any plugins.

17/7/06 4.04.16 - Stable release update
---------------------------------------

+ Software mixer speedup.

- Increased thread stack sizes to 32kb to properly fix mp3 
  stack overflow issue when playing mp3 on non PC platforms.
- Divide by zero fix in FMOD_DSP_PITCHSHIFT filter.
- Fixed setSpeakerMix making sound audible when > 0 values were sent to 
  non existant speakers.
- Fixed certain hardware FSB streams not playing correctly
- Fixed WAVEFORMATEXTENSIBLE wav files not loading on big endian machines.
- PS2 - Fixed hang in file close if file wasnt found.
- PS3 - Fixed Ogg Vorbis support.
- Xbox 360 - fixed small 1 frame XMA files not triggering sometimes.
- Xbox 360 - fixed "music" channelgroup causing crash when starting 
  dashboard music.
- Xbox - Fixed linker error.

- Event API : Fixed crash related to sound definition pitch randomisation.
- Event API : Fixed problem loading FEVs created by newer version of FMOD Designer.
- Event API : Fixed problem when calling EventSystem::load with a path instead of 
  a filename while media path is NULL.

14/7/06 4.04.15 - Dev release update
--------------------------------------

- Fix FMOD_OPENRAW and FMOD_OPENUSER based sounds failing when played.
- Fix FSBank and FMOD Designer encoding bad ADPCM files making ADPCM based
  banks fail to load.

- Event API : Fixed EventGroup::freeEventData not freeing streams.
- Event API : Fixed 2d speaker levels not being set for 3d sounds even when
  3dpanlevel is used.

14/7/06 4.04.14 - Stable release update
--------------------------------------

- Fixed FMOD::System_Create being called 16 times causing a hang.
- Fixed stack overflow issue in FMOD_NONBLOCKING thread.
- Fixed ADPCM based FSB files and FMOD_CREATECOMPRESSEDSAMPLE causing crash.
- PS2 fixed shutdown issue.
- Fixed 7.1 software mixer quality / static issue.
- PSP fixed sounds not triggering sometimes.
- Fixed playlist (m3u/wax/pls etc) support from crashing / failing.
- Xbox 360 fixed small 1 frame XMA files not triggering sometimes.

- Event API : Fixed crash in EventSystem::load in low memory situation.

7/7/06 4.04.13 - Dev release update
--------------------------------------

+ FMOD_CREATECOMPRESSEDMEMSAMPLE flag added to differentiate itself
  from "FMOD_OPENMEMORY with FMOD_CREATECOMPRESSEDSAMPLE" which will 
  again duplicate memory internally.  FMOD_CREATECOMPRESSEDMEMSAMPLE
  simply points to the user's memory instead of duplicating it.
+ FMOD_CODEC_GETWAVEFORMAT added to FMOD_CODEC_DESCRIPTION.  This
  is an optional way to return data normally contained in
  the memory wasteful waveformat member of FMOD_CODEC_STATE.  This 
  means waveformat of FMOD_CODEC_STATE is now optional and can be 
  null, as long as FMOD_CODEC_GETWAVEFORMAT is specified.
+ Added release dll's with debug logging and .pdb debug info for win32
  (fmod*D.dll and fmod*D.pdb)

- Fix stream stitching support.
- Huge memory optimization on FSB streams with thousands of subsounds.  
- Fix syncpoints not triggering if sync points are added after playing 
  the sound.
- Fix new 3d pan level setting not being reset to 1.0 on voices.
- Fix midi length calculation on some midi files.

* FMOD_OPENMEMORY with FMOD_CREATECOMPRESSEDSAMPLE is now put back to
  the way it used to be, and duplicates memory.  New flag 
  FMOD_CREATECOMPRESSEDMEMSAMPLE handles the new behaviour.
* FMOD_LOWMEM now excludes default sentence creation for multi-subsound 
  streams.  Sound::setSubSoundSentence can still be used as normal, 
  System::playSound just wont play through the whole set of subsounds by 
  default any more if this flag is used.

+ Event API : Added Event::getChannelGroup().
+ Event API : Extended Event::getInfo(). Note: Function signature has changed!
+ Event API : Added EVENT_INFO structure.
+ Event API : Added EventSystem::getInfo().
+ Event API : Added EVENT_WAVEBANKINFO structure.
+ Event API : Added EVENT_SYSTEMINFO structure.

7/7/06 4.04.12 - Stable release update
--------------------------------------

- Fixed streams with small decodebuffersizes on certain formats with big 
  block alignment that stuttered.
- Fixed bug in reallocator making memory run out sooner than it should when 
  using a memory block with FMOD::Memory_Initialize.
- Fix delphi FMOD_SOUND_TYPE list.


29/6/06 4.04.11 - Dev release update
--------------------------------------

+ Added FMOD_INIT_OCCLUSION_LOWPASS.  Now software voices will enable a 
  lowpass filter if they are occluded! Great for Channel::set3DOcclusion and 
  the FMOD polygon based geometry engine.
+ FMOD_SPEAKERMODE_PROLOGIC and software mixed 3D sound now works correctly.
+ Added Channel::set3DPanLevel.  3D / 2D sound morphing!  Now a 3d sound 
  can morph into a '2d' sound by setting the amount it takes note of 3d pan 
  calculations or 2d Channel::setSpeakerMix.  Great for volumetric sounds! 

- Removed OpenAL output mode.
- Reduced memory usage by several hundred k using FMOD_CREATECOMPRESSEDSAMPLE
  with software mixed voices.
- 10k Memory reduction at init, and less small memory allocations upon init
  to reduce memory block overhead and init time.
- Xbox360 - stopped DrWatson complaining about an intentional exception that
  was thrown, if the debugger is not used.  

* FMOD_OPENMEMORY with FMOD_CREATECOMPRESSEDSAMPLE, now POINTS to the memory 
  passed in rather than duplicating it.  This means memory must not be freed
  when passed in this way until AFTER Sound::release has been called!

+ Event API : Added EventReverb class, EventSystem::getReverb and 
  EventSystem::getReverbByIndex

- Event API : Fixed getEvent getting the eventgroup wrong if it was called 
  with a long path
- Event API : Fixed problem with getEvent modifying const data

29/6/06 4.04.10 - Stable release update
--------------------------------------

- Fixed ChannelGroup::getChannel returning the wrong handle values back.
- Mac - Fixed System::getNumCDROMDrives and System::getCDROMDriveName not 
  returning updated information when drives are mounted and unmounted.
- Clean up metadata leak in certain .ogg files.
- Fix nested channelgroups that are not freed causing crash in 
  System::release.

19/6/06 4.04.08 - Stable release update
--------------------------------------

- FMOD Memory manager sped up noticably = faster loading times.
- Fixed FMOD_CREATECOMPRESSEDSAMPLE sounds not ending properly sometimes.
- Linux - Fixed bug in FMOD_OUTPUTTYPE_OSS causing some linux distributions
  to hang when shutting down FMOD.
- Fixed System::getAdvancedSettings not returning anything.
- Fixed multi-stream ogg vorbis files not playing all the way to the end.
- Worked around xbox360 issue of calling System::update more than once a 
  frame.  Result was an internal microsoft semaphore function was 
  throwing exceptions.  Now fixed.

9/6/06 4.04.06 - Stable release update
--------------------------------------

- Fixed FMOD_CREATECOMPRESSEDSAMPLE timing issue causing crash.
- Fixed FMOD_OPENUSER and FMOD_OPENRAW causing hang.  These flags are not
  compatible and if detected, it will now ignore the FMOD_OPENRAW flag.
- Changed thread creation code to force certain stack sizes to avoid XDK 
  CreateThread bug.
- Fixed memory leak when sound failed to load due to lack of 
  available memory.
- Fixed Sfx Reverb problems
- Fixed channelgroups not setting volume/pitch correctly if nested groups
  were a certain number of levels deep.
- Fixed loading of FSB files with multichannel sounds mixed in with 
  mono/stereo sounds.
- Fixed multichannel sounds not locating themselves according to their 
  specified speakers in a multi-speaker setup.
- Fixed ADPCM .wav files and FMOD_CREATECOMPRESSEDSAMPLE silent playback 
  issue.
- Fixed FSBank not return an error when trying to encode greater than 
  stereo XMA, rather than generating bad files.
- PS3 - Fixed crash when streaming mp3s.
- Fix crash when freeing and loading ADPCM encoded FSB files that were 
  opened for realtime playback (ie FMOD_CREATECOMPRESSEDSAMPLE).
- Linux - Fixed crash when initialising and closing FMOD repeatedly.
- Xbox 360 - Fixed XMA decoder hang issue with virtual voices.
- Fixed bug in FMOD memory manager with reallocation which is used in 
  streams, causing strange memory failures later on down the track.
- Fixed length with MP3 files and Sound::getLength with FMOD_ACCURATETIME 
  and FMOD_CREATECOMPRESSEDSAMPLE.
- Fixed FSBank creating bad FSB files if build mode was interleaved.

- Event API : Fixed problem with volumes reverting to previous setting in
  network audition mode
- Event API : Fixed memory leak when EventSystem::load returns an error.

* Switch multichannel sounds to use Directsound software mixing if 
  FMOD_HARDWARE is specified to avoid FMOD_ERR_OUTPUT_DRIVERCALL errors.

30/5/06 4.04.04 - Stable release update
---------------------------------------

- Fixed multichannel ADPCM streaming static noise.
- Fixed multichannel sound related crash.
- Fixed Sound::getName not working on multichannel sounds on ps2 
  and other platforms that only support mono hardware voices (gamecube/psp).

25/5/06 4.04.02 - Stable release update
---------------------------------------

- Fixed channelgroup related System::close crash.
- Fixed fsb memory leak.
- Fixed SyncPoint crash.
- Fixed MP3 seek issue.

23/5/06 4.04.00 - Official release
-----------------------------------

+ Channel::setSpeakerLevels now allow speaker levels to go above 1.0 for 
  amplification.  Turn the dial up to 11! Good for LFE boosting.
+ Added Channel::set3DSpread / Channel::get3DSpread!  This is an easy way to 
  make stereo 3D sounds go from summed mono point sources to having a better 
  stereo spread.  Ie facing a sound with a 90 degree spread puts the left
  part in the front left speaker and the right part in the front right speaker,
  where before it would have just summed the 2 into the center speaker.
+ Added FMOD_DSP_TYPE_SFXREVERB.  This is a custom I3DL2 reverb that is far 
  better quality and more configurable than FMOD_DSP_TYPE_REVERB which was 
  based on Freeverb.  System::setReverbProperties now enables this reverb
  for software based voices.

- PSP - Increased SAS thread priority to fix stuttering.
- Improved support for certain corrupted wav and mp3 files so that they don't 
  crash the decoder.
- Fixed very short .XMA files 'not ending'. 
- PS2 - Fixed stream hangs.
- Fixed loop mode being parsed from FSB files.
- Fixed FMOD_ACCURATETIME flag with mp3 files causing crash.
- FSBank Fixed MPEG encoder and added quality setting.
- FSBank Fixed interleaved FSB IMAADPCM encoder mode.
- Fixed SyncPoints and setPosition causing multiple callbacks to fire.
- Removed Channel::set3DSubChannelOffset/Channel::get3DSubChannelOffset in favor
  of the much simpler Channel::set3DSpread.

- Event API : Fixed problem with getEvent when hierarchy contains events/groups
  wit similar names i.e. 'c', 'car', 'ca'.
- Event API : Event::getParameterByIndex now accepts index -1 to specify the
  event's primary parameter.
- Event API : Fixed bug where exported events had very low volume.
- Event API : Fixed fmod_event_static.dsp issues.

16/5/06 4.03.10
---------------

+ Added System::createCodec so user codecs can be added from within app code
  rather than needing external DLL's (good for non dll platforms).
+ Virtual voice swapping in System::update now faster. Good when using many 
  virtual voices.
+ Wii - Added FMOD_WII_INFO structure to fmodwii.h in order to set dvd
	read priority.
+ GameCube/Wii -  Added reverb flag FMOD_REVERB_FLAGS_HIGHQUALITYDPL2REVERB to
	access DPL2 reverb. This allows the use of non-DPL2 reverb when speakermode
	is set to FMOD_SPEAKERMODE_PROLOGIC.
+ Added MPEG encoding to FSBank and support for MPEG compressed FSB files.
+ Added cross platform .VAG (Playstation ADPCM variant) codec.  Play .VAG on 
  any platform!

- Fixed virtual voices losing their channelgroup when swapping in/out.
- Fixed virtual voices forgetting speaker level settings.
- Fixed last (hopefully) rare crash on sounds with FMOD_CREATECOMPRESSEDSAMPLE.
- Fixed FSB with mixed mono/stereo sounds for XMA.
- Fixed streamer reading too far in a subsound of a multi XMA FSB files.
- Fixed FSB default values (vol/freq/pan/pri/mindistance/maxdistance).
- Fixed FMOD_CREATECOMPRESSEDSAMPLE and loop count usage with VBR based formats 
  causing a premature termination of a sound before the final loop had finished.
- Fixed a stream being played after a channel with a loop count making the stream
  only play the first part of the sound.
- Reduced memory usage.

- Event API : Fixed problem where old event callback/userdata was being called 
  after event went invalid
- Event API : Event system now uses FMOD_LOWMEM for all sounds

1/5/06 4.03.09
---------------

- Fixed OpenAL hardware channels continuing to loop even after they have been
  set not to.
- Fixed volume calculation on channels with FMOD_3D_CUSTOMROLLOFF but no rolloff curve
- Fixed DirectSound error causing FMOD_ERR_DRIVERCALL errors.
- Fixed crash in ChannelGroupI::stop.
- Fixed FMOD_LOWMEM flag accidently re-using 
- Fixed mod/s3m/xm/it/midi crash from 4.03.08.
- Removed software reverb emulation on SystemI::setReverbProperties until proper I3DL2 
  reverb is implemented.

* GameCube - FMOD_ARAMBLOCK_INFO structure renamed to FMOD_GC_INFO in fmodgc.h,
  "dvdreadpriority" member added to structure in order to set read priority.

26/4/06 4.03.08
---------------

+ Improved quality on pitch shifting filter.
+ Added FMOD_LOWMEM flag to FMOD_MODE flags to allow memory cutbacks on sample
  instances for features that aren't needed.  To start with, name storage is 
  disabled if this flag is set so Sound::getName returns "(null)".  This will
  be expanded in future to reduce Sound instance memory usage further.
+ Added memory usage tutorial.
+ Added support for GameCube GCADPCM DSP file format.
+ Added support for Nintendo Revolution.

- Fixed FSB + IMAADPCM sounds using "FMOD_CREATECOMPRESSEDSAMPLE" flag, stopping 
  as soon as they started.
- Fixed FSB + IMAADPCM sounds using "FMOD_CREATECOMPRESSEDSAMPLE" flag, causing 
  a crash on System::close. 
- Reduced memory overhead on IMAADPCM "FMOD_CREATECOMPRESSEDSAMPLE" based sounds.
- Reduced memory overhead on XMA "FMOD_CREATECOMPRESSEDSAMPLE" based sounds 
  (about 19k per sound)
- Fixed channels not going back to the Master channel group when finished.
- Fixed various obscure bugs to do with multichannel wavs, createcompressed 
  sample and fsb ADPCM etc.
- Fixed problem with FSB + MIDI
- Multichannel FMOD_HARDWARE sound fix in directsound.
- Fixed memory leak when using OpenAL output mode
- Event API : Fixed EventGroup::getEventByIndex() not honouring EVENT_INFOONLY
- Event API : Fixed bug with events in different groups sharing sound definitions
- GameCube  : Fixed hang shutting down when non-blocking streams are used.
- PSP	    : Fixed SN libraries crashing.

* Event API : Changed maximum number of events per eventsystem to 8192

18/4/06 4.03.07
---------------

+ Added FMOD_DSP_COMPRESSOR - This will be worked on and improved in future 
  releases.
+ Optimized geometry occlusion engine to early out sooner giving significant 
  speed increases for larger scenes.

- Fixed loop point handling of badly saved adobe audition wav files.
- Fixed multiple FMOD_NONBLOCKING loads not working properly.
- Handle badly saved/corrupted WMAs better.
- Xbox360 - Fixed atgscene paths in examples
- Fix dsppluginviewer example, recording issue with ASIO input/output.

+ Event API : FSBs are now loaded from mediapath first and then from the same
  directory as the FEV
+ Event API : For events with custom 3d rolloff curve, 3d min/max distance
  properties will be set to the min/max range of parameter called "distance" 
  or "(distance)"
- Event API : Fixed crash related to "oneshot and stop event" parameters
- Event API : Fixed problem with sustain points on parameters with range
  outside of 0 -> 1
- Event API : Fixed problem with encryption keys and multiple FEVs
* Event API : Removed some fmod_event_net debug log spam. Added LOG_NET to debug level 
  enum

10/4/06 4.03.06
---------------

+ Added dsp_custom example for c#

- Fix FMOD_OUTPUTTYPE enum list so it didnt break backwards compatibility.
- Fix OpenAL output not hanging on System::close/System::release if OpenAL
  wasn't supported on that machine.
- Fix alignment issues causing crash on mod/s3m/xm/it/midi under new SSE 
  mixer.
- Fixed errors in fmod_dsp.cs for c# interface

7/4/06 4.03.05
--------------

+ Optimized FMOD_DSP_TYPE_LOWPASS.   Now about 2x faster.
+ Optimized SSE based stereo output mixers, about 10% faster for 
  win32/linux/xbox.
+ Optimized 5.1 and 7.1 output mixers in SSE for win32/linux/xbox. 
+ Added OpenAL output mode.  
  Note: this requires version 1.1 or greater. An implementation of this is
  available at http://www.openal.org/downloads.html 

- Mac - Fixed CDDA support
- Fixed FMOD_DSP_LOWPASS crack/click noise when going to very low cutoff 
  frequencies such as 1hz.

+ Event API : Added EventParameter::keyOff for keying off sustain points

- Event API : Fixed crash in EventGroup::getNumGroups when there are no child groups


31/3/06 4.03.04
---------------

- Fixed small memory leak in ogg vorbis and xma codecs.
- Linux - Fixed bug in threading code causing problems in some distributions.
- Memory reduction from 238k to 184k after System::init using 100 voices.
- Fixed audio output on soundcards with >8 channels.
- Made sync point system more robust so it won't miss points.
- PS3 - added support again for FMOD_SPEAKERMODE_STEREO for stereo only output.
- Fixed crash when mixing different types of adpcm files that were encoded 
  with different block sizes, and FMOD_CREATECOMPRESSEDSAMPLE.

* Maximum channel count on a sound (ie stereo wav = 2) lowered from 8 to 6 to
  save memory.  This allows 6 channel sounds to be played, and it can be 
  increased by using System::setSoftwareFormat and setting numinputchannels 
  if needed (unlikely).


+ Event API : Added EventSystem::getNumGroups, EventSystem::getNumCategories,
  EventGroup::getNumGroups, EventGroup::getNumEvents, 
  EventCategory::getNumCategories, EventCategory::getNumParameters,
  Event::getNumParameters, Event::getNumProperties, Event::getNumCategories.
+ Event API : Added EVENTPROPERTY_MAX_PLAYBACKS_BEHAVIOR to proprty enum list.
+ Event API : Added Event::set3DOcclusion/get3DOcclusion
+ Event API : Added Event::setReverbProperties/getReverbProperties
+ Event API : Added EVENT_INFOONLY flag to be used with EventGroup::getEvent
  and Event::getEventByIndex.  Good for just getting information from an event
  without loading its data or allocating its instances.  No allocs or disk 
  access is done, but you can still read the event's information.

- Event API : Fixed crash when loading multiple FEV files.
- Event API : Fixed EVENT_STATE_CHANNELSACTIVE being the same value as 
  EVENT_STATE_PLAYING.
- Event API : Fixed eventsystem release crash
- Event API : Fixed problems related to multiple sounddefs with the same name
- Event API : Fixed event nonblocking loads
- Event API : Fixed problem where incomplete nonblocking loads would
  accumulate over time

* Event API : renamed EVENTPROPERTY_SPEAKER_MUSIC to EVENTPROPERTY_MUSIC (oops!)

17/3/06 4.03.03
---------------

+ Added sample names from mod/s3m/xm/it files as tags accessable through 
  Sound::getTag.
+ Added FMOD_OPENSTATE_SEEKING and the ability for Sound::getSubSound to do a 
  non blocking seek for multi-sub sound streams.
+ Added FMOD_NONBLOCKING tutorial to the documentation.
+ Event API : Added setVelocity / getVelocity to EventParameter class so programmer can 
  slow down or speed up a parameter.
+ Event API : Added new function Event::getState. Replaces Event::isPlaying and
  provides more information on the state of an event.
+ Event API : Added EVENT_MODE parameter to getEvent/loadEventData functions.
+ Event API : Added nonblocking event loading. Pass EVENT_NONBLOCKING to 
  getEvent/getGroup.
+ Event API : Improved event loading speed.
+ Event API : Added EVENT_ERROR_ON_DISKACCESS for users that want to trap when
  fmod does disk access in getEvent.
+ Event API : Added EVENT_CALLBACKTYPE_NET_MODIFIED event callback. This callback is 
  called when someone changes an event property over the network.
+ Added FMOD_ERR_FILE_UNWANTED error code for use by event api.

- Fixed IMA ADPCM and FMOD_CREATECOMPRESSEDSAMPLE issues and crash.
- Added Codewarrior libraries and example projects for PS2.
- GameCube - Fixed crash when shutting down then re-initialising library.
- GameCube - Fixed bug in Channel::SetPosition that was causing problems with
  virtual voices.
- GameCube - Fixed clicking sound occuring sometimes when un-pausing a channel.
- GameCube - Fixed looped sounds playing from loop point rather than the
  start of the sound.
- GameCube - Fixed bug in Channel::isPlaying that was returning true sometimes
  even when a channel has been stopped.
- Xbox360 - Fixed XMA related crash when .XMA files were freed then new 
  ones per played.
- Xbox360 - Fixed XMA related crash when loading more than 288 xma files.
- Fixed oscillators being played as 3D causing a crash.
- Fixed FMOD_NONBLOCKING on PS2.
- Fixed initialsubsound member of FMOD_CREATESOUNDEXINFO structure not being
  parsed.
- Fixed obscure click / quality issue with FMOD_SOFTWARE + streams.
- Fixed cone behaviour again.
- Event API : Added all event properties to event property enum list.
- Event API : Fixed problem when loading projects that had the same EventGroup 
  names.
- Event API : Fixed memory leak when loading multiple projects.
- Linux - Fixed memory overwrite bug in System::getNumDrivers that was causing
  crashes in some cases.
- Fixed click/glitch at end of FMOD_CREATECOMPRESSEDSAMPLE based samples.

24/2/06 4.03.02
---------------

- Event API : Fixed Memory::Initialize issue.
- Fixed XMA problem with FMOD_HARDWARE, ignore previous comment in 4.03.01.
- Fixed FMOD Event api to not fail loading event groups with no events in them.
- Gamecube - fixed multichannel GCADPCM playback issue.
- Fixed cone support.  DirectSound's native cone support is removed because it 
  sucks, and instead FMOD emulates cone support in Directsound mode by using 
  its own algorithm and just adjusting the volume of the voice manually.  

22/2/06 4.03.01 - Official release
----------------------------------

+ PS2 added fmodps2.h and FMOD_PS2_EXTRADRIVERDATA to allow users to set sifcmd
  info if they or other middleware is using the sifmcmd interface.

- Fixed stutter issue with IMA ADPCM sample data and FMOD_CREATECOMPRESSEDSAMPLE.
- Fixed sounds specified as FMOD_HARDWARE falling back to software mode when no
  hardware is available.
- Fixed badly encoded XMA files not stopping using FMOD_SOFTWARE.  With 
  FMOD_HARDWARE there is a problem in microsoft's XAudio library so please contact
  them (as we have) or re-encode xma files with extra silence or different quality
  settings to try and work around bug in the encoder.  Otherwise use FMOD_SOFTWARE.
- Fixed crash in Sound::release in certain cases.
- Fixed GameCube Channel::setPosition causing sounds to stop playing.
- Fixed GameCube crashing when loading multichannel fsb files.
- Updated docs for PSP tutorial to tell user to link to correct sas library.
- Removed System::updateFinished for now as it is not used anywhere.
- Fixed 3D XMA or MPEG stereo FMOD_CREATECOMPRESSEDSAMPLE voices crashing.
- Fixed stereo 3d sounds causing voice dropouts sometimes.
- Stereo 3D sounds in FMOD_SOFTWARE now only 1 physical voice instead of 2 mono
  voices.
- Stereo 3D sounds in FMOD_HARDWARE on Xbox 360 now use 1 physical voice 
  instead of 2 mono voices.

11/2/06 4.03.00
----------------------------------

+ Added ChannelGroup::overrideSpeakerMix

- Fixed rare timing crash with FMOD_CREATECOMPRESSEDSAMPLE support.
- Fixed Channel::setReverbProperties/getReverbProperties on streams.
- Fixed performance issue with Channel::setVolume on EAX based souncards.
- Fix PS2 semaphore kernel message causing problems with ProDG debugger.
- Stopped wav files with loop points automatically looping if their loop
  count was 0.
- Fixed crash when using custom rolloff curves.

2/2/06 4.02.10
---------------

+ Added IMA ADPCM to FMOD_CREATECOMPRESSEDSAMPLE support.  Now FMOD Ex can play
  ADPCM samples as if they were a native sample format without decompressing 
  the whole thing or needing to stream it.  
  Try it out!  Now for a small increase in CPU usage, samples can stay compressed 
  as ADPCM (and also MP2, MP3 and XMA now), saving huge amounts of memory!

- Fixed crash with sounds being released that were 3d and streamed and stereo,
  with other streams playing.
- Fixed crash in new XMA FMOD_CREATECOMPRESSEDSAMPLE support on xbox360 when
  channels were going virtual then coming back again.
- Fixed virtual voices crash with streams that were 3d and stereo.
- Fixed .mod file loading problem.
- Fixed Channel::setMute being ignored on 3d sounds.
- Fixed Sound::getSubSound/Sound::release issue.
- Fixed streaming FSB and FMOD_NONBLOCKING issue.
- Stopped resetting the length of a FMOD_CREATECOMPRESSEDSAMPLE based sound
  if it was VBR after seeking, as the next time it played it was possibly 
  truncating the sound due to the miscalculated length.  This does mean
  that Sound::getTime will be innacurate when the sound loops though for
  VBR sounds.  FMOD_ACCURATETIME would fix it.
- Fix xbox360 isplaying bug with FMOD_HARDWARE based sounds.
- Fixed support for .XMA files that only had 1 frame in them.

27/1/06 4.02.09
---------------

- Fixed bug with multichannel 24 bit samples being 3D.
- Fixed multichannel 3D samples and getSpectrum / getWaveData.
- GameCube - Lowered hardware channel count to prevent voices from dropping.
- Linux - Fixed crash when calling System::close() on some machines.
- Fixed WAV loader for wavs with nested chunks.
- Fixed FMOD_NONBLOCKING memory leak and loading errors.
- Fixed FSB 'basicheaders' support especially with XMA (crash).
- Fixed FMOD_DSP_CREATECALLBACK not passing in instance parameter.

23/1/06 4.02.08
---------------

+ Update FMOD designer programmers tutorial.
+ Added XMA support (xbox360 only) to FMOD_CREATECOMPRESSEDSAMPLE support.
  Now fmod software mixer can play compressed XMA samples which means no more
  reliance on XAudio.  Now effects can be used with compressed samples!
+ GameCube - Added virtual voices example.
+ Added sync point support to ASF/WMA codec.  Now markers can be synced to from 
  these types of files as well.

- Reduced memory usage on init by 9k.
- Fixed FMOD_ERR_OUTPUT_CREATEBUFFER error in multichannel 3d sounds coming 
  from System::createSound.
- GameCube - Fixed problems with virtual voices.
- Fixed FMOD_3D_HEADRELATIVE not keeping orientation relative in FMOD_SOFTWARE
  mode.

12/1/06 4.02.07
---------------

- Fixed pitch abnormality in 3D sound.
- Fixed volume level of channel when it is at the same position as the listener, 
  in 5.1 mode.  Now instead of being placed in all speakers at full volume, the 
  sound is placed at all speakers but at a correct (lower) volume.
- Fix bug with multichannel sounds (ie stereo and above) loaded as 3D failing.

11/1/06 4.02.06
---------------

+ Added FMOD_CREATECOMPRESSEDSAMPLE.  Compressed sample playback support!
  FMOD Ex can now load MP2 and MP3 data into memory, and play 
  it back without any of the restrictions of streams may have.  
  Save megabytes of memory by storing and playing back samples in their native
  compressed format!  Streams should be still used if you don't want to store
  any sample data in memory and would prefer to play it from disk.
  ADPCM and XMA support coming soon.
+ Added 'suggestedsoundtype' to FMOD_CREATESOUNDEXINFO.  As fmod has to scan 
  every codec type when you open a file, this can be used to speed it up!
+ Added support for wav files with ogg encoded data without using windows 
  codecs.
+ Added System::setAdvancedSettings / System::getAdvancedSettings to control
  cpu and memory usage of new FMOD_CREATECOMPRESSEDSAMPLE feature.  Other
  advanced settings not related to this may be added in the future.
+ Added 'Room' room effect level support in FMOD_REVERB_CHANNELPROPERTIES for
  Xbox360.

- Fixed midi playback on big endian machines. (xbox360, gc, ps3, mac etc).
- ASIO recording now allows any sound channel count to be recorded to (instead
  of return FMOD_ERR_FORMAT).  If ASIO is recording as mono and you pass a 
  stereo sound in, then only the left channel will be recorded to.  
  If ASIO is recording as stereo and you pass a mono sound in, only the left 
  part of the recorded signal will be put into the mono sound.
- Fix crash releasing a 2 subsounds from an fsb with Sound::release.  Normally 
  you would just release the parent FSB sound but you can do this as well now.
  (maybe the user wants to replace one subsound with another).
- Fixed links in virtual voice tutorial docs.
- Fixed playback on certain .it files that use extremely high pitched sounds
  because fmod's internal software mixer simply had a limit that was too low 
  for it.
- Fix memory leak in sound release.
- Releasing a ChannelGroup with child groups now returns the children back to 
  the master channel group.  Before it didn't and releasing an orphan group 
  would cause an exception.
- Fixed 3D software sound not working properly in multichannel output modes.
- Fixed 3D sound with multiple listeners.
- GameCube - Fixed sounds not starting paused when requested to do so in playSound.
- GameCube - Fixed poping when sound was started at low volume following a sound
  that was playing at a high volume.
- Fixed WMA playback on Xbox cutting off before it reached the end.

* Changed Sound::getLength to return 0xffffffff for FMOD_TIMEUNIT_MS 
  and FMOD_TIMEUNIT_PCMBYTES when the stream was of unlimited length (ie a 
  netstream)

21/12/05 4.02.05
----------------

+ Custom rolloff curve support added!  See new Sound::set3DCustomRolloff / 
  Channel::set3DCustomRolloff.  Specify an array of points (distance vs volume)
  and FMOD will linearly interpolate between them.

- Fixed small looping streams playback behaviour after Sound::setMode 
  was called.
- Fixed crash on mod/s3m/xm/it/mid.
- FMOD_INIT_DSOUND_DEFERRED removed.  All 3d calcs are now deferred 
  (makes it more like software mode which is 'deferred' anyway).  
  May improve 3d performance in dsound on win32.
- Removed redundant 3d calculations which should improve performance.

* Changed win32 hardware 'linear rolloff' emulation (because dsound3d only 
  supports log) to match the software based rolloff better.
* Sound::setMode and Channel::setMode can now switch between 
  FMOD_3D_LINEARROLLOFF, FMOD_3D_CUSTOMROLLOFF & FMOD_3D_LOGROLLOFF.


19/12/05 4.02.04
----------------

+ Added FMOD_SPEAKERMODE_SURROUND.
+ Added FMOD_SPEAKER_MONO as an alias to use when in FMOD_SPEAKERMODE_MONO 
  mode (instead of having to use 0, or FMOD_SPEAKER_FRONT_LEFT).
+ Added error codes FMOD_ERR_NEEDS2D and FMOD_ERR_NEEDS3D so that 3d 
  functions that are called on 2d channels/sounds return an error (ie set3D/
  get3D type functions), and vice versa (ie a 3D sound calling setPan).
+ Added FMOD_SOUND_FORMAT_MPEG.
+ Added lengthbytes to FMOD_CODEC_WAVEFORMAT structure.  Note!  Plugins 
  should be recompiled with this structure to ensure compatibility.

- Memory reduction by about 150k at init with 100 channels.  
- Fixed 3D panning issue in multispeaker output modes.
- Fixed 3D volume issue in multispeaker output modes.
- Fixed Channel::getAudiblity not reflecting channel group volume.
- Fixed adding an effect to a channel played with System::playDSP not working.
- Fixed attachFileSystem being global instead of per system object 
  as it should have been.
- Win32 mixer accidently reverted back to C version.  Put back to SSE as it 
  was supposed to be. (performance improvement again)
- Fixed ChannelGroup::stop not recursively stopping channel groups.
- Fixed channels not resetting themselves to the master channelgroup once they 
  were finished, which could lead to unpredictable behaviour.
- Allowed some corrupted midi files to play.
- Fixed FMOD_OUTPUT_WAVWRITER_NRT not loading automatically properly when using
  fmodexp.dll.
- Fixed 'virtual voice leak' which caused FMOD_ERR_CHANNEL_ALLOC sometimes.
- Fixed glitch seeking an mp3 near the start.
- Improved error detection when seeking randomly into an mp3.
- Xbox360 dashboard music detection improved so music in a music channelgroup 
  doesn't play while dashboard music is playing.

* Changed System::setSoftwareFormat to set speakermode to FMOD_SPEAKERMODE_RAW 
  if anything besides 0 is specified for numoutputchannels.  0 retains the 
  previously set speaker mode.
* Changed Channel::setSpeakerLevels to give an error if a speaker is specified 
  that shouldn't work on the current speaker mode.
* Changed FMOD_SPEAKERMODE_4POINT1 to FMOD_SPEAKERMODE_QUAD.
* Renamed FMOD_SOUND_FORMAT_XADPCM to FMOD_SOUND_FORMAT_IMAADPCM.

25/11/05 4.02.03
----------------

+ Added PlayStation 2 port.
+ Added Channel::getIndex.

- Fixed lowpass and reverb filter when processing channels greater than stereo.
- Fixed mixed mono/stereo sounds in FSB file playing at half speed, when sound 
  was loaded as sample and not stream.
- Stopped codec_raw.dll from being loaded which was never an fmod dll anyway 
  and just put raw file loading back into the main dll (as it is small anyway).

17/11/05 4.02.02
----------------

+ Added support for another type of floating point wav file (the type that 
  adobe audition outputs is different to that of soundforge for example).
+ Added Prologic II dowmix matrix for 5.1 and 7.1 sounds playing on stereo 
  output.
+ Documentation updates.  Added "Getting started" tutorial to explain 
  the key points of using FMOD Ex, and explains the main concepts and gives 
  examples to help the user get up and running.
+ System::setReverbProperties now enables reverb on FMOD_SOFTWARE based sounds!
  The reverb parameters are going to be matched and improved to sound as close
  to EAX as possible.  It is currently fairly rough, but will be better in 
  future releases.
+ Added C# 'spectrum' example.

- Fixed memory leak with getWaveData.
- Fixed FSB mixed format issue.
- Fixed mixer bug where stereo sounds played through 5.1 output and using 
  non front left / front right panning were causing corrupted noise.
- Fixed WMA seeking returning an error sometimes on some files.
- Fixed parsing issue with M3U files.

* Changed getWaveData to have a maximum numvalues limit of 16384.  This 
  saves a few 100k of ram.

10/11/05 4.02.01
----------------
+ Mono and stereo samples can now be mixed in an FSB stream (and even 
  sentenced).  In this case the stream is created using a stereo buffer, and
  mono sounds are upscaled to stereo in realtime.
+ Added Visual Basic 'spectrum' example.

- Fixed ALSA not initializing in some distros.
- Fixed midi playback error where pitch wheel bends were bending erronously.
- Fixed FSB adpcm seeking support.
- Fixed playlist files being opened using FMOD_NONBLOCKING flag.  
  (relevant to netstream redirects and asx's etc.)
- Fixed glitch in some .it files using filters.

-------------------------------------------------------------------------------

4/11/05 4.02.00 - Official release.
-----------------------------------
+ Optimized fmod_event api to remove any allocs from getEvent if cacheevents
  was specified.  Significant performance increase.
+ Xbox360 - more optimizations regarding System::update.
+ Linux - Add support for multichannel output in ALSA.
+ Custom memory system increased in speed meaning performance boost while 
  loading.
+ Optimized 5.1 path for software mixer on all platforms (except for xbox360 
  which is already optimized).   Speed increase of about 400%.  
  More optimization to 5.1 path to come.  (win32/linux/xbox is not sse yet).

- Xbox360 - Fixed TRC requirement logic where FMOD "music" would resume 
  if the user pressed pause in the Xbox360 dashboard.  FMOD "music" now
  stays paused until the user returns music control to the game.
- Xbox360 - XMA support fixes.  
- Linux - ALSA output now cooperates with other applications better.
- Mac - Coreaudio support not returning sample rate to system preference 
  rate fixed.
- Fixed FSB files containing wavs with syncpoints/markers in them from 
  crashing when loading.
- .IT codec - fixed porta command in volume column not sliding fast enough.
- Fixed seeking to the near the end of some mp3 files incorrectly causing 
  FMOD_ERR_FILE_EOF.

21/10/05 4.01.07
----------------

+ Xbox 360 - optimized 5.1 mixers.
+ Optimize mixer to not mix idle dsp units.  Good for channelgroups that only 
  have hardware channels assigned to them.
+ X86 Mac version library added.  Not tested.  Give us feedback!

- Fixed crash on non SSE machines.
- Removed clicks from DirectSound software buffers by lowering their mixing 
  quality :|  Sounds a lot better now.
- Huge memory saving on software mixing engine implemented.
- Windows - Fixed issue with VST plugins.
- Linux - Fixed cdrom TOC information error.
- Xbox360 - Fixed quality issue in stereo sample resampler.
- Xbox360 - Fixed clicks in optimized resamplers.


14/10/05 4.01.06
----------------

+ Added support for 3D stereo/multichannel sounds!  Now stereo (and above) sounds 
  can have EAX reverb and can be 3d positioned!  
  The left and right part of a sound can even  be positioned in different places 
  in 3D space.
+ Added Channel::set3DSubChannelOffset / get3DSubChannelOffset so that a 
  multichannel sound can have each part of its signal positioned in 3d seperately.
+ Added 'OfflineDecoding' example.
+ FSB files now store markers out of wav files so that the syncpoint callback 
  api automatically works with FSB files as they do with .wav.
+ Added FMOD_DSP pointer inside the FMOD_DSP_STATE structure, so the callback 
  writer can get a handle to the actual instance of the DSP unit that was created 
  by the user.  (oops should have been there in the first place!)
+ Linux now using SSE version of mixers and distortion filter.  Significant speedup.
+ Linux OSS output possibly more stable.
+ GameCube - Stereo GCADPCM compessed FSB files now supported.

- Xbox360 - 5.1 output not working fixed.
- Xbox360 - Fixed various XMA streaming issues.
- Windows - Fixed ASIO support.
- Windows - Fixed wav file ACM windows codec support for non natively decoded file types.
- Added support for MIDI pitch bend sensitivity message, so MIDI files with non 
  default settings sound correct!

04/10/05 4.01.05
----------------

+ Win32, Xbox.  Linear interpolation resampler, mixer, and distortion 
  filter optimized using SSE.  Significant speed improvements.
+ XMA support on Xbox 360 improved.

- Fixed Channel::setPan not working on streams.
- Fixed build issues with Xbox 360 libraries.
- Fixed fsbankex command line parser.
- Fixed Channel::setLoopPoints not working correctly on streams.
- Fixed Memory_Initialize crash when calling it multiple times in a row.
- Fixed Channel::setMode not recoginizing FMOD_3D_LOGROLLOFF / 
  FMOD_3D_LINEARROLLOFF.  fmod_designer log/linear event changes now work.
- Fixed loop points not from .wav files that were exported to .FSB files not
  being recognized when loaded.


29/09/05 4.01.04
----------------

+ Huge optimizations on Xbox 360.   Commonly used mixers formats and effects
  converted to use vmx128.  Now only taking a fraction of what it used to.
  Distortion is the only effect currently optimized.  The rest will come soon.
+ Added support for Channel::SetSpeakerMix for gamecube, also 3d sound will
  support prologic 2 now.

- !! Fixed skipping/'fastforward sound' bug.  This will improve peformance as 
  well.
  NOTE: UPGRADE NOW FROM VERSION 4.01.01, 4.01.02 OR 4.01.03 TO AVOID THIS BUG.
- Fixed fmod.pas inconsistancies.
- Fixed stream stopping when encountering corrupted mpeg frames in mpeg codec.
- Fixed FLAC looping again?  It looks like there is a bug in libflac which 
  corrupts the stack when seeking.  Worked around it for now.

23/09/05 4.01.03
----------------
+ Upgraded to libflac 1.1.2.  Looping .FLAC files work better now, also 
  decoding speedup.
+ Event API updated to allow retrieval of user properties in FMOD designer.

- Fixed .OXM files making white noise or crashing in some cases but only on 
  big endian machines such as Mac, XBox 360, Gamecube.

* NOTE! - FMOD Ex binaries will not be backward compatible until the API 
  design has settled down, which should be very soon.  (probably 4.02.00) 

19/09/05 4.01.02
----------------
+ Added documentation for platform specific information for Xbox and Xbox 360.
  More to come for the other platforms.

- Fixed System:setMaxHardwareChannels when using 0 to force software mode 
  causing loading errors.
- Fixed ogg crash and possibly other file format crashes.
- Fixed delphi header issue.

* NOTE! - FMOD Ex binaries will not be backward compatible until the API 
  design has settled down, which should be very soon.  (probably 4.02.00) 

16/09/05 4.01.01
----------------
+ Added FMOD_OUTPUTTYPE_NOSOUND_NRT / FMOD_OUTPUTTYPE_WAVWRITER_NRT.  
  Non-realtime versions of FMOD_OUTPUTTYPE_NOSOUND / FMOD_OUTPUTTYPE_WAVWRITER.
  User can drive the FMOD mixer with System::update at a faster than realtime
  update if they want.
+ Added FMOD_INIT_STREAM_FROM_UPDATE.  This allows the user to update the 
  streamer synchronously from System::update instead of asynchronously from 
  the FMOD thread.  Useful in conjunction with the FMOD_OUTPUTTYPE_NOSOUND_NRT /
  FMOD_OUTPUTTYPE_WAVWRITER_NRT modes.
+ Added FMOD_DSP_STATE structure for plugin writers.  This is so plugin writers 
  can now attach their own data to a plugin.  Now all 3 types of plugins have 
  this functionality.
+ Upgraded Xbox 360 build to final kits only now, and added XMA sample support.

- Removed FMOD_INIT_NONREALTIME (it didnt do anything anyway).  See new
  FMOD_OUTPUTTYPE_NOSOUND_NRT and FMOD_OUTPUTTYPE_WAVWRITER_NRT modes.
- Fixed getSoftwareFormat not setting the resamplemethod variable.
- Fixed System::setHardwareChannels not switching to software mixing if 
  max was set to 0 or min was set higher than what the hardware had.
- Fixed ParamEQ filter causing divide by 0 exception in delphi / VB.

* Output indicies have been shifted to allow insertion of new output modes.
* Renamed FMOD_CODEC to FMOD_CODEC_STATE for plugin callbacks.
* Renamed FMOD_OUTPUT to FMOD_OUTPUT_STATE for plugin callbacks.
* Renamed FMOD_DSP * parameters in DSP plugin callbacks to FMOD_DSP_STATE *.
* FMOD_OUTPUTTYPE_WAVWRITER behaviour now changed to be 'realtime'.  This
  means the user does not update the wav writer with System::update at all,
  but it writes out to the wav in realtime using the clock as a timer.
  Use FMOD_OUTPUTTYPE_WAVWRITER_NRT for the old System::update style behaviour.

* NOTE! - FMOD Ex binaries will not be backward compatible until the API 
  design has settled down, which should be very soon.  (probably 4.02.00)

-------------------------------------------------------------------------------

9/09/05 4.01.00 - Official release.
-----------------------------------
+ Added ability to change resample method. Added FMOD_DSP_RESAMPLER.  Contains
    FMOD_DSP_RESAMPLER_NOINTERP, FMOD_DSP_RESAMPLER_LINEAR,
    FMOD_DSP_RESAMPLER_CUBIC, FMOD_DSP_RESAMPLER_SPLINE.
+ Added more VB and C# examples.

- Fixed FMOD_NONBLOCKING crash with hardware samples.
- Fixed midi crash on win98.
- Fixed bad ogg internet stream crashing fmod.
- Fixed releasing and creating system objects more than 15 times causing 
  channel based errors.

* Changed System::setSoftwareFormat and System::getSoftwareFormat to include
  interpolation type parameter.  

25/08/05 4.00.37
----------------

+ Added "Number of channels" tag to midi.
+ Added ChannelGroup::setPitch and ChannelGroup::getPitch
+ Added ChannelGroup::addGroup which allows nested channel groups.
+ Added ChannelGroup::getNumGroups and ChannelGroup::getGroup.
+ Added 'filecallbacks' example.
+ Added 'recordtodisk' example.

- Fixed user streams.
- Fixed .it file crash with new echo filter code.
- Fixed crash if buffersize was set to 0 in System::setFileSystem.
* Renamed ChannelGroup functions from 'set' to 'override' for those functions 
  that dont scale, but go through and overwrite the channel attributes with the 
  specified value.

23/08/05 4.00.36
----------------

+ Added XBox 360 build for beta devkits!
+ Added .IT song message as a tag "Song message".
+ Added .MOD / .S3M / .XM / .IT channel count as a tag "Number of channels"
  for information purposes.  This number does not affect fmod's channel 
  allocation in  any way!
+ Improved 'percentbuffered' value from Sound::getOpenState so that it 
  accurately reflects how much of fmod's buffer is filled at the time instead
  of just the 'read progress' as it was before (not that useful).
+ Added support for 'chunked' http streams.
+ Added FMOD_DSP_TYPE_ITECHO.
+ Added cross platform support for .IT files that use the DirectX Media echo 
  effect!  This is from .IT files written with Modplug Tracker.
  FMOD emulates the DirectX echo filter so that songs with this effect will
  play on ANY platform!  No other .IT player can claim this!

- Fix paused flag being ignored in System::playDSP.
- Fixed ogg vorbis netstream stutter on startup.
- Fixed oscillators and setFrequency with a negative value causing crash.
- Fixed winamp plugins in ASIO mode.
- Fixed netstreams stalling that used FMOD_ACCURATETIME.
- Fixed ASF/WMA tags not returning certain entries as FMOD_TAGDATATYPE_INT 
  or FMOD_TAGDATATYPE_BINARY
- Fixed MIDI format detection so more midi files now load. (Thanks Mike Ulik
  and his 200,000 midi files :| )
- Fixed icecast streams not updating their tags when switching songs.
- Fixed loading crash on certain .IT files.
- Fixed echo filter.
- Fixed documentation on callbacks.

* Renamed FMOD_DSP_TYPE_LOWPASS2 to FMOD_DSP_TYPE_ITLOWPASS.

12/08/05 4.00.35
----------------

+ Added 64bit Linux (AMD64) support.
+ More VB examples.
+ Added 3D listener functions to EventSystem class.
+ Gamecube version available.
+ XCode projects added to examples in Mac release.
+ Added FMOD_DSP_ECHO_DRYMIX and FMOD_DSP_ECHO_WETMIX parameters to 
  echo filter.
+ Echo filter 20-30% faster.
+ Added support for special "3d distance" parameter in fmod_event 
  library.  Now you can specify envelopes in the fmod designer tool
  to react to 3d distance as the game runs!
+ Added http basic authentication support for icecast streams that have 
  listener authentication.

- Fixed Channel::setMode not updating loop mode on streams properly.
- Fixed Channel::setMute on channels not working when using FMOD_3D and 
  FMOD_SOFTWARE based sound.
- FSB bugfixes, including basicheaders support and ADPCM support.
- FMOD_INIT_DISABLESOFTWARE fixed.
- Fixed issues with creating and releasing new FMOD_SYSTEM/System objects 
  while streams were playing in an existing object.
- Fixed support for FMOD_DSP_TYPE_MIXER.
- Removed FMOD_DSP_ECHO_FEEDBACK.  Just use FMOD_DSP_ECHO_DECAYRATIO which
  does the same thing.
- Fixed System::close/release related hang if the user did not release 
  all channel groups they had created.

* Changed bitfield constants to #defines.  In C you can't define global
  constants because the C compiler doesn't regard const ints as compile time 
  constants.   C++ does, but we have to support both C and C++ :(

1/8/05 4.00.34
--------------

+ Added support for S9F effect (backwards playback) in .IT format.
+ Added DSP::setInputLevels / DSP::getInputLevels.
+ Added ChannelGroup::set3DAttributes.
+ Added dsp_effectperspeaker example.  This shows some DSP network
  manipulation.  A different dsp effect is put on each output speaker
  and only one sound is playing!
+ Added loadfrommemory example.  This just shows how to load a file from 
  memory rather than from disk.
+ Added FMOD_IGNORETAGS.  This enables the user to skip any redundant/extra 
  disc access if loading from a slow medium such as CD.

- Fixed VBR MP3s ending prematurely. (unless FMOD_ACCURATETIME was used).
- Fixed playlist example not loading files with relative paths.
- Fixed mac thread issue causing high cpu usage.
- Fixed linux compile issue.
- Fixed FMOD_OUTPUT_WAVWRITER on big endian platforms. (mac/xbox360/gc)
- Fixed WinMM output initialization on Windows 98.
- Fixed crash on XM files with bidi loops.
- Fixed mod, s3m & xm with speed = 0 freezing the mod playback,
  it is now ignored.
- Fixed MIDI issues, namely corrupted and badly written midi files!
- Removed stack overflow issue in MPEG codec.
- FMOD_NORMAL removed.  Just use FMOD_DEFAULT.
- Broken AAC libfaad support removed.  We will have to work out a 
  licensing agreement for the more improved libfaad2 before continuing 
  support for this again.

* FMOD Ex now has 27 examples!
* Changed bitfield enums to const ints so casting back to enum 
  type isn't needed when combining flags.

-------------------------------------------------------------------------------

16/7/05 4.00.33 - Official release.
-----------------------------------

FMOD Ex is now NON BETA.

+ Windows 64bit AMD64 build added!
+ Added good quality software reverb! FMOD_DSP_TYPE_REVERB.   
  Now FMOD_SOFTWARE mixed voices can have reverb, AND 5.1 output!
+ Added recording support to ESD output in linux.
+ Added ChannelGroup class.  This allows channels to be grouped for parameter
  control or effect submixing! (ie add an effect to a channel group)
+ Added channelgroups example.
+ Added submixing example.

- Fixed Sound::getName not working in v32 only.
- Hopefully last speaker issue fix.  WAVEFORMATEXTENSIBLE channelmask support
  is seriously broken on Creative and other sound cards.  Reasons:
  1.  Audigy NX bluescreens if you use WAVEFORMATEXTENSIBLE even for plain PCM,
      mono, 16bit data.
  2.  SBLive value reported to go silent if dwChannelMask is 0, even though the 
      Microsoft docs say 0 = direct out!
  3.  Even if you specify SPEAKER_STEREO as is recommended by Microsoft in 
      ksmedia.h, the panning biases towards the left on some cards.
  FMOD now only uses WAVEFORMATEXTENSIBLE for greater than stereo or 24/32bit 
  audio data.
- Fixed .S3M files with 16bit samples.
- Fixed .S3M files with stereo samples.
- Removed FMOD_CHANNEL_ALL.  To affect all channels use the new 
  System::getChannelGroup function which by default has all channels in 
  its group.
- Fixed MIDI playback with some bad files.
- Removed System::setMasterVolume / System::getMasterVolume.  To make master 
  volume use a System::getMasterChannelGroup then call ChannelGroup::setVolume.
- Removed Channel::setVolumeAbsolute.  To do this just create a new 
  ChannelGroup and add the channel to it that you don't want affected.

* System::playSound and System::playDSP change 'channelindex' parameter from
  'int' to encourage more people to use FMOD_CHANNEL_FREE instead of raw 
  channel indices.  To use a raw channel index you will have to cast the
  number to the FMOD_CHANNELINDEX type, making it an 'advanced' feature.
  If you are already using FMOD_CHANNEL_FREE you won't notice a difference.
* Visual Basic only.  FMOD_System_CreateSound now removes the exinfo param,
  and to pass it in a new function is created called FMOD_System_CreateSoundEx.
* FMOD_OUTPUT_GETDRIVERCAPSCALLBACK parameter list changed.
* Removed FMOD_OUTPUT_STARTCALLBACK.
* Removed FMOD_OUTPUT_STOPCALLBACK.

8/7/05 4.00.32 BETA
-------------------

+ Added winamp DSP plugin support.
+ Added WAVEFORMATEXTENSIBLE style 'channelmask' variable into 
  FMOD_CODEC_WAVEFORMAT.
+ Playlist support added. ASX, PLS. M3U and WAX.
  Added FMOD_SOUND_TYPE_PLAYLIST, FMOD_TAGTYPE_PLAYLIST.
+ Added Synchronization point API.  These points can come from markers 
  embedded in wav files, and can also generate channel callbacks.
    Sound::getNumSyncPoints
    Sound::getSyncPoint    
    Sound::getSyncPointInfo
    Sound::addSyncPoint    
    Sound::deleteSyncPoint
+ Added support for FMOD_CHANNEL_CALLBACKTYPE_SYNCPOINT.
+ Added FMOD_3D_LOGROLLOFF and FMOD_3D_LINEARROLLOFF.  Now you can
  treat min/max distance as volume = full and volume = 0 and FMOD 
  will linearly fade between them if you choose FMOD_3D_LINEARROLLOFF.

+ Multichannel WAV files with alternate/non default speaker mappings now 
  map the speaker output correctly into a sound created with FMOD_HARDWARE 
  under directsound.  FMOD_SOFTWARE based wavs are not affected at this time.

- Fixed 3rd party plugin support not seeking properly.
- Fixed createSound with no loop flags setting sound to loop instead of oneshot
  which should have been the default.
- Fixed playing a sample from an end callback crash.
- Speaker assignment fixes.
- Soundcreate callback in a codec being called properly now for a stream that 
  doesn't contain subsounds.
- Removed FMOD_MPEGHALFRATE.

* Renamed Channel::setOcclusion / getOcclusion to set3DOcclusion / set3DOcclusion
  so that it groups better with the other functions.
* Shuffled channel and sound class functions around a bit to be more logical.

24/6/05 4.00.31 BETA
-------------------

+ Added FMOD_ERR_MEMORY_IOP, FMOD_ERR_MEMORY_SRAM.
+ Better AIFF support including AIFC (non compressed).
+ More documentation.  API reference now 'complete'.  More refining and 
  additions most likely need to be made!

- Fixed pcmreadcallback in user streams not passing in the right sound pointer.
- Fixed ogg vorbis not playing as a netstream.
- Removed 'subsound' from FMOD_CODEC_GETPOSITIONCALLBACK.
- Fixed Channel::setPosition inconsitancy when calling this function 2 times 
  very quickly next to each other
- Error checked getWaveData and getSpectrum for channeloffset being larger than
  number of channels.

9/6/05 4.00.30 BETA
-------------------

+ Added FMOD_TIMEUNIT_MODPATTERN.
+ Added API documentation to Geometry class.

- Fixed mod/s3m/xm/it/midi crash.
- Fixed C# dsp effect enum list.
- Fixed FMOD_CHANNEL_REUSE bug.  (and therefore the generatetone example)
- Fixed stream flushing its buffer twice sometimes.
- Fixed some strange cases of stream playback causing new streams to play 
  silent.
- Removed FMOD_DSP_TYPE_FFT that didn't actually do anything?  Maybe later.

6/6/05 4.00.29 BETA
-------------------

+ GameCube support added.
+ XBox 360 support added.
+ Tags embedded in http based streams now work! (As long as they are at the 
  start of the file)
+ Sound::getName now returns name of sound by using tags or embedded song name.
+ Added name field to FMOD_CODEC_WAVEFORMAT.
+ Added Sound::setSubSoundSentence.  Gapless stream playback is now available!
+ Added FMOD_ERR_ALREADYLOCKED.
+ Added DirectX 3 support for FMOD software mixing only, so that pre-dx8 stuff
  like VirtualPC don't fail.
+ Added 'decodebuffersize' to FMOD_CREATESOUNDEXINFO.
+ Increased code name size from 32 bytes to 256 bytes.
+ Added "Real-time stitching" example.
+ Added ability to create user sounds with subsounds.
+ More documentation.
+ .it loader several times faster on songs with stereo samples in them.
+ Added FMOD_TIMEUNIT_SENTENCE_MS, FMOD_TIMEUNIT_SENTENCE_PCM, 
  FMOD_TIMEUNIT_SENTENCE_PCMBYTES, FMOD_TIMEUNIT_SENTENCE,
  FMOD_TIMEUNIT_SENTENCE_SUBSOUND and FMOD_TIMEUNIT_BUFFERED.
+ Added System::setSoftwareChannels / System::getSoftwareChannels instead of
  setting it in System::init.

- Fixed memory leak in createsound/stream if 'file not found'.
- Fixed memory leak in createsound/stream if 'format not recognized'.
- Fixed sub-sounds (ie CDDA, DLS or FSB) not displaying their names.
- Fixed crash on certain .IT files.
- Fixed silent samples on .S3M files.
- Fixed bpm issue on .S3M files.
- Fixed file offset bug.
- Fixed Channel::getWaveData not working for streams.
- Fixed certain mp3 netstreams with large amounts of redundant crap at the 
  start.
- Fixed Channel::setMode not taking effect on software based channels.
- Fixed Channel::getPosition flickering on userstreams and maybe rare cases
  on normal streams.
- Fixed System::setFileSystem.
- Fixed FMOD_CHANNEL_REUSE now returns same handle value instead of reference counting it.
- Fixed (XBOX only) pausing related bug.
- Fixed Streams hanging/crashing after 24 hours of playback.
- Removed 'levels' from Sound::setDefaults.
- Removed 'levels' from DSP::setDefaults.
- Removed Channel::getLevels.  Just use Channel::getWaveData(level, 1, 0) 
  instead.  Also you could use larger values than 1 and scan the array
  for the largest value, or maybe average them out.
- Removed Channel::setNextSound / getNextSound.
- Removed FMOD_OPENSTATE_LOADINGSUBSOUND.
- Removed numsoftwarechannels from System::init.
- Removed System::setMaxInputChannels / System::getMaxInputChannels.  This is now a 
  paramater to System::setSoftwareFormat / System::getSoftwareFormat.

* Sounds with multiple subsounds (CDDA/FSB/DLS etc) when opened as streams
  now play as one long sentence containing every subsound, if the parent
  sound is played.  To play just the first subsound, the user can call
  parentsound->getSubSound(0, &subsound); and play the subsound.
* Changed end callback behaviour to callback only when a sound ends,
  and not when stopped by the user.
* If FMOD_CREATESAMPLE is used with mod/s3m/xm/it, and FMOD_ACCURATETIME is not,
  accurate time is forced so that it doesn't just fail with FMOD_ERR_MEMORY.
* Changed FMOD_FILE_SEEKCALLBACK to only support offset.  SEEK_CUR and SEEK_END 
  are pointless, FMOD works it out and always gives an absolute offset to the user.
* Changed System::setStreamBufferSize / System::getStreamBufferSize parameters.  
  Removed 'decodebuffersize'.  (now in FMOD_CREATESOUNDEXINFO)
* Changed FMOD_TIMEUNIT_ORDER to FMOD_TIMEUNIT_MODORDER.
* Changed FMOD_TIMEUNIT_ROW to FMOD_TIMEUNIT_MODROW.
* Renamed CDDA example to cdplayer.  Updated some of the code and comments inside.
* Changed System::setMinMaxHWChannels to System::setHardwareChannels.
* Changed System::getNumHWChannels to System::getHardwareChannels.  Note! num2d
  and num3d parameters have been swapped around.
* Changed System::setOutputPlugin   / System::getOutputPlugin to 
          System::setOutputByPlugin / System::getOutputByPlugin
* Changed System::setOutputFormat / System::getOutputFormat to 
          System::setSoftwareFormat / System::getSoftwareFormat and added a 
          maxinputchannels parameter.
* Changed FMOD_OUTPUT_INITCALLBACK to use void *extradriverdata instead of
  const void *hwnd.


9/5/05 4.00.28 BETA
-------------------

+ Added 'userdata' member to FMOD_DSP_DESCRIPTION structure.

- Fixed FMOD_OPENMEMORY not working after beta 27 file offset change.
- Removed FMOD_DSP structure.
- Fixed pointer in DSP callbacks not being the same as the one created with.

6/5/05 4.00.27 BETA
-------------------

+ Added 'controlpanelspeakermode' to System::getDriverCaps.
+ Added C# and VB versions of the 'effects' example.

- Fixed sounds returning invalid handle if a system object was released 
  then re-created.
- Fixed Sound::seekData giving wrong results.
- Fixed file offset / length bug in System::createSound.
- Fixed sounds with no FMOD_SOFTWARE or FMOD_HARDWARE specified crashing
  when being swapped out in a virtual channel.

* Changed System::getDriverCaps to add an extra parameter.
* Changed FMOD_SPEAKERMODE_NONE to FMOD_SPEAKERMODE_RAW.
* Changed FMOD_OUTPUT_GETDRIVERCAPSCALLBACK to return the platform specific 
  speaker setting based on the control panel or operating system.

3/5/05 4.00.26 BETA
-------------------

+ Implemented Sound::setLoopCount / Sound::getLoopCount and 
  Channel::setLoopCount / Channel::getLoopCount.  Works on static samples
  as well as streams!
+ Added FSBankEXlib.  Available in Multithreaded, and Multithreaded DLL builds.
+ Added a few more docs.

- Fixed DSP crash on DSP units played with System::playDSP.
- Fixed handling of wav files with bad and corrupted loop points stored within
  them.

2/5/05 4.00.25 BETA
-------------------

+ Added FSBankEx.  FSBankEx uses the FMOD Ex engine for loading, so it could
  support file format plugins.  It also supports multichannel wavs when 
  encoding multichannel interleaved FSB files!  (no more needing 6 mono wavs 
  or 3 stereo wavs for a 5.1 fsb.  Just one 6 channel wav/ogg etc will work).
+ Added FSB encryption.  Now sound designers can 'mangle' their data files
  and only with the correct key on the application side will the correct
  data be playable.
+ Sound::setLoopPoints / getLoopPoints and Channel::setLoopPoints / 
  getLoopPoints fully implmented for samples and streams.  FMOD_HARDWARE
  sounds that are samples do not support this.
+ Added makefile to linux release, to allow for "make install".

- Fixed Channel functions returning invalid handle error from channel end 
  callbacks.
- Fixed close crash when reusing a channel that was playing a DSP unit.
- Fixed handling of truncated wav files.
- Fixed delphi headers.

* Documentation cleanups, mainly in the 'get' functions.


28/4/05 4.00.24 BETA
--------------------

+ Added Channel::setNextSound.  This allows a channel to switch from one
  sound to another mid playback without gaps.  Currently disabled.
+ FMOD_CREATESAMPLE added to FMOD_FLAGS to force codecs that open as a stream 
  by default now (mod/s3m/xm/it/midi) to load as a sample.

- Fixed streams smaller than the file buffer size playback bug.
- Fixed Channel::setOcclusion.
- Fixed Channel::setVolumeAbsolute.
- Changed VB header's boolean types to Int to be more binary compatible with 
  the FMOD dll.

* Changed mod/s3m/xm/it/midi to load as a stream by default even when you 
  call createSound.  To many people are trying to decode whole mod files into
  memory and wondering why they run out of memory.  
  To force the 'decode into memory' behaviour, the new FMOD_CREATESAMPLE can 
  be used.
* Changed channel handle passed into channel callbacks from being different 
  from channel handle returned from playsound, to be the same.

21/4/05 4.00.23 BETA
--------------------

- Fixed file system bug.
- Fixed crash when calling play or setposition when a stream was playing.

20/4/05 4.00.22 BETA
--------------------

- Fixed virtual voice swap callback.  Voices that are real now also get a 
  callback when you first set the callback so you can accurately track which 
  start off real and which start off virtual, then what happens after that.
- Fixed channel end callback.  Voices that were stolen/reused before 
  System::update was called weren't getting their callback.
- Improved channel selector to stop it stealing playing channels if other 
  channels had just stopped (and System::update hadn't been called yet).

19/4/05 4.00.21 BETA
--------------------

+ Added backwards playback support.  Negative setfrequency is accepted with
  FMOD_SOFTWARE sounds only, and samples (not streams) only.
+ Added FMOD_SOUND_NONBLOCKCALLBACK callback to FMOD_CREATESOUNDEXINFO
  to allow a user to get a callback when a sound has finished loading.  
  Used with FMOD_NONBLOCKING flag.  Error code is passed in as a parameter.
+ Added DSP::setBypass / DSP::getBypass.  This allows the user to disable
  the effect of a dsp unit, without stopping all of its inputs, like 
  DSP::setActive would.

- Macintosh thread usage changed from Carbon to Posix for mach-o build.
  Now streams wont stutter when using the OSX gui!
- Fixed a lot of crashes to do with virtual voices and streams.  (not 
  nescessarily combined).  This should be a LOT more stable now.
- Fixed squelching/chirping on mp3s and file errors on other formats.
- Fixed stream stuttering on certain machines/file formats by increasing
  stream decode buffersize default from 200ms to 400ms.
- System::createSound now correctly returns FMOD_ERR_FILENOTFOUND instead of 
  FMOD_ERR_FORMAT when failing to open the file.
- Fixed FMOD_NONBLOCKING causing a memory leak and not working if the sound 
  was a static sample.

* Changed System::setStreamBufferSize / System::getStreamBufferSize so user 
  can now specify the decode buffer size and file buffer size separately.
* Stream default file buffersize reduced from 64k to 16k to save memory.
  For net streams/cdda, 64k or so would be recommended.


13/4/05 4.00.20 BETA
--------------------

+ Added Sound::set3DConeSettings / Sound::get3DConeSettings
        Channel::set3DConeSettings / Channel::get3DConeSettings
        Channel::set3DConeOrientation / Channel::get3DConeOrientation.
+ Increased speed of virtual voice swapping when going from emulated<->real.

- Fixed FMOD_SOFTWARE + FMOD_3D and streams not working.
- Fixed crash in System::update if virtual channels were being swapped that
  were streams.
- Fixed FMOD_OPENONLY crash if stream was started with no seek.
- Fixed bug in System::getNumDrivers if it was called after System::init
  without having called System::getNumDrivers or System::getDriverName 
  before System::init first.  (FMOD
- Removed Geometry::flush.  Use System::update.
- Fixed glitch in filesytem causing WMA to fail opening and WAV to click.
- Added protection for if a user reads all of a file with Sound::readData
  then mistakenly starts the stream looping, causing a hang.
- Fixed crash when releasing a stream while it was playing.
- Fixed delphi header mistakes.

8/4/05 4.00.19 BETA
-------------------

+ Added buffer underrun detection!  No more stream stuttering!  You can
  now detect when underrun occurs and mute the stream or do whatever you 
  want with it.  Netstream example has been updated to reflect this.
+ Added Geometry::save to save out an object to a binary format.
+ Added System::loadGeometry to load an object from a binary format.
+ Added recording support for FMOD_OUTPUTTYPE_COREAUDIO on mac.
+ Added some documentation.

- Fixed stream crash.

* Changed Sound::getOpenState to also have 'percentbuffered' and 'starving'
  parameters.  This is good for watching network streams buffer and also
  for error handling when a stream is starved.  
* Changed System::setStreamBufferSize to pass unsigned int instead of int.
* Changed System::getStreamBufferSize to pass unsigned int * instead of int *
  and now the sizetype is a pointer.
* Changed FMOD_DSP_SEEKCALLBACK to FMOD_DSP_SETPOSITIONCALLBACK.

5/4/05 4.00.18 BETA
-------------------

+ New streaming code to hugely reduce memory usage compared to FMOD 3, and
  also remove cpu 'spikes'.  FMOD now has a smooth consistant cpu usage while
  streaming, and uses a fraction of the memory that it used to for compressed
  formats.
+ Sound::getOpenState now returns an error code that reflects what went 
  wrong in the async open thread (FMOD_NONBLOCKING) if there was an error.
+ Updated netstream example to show new openstate functionality.
+ Added 'userdata' member to FMOD_CREATESOUNDEXINFO.  This allows the use
  of Sound::getUserData when getting pcmreadcallback and pcmsetposcallback
  during System::createSound.
+ Added overloaded System::createSound to C# so FMOD_CREATESOUNDEXINFO isn't
  needed if not wanted.
+ Added recording support for FMOD_OUTPUTTYPE_SOUNDMANAGER on mac.

- Fixed Sound::getOpenState not returning FMOD_OPENSTATE_CONNECTING or 
  FMOD_OPENSTATE_BUFFERING.
- Fixed crash in System::close if user tried to released a sound that was
  still in the middle of opening with FMOD_NONBLOCKING.
- Stopped denormalized floats getting into the lowpass/highpass/eq filters
  causing huge cpu usage or exceptions.
- Removed FMOD_FILE_TELLCALLBACK.
- Fixed MP3 codec so that it doesnt skip the first frame or take extra time
  than it needs to.
- Fixed speaker levels not working because 3D code was resetting the levels
  on 2D sounds.
- Fixed FMOD_CREATESOUNDEXINFO not being used in FMOD_NONBLOCKING created
  sounds, making things like non-blocking memory load calls fail.
- Fixed MinGW and CygWin linking errors on windows.

* Changed FMOD_FILE_OPENCALLBACK to add filesize parameter.  This is better
  than having FMOD do a seek end, tell, then seek 0, because the length might
  already be present in a TOC or other filesystem structure.
* Changed System::setFileSystem to remove FMOD_FILE_TELLCALLBACK.
* Changed 'filelength' to 'length' in FMOD_CREATESOUNDEXINFO.
* Changed FMOD_CODEC to remove FMOD_FILE_TELLCALLBACK filetell.
* Changed FMOD_CODEC to provide filesize.

1/4/05 4.00.17 BETA
-------------------

+ Added "FMOD Designer" sound tool.
+ Added multichannel output support to Mac build for surround sound.
  (FMOD_OUTPUTTYPE_COREAUDIO only).
+ Added recording support to ALSA and OSS modes on linux.
+ Added VBR Xing header support.  Now Xing encoded MP3's won't need 
  FMOD_ACCURATETIME to get accurate seeking and length of VBR mp3's.
+ Added fmodex_bc.lib import library for borland C.  C++ linking not supported.
+ Added libfmodex.a import library for MinGW/CygWin.  C++ linking not supported.
+ Implemented setMinMaxHWChannels.
+ Added Channel::getAudiblity.  This is just the audible volume of the channel
  by multiplying 3d volume, volume, master volume and geometry occlusion 
  together.
+ Added FMOD_TIMEUNIT_RAWBYTES for Sound::getLength and Channel::getPosition
  only.
+ More functions documented, still not there yet!

- Fixed Virtual voice support for static sounds and streams.
- Fixed race condition on Channel::setPan which causes NaN's and sound 
  dropping out.  (FMOD_SOFTWARE only).
- Removed Channel::setTime / getTime.  Use Channel::setPosition / getPosition
  with FMOD_TIMEUNIT_MS instead.
- Tremor fixed point ogg vorbis codec removed.
- Fixed linux build not running in anything but root mode.
- Fixed crash on bidi/pingpong music loops in samples.
- Fixed stereo sounds not loading as FMOD_3D like they used to. 
  (they automatically downmix to mono as they stream or load.)
- VirtualVoices example memory GDI memory leak fixed.
- Fixed divide by 0 in highpass and bandpass and possibly lowpass filters.
- Removed FMOD_INIT_DSOUND_GLOBALFOCUS.  Now it is global by default, and you
  specify a hwnd if you don't want it global.
- Fixed sounds with subsounds and Sound::seekData seeking to entry 0 each time
  instead of the entry they are supposed to be associated with.
- 8bit PCM wav streams/sound loading - huge speedup.

* Changed pan from 0.0 -> 1.0 to -1.0 -> +1.0.
* Changed distance factor to reflect documentation.  Currently it was taking 
  1/3.28 for feet instead of 3.28 as it should have.
* Min and Max distance now defaults to distance factor when a sound is created.
* Changed setMinMaxHWChannels changed from int min, int max to 
  int min2d, int max2d, int min3d, int max3d.
* Changed FMOD_VBRACCURATE to FMOD_ACCURATETIME.  Now MOD/S3M/XM/IT can share
  this flag.  FMOD will quickly and quitely play the mod until it finds the same
  point in the song again (a where the song loops) and count that as the length
  of the song.
* Changed Sound::getLength to use position and FMOD_TIMEUNIT parameter instead
  of 3 hardcoded ms, pcm, pcmbytes values.  This now allows things like number
  of mod/s3m/xm/ut orders in a song to be reported for example.
* Changed 3D example to have changable distance factor.


3/3/05 4.00.16 ALPHA
---------------------

+ Added more tutorials to documentation.
+ Added WinMM recording to FMOD_OUTPUT_WINMM output mode.
+ Added VST plugin support.
+ Added System::lockDSP and System::unlockDSP in case the user wants to stop 
  FMOD's dsp engine while doing a complex dsp network adjustment (ie moving
  multiple units around and disconnecting / connecting).
+ Implemented System::getHandle for all platforms.
+ Added System::createDSPByIndex.
+ Added DSP::setParameter / getParameter.
+ Added DSP::getNumParameters.
+ Added DSP::getParameterInfo.
+ Added DSP::showConfigDialog.
+ Added DSP::getInfo.
+ Added dsp_gain example to show how to write a simple DSP plugin.
+ Added effect example to show how to use FMOD's built in effects.
+ Added dspviewer example to show how to use dynamic plugins, and also
  draw a spectrum and waveform using System::getSpectrum, System::getWaveData.
+ Added System::getWaveData / Channel::getWaveData for plotting the 
  waveform of the playing audio.  Much simpler than creating a dsp unit etc.

- Fixed ParamEQ filter and also fixed a heap of other filters to be more 
  tolerant of extreme parameters.
- Removed Channel::setWeight / getWeight.
- Removed 'weight' from DSP::setDefaults / getDefaults.
- Removed 'weight' from Sound::setDefaults / getDefaults.
- Removed DSP::setParameters / getParameters.
- Removed System::getDSP.
- Removed DSP::getName
- Removed DSP::getFormat
- Removed reverb unit from header for now as it was disabled anyway.  
- Fixed crash in System::close.
- Fixed crash playing .it files.
- Fixed .it loader.
- Fixed crash when using fmodexp.dll
- Fixed crash on some stream files.
- Fixed sounds stopping if DSP::release was called during playback.
- Fixed hang in MIDI loader on some files.
- Fixed mistake in XM loader so stereo and 16bit samples sound ok now.
- Fixed stream thread shutting down if second System object was created then 
  closed.
- Fixed record system getting out of sync if recordStop then recordStart were 
  called.

* DSP parameters are now dynamic, meaning unknown DSP plugins can be added and
  their parameter lists can be enumerated.
* Changed System::setMasterVolume / getMasterVolume from int 0-1024 to float 0 to 1.
* Changed Sound::setDefaults / getDefaults parameters from int 0-1024 to float 0 to 1.
* Changed Sound::setVariations / getVariations parameters from int 0-1024 to float 0 to 1.
* Changed Channel::setVolume / getVolume from int 0-1024 to float 0 to 1.
* Changed Channel::setFrequency / getFrequency from int to float.
* Changed Channel::setPan / getPan from int 0-1024 to float 0 to 1.
* Changed Channel::setSpeakerMix / getSpeakerMix from int 0-1024 to float 0 to 1.
* Changed Channel::setSpeakerLevels / getSpeakerLevels from int 0-1024 to float 0 to 1.
* Changed Channel::setVolumeAbsolute from int 0-1024 to float 0 to 1.
* Changed Channel::getLevels parameters from int 0-1024 to float 0 to 1.
* Changed FMOD_OUTPUT_TYPE to FMOD_OUTPUTTYPE and all the types inside renamed.
* Changed DSP::setInputMix / getInputMix parameters from int 0-1024 to float 0 to 1.
* Changed DSP::setDefaults / getDefaults parameters from int 0-1024 to float 0 to 1.
* Changed System::getSpectrum / Channel::getSpectrum to take number of floats being 
  written rather than number of samples being analyzed. (which is always 2x the data 
  written to the buffer)

27/1/05 4.00 alpha 15
---------------------

+ Added Geometry API.  
+ Added IASIG I3DL2 Reverb support.  Now some non EAX compatible cards can get
  hardware reverb with the same fmod interface!.
+ Added Echo effect.  (FMOD_DSP_TYPE_ECHO, FMOD_DSP_PARAM_ECHO)
+ Added Flange effect.  (FMOD_DSP_TYPE_FLANGE, FMOD_DSP_PARAM_FLANGE)
+ Added Distortion effect.  (FMOD_DSP_TYPE_DISTORTION, FMOD_DSP_PARAM_DISTORTION)
+ Added Normalization filter.  (FMOD_DSP_TYPE_NORMALIZE, FMOD_DSP_PARAM_NORMALIZE)
+ Added ParamEQ filter.  (FMOD_DSP_TYPE_PARAMEQ, FMOD_DSP_PARAM_PARAMEQ)
+ Added Pitch shifting filter.  (FMOD_DSP_TYPE_PITCHSHIFT, FMOD_DSP_PARAM_PITCHSHIFT)
+ Added Chorus effect.  (FMOD_DSP_TYPE_CHORUS, FMOD_DSP_PARAM_CHORUS)
+ Added virtual voices example.
+ Added geometry example.
+ Added System::createStream.  This is identical to System::createSound but
  just with the FMOD_CREATESTREAM flag added in.  It is to make it more obvious
  so people don't go loading huge files into memory when they should be 
  streamed by accident.
+ Added System::createStream which is exactly the same as System::createSound
  but with the FMOD_CREATESTREAM mode bit added in, because I know people are
  going to forget to add the flag unless it is right in front of them!
+ Added Visual Basic interface.

- Fixed DSP related issues with units having multiple outputs.
- Removed "outputfrequency" from FMOD_DSP_PARAM_LOWPASS
- Removed "outputfrequency" from FMOD_DSP_PARAM_LOWPASS2
- Removed "outputfrequency" from FMOD_DSP_PARAM_OSCILLATOR
- Priority and weight now work.
- Voices are now swapped based on volume and 3d volume.
- Fixed FMOD_SOFTWARE based 3d sounds appearing loud between System::playSound
  when paused and System::update if the sound was positioned far away.

* Renamed "wetness" parameter in DSP::setInputMix to "volume".

6/1/05 4.00.14 ALPHA
--------------------

+ Added EAX2, EAX3 and EAX4 support.  If the card supports EAX4, multiple 
  reverb environments at once are possible.
+ Added 2 lowpass resonance filters. (FMOD_DSP_TYPE_LOWPASS, FMOD_DSP_TYPE_LOWPASS2)
+ .IT music support now supports resonant lowpass filtering.
+ Added FMOD_INIT_DISABLESOFTWARE to save memory if software mixing isn't 
  needed.
+ Added FMOD_ERR_NEEDSSOFTWARE if a codec or feature is used that requires 
  software mixing.
+ Added missing codec_dls.dll to make the plugin version of codec_midi.dll work.
  DLS files can also be loaded without MIDI as well like a multi-sound bank and 
  Sound::getSubSound can be used to play or get information on each sound.
+ Added System::addDSP.
+ Added Channel::addDSP.
+ Added FMOD_ERR_DSP_TOOMANYCONNECTIONS.
+ Added DSP::remove to unlink DSP effects added with System::addDSP or 
  Channel::addDSP
+ Added maxpolyphony to FMOD_CREATESOUNDEXINFO structure to reduce memory/cpu
  consumption on formats like mod/s3m/xm/it/midi if they use dynamic channel
  allocation. (currently only .it and .mid do this)
+ Added DSP::reset to allow a user to reuse a filter but to reset it to its 
  initial state.
+ Added FMOD_DSP_RESETCALLBACK to FMOD_DSP_DESCRIPTION structure.
+ Added System::isRecording
+ Enabled Channel::getSpectrum

- Fixed midi codec crash if 0 software channels were specified.
- Fixed click on end of one shot samples in FMOD_SOFTWARE mode.
- Fixed small memory leak in .IT codec.
- Fixed System::close crash.
- Fixed corruption in mp3 codec.
- Fixed loop point clicking on PCM based hardware sounds on XBox.
- Fixed min and max 3d distance being ignored on XBox.
- Fixed streams not allowing 3d attributes or mode to be changed.

* changed System::loadPlugin parameters.
* changed System::createDSPByID to System::createDSPByType
* changed FMOD_DSP_DESCRIPTION::type to FMOD_DSP_DESCRIPTION::category
* changed FMOD_DSP_TYPE to FMOD_DSP_CATEGORY
* changed FMOD_DSP_ID to FMOD_DSP_TYPE
* changed FMOD_DSP_READCALLBACK length parameter from a pointer to a normal int.
* MOD/S3M/XM/IT panning made linear to sound more spatialized, and more like 
  modplug tracker which doesnt use constant power panning like it should.
* Changed System::recordStart to add a bool loop parameter.
* Changed mod/s3m/xm/it/midi to target FMOD_SOUND_FORMAT_PCM16 instead of 
  FMOD_SOUND_FORMAT_PCMFLOAT if FMOD_HARDWARE is specified.
* Changed FMOD_DSP_FFT_WINDOW_TYPE to FMOD_DSP_FFT_WINDOW

17/12/04 4.00.13 ALPHA
----------------------

- Fixed FMOD_INIT_3D_RIGHTHANDED flag.
- MIDI plugin corruption fixed.
- Fixed C version of ripnetstream.
- Clarified mode flags.  Now FMOD_2D and FMOD_HARDWARE are default.  
  FMOD_3D always overrides FMOD_2D and FMOD_SOFTWARE always overrides FMOD_HARDWARE.
- AAC will now open in a non accurate CBR calculation mode like MP3 does.  Use
  FMOD_VBRACCURATE to get an accurate System::getLength / System::setTime.

* To use fmodexp.dll in C# use the new fmodp.cs.  It is the same as fmod.cs 
  it just refers to a different DLL.


16/12/04 4.00.12 ALPHA
----------------------

+ Added DLS MIDI support!  FMOD Ex now has its own native cross platform MIDI
  playback codec which does not rely on any external libraries such as 
  DirectMusic.  DLS 1 spec is now supported.  SF2 will come later.
+ Added AAC support.
+ Added C# Interface and examples!
+ Added FMOD_CREATESOUNDEXINFO structure to go with new System::createSound.
+ Added / Renamed some init flags to FMOD_INIT_DSOUND_GLOBALFOCUS, 
  FMOD_INIT_DSOUND_DEFERRED, FMOD_INIT_DSOUND_HRTFNONE, 
  FMOD_INIT_DSOUND_HRTFLIGHT, FMOD_INIT_DSOUND_HRTFFULL.
+ Added FMOD_UNICODE to mode flags to allow unicode filenames to load.
+ FMOD_3D + FMOD_SOFTWARE now supports multi-speaker output!  Use 
  System::setSpeakerMode first of course.
+ Added System::setSpeakerPosition.
+ Added System::getSpeakerPosition.
  These 2 functions allow you to physically describe the location of your
  speakers and FMOD will skew panning based on this when in 3D!
+ Added FMOD_CAPS_HARDWARE_EMULATED flag.
+ System::getDriverCaps implemented.
+ Documented a lot more functions, and added "TERMINOLOGY / BASIC CONCEPTS"
  page to the documentation.
+ Implemented System::getOutputHandle
+ Implemented System::setRecordDriver
+ Implemented System::getRecordDriver
+ Implemented System::getRecordNumDrivers
+ Implemented System::getRecordDriverName
+ Added System::getRecordHandle
+ Added recordStart
+ Added recordStop
+ Added recordGetPosition

- Removed System::createSoundEx
- min/max distance working properly for hardware 3d sounds.
- multispeaker stuff for hardware 3d sounds working again.
- Fixed Channel::setPan not working on hardware 2d DirectSound buffers.
- Fixed divide by 0 crash if a codec set the blockalign to 0.
- Removed FMOD_SPEAKERMODE_PROLOGIC2 and made FMOD_SPEAKERMODE_PROLOGIC use
  Prologic 2 encoding by default.  It will work on a Prologic 1 decoder as 
  well so having 2 is redundant.
- Fixed multichannel sound not working on some soundcards.
- Fixed .it pitch envelope bug.
- Removed FMOD_CREATESTATIC flag.  This is the default behaviour anyway.
- Removed FMOD_OPENRECORD flag.
- Fixed Sound::readData not reading 100% of the file.

* Renamed FMOD_MPEGACCURATE to FMOD_VBRACCURATE so more VBR formats that dont
  store their PCM sample length somewhere can use this flag (like AAC)
* Changed parameters in System::createSound to take a pointer to a 
  FMOD_CREATESOUNDEXINFO structure.  To behave like the old System::createSound
  just pass 0 or NULL as this parameter.
* Worked around a bluescreen bug in creative labs driver due to them not 
  supporting WAVEFORMATEXTENSIBLE properly.
* Delphi header updated.

10/11/04 4.00.11 ALPHA
----------------------

+ Added output plugin support!  Now users can add their own output modes for 
  FMOD Ex to software mix into.
+ Added DSound plugin.
+ Added WinMM support and plugin.
+ Added ASIO support and plugin.
+ Added NoSound support and plugin.
+ Added WavWriter support and plugin.  Supports multichannel and multiformat
  wav files (ie 6 channel 32bit floating point wavs can be written from the
  FMOD mixer output).  Supply a filename through 'hwnd' parameter.
+ Added System::setOutputPlugin / System::getOutputPlugin
+ Added System::getNumPlugins, System::getPluginInfo, System::unloadPlugin.
+ Added plugins/output_mp3 example.  Uses lame_enc.dll.  Realtime output of 
  FMOD Ex is encoded and written to an mp3 file!
+ System::setSpeakerMode now sets output channel count to appropriate value.
+ Channel::setSpeakerMix / Channel::getSpeakerMix / Channel::setSpeakerLevels /
  Channel::setSpeakerLevels added / implemented.
+ System::setMasterVolume now ignores absolute channels set with 
  Channel::setVolumeAbsolute properly.
+ Added useplugins example.
+ Added multispeakeroutput example.
+ A bit more documentation added.

- Fixed crash in certain .IT songs.
- MOD, S3M, XM, IT plugins now about 8k smaller.
- fmodexp.dll now 5k smaller due to Directsound Output being moved into plugin.
- removed limitation on 2d directsound buffers using same min/max frequency 
  limitation as 3d directsoundbuffers.
- Invalid handles for channels that have stopped or been stolen now return 
  0 false or null in information functions to reduce accidental user bugs.

24/10/04 4.00.10 ALPHA
----------------------

+ Added .S3M codec.  Supports total click removal, 3D S3Ms, S3M as samples, 
  100% accuate length calculation etc.
+ Added .XM / .OXM (ogg XM) codec.  Supports total click removal, 3D XMs, 
  XM as samples, 100% accuate length calculation etc.
+ Added .IT codec.  Supports total click removal, 3D ITs, IT as samples, 
  100% accuate length calculation etc.
+ Enabled FMOD_LOOP_BIDI support for software voices.
+ Added ability to let user decide what buffer format and frequency MOD/S3M/XM/IT 
  should decode to.  By default it is the same as the output frequency and 
  FMOD_SOUND_FORMAT_PCMFLOAT.   Simply specify a sound format and/or frequency 
  in System::createSoundEx.
+ Added 'multiplesoundcard' example to show easy multiple sound card support.

- Removed click on looping FMOD_SOFTWARE samples from loopstart.
- Removed random crackles from MOD/S3M/XM/IT support due to thread concurrency
  issue.
- Fixed Sound::setMode forcing sound to 3D if FMOD_2D or FMOD_3D wasn't 
  specified.
- Fixed Sound::getLength support for large files returning the wrong value.  
  WAV and AIFF were affected.
- Fixed crash on Sound::release with sounds with tags that werent created as a 
  stream.
- Worked around a DirectSound bug (hello Microsoft!).  IEEE 32bit floating point
  buffers set to volume 0 would make a horrible buzzing noise.  Changed dsound
  code to be 'almost silent' but not quite for float buffers, but to users ears
  it will be silent.  Seemed to only happen if playback buffer frequency is the 
  same as the frequnecy the source buffer was created in.
- Fixed crash on FMOD_SOFTWARE based sounds being played at extremely high speeds 
  and with small loops.
- Fixed Directsound enumeration only enumerating 1 device.
- Updated RAW codec plugin example.

* Changed FMOD_CODEC_OPENCALLBACK to take in usermode, userfrequency, userformat.
  These parameters allow the codec to know what the user passed in via 
  Sound::createSound
* System::getNumDrivers and System::getDriverName now allowed to be called after
  System::init.

15/10/04 4.00.09 ALPHA
----------------------

+ Added .MOD codec.  Improvements on FMOD 3 include.
  - Click free!  Clicks from sounds that cut each other off on the same 
    MOD channel are removed, for 100% click removal.
  - Sound::getLength gives the exact length of a MOD in milliseconds no matter 
    what!  Even backwards, infinite, or complicated looping MODs are no challenge.  
  - Channel::setPosition / Channel::setTime allows sample accurate seeking
    into a MOD, by time.  FMOD 3 only allowed seeking by 'MOD order'.
  - MODs can be loaded as a sample!  You can load a mod as a sample, then grab 
    the PCM buffer using Sound::lock/Sound::unlock and write it to a .wav file if 
    you want!
  - MODs can be played on hardware voices!
  - MODs can be played in 3D!  They can be panned, volume scaled or even 
    frequency adjusted.  They can do anything a normal stream could do.

- Removed click when FMOD_SOFTWARE based sound had its volume set to 0.
- Plugged DirectSound memory leak.

7/10/04 4.00.08 ALPHA
---------------------

+ Added System::playDSP added.  Now tone generator DSP units can be played 
  instantly without having to do any DSP network connection / disconnection.
+ Memory usage dropped by about 42kb.  After System::init with 100 virtual 
  voices and software mixing turned off, total memory usage is about 54kb.
+ Updated ripnetstream example.  Rip shoutcast etc radio stations to mp3 files!
  Supports Artist / Title tag broadcasts to name each mp3 by.
+ Added generatetone example.  Shows how to play generated sounds without
  loading a sample!
+ Added FMOD_CHANNEL_REUSE so a channel can be re-used instead of a new 
  channel being selected.  The channel re-used is the one passed into 
  System::playSound / System::playDSP.
+ Added FMOD_CHANNEL_ALL support.  Use System::getChannel and use this 
  handle as a channel handle that will affect all channels.
+ 'dataoffsetbytes' parameter implemented for System::createSoundEx.
+ Added FMOD_MPEGSEARCH so FMOD will search right through an MP3 for a correct 
  header if the file is corrupt.  By default it searches for 4096 bytes 
  then gives up.

- Fatal net stream errors now terminate stream playback.
- Fixed System::attachFileSystem not being present in import library.
- Fixed Sound::getFormat not returning the correct sound type.
- Fixed netstreams always ending after about 137 minutes.
- Fixed clicking/crackling if a filter DSP callback tried to change 
  the output length/channels.  Filter units can now not change the length 
  or channels going out.

* Net tags that don't contain any new information (such as regular shoutcast 
  title/artist broadcasts that get transmitted every few seconds) are now 
  ignored.  New tags are only available via FMOD if they are in fact 
  unique.  Saves end user having to do string compares in their own app.
* DirectSound volume and panning now smoother / more accurate.


1/10/04 4.00.07 ALPHA
---------------------

+ Multi-channel ogg supported.
+ Added System::attachFileSystem to 'ride' on top of FMOD's file calls.
+ Added 'ripnetstream' example to show how to rip a stream from a url
  to a file using System::attachFileSystem.

- vorbis comment corruption causing ogg problems fixed.
- Fixed non seekable streams such as internet streams trying to loop or 
  exhibiting weird behaviour if System::playSound while it was already 
  or System::setTime.
- Small streams (streams smaller than the stream buffersize) not 
  restarting fixed.
- Multichannel sounds playing on stereo output are now not scaled down
  by the number of channels and just played at full volume.
- Fixed click at end of software based sounds when playing more than 1
  at once.


28/09/04 4.00.06 ALPHA
----------------------

+ Added System::getSpectrum.  This spectrum analysis function is FAR more 
  advanced than FMOD 3's function.  It has the following benefits.
  - Allows 128,256,512,...,16384 sized FFT windows.
  - Allows FFT window filtering such as rectangle/triangle/hanning/hamming/
    blackman/blackman-harris to obtain more accurate frequency information.
  - Allows per speaker analysis, so each speaker of a stereo signal can 
    be analyzed individually.
  - Doesn't need any initialization flags to enable.  Just call it.
+ Added user created sound support.  Create user streams or samples with 
  System::createSoundEx.
+ Added ability to 'rip' PCM sound data from sounds by simply supplying
  a read/seek callback in System::createSoundEx as you would with a user 
  created sound.  Can also be used to overwrite data FMOD reads as it is 
  loading.
+ System::setFileSystem now works.
+ Added createusersound example.
+ Added playsound example.

- Fixed 2d software mixed sounds only being 0 or full volume when 
  Channel::setVolume was used in conjunction with System::update.
- Fixed hang on sounds opened as samples with FMOD_SOFTWARE | FMOD_NONBLOCKING.
- Fixed crash on FMOD_SOFTWARE based sounds when a channel was used twice.
- Fixed click of FMOD_SOFTWARE based sounds when looping or for 
  FMOD_CREATESTREAM | FMOD_SOFTWARE based sounds.
- All plugins now around 4k smaller each.
- Fixed channel management bugs to do with virtual channels stealing.

* API changes, variables and functions renamed / moved.
* Changed DLL exports to be stdcall again.  Symbols are not stdcall mangled 
  though so it should make delphi / VB headers easier.

7/09/04 4.00.05 ALPHA
---------------------

+ Added FMOD_OPENONLY.  This opens a sound, but doesnt read or prebuffer it.  
  Useful for quick opens.
+ Added Sound::readData.  In conjunction with the above, a user can use it to 
  read and decompress sound data into their own buffer.
+ Added FMOD_CDDA_FORCEASPI and FMOD_CDDA_JITTERCORRECT flags to mode bits.
+ Added lcc-win32 import libraries.
+ More documentation.

- Fixed plugins not working correctly due to incorrect calling convention.
- Fixed 3D software mixed streams not allowing frequency or volume to be set on
  them.
- Removed FMOD_DONTPREBUFFER.  (use FMOD_OPENONLY instead).

* Sound::getLength now returns length in samples, length in milliseconds, and
  length in bytes instead of just length in samples.

3/09/04 4.00.04 ALPHA
---------------------

+ Channel::setCallback support added, currently only FMOD_CHANNEL_CALLBACK_END 
  supported.
+ More documentation.

- FMOD_SOFTWARE based sounds now allowed to be loaded, even if 0 is specified 
  in maxsoftwarechannels in System::init.  (which turns off the software mixer).
- Fixed FMOD_SOFTWARE static sounds not playing the last few samples of a sound.

30/08/04 4.00.03 ALPHA
----------------------

+ Tag support added.
+ More examples.
+ More documentation.
+ Added support for weirder extensible multichannel multibitformat .wav files.
+ Addition Equivalent of "FSOUND_FORCEMONO" from FMOD 3, but is automatic!  No 
  flags needed by the user, 3d stereo sounds are automatically downmixed, and
  with far greater efficiency than fmod3.

- CDDA fixes.
- Panning fixes in software engine.
- 24bit sound / streaming / resampling and output support working properly.
- Streamer bugs fixed.

* Some API changes / renames / additions / removals.
* Software mixing / DSP engine overhaul and optimizations, now 2-3x faster and
  no dynamic memory allocation when playing sounds.
* Oscillator unit updated.
* System::getCPUUsage now ignores I/O time so CDDA support doesnt say it is 
  using 50% cpu when it is actually only using 1-2% :)

27/07/04 4.00.02 ALPHA
----------------------

+ Added Delphi headers
+ Added some more documentation.

26/07/04 4.00.01 ALPHA
----------------------

* Initial release
