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

27/07/09 4.24.16 - Stable branch update
----------------------------------------------------

- fix oscillator + reverb support crackling when oscillator had to resample.
- fix oscillator + Channel::stop crash.

- Win32 - Fixed issues with COM cleanup when already initialized as MTA.
- Xbox 360 - Fix old multichannel XMA FSB detection to avoid 100% repro XMA hang.
- Xbox 360 - Fix click in XMA loops due to new XMA decoder.

- FSBankEx - fix multichannel mp2 encode producing error.

- Event API - When getting event instances, each parameter is now set to the
              value from the INFO_ONLY event rather than the minimum value.
              Use FMOD_EVENT_INIT_RESETPARAMSTOMINIMUM for the old behaviour.
- Event API - Fixed a rare bug where sometimes not all streams would be loaded
              for events or groups retrieved with FMOD_EVENT_NONBLOCKING

16/07/09 4.24.15 - Stable branch update
----------------------------------------------------

- Fixed buzzing sound coming from reverb when there are no active channels introduced in 4.24.14
- Fixed rare crash releasing samples but not streams while playing.

FSBankEx - When encoding multichannel mp3 encoded FSB, using 'single 
           interleaved FSB', fixed bad length calc causing channel swapping on
           playback side when seeking.


- PS3 - Fixed crash when playing IT files that use the IT Echo effect.


09/07/09 4.24.14 - Stable branch update
----------------------------------------------------

- Fixed unicode paths incorrectly being identified as CD drive letters.
- Fixed rare crashes in non-main FMOD threads after System::close is called
  if logging is enabled

- Xbox 360 - Fixed buffering issue when applying a dsp filter which passes the
             buffer straight through on streaming sounds.
- iPhone - Fixed crash when using the silent switch with some firmware versions.

- Fixed divide by zero when calling Channel::setSpeakerLevels on hardware sounds
  with levels set to 0.0f.

02/07/09 4.24.13 - Stable branch update
----------------------------------------------------

+ Event API - Added FMOD_EVENT_SUPPORT_XXX defines in fmod_settings.h. Use
              these to disable functionality and save memory.
+ Event API - Reduced size of FEV in memory.

- Fix volume 0 sounds with FMOD_INIT_VOL0_BECOMES_VIRTUAL sometimes never 
  updating/stopping if there were no real channels left and a System::update 
  was not called.
- Fixed seeking with MP3 sometimes being slightly inaccurate.

- Linux - Fixed FLAC plugin not loading.

25/06/09 4.24.12 - Stable branch update
----------------------------------------------------

- Fixed very rare stream crash when stream is ending and release is called at
  the same time.

- Xbox 360 - Fixed seeking hang with new XMA decoder with certain combinations 
             of files and seek positions.
- iPhone - Fixed crash with devices running OS 2.0.

- Event API - Fixed "Wait for previous" behaviour with hardware waveforms

* getMemoryInfo functions now report ogg vorbis memory usage correctly.

* .FEV file format updated! FMOD Designer 4.25.12 requires FMOD version
  4.25.12, 4.24.12, 4.22.21, 4.20.28, 4.18.36 or higher

19/06/09 4.24.11 - Stable branch update
----------------------------------------------------

- Fixed unicode support for C# createSound / createStream.

- iPhone - Fixed issues regarding the removal of input devices while recording,
           now recording will pause until the device is replaced.
- iPhone - Fixed potential crash after System::release or when using multiple
           system objects.
- Xbox 360 - Fix .xma files with short lengths not looping properly.  Note .fsb
             does not have this issue.
- Xbox 360 - update to previous version fix for multichannel XMA playing static,
             there was the occasional rare pop still.
- Xbox 360 - fix old FSB basicheader XMA encoded files crashing runtime. Issue 
             introduced 4.24.07.
- Mac - Fixed FMOD_SPEAKERMODE_RAW not outputting in channel order.

- Event API - Fixed EventParameter::keyOff() being ignored between two
              EventSystem::update() calls when no time has elapsed.
- Wii - Fixed syncpoints in GCADPCM FSB files with both stereo and mono sounds.

* .FEV file format updated! FMOD Designer 4.25.11 requires FMOD version
  4.25.11, 4.24.11, 4.22.20, 4.20.27, 4.18.35 or higher

12/06/09 4.24.10 - Stable branch update
----------------------------------------------------

+ Add FMOD_MEMORY_STREAM_DECODE flag for memory alloc callback.
+ FSB codec memory usage reduced if using loading the same FSB multiple times.

- Fixed crash/inconsistency in System::createSound when using FMOD_NONBLOCKING
  in conjunction with FMOD_CREATESOUNDEXINFO members inclusionlist, dlsname or
  encryptionkey.

- Xbox 360 - Fix 5.1 .xma files swapping channels randomly if they were 
  encoded with non 32kb block sizes.
- Xbox 360 - Fix multichannel XMA (either .xma or .fsb) playing static 
  sometimes.  Bug introduced 4.24.06.
- iPhone - Fixed recordStart incorrectly reporting hardware is not available if
           the only method of audio input is via a dock accessory. 

- Event API - Fixed EventProject::loadSampleData sometimes leaving eventgroups
              in an error state until the load succeeds. loadSampleData now
              resets eventgroups' state at the start of the load operation.
- Event API - Fixed sound instances with loop count > -1 causing other sounds
              that use the same streaming wavebank to finish early
- Event API - Fixed a music system memory leak when empty segments are present

* Changed FMOD_MEMORY_STREAMBUFFER to FMOD_MEMORY_STREAM_FILE

* iPhone - now built with SDK 3.0.

* Event API - It is now forbidden to have the same FEV loaded more than once
              at the same time. If you try to load a project that's already
              loaded you will now receive FMOD_ERR_EVENT_ALREADY_LOADED.

04/06/09 4.24.09 - Stable branch update
----------------------------------------------------

+ Added tutorial to documentation. "Compression quality, multichannel and 
  looping with lossy audio formats"

- Fix Memory leak if FMOD_ERR_MEMORY_CANTPOINT is returned from createSound.

- FSBankEx - Dissalow samplerate optimisation + 'small headers' mode.
- FSBankEx - Allow cancel button to cancel during initial scan stage.

- PSP - Fixed inaccuracy in Channel::getPosition for vag sounds causing
        stutters/distortion and eventual droupouts when streaming vag data.

- Event API - Fixed rare hang when FMOD_EVENT_NONBLOCKING is used
- Event API - Fixed events sometimes reporting FMOD_EVENT_STATE_LOADING forever
              when using EventProject::loadSampleData
- Event API - Fixed memory leak when using EventProject::loadSampleData

29/05/09 4.24.08 - Stable branch update
----------------------------------------------------

- Fix crash if calling Channel::stop from a Channel end callback.

- Xbox 360 - Fix init/close cycle leaking XMA contexts.

- Event API - Fixed getEvent always reporting FMOD_ERR_FILE_DISKEJECTED when
              trying to reload a non-streaming event (which has already been
              properly cleaned up after the disk eject).

21/05/09 4.24.07 - Stable branch update
----------------------------------------------------

+ PS3 - Added automatic muting/pausing of sounds in "music" channelgroup if
        PS3 System BGM music is playing.

- Fix hang in vorbis code, trying to open ogg video files.

- Xbox 360 - fix XMA FSB support crashing when files were built with 'basicheaders'.
!- PS3 - SPU Mixer partial rewrite to make it more like the other cross platform
         mixer should eliminate ps3 only mixer issues.

- Event API - Fixed rare case of streamed hardware wavebanks referenced by both
              2D and 3D events sometimes not loading.

* Changed FMOD_INIT_360_MUSICMUTENOTPAUSE init flag to 
  FMOD_INIT_SYSTEM_MUSICMUTENOTPAUSE.

* Win32/64 - add ability to disable EAX driver calls, just by setting 
  setMinMaxHardwareChannels max3d parameter 0.  This avoids bad drivers corrupting
  memory or simple crashing which has been experienced (ie realtek)

15/05/09 4.24.06 - Stable branch update
----------------------------------------------------

!+ Xbox 360 - XMA support now goes through new XMA HAL decoder, which should 
              remove XMA timeouts and hangs introduced in recent XDK revisions.

- Fix System::playDSP returning FMOD_ERR_INVALID_PARAM.

- Event API - Fixed events with fadein playing at full volume until the next
              eventsystem update if they were started paused and then unpaused.
- Event API - Fixed a hang in ChannelGroup::addGroup if the child group has
              no DSP and contains more than one channel.
- Event API - Fixed music system sometimes returning FMOD_ERR_INVALID_PARAM
              from EventSystem::update.
- Event API - Fixed rare deadlock when FMOD_EVENT_NONBLOCKING is used
- Event API - Event::getChannelGroup no longer fails with FMOD_ERR_DSP_NOTFOUND
              if the event's channelgroup has no DSP unit.
- Event API - Fixed spurious FMOD_ERR_CHANNEL_STOLEN from EventSystem::update
- Event API - Fixed network tweaking notification

!- PS3 - Undid 4.24.02 change "Fixed rare bug where only one DSP will be active
         at a time..." which caused problems with PS3 audio (bursts of loud 
         audio/dropouts)
- PS3 - Fixed reverse playback not working properly.
- PS3 - Fixed rare case where volume doubles up in certain dsp tree
        configurations (introduced in 4.24.02)
- PS3 - Fixed rare case where sometimes certain dsp nodes are inaudible.
        (introduced in 4.24.02)

* Channel::setPosition now returns FMOD_ERR_INVALID_POSITION rather than
  FMOD_ERR_INVALID_PARAM if the position is invalid 

* Win32 - Remove Realtek HD 'hardware' support, driver bugs in realtek 
  drivers caused corruption.
* Xbox 360 - XMA1 support removed.  Data has to be XMA2 format now.

04/05/09 4.24.05 - Stable branch update
---------------------------------------

!- Fixed sounds suddenly looping when they shouldn't be.  Bug introduced 4.24.03.
- Fixed Channel::getPosition with FMOD_TIMEUNIT_PCMBYTES returning the wrong value
  when used on a sound created with FMOD_CREATECOMRESSEDSAMPLE (or any sound on PS3).

* PS3 - Now built with SDK 270.001
* Sound::setLoopCount no longer changes the loop mode.  Use Sound::setMode to do this.

30/04/09 4.24.04 - Stable branch update
---------------------------------------

- Fix new streams that play causing other, already playing streams to stutter.
!- Fix hang in Sound::release if sound didnt play, introduced in 4.24.03.

- iPhone - Fixed crash when recording on 1st Gen iPhone.

- Event API - Clarified Event::setPaused and Event::setMute documentation
- Event API - c# - "value" argument in getProperty/getPropertyByIndex change
                   from type "ref IntPtr" to correct "IntPtr" type.

* .FEV file format updated! FMOD Designer 4.25.04 requires FMOD version 4.25.04,
  4.24.04, 4.22.13, 4.20.20, 4.18.28 or higher
* Sound::readData is now not-threadsafe.  This was done on purpose to avoid the
  skipping/stutter problem fixed in the above revision entry.  To avoid a crash
  in readData if the same sound pointer is being released, use a criticalsection
  around both function calls, or make sure the readData is finished before
  releasing the sound.

23/04/09 4.24.03 - Stable branch update
---------------------------------------

- Fixed some instruments not playing in some MIDI files due to leaking channels.
- Fix Channel::setLoopCount -1 being ignored sometimes.

!- PS3 - Fix rare chirp/high pitch glitch noise.
- Xbox 360 - Fix .XMA file support with files that have non 2k xma block sizes.
- Wii - Fix hardware lowpass and biquad filter not working on streams.
- Wii - Fix FMOD_Channel_GetControllerSpeaker not working on streams.
- Linux - Fixed ALSA output mode potentially reporting the incorrect default
          output device when there are multiple soundcards installed.

17/04/09 4.24.02 - Stable branch update
---------------------------------------
+ PSP - Increased performance of SNC library to be closer to that of GCC
        library.
+ Add FMOD_MEMORY_STREAMBUFFER/FMOD_MEMORY_ALL flags to FMOD_MEMORY_TYPE.

!- Fixed rare crash when releasing an FSB stream.
!- Fixed rare crash releasing a FMOD_CREATECOMPRESSED sound before it was 
   truly finished from being used within the mixer.
- Fixed FMOD_DSP_TYPE_LOWPASS filter producing silence if the cutoff parameter
  is set to higher than half the system sampling rate.
- Fixed codec_xm crashing on load when using ogg compressed samples.
- Fixed OpenAL output mode stopping hardware sounds right away.
- Fixed FMOD_ERR_UNITIALIZED being returned bye System::setReverbProperties
  when FMOD has been initialised with the FMOD_INIT_DISABLE_SOFTWARE flag.
- Fixed CD loading to allow driver letters specified using Unicode.

- PS3 - Fixed rare bug where only one DSP will be active at a time if there
        are two DSP's connected to a DSPMixer unit in a custom DSP tree.
- PS3 - Fixed RoomLF and LFReference SFX Reverb parameters being ignored.
- PSP/PS2 - Fixed System::setReverbParameters returning FMOD_ERR_PLUGIN_MISSING
            when using non-reduced version of the libraries.
- PS3 - Fixed noise when pausing a channel that has it's dsphead routed to a
        mixer unit, and that mixer unit has two output connections leading to
        the same unit, with one of the connections going through another dsp unit.
- Xbox360 - Fixed crash with multichannel XMA streams, greater than 8 channels.

- Event API - Fixed unloadFSB not releasing soundbank references properly if
              just the FSB's base file name is specified
- Event API - Fixed crashes after calling unloadFSB if oneshot sounds from
              that FSB were playing
- Event API - Fixed FMOD_EVENTPROPERTY_WII_CONTROLLERSPEAKER not being reset
              by getEvent

- FSBankEx - Fix crashing with sounds above 48khz when encoding to MP2/MP3.

* Event API - Changed Event::getChannelGroup to return FMOD_ERR_DSP_NOTFOUND if 
  it is an event with no channelgroup (ie it has been optimized out internally).
  Use FMOD_EVENT_USERDSP to add a channelgroup back into the event.

31/03/09 4.24.01 - Stable branch update
---------------------------------------

- Fix bad loading code in FSB codec, when using a number of syncpoints 
  that exceed 64kb total, feature added 4.23.07.
- Fixed FMOD_SYSTEM_CALLBACKTYPE_DEVICELISTCHANGED callback not always being
  triggered if System::isRecording is called constantly.
- Fixed software VAG decoding producing noise on big endian machines.
- Fixed issue with XM codec causing some notes that use a portamento effect not 
  to play.
- Fixed codec IT not respecting the maxpolyphony setting in 
  FMOD_CREATESOUNDEXINFO and potentially causing a crash if set over 64.

- PS3 - Fixed Channel::setLoopCount not working correctly.
- Xbox360 - Fixed incorrect thread assignments, bug introduced in 4.23.06.
- Xbox360 - Fixed occasional crash when calling System::setReverbProperties with
            FMOD_PRESET_OFF.
- Xbox360 - Fixed certain .xma files returning FMOD_ERR_FORMAT

- Event API - Fixed bad playback when multiple themes are triggered between
              EventSystem::update calls
- Event API - Fixed Event::setReverbProperties failing with FMOD_ERR_NOTREADY
              if the event has programmer sounds that are still loading
- Event API - Fixed reverb still being audible when event wet level is -60 dB
- Event API - Fixed concurrent themes not syncing to beats/bars if no
              sequenced theme is playing

18/03/09 4.24.00 - Initial Stable branch release
------------------------------------------------

+ Added FMOD_INIT_GEOMETRY_USECLOSEST flag.  With the geometry engine, 
  only process the closest polygon rather than accumulating all polygons 
  the sound to listener line intersects.

+ Event API - Added FMOD_EVENTPROPERTY_3D_IGNORE_GEOMETRY event property.

- Fixed MIDI codec to ignore notes with bad data.
- Fixed channel FMOD_3D_IGNOREGEOMETRY flag not updating occlusion values
  properly.

- PS2 - Fix FMOD_Command_Send error with multichannel VAG streams that 
  called Channel::setPosition whilst paused and were opened with FMOD_NONBLOCKING

!- Xbox 360 - Fixed XMA codecs allocating twice as much memory as they should be.
              Bug introduced 4.23 prerelease (v6)

- Event API - Fixed glitches when music theme crossfade duration is too short
              (the fade-in part of all crossfades now happens 50ms sooner)
- Event API - Fixed a crash when using streaming nonblocking programmer sounds
- Event API - Fixed event occlusion not being reset when re-using an instance
- Event API - Fixed music system failing to load encrypted streaming FSBs 

12/03/09 4.23.08 - Development branch update
----------------------------------------

- Fixed streams with a single subsound never clearing the
  FMOD_OPENSTATE_STREAMING bit, even when they have been stopped
- Fixed codec MIDI still creating "Text (Time MS)" tags at runtime.
- IT format. Fix sample vibrato not working in files that were in 'sample mode'
- Fixed VST/Winamp plugins not loading (incorrectly returning FMOD_ERR_FORMAT).

- PS2 - Fix multichannel vag streams (ie 6ch and above) hanging / causing noise.

- Event API - Fixed music system stopping themes prematurely if they use
              streaming wave banks that contain a single sound

* Event API - Changed FMOD_EVENT_INIT_NO_GUIDTABLE to FMOD_EVENT_INIT_USE_GUIDS

5/03/09 4.23.07 - Development branch update
----------------------------------------

+ Added ability to specify netstream URLs with wide chars using the unicode flag.
+ Added FMOD_MEMTYPE_SOUND_SECONDARYRAM / FMOD_MEMBITS_SOUND_SECONDARYRAM to
  allow tracking of sounds in secondary RAM (such as RSX on PS3).
+ Added new "Text (Time Ms)" tag to MIDI files so it can be used in conjunction
  with the "Text" tag that conains lyrics. This supports the ".kar" file format.
+ Added FMOD_DEBUG_DISPLAY_THREAD to let the user log what threads FMOD calls are
  being made from (to track down multithread bugs).

+ Wii - FMOD now automatically sets the correct speakermode depending on what 
        was set in the Wii control panel.

- Fixed software channel 3D panning for multichannel sounds
- Fixed getSpectrum not freeing memory on a channel until System::release.
- Fixed sfxreverb not reporting a memory allocation failure in one case.
- Removed FSB support for frequency/volume/pan 'variations'.

- FSBankEx - Fixed 64kb limit in FSB because of too many syncpoints.

- Mac - Fixed CoreAudio output mode to respect the requested dsp buffer size.
- Mac/Linux/Solaris/iPhone - Fixed time sync issues with the event system.

- Wii - Fixed Channel::setVolume overriding Channel::setSpeakerMix for
        multichannel hardware sounds.

- Event API - Fixed crashes when changing effect envelopes via network tweaking
- Event API - Fixed corrupted category parents after loading multiple FEVs
- Event API - Fixed crashes in EventSystem::update when playing events with
              velocity or seek parameters after loading multiple FEVs
- Event API - Fixed EventSystem::load not cleaning up properly when failing
              with FMOD_ERR_EVENT_GUIDCONFLICT

26/02/09 4.23.06 - Development branch update
----------------------------------------

+ 360 - Added ability to pass in pre-created XAudio2 instance to FMOD 
  via FMOD_360_EXTRADRIVERDATA.  Stops fmod from initializing XAudio2 itself.
+ Wii - Added 'audiolibsinitialized' member to FMOD_WII_INFO to stop FMOD
        from initializing AI,AX and MIX.
+ PS3 - Added and 'cell_audio_initialized' and 'cell_audio_port' members to
        FMOD_PS3_EXTRADRIVERDATA so that the cell audio port number can be 
        passed in if you have initialized libAudio yourself. FMOD will not do
        any audio initialization if 'cell_audio_initialized' is set.
+ Wii - Added 'FMOD_Wii_GetDriveStatus' function to fmodwii.h. Returns the
        drive status that was reported to the FMOD file system.

- Linux - Fixed OSS recording not starting.
- Wii - Improved accuracy of hardward Channel::setSpeakerLevels.

- Event API - Fixed streaming events not reporting FMOD_EVENT_STATE_LOADING
              unless they have been started

* 360 - Changed FMOD_THREAD_PROCESSOR_ASSIGNMENTS to FMOD_360_EXTRADRIVERDATA

20/02/09 4.23.05 - Development branch update
--------------------------------------------

+ Wii - Added support for stereo hardware 3D sounds.
+ Mac - Improved general performance slighly with specific improvements to
        the performance of recording.
+ PS3 - Added support for FMOD_DSP_TYPE_ITECHO dsp filter.

- Fixed filename truncation in System::createSound when FMOD_NONBLOCKING and
  FMOD_UNICODE are specified
- Fix syncpoint hang when using hardware voices on stereo and above sounds.
- Fix 1 frame mpeg files returning FMOD_ERR_FILE_FORMAT

- PS3 - Fixed crash when using oscillators and virtual voices.

- Event API - Reset parameters to minimum values when getting event instances
- Event API - Pause parameters when their event or category is paused

* Event API - Changed reverb connection logic.  Effects in an event will not
  be processed by reverb unless FMOD_EVENTPROPERTY_EFFECTS_AFFECT_REVERB has
  been specified.

12/02/09 4.23.04 - Development branch update
---------------------------------------------

- Fixed crash when reinitializing FMOD, i.e. System::close() then
  System::init(). Bug introduced in 4.23.02.

- FSBank - Fixed error building some multi-channel MP2 banks

- Wii - Make Channel::setSpeakerMix and Channel::setSpeakerLevels more functional
        on hardware channels.
- PS3 - Fixed initialization failure introduced in 4.23.01


6/02/09 4.23.03 - Development branch update
---------------------------------------------

- Fixed rare case where some FLAC files don't load by updating FLAC to v1.2.1.

- Linux64 - Fixed recording examples not compiling due to record API changes.
- Linux/Solaris - Fixed oggvorbis codec not working when used as a plugin.
- PS3 - Fixed initialization failure introduced in 4.23.01

- Event API - Clarified MusicSystem::prepareCue and MusicPrompt::release docs
- Event API - Fixed simple events sometimes ending abruptly on first play

* iPhone - now built with SDK 2.2.1.

30/01/09 4.23.02 - Development branch update
---------------------------------------------

+ iPhone - added support for wave writer output mode. NOTE! you must pass in a
  file path and name via extra driver data as the app bundle is read only.

+ Event API - Made sound instance "Wait for previous" start mode
              sample-accurate so sounds are stitched together seamlessly.
              This allows for granular synthesis with spawning oneshot sounds,
              seamless stitching of looping sounds and other effects.

- Fixed tags not appearing for some shoutcast net streams. Bug was introduced
  in 4.23.00.
- Stop crash in System::close/release when user didn't call System::update and
  was using hardware sounds.

- PS3/360/Wii/PSP/PS2 - Fix bug in .wav file syncpoint support where names 
  came out blank.
- iPhone - Fixed System::init() failure when re-initializing FMOD.
- iPhone - Fixed dsp_custom example, added the missing content.
- PSP - Fix horrible XM playback when using FMOD_HARDWARE.
- PSP/PS2 - Fix bpm support for XM playback when using FMOD_HARDWARE.
- Linux - Fixed ALSA output crashing when a second system object is initialised
          on machines that are running Pulse Audio.

- Event API - Fixed event instance pool stealing.

22/01/09 4.23.01 - Development branch update
---------------------------------------------

+ iPhone - added the ability to force output through the main speaker when
           recording and playing at the same time.

! - Fixed corruption/crash when using FMOD_NONBLOCKING or FMOD_EVENT_NONBLOCKING
    Introduced in 4.18.02/4.19.02

- Fixed ChannelGroup::getWaveData/getSpectrum crash on channelgroups retrieved 
  from events that do not use dsp effects.  Now returns FMOD_ERR_DSP_NOTFOUND
  instead.  Remember use FMOD_EVENT_USERDSP if you want the error to go away.
- Fix FMOD_ADVANCEDSETTINGS::debugLogFilename storing user pointer and writing 
  to it internally.
- Fixed inaccurate cone angle calculation for 3D channels.
- Fixed reverb parameters not applying when using the plugins version with
  certain output modes.
- Fix getSubSound on a stream in certain cases playing the wrong bits of an FSB.

- iPhone - made initialization a little bit more informative and robust
           concerning backwards compatibility of older iPhone SDKs.
- Mac - Fixed missing plugins (compressor, lowpass_simple, sfxreverb). 

* System::createSound/createStream no longer creates a sentence for the parent 
  sound, saving disk accesses and memory.  Use System::setSubSoundSentence 
  instead.

16/01/09 4.23.00 - Development branch release
---------------------------------------------

+ Optimised mixer to give significant speedup in certain cases when mixing an
   8x8 or 6x6 matrix.

+ Event API - Added EventSystem::getEventByGUID
+ Event API - Added EventSystem::getEventByGUIDString
+ Event API - Added the FMOD_EVENT_INIT_NO_GUIDTABLE init flag
+ Event API - Added EventProject::loadSampleData. Allows you to load sample data
              for multiple events/eventgroups with one call. Optimized to be
              faster than using multiple calls to loadEventData.

+ PS3 - Added "spurs_taskset_priorities" member to FMOD_PS3_EXTRADRIVERDATA to
        allow passing of custom priorities to cellSpursCreateTaskset internally.
+ PSP - Enabled rudimentary support for hardware accelerated XM playback
        previously enabled on PS2.

- Fix rare distortion in output if using reverb.
- Fixed connecting to certain Shoutcast servers when attempting net streaming.

- Win32 - When using FMOD_HARDWARE (directsound), fixed setPaused(true) rarely 
          causing streams to stop.
- Xbox 360 - Fix crash with multichannel XMA sounds.  Introduced in 4.23.00 pre 6.
- PS3 - Fixed error re-initialising FMOD if FMOD_INIT_ENABLE_PROFILE was set.
- PSP - Fixed hang during initialisation if System::getDriverCaps was called.

- Event API - Put events with no category in the master category when loading 
              from FEV
- Event API - Fix freeEventData incorrectly freeing sample banks that were
              loaded with preloadFSB
- Event API - Fixed Event::setPropertyByIndex(FMOD_EVENTPROPERTY_ONESHOT, 1)
              not working properly.

- Music player - Fixed crash when loaded project has no music data.

- FSBankEx - remove glitch from mp2 encoded fsb files.

* Channel::setMute will now make a voice go virtual if 
  FMOD_INIT_VOL0_BECOMES_VIRTUAL is used.
* .FEV file format updated! FMOD Designer 4.23.00 requires FMOD version 4.23.00,
  4.22.00, 4.20.07, 4.18.16, 4.16.26 or higher
* Updated startup example for Windows to handle no soundcard.

18/12/08 4.23.00 pre 6 - Development internal update.
-----------------------------------------------------

+ Unblocked DSPEcho::setParameter. (updating FMOD_DSP_ECHO_DELAY and 
  FMOD_DSP_ECHO_MAXCHANNELS will still block on PS3)

- Fixed some rare MIDI playback issues due to incorrect note volumes.

- Xbox360 - Fixed seeking hang when using an XMA compressed FSB that contains a
            mix of mono/stereo and multichannel sounds.
- Xbox360 - Fixed multichannel XMA files crashing on load.
- Wii - Fixed WiiMote staying mute when "muteremotespeakerifnosound" is set if
        the WiiMote speaker is turned off then on.
- Mac - Fixed memory leak when creating a sound.

- Event API - Fixed Occlusion effects on layers with no DSP effects wrongly
              overwriting occlusion values for the whole event
- Event API - Fixed crash when calling EventSystem::getMemoryInfo when linking
              with reduced libs
- Event API - Fixed event member functions sometimes returning
              FMOD_ERR_EVENT_INFOONLY or FMOD_ERR_INVALID_HANDLE unexpectedly
              after many calls to getEventXXX

* Channel::set3DOcclusion and get3DOcclusion now work on user occlusion values
  that scale geometry occlusion rather than working on geometry occlusion
  values directly. This means code that uses these functions to query or
  overwrite geometry occlusion values will no longer function as expected.

11/12/08 4.23.00 pre 5 - Development internal update.
-----------------------------------------------------

+ Win/Mac/Linux/Solaris - Added FMOD_INIT_NEURALTHX to enable use of Neural THX
                          downmixer from 7.1 if speakermode is set to 
                          FMOD_SPEAKERMODE_STEREO or FMOD_SPEAKERMODE_5POINT1\
+ Wii - Added FMOD_WII_CONTROLLER_AND_SPEAKERS define to fmodwii.h. Or this
        flag with FMOD_WII_CONTROLLER_* to play a sound out of the specified
        controller as well as the normal speakers.

- Fixed small pop at end of software mixed sounds in rare cases.
- Fixed FSB MP3 on low bitrates with some types of sound causing glitch.
- Removed stall in Sound::release if stream hadnt been played yet.

- iPhone - Fixed stereo sound corruption when resampling.
- PS3 - Fixed crash when virtual voice swapping streams or raw pcm voices.
- PS3 - Stop SPU from resetting the decrementer.
- Wii - Fixed rare case where a stream will not restart if it has previously
        been stopped.
- Xbox 360 - Fix rare crash if using mp3 on xbox 360 (alignment issue).

- Event API - Fixed reverb not being audible when a dsp effect is added to an 
              event and Event::setReverbProperties is called.
- Event API - Override master category volume and pitch in EventSystem::load if
              FMOD_EVENT_LOADINFO.override_category_vals is true
- Event API - Fixed category volume and pitch overriding from FEV to set
              internal channelgroup values properly

* XMA encoder updated from XDK, hopefully to address rare XMA encode based hangs.
* .FEV file format updated! FMOD Designer 4.21.05 requires FMOD version 4.21.05,
  4.20.05, 4.18.14, 4.16.24 or higher

28/11/08 4.23.00 pre 4 - Development internal update.
-----------------------------------------------------

+ Added System::getGeometryOcclusion

+ iPhone - Added ability to set audio session category via extradriverdata in
           System::init().

- iPhone - Implemented checks to prevent recording if there is no recording
           hardware available, i.e. 1st Gen iPod touch.
- iPhone - Fixed crackling issue with some sounds.
- iPhone - Fixed crash with some MIDI files.
- Linux/Solaris - Fixed STDIN being inadvertantly closed if pre init function,
                  System->setOutput() with FMOD_OUTPUTTYPE_OSS is explicitly
                  called.

- Event API - Fixed System::setPropertyByIndex with event fadein/out property
              not resetting to event default when finished with
- Event API - Fixed preloadFSB and unloadFSB not handling streams properly
- Event API - Fixed a crash if a nonblocking stream load fails
- Event API - Fixed a linker error with 'reduced' versions of the libraries

* iPhone - The default system samplerate has been reduced to 24KHz to improve
           performance. This can be overridden via System::setSoftwareFormat().

* Event API - Event::release now returns FMOD_ERR_EVENT_NEEDSSIMPLE if called
              on a complex event

20/11/08 4.23.00 pre 3 - Development internal update.
-----------------------------------------------------

+ PS3 - Added recording support, with support for recording from multiple mics.
+ iPhone - Ported FMODEx to the iPhone platform, includes support for both the
           device and the simulator.
+ Xbox360 - Updated output mode to use XAudio2 instead of XAudio1 due to XAudio1
            being deprecated soon.
+ Event API - Include geometry occlusion in "Just fail if quietest" audibility
              calculation.
+ Event API - Added FMOD_EVENTPROPERTY_EVENTTYPE. Find out if an event is
              simple or complex at runtime.
+ Event API - Added event property "Steal priority". Events with a lower "Steal
              priority" will never steal events with a higher "Steal priority".
              This is only relevant for simple events when the programmer
              specifies a >0 value for
              FMOD_EVENT_LOADINFO.sizeof_instancepool_simple.
+ Event API - Added Event::release(). Use this in conjunction with
              FMOD_EVENT_LOADINFO.sizeof_instancepool_simple.

- Fixed end of streams being cut off in some cases if FMOD_NONBLOCKING was used.
- Fixed FMOD_SOUNDGROUP_BEHAVIOR_MUTE not working if previous sounds were paused.
- Fixed Sound::setMusicChannelVolume/getMusicChannelVolume with MIDI files.
- Fixed crash/corrutpion in System::release.

- Event API - Fixed "Just fail if quietest" max playbacks behaviour to use the
              same audibility calculation for all events. This solves some bad
              interactions with geometry, sounddef volume and event fadein that
              could cause oscillations.
- Event API - Fixed "Steal quietest" max playbacks behaviour to use the same
              audibility calculation as "Just fail if quietest". This solves an
              issue with event fadein where the wrong event could be stolen.
- Event API - Sounddef's with the same name, but in different folder are now
              handled correctly.
- Event API - Fixed reverb not being audible when a dsp effect is added to an 
              event.

- PS3 - Fixed Channel::setLoopCount sometimes being ignored.
- PS3 - Fixed Channel::setPosition sometimes being ignored.
- Wii - Fixed crash when initialising with FMOD_SPEAKERMODE_MONO.

* Removed System::setRecordDriver and System::getRecordDriver functions.
* Extra argument "id" added to System::getRecordPosition/recordStart/recordStop/
  isRecording functions.
* Symlinks removed from Linux/Linux64/Solaris install makefile, you should
  link directly with the desired version to prevent runtime linker problems
  when new APIs are installed.
* Event API - Events with "programmer" sounds won't be made into "simple" events
* Event API - Event callbacks involving sounddef's now return the full path name
              as seen in designer tool. This fix is required to handle sounddef's
              in different folders with the same name.
* Event API - .FEV file format updated! FMOD Designer 4.22.00 pre 3 requires FMOD
              version 4.22.00 pre 3, 4.21.03 or higher to use all supported
              features.

14/11/08 4.23.00 pre 2 - Development internal update.
-----------------------------------------------------

+ Event API - Added user properties to programmer report.

- Fixed possible 24 byte overwrite in the data segment.
- MOD/S3M/XM/IT Fixed first few samples missing from sounds.  Bug introduced 
  4.21.00 pre 5
- Fix rare System::close/release crash.  Bug Introduced 4.21.00 pre 5.
- Fix rare possible corruption/crash when using reverb.
- Fix support for ogg netstreams.
- Fixed FMOD_ERR_UNSUPPORTED being returned when trying to initialise
  reduced builds.
- fix 3dpan level effect morphing to default speakermap rather than specified 
  speakermap (ie allmono/allstereo)

- Mac - Fixed crash when releasing the system object on OSX 10.4.
- Linux/Linux64 - Fixed device enumeration list looking different between
                  two different system objects. (ALSA output mode).
- PS3 - Fixed reverse playback not working properly when the sample is loaded
        from an mp3 encoded .fsb file.

- Event API - Fixed loading FEV files from memory being passed to file user 
              callbacks.
- Event API - Clamp invalid doppler factors to [0, 5] range when loading FEVs
- Event API - Fixed FMOD_EVENT_WAVEBANKINFO.streammemory and 
              FMOD_EVENT_WAVEBANKINFO.samplememory
- Event API - Fixed possible crash when EventGroup::freeEventData called for
              an event which is not in the specified group

- FSBankEx - Fixed sample rate reduction below 10% not having any effect


07/11/08 4.23.00 pre 1 - Development internal update.
-----------------------------------------------------

+ PS3 - Added support for FIOS.
+ PS3 - Added "fios_scheduler" member to FMOD_PS3_EXTRADRIVERDATA.
+ Event API - Added simple event instance pools.
              Use FMOD_EVENT_LOADINFO.sizeof_instancepool_simple to specify the
              number of instances to create in a pool that all simple events
              will use. Saves memory over the old "Max playbacks" method.

- Event API - Fix spawn timer not working on simple events.
- Event API - Fix FMOD_ERR_REVERB_INSTANCE being returned sometimes.

- PSP - Fixed error when loading a .mp3 file.

* Linux / Linux64 / Solaris - Changed the way library versions are represented
                              in the filename. 

* PS3 - Now built with SDK 250.001

30/10/08 4.21.00 - Initial Development branch release.
------------------------------------------------------

+ PS2 - Added rudimentary support for hardware accelerated XM playback.
+ PS3 - Added FMOD_PS3_SPURSMODE_TWOTASKS to set 2 SPURS Tasks / SPU Threads
        to be used instead of just 1 (ie same as previous behaviour).
+ PS3 - Re-added 'spu_thread_priority_streamer' member to FMOD_PS3_EXTRADRIVERDATA
	to specify spu thread priority of stream decoder.

- Fix ParamEQ filter thread safety issue which could theoretically cause 
  unxepected results from the filter.
- Fix setInputChannelMix from ignoring reverb path.

- PS3 - Fixed SPURS Task not being swappable when created with context.

- Event API - Fixed EventGroup error state not propagating to parent groups
- Event API - Events only report FMOD_EVENT_STATE_READY if they aren't playing
- Event API - Fixed reverb settings being ignored when event instance was reused.
              Bug introduced 4.21.00 pre 8.

27/10/08 4.21.00 pre 9 - Development internal update
----------------------------------------------------

- Fix reverb settings being ignored.  Bug introduced in 4.21.00 pre 8.
- Fixed oscillator producing incorrect tone when switching to triangle tone.

23/10/08 4.21.00 pre 8 - Development internal update
----------------------------------------------------

+ Wii - SIMD optimised software mixer. resulting in ~15% performance improvement.
+ PS3 - Added 'spursmode' member to FMOD_PS3_EXTRADRIVERDATA. This can be set
        to the appropriate FMOD_PS3_SPURSMODE enum to allocate the SPURS task
        with context memory.

- Fixed an occasional crash in System::update when nonblocking loads are in
  progress and FMOD_INIT_ENABLE_PROFILE is on

- Mac / Linux / Solaris - Fixed thread memory not be released when a thread exits.
- Fixed mono waveforms in MPEG streaming FSBs not being copied to all speakers

- Event API - Fixed bad reverb behaviour with wet/dry mix cutting in/out 
              depending on the type of event it was playing on.
- Event API - Fixed FEV loads overwriting master category volume and pitch
- Event API - Fixed events not reporting FMOD_EVENT_STATE_LOADING when loading
              data from non-streaming banks with FMOD_EVENT_NONBLOCKING
- Event API - Set simple events' oneshot property to match their sound's loop
              mode at load time

* FMOD_REVERB_CHANNELFLAGS_INSTANCE0-3 flags can now be combined to set 
  properties for all instances at once if required.
* Event API - Event::setReverbProperties Room/Direct now scales the event 
  property setting from fmod designer rather than overwriting it.

16/10/08 4.21.00 pre 7 - Development internal update
----------------------------------------------------

+ Added getMemoryInfo function to all public classes, both low-level and event
  system. Use this function to get detailed information on the memory usage of
  any FMOD object.
+ Added new public interface file fmod_memoryinfo.h
+ Added FMOD_CHANNEL_CALLBACKTYPE_OCCLUSION.  When fmod calculates an occlusion 
  value based on geometry, this callback will be triggered to that the user has
  a chance to modify it.
+ PS3 - Add backwards playback support for PCM data.
+ Event API - Added FMOD_EVENTPROPERTY_TYPE enum
+ Event API - Added "type" parameter to Event::getPropertyInfo
+ Event API - Added FMOD_EVENT_CALLBACKTYPE_OCCLUSION.  This wraps the channel 
  version of the callback for events. 
+ Event API - Added FMOD_EVENTPROPERTY_TYPE enum
+ Event API - Added "type" parameter to Event::getPropertyInfo

- Fixed noise when playing certain .xm files on big endian platforms.

- PS2 - fix hang when opening sound after ejecting dvd, or getOpenState staying 
        'loading' until the disk was reinserted.

- Event API - Fixed incorrect ranges on info-only event parameters
- Event API - Fixed division by zero when calling setValue on parameters with
              maximum range equal to minimum range
- Event API - Fixed Event::setPropertyByIndex(FMOD_EVENTPROPERTY_REVERBWETLEVEL)
              only affecting reverb instance 0 (now it affects all instances)

* FMOD_CHANNEL_CALLBACK parameters changed from unsigned int to void * to allow 
  better 64bit compatibility.
* Channel::setCallback changed to remove 'command' parameter and per callback 
  type callback capability.  This isn't needed and will save memory.
* Event API - FMOD_EVENT_INFO.memoryused is now deprecated. Use
              Event::getMemoryInfo instead
* Event API - FMOD_EVENT_SYSTEMINFO.eventmemory, instancememory, dspmemory are
              now deprecated. Use getMemoryInfo functions instead.

9/10/08 4.21.00 pre 6 - Development internal update
---------------------------------------------------

+ Event API - Added FMOD_EVENT_USERDSP flag to tell FMOD that you plan to add
              your own DSP units to an event at runtime.

- Fixed floating point divide by zero error when loading certain midi files.
- Fixed broken embedded loop points in sounds with more than one subsound

- PS3 - Fixed possible memory leak when too many dsp units are allocated.


2/10/08 4.21.00 pre 5 - Development internal update
---------------------------------------------------

+ PS3 - FMOD now only uses 1 SPURS Task / SPU Thread for both mixing and mpeg
        stream decoding.
+ PS3 - 512k memory saving when using SPURS mode due to context memory no longer
        being needed.
+ Mixer optimizations.  
  - Removed dsp node management logic, ps3 now has no code to do with mixer 
    executed on PPU.
  - Memory optimizations.  Significant memory reductions.

+ Event API - Large memory optimization.  Event instances now shed over 500 bytes
  per instance, saving possibly hundreds of kilobytes in a normal game project.

+ Wii - Enable streaming sounds to be played through the WiiMote speaker.
+ Win - Vista (WASAPI) now supports output as mono or stereo when control panel
        is set with a higher number of channels, i.e. quad, 5 point 1, etc.

+ Profiler - Added support for graphing channel and codec usage.

- Fixed rare hang when playing midi/mod/s3m/xm/it files with frequent DSP network
  manipulation.
- Fixed potential sound corruption with midi/mod/s3m/xm/it files under certain DSP
  network arrangements.
- Fix small memory leak in System::release if user channelgroups not released 
  manually.

- PS2 / Wii / PSP - Fix Channel::setSpeakerMix causing audible glitch on stereo
  and above sounds, when volume was supposed to be 0.  
- Fixed distortion/buzzing coming from FMOD_DSP_ITLOWPASS's last two channels
  when it is processing in 8 channel mode. (ie side left/side right when in
  FMOD_SPEAKERMODE_7POINT1).
- Fixed FMOD_DEBUG_LEVEL_WARNING and FMOD_DEBUG_LEVEL_ERROR messages not being
  logged in logging versions of libs by default.

- Event API - PS2 / Wii / PSP - Fix loadEventData / getEvent sometimes returning 
  FMOD_ERR_MISMATCH.
- Event API - Fixed a crash on some platforms when loading FEVs with music data
- Event API - Fixed a crash caused by incorrect soundbank reference counting in
              loadEventData/freeEventData on events that use multiple soundbanks
- Event API - Fixed loadEventData failing to load soundbanks that were
              previously loaded with preloadFSB, then unloaded with unloadFSB
- Event API - Fixed Event::setPropertyByIndex(FMOD_EVENTPROPERTY_3D_MAXDISTANCE)
              not working correctly for "this_instance" = true
- Event API - Fixed Event::setPropertyByIndex(FMOD_EVENTPROPERTY_3D_MAXDISTANCE)
              setting bad distance parameter ranges in custom rolloff events
- Event API - Fixed Event::setPropertyByIndex(FMOD_EVENTPROPERTY_3D_MAXDISTANCE)
              not updating distance parameter effects
- Event API - Fixed Event::setPropertyByIndex(FMOD_EVENTPROPERTY_3D_MAXDISTANCE)
              wrongly changing distance parameters on non custom rolloff events

- FSBankEx - Fix crackling when exporting 6 channel files.

* PS3 - Removed 'spu_priority_streamer' and 'spu_priority_at3' members from 
        FMOD_PS3_EXTRADRIVERDATA struct.
* PS3 - 'spu_priority_mixer' renamed to 'spu_thread_priority' in
        FMOD_PS3_EXTRADRIVERDATA struct.

22/09/08 4.21.00 pre 4 - Development internal update
----------------------------------------------------

- Fixed hang when releasing an FSB stream which contains sync points.
- Fixed distortion/buzzing coming from FMOD_DSP_LOWPASS_SIMPLE's last two channels
  when it is processing in 8 channel mode. (ie side left/side right when in
  FMOD_SPEAKERMODE_7POINT1).
- Fixed virtual channels not resetting their reverb properties when stoped, this can
  cause a crash under certain circumstances.

- Win - WASAPI - Fixed crash when output has more than 2 channels at certain
                 sample rates.
- Mac - fixed getDSPBufferSize, it now reports the correct value (which is
        determined by the CoreAudio output mode).
- PS3/Xbox360/Mac/Linux - Fixed garbled sound when calling Channel::setSpeakerLevels
                          introduced in last release.
- PS3/Xbox360/Mac/Linux - Fixed memory overwrite crash when using multichannel 3d
                          sounds introduced in last release.
- PSP - Fixed Channel::setVolume having no effect after Channel::setPan is called
        on a channel that has had is volume set to 0. This also caused volume issues
        with channelgroups.
- PS2 - fix mistake in ps2 semaphore overflow fix from 4.19.00

- Event API - Fix automatic "(distance)" parameter not working when more than 
  one event was playing.
- Event API - Clarified Event::getPropertyInfo documentation

* Event API - Events with no sounds now return 0 for FMOD_EVENT_INFO.lengthms

11/09/08 4.21.00 pre 3 - Development internal update
----------------------------------------------------

+ Add FMOD_DELAYTYPE_DSPCLOCK_PAUSE to allow clock accurate pausing of voices.
+ Event API - Added "Shuffle Global" play mode for sound definitions
+ Win - WASAPI - Improved performance when control panel sample rate
                 is set to a high value, e.g. 192KHz.
+ Event API - Added Event::getPropteryInfo.
+ Memory savings.  With 1024 channels, PS3/360 save about 200kb, other platforms
  about 80kb.

- Sound::deleteSyncPoint will now work from the syncpoint callback and not 
  crash.
- Fix FMOD_Resampler_Linear crash, related to last FMOD_Resampler_Linear 
  crash fix, this actually was introduced then, and is caused by 
  Channel::setPosition followed immediately by Channel::stop then another 
  playsound with a smaller sound.
- Fix hang when fatal disk errors occur (ie disk eject) with streamed sentences.
- Fix Channel::getPosition innacuracy with streams and pcm samples.  Bug introduced
  4.19.00 pre 9

- Wii - Fix rare problem with Channel::isPlaying causing incorrect voices to
        play when using FMOD_INIT_VOL0_BECOMES_VIRTUAL.
- PS2 - Fix start of streams being cut off when looping.

- Event API - Fix music system ignoring FMOD_EVENT_INIT_DONTUSENAMES if other
              init flags are specified
- Event API - Fix crash on some platforms when loading fev with interactive 
              music in them.

* .FEV file format updated! FMOD Designer 4.19.03 requires FMOD version 4.19.03,
  4.18.03, 4.16.14 or higher
* User created parent sounds that end up being sentences now respect 
  FMOD_CREATESOUNDEXINFO::length, so that the length wont keep updating every 
  time Sound::setSubSound is called.  If exinfo.length is 0, it will behave 
  as it used to. (length changes when setSubSound is called)
* Event API - FMOD_EVENT_CALLBACKTYPE_STOLEN is now *always* called whether or
              not the stolen event was playing. Previously, it used to be called
              *only* when the stolen event was playing.

4/09/08 4.21.00 pre 2 - Development internal update
----------------------------------------------------

+ PS3 - Added 'libaudio_latency' member to FMOD_PS3_EXTRADRIVERDATA to control
        mixing latency.

- Stop Sound::deleteSyncPoint from allowing deletion of syncpoints from 
  sounds that did not own the syncpoint.
- Fix hang when When seeking a nonblocking stream, stopping it, then calling 
  release on it very quickly.

- Event API - fix rare crash when loading non blocking sound banks.
- Event API - EventSystem::preloadFSB/unloadFSB causing a crash in 
              loadEventData/getEvent if 1 event pointed to 2 sound banks.
- Event API - fix crash when calling 
              Event::setPropertyByIndex(FMOD_EVENTPROPERTY_FADEIN/OUT)
- Event API - stop reverb taking up excessive amounts of cpu time.

- Wii - Fixed extremely rare bug introduced in last release where a stream will
        start and then stop straight away.

* PS3 - System::setDSPBufferSize not supported on PS3 anymore. Use
        'libaudio_latency' member in FMOD_PS3_EXTRADRIVERDATA to control
        latency.

29/08/08 4.21.00 pre 1 - Development internal update
----------------------------------------------------

+ PS3 - Added support for IT/XM/MOD/S3M/MIDI formats.

+ FSBank - Added Mac support for MP2 and MP3 compression.

- Fix Sound::getOpenState from falsely reporting ready when in fact the stream
  was still accessing the file, which would then in turn cause a block/stall in 
  Sound::release.
- Fix crash when playing a .it file which utilises echo and lowpass effects.
- Fix rare timing-related crash in stream thread when releasing a stream
- Fix small delay in audio when calling Channel::setPosition on a non blocking 
  stream.
- Delphi interface removed.
- Fix switching 2D/3D mode not working on Wii hardware channels when using
  Channel::setMode.
 
- Event API - fix crash related to EventSystem::preloadFSB/unloadFSB.
- Event API - Fix some music system crashes that should return FMOD_ERR_MEMORY
- Event API - Fix crash when playing an empty sound definition
- Event API - Fix possible FMOD_ERR_INTERNAL when playing music themes with
              empty segments

- PS3 - Fixed RSX memory being added to stats returned by FMOD::Memory_GetStats
        when allocated using FMOD_MEMORY_SECONDARY memory callbacks.

25/08/08 4.19.00 - Development branch release
---------------------------------------------

+ Event API - Added FMOD_MUSIC_CALLBACKTYPE_BEAT
+ Event API - Add preLoadFSB/unLoadFSB.
  This replaces registerMemoryFSB/unregisterMemoryFSB.  Instead of passing 
  just a memory block, you now pass an FMOD::Sound pointer.  This still allows 
  you to use preloaded memory blocks, you just have to first create a sound 
  with FMOD_OPENMEMORY_POINT.  New functionality - preload FSBs from disk, 
  and preload FSBs into secondary ram such as SPU2 memory on Playstation 2.
+ Add priority parameter to System::createCodec and System::loadPlugin

+ PS2 - Significant speed improvement streaming vag FSB files.
+ PS2 - Enable FMOD_SOUND_FORMAT_VAG support for user created sounds.

- Fix rare stream hang when stopping and starting same stream.
- Reverb - fix crash when freeing events or channelgroups that had reverb
           pointing to it.
- Fix Sound::getMusicNumChannels returning incorrect count for MIDI.
- Fix Sound::getOpenState not returning FMOD_OPENSTATE_SEEKING after calling 
      Channel::setPosition on a non blocking stream.

- PS2 - Re-Fix 'semaphore count overflow' hang.
- PS3 - RSX delay now happens when using RSX allocation callbacks or
        FMOD_OPENMEMORY_POINT to RSX memory, not just when an RSX pool is
        passed in through extradriverdata.
- PS2 - Fix small memory leak on System::release.
- Wii - Fix silence or corrupt sound in software pitch shift effect when 
        FMOD_DSP_PITCHSHIFT_FFTSIZE is set to a value greater than 1024.

- Event API - Remove registerMemoryFSB/unregisterMemoryFSB.
- Event API - Fix crash in EventParameter::setValue.
- Event api - fix Event::setPaused not pausing time parameters.
- Event API - Fix Event::getNumProperties giving bad value for simple events
- Event API - Fix FMOD_EVENT_ERROR_ON_DISKACCESS not failing properly when
              loading samples with FMOD_EVENT_NONBLOCKING
- Event API - Fix events not loading with FMOD_EVENT_NONBLOCKING
              after an FMOD_ERR_FILE_UNWANTED is encountered
- Event API - Fix music system blocking when releasing streams

* Change Plugin API to use handles instead of indicies and priority has been added.
    The following functions have had parameter changes or name changes.
        System::loadPlugin          (now takes handle not index, also has priority parameter)
        System::unloadPlugin        (now takes handle not index)
        System::getPluginHandle     (new, use old index to get new handle)
        System::getPluginInfo       (now takes handle not index, returns plugin type)
        System::setOutputByPlugin   (now takes handle not index)
        System::getOutputByPlugin   (now takes handle not index)
        System::createDSPByPlugin   (used to be System::createDSPByIndex)
        System::createCodec         (now has extra 'priority' parameter)

12/08/08 4.19.00 pre 10 - Development internal update
-----------------------------------------------------

+ Add support for FMOD_SPEAKERMAPTYPE_51_PROTOOLS (L C R Ls Rs LFE mapping)
+ Add ability to specify lowpass filter gain per channel.
+ PS3 - System::getSoundRAM now works if RSX is allocated using
        FMOD_MEMORY_SECONDARY memory callbacks.

- PS3 - Fixed possible rare hang/stall when playing sounds loaded into RSX.
- PS3 - Fixed non-blocking streams having a bit of noise at the start of them when
        a stream is started, stopped, and then another stream is played that re-uses
        the same channel.
- PS2 - Fix/change disk eject code to only do endless retry on disk eject error 
        code rather than any file read error code.  Stops possible hang in game for
        wrong reason.
- PS2 - Fix possible alignment error messages in debug output.
- Xbox 360 - Fix echo filter possibly crashing when calling DSP::setParameter.

- Event API - Fix EventSystem::unregisterMemoryFSB from leaving references in 
              the event system, meaning it could crash if you tried to play one 
              of these events and you had freed the memory for the FSB.

* PS3 - FMOD_MEMORY_TYPE_SECONDARY memory callbacks do not happen if an RSX pool
        is specified in extradriverdata. ie RSX pool now overrides
        FMOD_MEMORY_TYPE_SECONDARY rather than the other way around.

6/08/08 4.19.00 pre 9 - Development internal update
----------------------------------------------------

- Event API - Fix combination of distance parameter, and sound definitions 
  playing inside a complex event causing small bursts of sound where the 
  new sound definitions didnt have their volume updated on time.


6/08/08 4.19.00 pre 9 - Development internal update
----------------------------------------------------

- Further/final fix for FMOD_Resampler_Linear rare crash, this time when 
  combined with Channel::setPosition (or virtual voices) last noted in 
  FMOD Ex 4.17.00 pre 5.

- Win - Changed default output mode detection method for better compatibility.
- PS2 - Fix disk eject handling.  Sound::getOpenState now works properly.
- PS2 - Fix 'semaphore count overflow' hang, issue was in SIFMD lib and had to 
        be worked around.
- PS2/PSP - Fix Channel::setReverbProperties Room parameter not working as 
        documented.
- PS3 - Fixed problem introduced in 4.19.00 pre 7 where sound could still crackle
        and a channel with reverb was still audible even though it was paused.

29/07/08 4.19.00 pre 8 - Development internal update
----------------------------------------------------

+ Profiler - Added support for per DSP CPU usage.

!- Fix various alignment issue bugs that could have caused static or 
   random crashes.
- Fix geometry not immediately occluding sounds when they play.

- PS3 - Fixed reverb setParameter sometimes not having any effect.
- PS3 - Fixed setDelay with DSPCLOCK_END not being accurate, and sometimes 
        being ignored altogether
- PSP - Fixed 3D sound not attenuating.

- FSBankEx - Stop command line mode stealing focus from other applications.


25/07/08 4.19.00 pre 7 - Development internal update
----------------------------------------------------

+ Event API - Added 'type' to FMOD_EVENT_WAVEBANKINFO to determine if it is load 
  into memory, stream, decompress into memory.

- Fix user FMOD_2D sound mode being ignored in favour of mode stored in the FSB.
- Fix support for multichannel FSB files causing static / crash if 
  System::setSoftwareChannels wasn't called with a high enough input channel 
  count.
- Fixed small performance issue when seeking within MPEG encoded FSB file.
  Should avoid dma thrashing on ps3.
- Fixed stall when calling System/Channel::getSpectrum.

- Xbox 360 - Fixed seek tables getting corrupted when opening the same FSB more
  than once.  This could lead to seek times being very high, incorrect and 'buzzing' 
  noises due to the mixer being stalled.
- PS3 - Fixed rare case where volume will double up for a while when a sound
        is played and others go virtual.
- PS3 - Fixed paused sounds taking up excessive DSP time.
- PS3 - Fixed Channel::setDelay() with FMOD_DELAYTYPE_DSPCLOCK_END not working.
- PS3 - Added small stalls around RSX DMA transfers to fix the issue of audio
        crackling and dropouts in PS3 SDK 240.
- PS3 - Fixed buzzing sound when stopping a single channel introduced in previous
        release.

- Event API - Stop one shot sounds wrongly retriggering automatically when 
              finished.

18/07/08 4.19.00 pre 6 - Development internal update
----------------------------------------------------

+ Event API - Added the MusicSystem::getInfo function (currently only starving
              state is reported)
+ Event API - Added the EventProject::stopAllEvents function
+ Event API - Enabled memory usage reporting via EventSystem::getInfo and
              Event::getInfo in logging/debug builds only.
 
- Fix FSB encryption showing key in encrypted file.
- Fix mp2 files with emphasis/error correction bit turned on returning 
  FMOD_ERR_FORMAT, issue introduced in 4.19.00 pre 2.

- Event API - Fixed freeEventData sometimes always returning FMOD_ERR_NOTREADY

- PS3 - Fixed stream stutter when a non-blocking stream is started in some
        circumstances.
- Wii - Fixed FMOD_File_SetDiskBusy(1) never returning while the disk is
        ejected when a stream is playing.

11/07/08 4.19.00 pre 5 - Development internal update
----------------------------------------------------

- Fixed crash when releasing a ChannelGroup that had a DSP unit attached to it.
- Fixed sounds with tag data ending early when loaded from memory.
- Fixed possible rare hang when playing mpeg data.

- Event API - Fixed FMOD_ERR_FILE_BAD when loading events with disabled effects
- Event API - Fixed various problems with simple events
- Event API - Fixed registerMemoryFSB to work with streamed wavebanks

- Linux - Fixed init error due to ALSA device enumeration and made ALSA device
          arguments more robust.
- Linux64 - Added missing fmodlinux.h file to release.
- PS3 - Fixed rare buzzing sound when there are a lot of virtual voices
        swapping in and out in.

* PS3 - Now built with SDK 240.001

4/07/08 4.19.00 pre 4 - Development internal update
----------------------------------------------------

+ PS3 - Added new member 'rsx_pool_manager_in_mram' in FMOD_PS3_EXTRADRIVERDATA
        to allow the overhead for the FMOD RSX pool memory manager to be in
        MRAM.
+ Linux - Added the ability to specify arguments to ALSA record drivers via
          a new extradriverdata struture for Linux, FMOD_LINUX_EXTRADRIVERDATA.
+ Optimized syncpoint memory usage. Faster load times when loading banks with
  lots of syncpoints.
+ Event API - Added MusicSystem loadSoundData and freeSoundData functions
+ Update FMOD memory system. Using a memory pool is now much faster and less
  prone to fragmentation.

+ FSBankEx - added -z option to make message logging dissapear.

- Fix multichannel MP2/MP3 FSB (ie 4 channels and above) from swapping channels 
  around when calling Channel::setPosition
- Fixed certain output modes (OSS, ALSA, ESD and SoundManager) reporting no
  drivers if devices are enumerated before System::init().
- Fixed floating point exception in 3D calculations on some platforms.
- Fixed potential crash on system release when using channel end callbacks to
  play sounds.
- Fixed channels not starting paused when played from a channel end callback.

- Event API - Fixed spurious FMOD_ERR_CHANNEL_STOLEN return from some functions
- Event API - Made the music system respect soundbank type
- Event API - Fixed crash when using FMOD_EVENT_INFOONLY events
- Event API - Improved ordering of FSB search paths

- Linux - fixed potential segmentation fault when calling System::close() 
          when using the ESD output mode.
- Linux - tweaked the enumeration of devices for ALSA, it should now properly
          show standard devices for all detected sound cards.
- PS3 - Fixed slow allocation times when using a fixed memory pool passed in
        through FMOD::Memory_Initialize. This was causing long load times on
	certain .fev files and banks.
- PS3 - Fixed rare bug where Channel::setMode will have no effect.
- Mac - Altered CoreAudio output mode to allow multichannel remapping when
        set with the "Audio MIDI Setup" tool.
- PS3 - Fixed possible SPU exception when too many FMOD DSP connections are
        created.
- Wii - Fixed software reverb not working properly.

- FSBankEx - fixed command line version not returning 1 to the shell when 
  there was an error.

* Linux - the extradriverdata parameter for ALSA output mode has changed to a
          structure pointer (FMOD_LINUX_EXTRADRIVERDATA). Use this structure
          to supply arguments for output and record drivers. You must include
          the new fmodlinux.h header for this new structure.
* FSBankEx - Changed XMA encoder to use newer XMA2 encoder for mono/stereo sounds
  to hopefully avoid bad data the older encoder version was producing rarely.

24/06/08 4.19.00 pre 3 - Development internal update
----------------------------------------------------

- Fix Geometry::release not resetting occlusion values if it was the last 
  object to be released.
- Fix heavy stall in Channel::setPosition or FMOD_EVENTPROPERTY_TIMEOFFSET 
  introduced in 4.19.00 pre 2 due to change in mp2/mp3 chirp/crash fix.

- Windows - fix crash on init if ASIO output was selected.  
  Introduced in 4.19.00 pre 1.

20/06/08 4.19.00 pre 2 - Development internal update
----------------------------------------------------

+ PSP - Added FMOD_PSP_ChangeOutputMode function to fmodpsp.h to allow switching
        of output mode from Simple Audio to libWave and vice versa on the fly.

- Fixed a memory corruption when loading an FSB with named syncpoints.
- MP2/Mp3 - Fixed extremely rare crash or 'chirp' based on combination of 
  source data, and seeking, which made the mpeg decoder think a frame was
  mp2 when it was actually mp3, purely by chance on a random section of bits.
- Fixed Channel::setSpeakerMix with FMOD_SPEAKERMODE_PROLOGIC, not positioning 
  stereo sounds loaded in the rear speakers properly.
- Fixed loop points point ignored in FSB streams.

- Event API - Fixed freeEventData sometimes always returning FMOD_ERR_NOTREADY
- Event API - Fixed streams sometimes not playing in simple events
- Event API - Fixed various issues with simple events

- FSBankEx - fix FSBANK_BUILD_DONTLOOPMEG buildflag not being allowed to be 
  specified as a per waveform option.

- Win - WASAPI - Changed the way the Vista output mode interacts with the
                 hardware to reduce stuttering.
- Xbox360 - Fix file read error seeking in old multichannel XMA files.
- PS3 - Fix audio stuttering when number of dsp buffers is set to a non-default
        value that doesn't divide into 8.

12/06/08 4.19.00 pre 1 - Development internal update
----------------------------------------------------

+ Add 'ConnectionPoint' Parameter to FMOD_REVERB_CHANNELPROPERTIES structure.
  By default the dsp network connection for a channel and its reverb is between 
  the 'SFX Reverb' unit, and the channel's wavetable/resampler/dspcodec/oscillator 
  unit (the unit below the channel DSP head).   This parameter allows the user to 
  connect the SFX reverb to somewhere else internally, for example the channel DSP 
  head, or a related channelgroup.   Advanced users only.

- Fixed rare stall in System::playSound command.
- Fix 2d sounds getting muffled by HRTF sometimes.
- Fixed midi/mod/s3m/xm/it file playback crash introduced in previous release.
- System::init() will now report FMOD_ERR_INITIALIZED if you try to initialize it
  a second time. This holds true if the event system initializes the low level
  system object for you, then you try to initialize it.

! FSBankEx - Fixed bad FSB files being written out, introduced in previous release.
- FSBankEx - Fixed MP2 looping sometimes not working
- FSBankEx - Fixed command line version not parsing encrypt key if platform was
             ps2/wii/gc/xbox360.


- Event API - Fixed concurrent themes stopping prematurely
- Event API - Fixed MusicSystem::setPaused sometimes stopping segment playback

5/06/08 4.17.00 - Development branch release
--------------------------------------------

+ Event API - Added optimised codepath for "simple" events.
+ Added FMOD_INIT_SOFTWARE_REVERB_ON_FX flag so reverbs will connect to the
  channel DSP head instead of the sound source, so reverb will apply after
  all other connected effects.
+ Wii - Improve loading time of sound banks by 200% (may need to rebuild fsbs).

- Fix calling setMute on master channelgroup not muting newly played channels.
- Removed a stall on a nonblocking stream when setting a subsound sentence.

- FSBankEx - Fix -s (disable seektables), add -t (dont interleave), make gui 
  remember quality setting.
- FSBankEx - PCM data is now written out as big-endian format if platform selected
	   is PS3. The allows FMOD_OPENMEMORY_POINT to be used properly.

* .FEV file format updated! FMOD Designer 4.17.00 requires FMOD version 4.17.00
  or higher in order to fully support all features
* Older branches will load "simple" events but 4.17.00 or higher is required to
  realize their full resource saving benefits.

30/05/08 4.17.00 pre 7 - Development internal update
----------------------------------------------------

+ Add FMOD_SYSTEM_CALLBACKTYPE_BADDSPCONNECTION.  This now triggers if 
  System::setCallback is used and the user has created a circular DSP connection.
  This error check is now moved from DSP::addInput into the thread, to avoid a 
  stall in the main thread.
+ Added "FMOD Event System - Best Practices For Programmers" document
+ Event API - Added member to FMOD_EVENT_LOADINFO to override category properties
+ PS2 - Add ability to call FMOD_File_SetDiskBusy from IOP.  User IOP modules must 
        link with fmodiop.ilb

- Fix unnecessary file seek when mpeg decoder encounters a tag at the end of an mpeg.
- Fix crash when looping certain mp3s created with FMOD_CREATECOMPRESSEDSAMPLE.
- Fixed stall in DSP::addInput by moving circular connection error check into mixer 
  thread.  See new FMOD_SYSTEM_CALLBACKTYPE_BADDSPCONNECTION callback.

- PS2 - Fix FMOD_INIT_PS2_SWAPDMACHANNELS from making software mixed output silent.

- Event API - Fixed oneshot sounds not unpausing, therefore sounding like they 
              never start.
- Event API - Fixed problem with event property "3D Position Randomization"

- FSBankEx - Fix seamless looping encoder for stereo/multichannel/low samplerate 
             mp3 encoded FSB files

* Changed System::setCallback to remove type parameter.  This isnt needed, just 
  switch on all types of callback from the callback itself, and filter out ones
  you don't care about.

* PS3 - Now built with SDK 230.001

22/05/08 4.17.00 pre 6 - Development internal update
----------------------------------------------------

+ FMOD_NONBLOCKING now applies to Channel::setPosition, and virtual voice 
  swapping of streams, so that there is no main thread stall slowing the game 
  down.

- Fixed memory leaks when loading it/mod/s3m/xm files.
- Fixed error returned when trying to perform DSP additions on a hardware 
  channel, now it reports FMOD_ERR_NEEDSSOFTWARE.
- Fixed crash with FMOD Echo DSP caused by setting echo parameters as the unit
  is being connected to a channel.
- Fixed Channel::setDelay starting sounds earlier than it should.
- Fixed FMOD_DELAYTYPE_DSPCLOCK_END time not being reset when a sound finishes
  playing.
- Fixed rare click heard when playing one sound then starting a second.
- Fixed reverb wet mix being heard when starting a sound as paused, with reverb
  enabled.

- FSBankEx - Stop cache files being generated if compression caching flag is 
  not enabled.
- FSBankEx - Stop mp3 encoder chopping end of sound off if disable loop encoding 
  was specified.

- PS3 - Fixed further noise when connecting an effect to a DSP unit as an extra
        output introduced in last release.
- Wii - Fixed unaligned address crash when loading FSB.

16/05/08 4.17.00 pre 5 - Development internal update
----------------------------------------------------

+ Optimized loading speed of FSB/WAV/MP2/MP3 files with markers/syncpoints.
  An example file with a thousand markers is now 400ms to load rather than
  12 seconds.

+ PS3 - PS3 can now play up to 16 channel streams.
+ Wii - Added support for hardware Biquad filter.

- Fixed incorrect sound cone direction when using FMOD_INIT_3D_RIGHTHANDED.
- Fixed extremely rare crash in mixer that is usually observed in the 
  callstack in FMOD_Resampler_Linear.
- Fixed hang in mp2/mp3 decoder introduced in previous version thanks to new 
  multichannel support. 

- Win - Fixed memory leak when loading WMA files.
- Win - Fixed geometry attributes not updating when both listener and channel
        are stationary.
- Wii - Now returns and FMOD_ERR_FORMAT instead of crashing when loading
        invalid format with FMOD_OPENRAW.
- PS3 - Fix opencallback from attachFileSystem not being called on PS3 only.
- PS3 - Fixed noise when connecting an effect to a DSP unit as an extra output.

- Event API - Fixed crash when autopitch enabled but no parameters created
- Event API - Fixed incorrect sound definition spawn behaviour when
              "Maximum spawned sounds" has been reached

2/05/08 4.17.00 pre 4 - Development internal update
----------------------------------------------------

+ Added FMOD_MEMORY_SECONDARY FMOD_MEMORY_TYPE flag to indicate that memory
  should be allocated in secondary memory of the system (for example RSX on the
  PS3).
+ Added new argument, 'memtypeflags' to FMOD::Memory_Initialize function to
  specify which FMOD_MEMORY_TYPE flags will come through the memory callbacks.

+ FSBank - Added -e [encryptionkey] to commandline.
+ FSBank - Added joint stereo encoding to multichannel mp2/mp3 files.  
           Multichannel sounds now 40% to 50% smaller!
+ FSBank - Added loop declicking support to IMA ADPCM encoding.

- Fixed stream going mute if user set loop points that were behind the current 
  stream playposition.
- Fixed crash when attempting to play a parent stream when no subsound sentence
  has been specified.
- Fixed potential crash when using setSubSoundSentence to change the sentence of
  a playing sound stream.
- Fixed potential exception when calling release on multiple subsounds removed 
  from one FSB.
- Fix streams not heeding soundgroup volumes.

- Xbox 360 - Fixed hang when calling Sound::setSubSoundSentence on certain sized
             XMA subsounds.
- Win - Fixed WMA stream seeking to near the end of the file causing a hang.
- Win - Fixed memory leak when loading WMA files.

- Event API - PSP - Fixed parameters with velocity not working properly.

- FSBank - Fixed ps2 reverb cores not being remembered on close.
- FSBank - Fixed C headers being generated even though c headers was turned off.

* FMOD_MEMORY_PERSISTENT will no longer come through the memory callbacks unless
  it is explicitly specified in 'memtypeflags' of FMOD::Memory_Initialize.
  FMOD_MEMORY_XBOX360_PHYSICAL will continue to come through regardless of setting.
* PS3 - RSX memory pool specified in FMOD_PS3_EXTRADRIVERDATA will be ignored if
        FMOD_MEMORY_SECONDARY is specified in 'memtypeflags' of
        FMOD::Memory_Initialize.

24/04/08 4.17.00 pre 3 - Development internal update
----------------------------------------------------

+ Xbox 360 / PS3 - Improved performance of DSP Echo when used with DSP::setSpeakerActive.
+ FSBank Added new 'low memory' mode for syncpoints with no names.

- Prevent crash when attempting to detach a shared subsound from its parent 
  stream, now an appropriate error is returned.
- Fixed a rare freeze in playback of MIDI files.
- Removed limit from sending large DSP networks to fmod_profiler.
- Fixed parent sound playback with no sentence returning FMOD_ERR_INVALID_PARAM
  instead of FMOD_ERR_SUBSOUNDS.
- Fix FMOD_SOUNDGROUP_BEHAVIOR_MUTE and fading not working with hardware voices.
- Fixed tags so 16bit Unicode strings will have a proper 2 byte null terminator.

- Wii - Fixed crash when shutting down.
- PS3 - Fixed crash when using DSP Echo.

* FSbank - Update FSBankLib documentation.
* If using single subsound FSB streams you can now detach the subsound them from the
  parent stream and add it to a user created sound stream for sentencing.

18/04/08 4.17.00 pre 2 - Development internal update
---------------------------------------------

+ Added DSP::set/getSpeakerActive. Allows the user to turn off processing for a
  DSP effect on a channel by channel basis to reduce CPU overhead.
+ Reduced memory used by DSP Flange.

- Fixed HRTF not fading properly when pitching up-side-down.
- Fixed uninitialized channelgroup DSP members causing crash on calling some
  DSP functions.
- Fixed sample sentence crashing when mixing samples and streams or when trying
  to use a sentence of samples with FMOD_HARDWARE.
- Fixed mod/s3m/xm/it/midi crash introduced in last version.
- Fixed FMOD_SOUNDGROUP_BEHAVIOR_MUTE behavior.
- Fixed FMOD_SOUNDGROUP_BEHAVIOR_STEALLOWEST not invalidating/reference counting
  the old channel handle.

- PS3 - Fixed extremely rare bug where a channelgroup will go silent.

- Profiler - made screen capture feature more obvious and fixed a problem where
             the produced image was at the current zoom level, it should save
             at the default zoom level for readability.

- Event API - Fixed leaking streams
- Event API - Minor improvement to stream pool utilisation

11/04/08 4.17.00 pre 1 - Development internal update
---------------------------------------------

+ Optimized playsound to not recalculate 3d position multiple times.

+ PS3 - Remove stall when setting sfx reverb parameters.

- Fixed crash when releasing system object after a profiler initialization error.
- Fixed setInputChannelMix not taking effect until the next System::update with 
  3d sounds.  (2d worked ok).

- Wii - Fixed instance 0 system reverb properties being overwritten when setting
        instance 1 properties.
- Linux - Tweaked ALSA output mode to better support requested DSP buffer
          sizes.

- Event API - Fixed network tweaking crash between Windows and Mac.
- Event API - Fixed oneshot events with sounds with loop counts not stopping
- Event API - Fixed 3D Pan effect to be relative to the Event 3D Pan level

* PS3 - Now built with SDK 220.002

4/04/08 4.15.00 - Development release update
---------------------------------------------

+ Added 'debugLogFilename' to FMOD_ADVANCEDSETTINGS to allow user to specify 
  log path / name.
+ Added 'FMOD Profiler' application to Win32 and Mac to replace existing DSPNet
  Listener tool. The new tool provides existing functionality along with a real
  time CPU usage graph.
+ Add Sound::getMusicNumChannels, Sound::setMusicChannelVolume, 
  Sound::getMusicChannelVolume, to allow mod/s3m/xm/it/midi volume manipulation
  of music channels.
+ Add multichannel support for FSB MP2 encoding.
+ Added a system callback for when a thread is created, this callback will
  report the name and the ID of the thread.
+ Added ability to specify which port FMOD listens on for connections from
  FMOD Profiler. This is exposed through FMOD_ADVANCEDSETTINGS.
+ Added support for FMOD Profiler to connect to applications on Mac, Linux,
  Linux64 and Solaris.
+ Added FMOD_DELAYTYPE_DSPCLOCK_END to Channel::setDelay/getDelay
+ PS3 - Enabled DTS support.
+ Optimize DSP disconnection code, huge speed improvement.
+ PS3 - Added FMOD_INIT_PS3_PREFERDTS init flag to prefer DTS over Dolby Digital
        if both are supported.
+ PS3 - Added FMOD_INIT_PS3_FORCE2CHLPCM init flag to force output to stereo LPCM.
+ PS3 - Enable System::setDSPBufferSize for numbuffers only.
+ PS3 - SPU performance improvements due to new GCC Toolchain.
+ Reduce memory usage of DSP Echo filter.
+ Xbox 360 / PS3 - Speed optimized DSP Echo filter.
+ PS3 - Enable AIFF support.

+ Event API - Improved memory usage
+ Event API - Added "RoughSequence" event to example project
+ Event API - Added support for sound instance "Autopitch parameter" property

- Reduce System::update / EventSystem::update overhead.
- Fixed FMOD_OPENSTATE_STREAMING not being set for FSB subsounds.
- Fix FMOD_REVERB_CHANNELPROPERTIES with a non existent reverb instance 
  causing crash.  Now returns FMOD_ERR_REVERB_INSTANCE.
- Fixed stack overflow when playing 8ch mpeg FSB files.
- Fixed config screen not updating on certain VST plugins.
- Fix System::setReverbProperties sometimes returning an error.
- Fix mp3 decoder seeking back to 0 if the seek or loop position was less
  than an mpeg frame size.
- Fixed 64-bit pointer corruption
- Fixed Unicode check on http/https urls being passed to System::createSound/Stream
- Fixed crash when using plugins version of FMODEx with certain output modes.
- Fixed certain codec plugins crashing on load.
- Fixed hardware virtual voices not becoming real again.
- Fixed occasional crash when playing multichannel mp3 fsbs.
- Fixed threading issue with SoundGroups
- Fixed memory corruption in DSPChorus when the number of input channels is
  greater than the number of channels being output by the system.
- Fixed voices gradually going virtual over time.
- Fixed unimportant virtual voices not ending at the right time and then 
  starting later when they should in fact have stopped long before that time.
- Fixed DSPConnection::getLevels from causing a bad memory write.
- Fixed accuracy of Channel::getPosition with stream playback.
- Fixed crackling when using System::playDSP and reverb.
- Fix calling addDSP twice in a row with the same object/parameter causing
  infinite loop.
- Fix Channel::getAudibility not taking SoundGroup mute volume into account.
- Fix crash in second System::init call if first System::init call returned
  FMOD_ERR_OUTPUT_CREATEBUFFER.
- Fixed SoundGroup with FMOD_SOUNDGROUP_BEHAVIOR_MUTE behaviour, and 
  FMOD_INIT_VOL0_BECOMES_VIRTUAL used, not going virtual immediately, but only
  after moving the 3d source or listener.
- Fixed MIDI notes sometimes getting suck on (sustain forever).
- Fixed crash when using FMOD_INIT_ENABLE_PROFILE with large DSP networks.
- Fixed System::setAmbientReverbProperties not enabling reverb before a 
  createReverb call.

- Win32 - Fixed memory error being returned when enumerating a system with
          more input devices than output devices.
- Mac - fixed useplugins example Makefile to correctly link with plugins dylib.
- Mac - Fixed issues with applications using event loops.
- Mac - Fixed init failure on certain recording devices such as the 
        iSight camera.
- PS2 - Fixed garbled noise when mixing mono and stereo sounds in an FSB vag stream.
- PS3 - Fixed problems with distortion effect for high values of FMOD_DSP_DISTORTION_LEVEL.
- PS3 - Fixed very rare pops when playing sounds.
- PS3 - Fixed crash when inserting a DSP effect in a certain DSP tree configuration.
- PS3 - Fixed occasional popping coming from mixer with a busy DSP tree.
- PS3 - FIxed distortion when rapidly updating DSP SFX Reverb parameters.
- PS3 - fix chirp noise when sound ends.
- PS3 - Fixed occasional crackling in DSP Echo filter.
- GC/Wii - Fixed file access alignment issue if user file callbacks were used.
- PS3 - Fixed echo not working on 8 channels.

- FSBankEx - Fixed caching sometimes not working
- FSBankEx - fix .fsbcache directory from not working on unix style environments 
             by changing '\' to '/'.
- FSBankEx - Fixed FSBs built from cache being slightly different to original
- FSBankEx - Fixed crash when using MP2/MP3 compression with small files

- Event API - incorrect mute behaviour with getEvent and category mute fixed.
- Event API - stopped releasing an event from a stop callback of the 
              same event causing a recursive loop and crashing.
- Event API - Fix memory corruption from logging system when releasing
              an event (fmodexL only).
- Event API - Fixed MusicPrompt::begin to support theme start segments with
              cue conditions
- Event API - Fixed EventProject::release to reset the music system before
              freeing music data (prevents crashes)
- Event API - If the transition timer is running and the main theme ends,
              start the target theme immediately (don't wait for the timer)
- Event API - Fixed event "Steal quietest" max playbacks behaviour sometimes
              erroneously falling back to "Steal oldest"
- Event API - Fixed endian issues in music data loading which broke music
              playback on big-endian platforms
- Event API - Fixed MusicSystem::setPaused logic to handle beat syncing
              correctly
- Event API - Fixed music system applying tempo changes too early
- Event API - Fixed memory leaks in music system
- Event API - Fixed memory error due to sound definitions with no entries
- Event API - Fixed music system crashing after restarting the event system
- Event API - Fixed typos in FMOD_EVENT_PROPERTY speaker enumeration docs
- Event API - Fixed music system handling of empty segments
- Event API - Fixed network tweaking of category volume/pitch
- Event API - Fixed rare silent sounds when primary parameter moved very quickly
- Event API - Fixed network auditioning with FMOD_EVENT_INIT_DONTUSENAMES
- Event API - Fixed 64-bit EventSystem::load failing with FMOD_ERR_MEMORY

* FMOD_INIT_ENABLE_DSPNET has been replaced with FMOD_INIT_ENABLE_PROFILE for
  use with the new profiler tool.
* When using FMOD_CREATESOUNDEXINFO, specifying a suggestedsoundtype of
  FMOD_SOUND_TYPE_MPEG will now load any tag data which will also
  allow loading of MPEG files with more than 4k of tags at the file start.
* Event API - "Sequential" sound definitions are now continuous across 
              freeEventData calls
* .FEV file format updated! FMOD Designer 4.13.05 requires FMOD version 4.13.05,
  4.12.05 or higher.
* .FEV file format updated! FMOD Designer 4.13.06 requires FMOD version 4.13.06,
  4.12.06 or higher.
* On Mac when using the device list changed callback, the user must process the
  application event queue to allow FMOD to detect device list changes.
* System::setCallback now uses void* for commanddata1 and commanddata2
  parameters instead of unsigned int for 64bit compatibility.
* FMOD_DELAYTYPE_DSPCLOCK_PCM has been renamed to FMOD_DELAYTYPE_DSPCLOCK_START
  to complement FMOD_DELAYTYPE_DSPCLOCK_END.
* PS3 - Now built with GCC Toolchain 4.1.1.
* PS3 - Name SPURS taskset to "FMOD".

01/02/08 4.13.00 - Development release update
---------------------------------------------

+ Added support for static samples to Sound::setSubSoundSentence.
+ Optimized DSP engine graph connection code.
+ Added "defaultDecodeBufferSize" for streams to FMOD_ADVANCEDSETTINGS.
+ Added new FMOD_MEMORY_TYPE, FMOD_MEMORY_PERSISTENT to indicate persistent
  memory allocations which are freed when System::release() is called.
+ Added System::getDSPClock
+ Added a new system callback for memory allocation failures.
+ Added DSPConnection class.  New functions are
        DSPConnection::getInput
        DSPConnection::getOutput
        DSPConnection::setMix
        DSPConnection::getMix
        DSPConnection::setLevels
        DSPConnection::getLevels
+ Added parameters to Channel::setDelay/getDelay and added
        FMOD_DELAYTYPE_END_MS
        FMOD_DELAYTYPE_DSPCLOCK_PCM
  as the delay types.  Sounds can now be started on a global DSP timeline
  with sample accurate precision!  Great for interactive music.
+ Added System::getDSPClock, can use this value with the above 
  Channel::setDelay command.
+ Added support for multiple software based reverbs.
  EventSystem::setReverbProperties, System::setReverbProperties, 
  can be used to specify the 'Instance' of reverb you want to use.
  Channel::setReverbProperties can also be used to change wet/dry mix for
  a channel for different reverb instances.
+ Added FMOD_OPENSTATE_STREAMING to replace FMOD_OPENSTATE_READY while
  the streamer has a lock on a sound.  This way you can test for 
  FMOD_OPENSTATE_READY to make sure it is safe to release a sound without 
  it blocking the main thread.

+ PS3 - Added support for custom DSP units.
+ Win64 - Added support for WASAPI and OpenAL output modes.
+ Xbox 360 - Sped up mp2/mp3 decoding by about 1.5-1.6x.
+ PS3 - Enabled getSpectrum support.
+ PS3 - Added support for FMOD_DSP_OSCILLATOR.

+ Event API - All channels used by the event system now have their userdata
              field set to the event instance handle that spawned them.
+ Event API - Sound::setUserData can now be used with "programmer" sounds

- Fixed Channel::stop rare crash if using System::playDSP (oscillators etc).
- Fixed setting the volume of a channel to 0 then back to something non 0 while 
  it was being played 'paused', causing start of sound to be chopped off, but
  only when using FMOD_INIT_VOL0_BECOMES_VIRTUAL
- Fixed Channel::getPosition on a stream getting confused to whether it was 
  looping or not if Sound::setMode was called after System::playSound.
- Fixed 3d reverb not updating environment when a Reverb3D::release was called.
- Fixed FSB subsound streams not ending when being played.
- Fixed a memory leak in MIDI codec.
- Fixed crash when using DSound output mode with FMOD_CREATECOMPRESSEDSAMPLE
  and FMOD_NONBLOCKING without specifing either FMOD_HARDWARE or FMOD_SOFTWARE.
- Fixed MIDI playback timing calculation so it doesn't drift when a file has
  tempo changes.
- Stop user being able to release a sound that was already in the middle of 
  being released from a channel callback (Sound::release calls channel callback)
- Fixed FMOD_REVERB_CHANNELPROPERTIES::Room being ignored if 
  System::setReverbProperties was called -after- Channel::setReverbProperties.
- Fixed a memory leak when recording.
- Fixed uninstaller leaving files behind.
- Fixed various issues with example programs.
- Removed memory fragmentation every time a stream was opened and removed 
  call to realloc.
- Fixed syncpoints in streamed FSBs calling no matter what subsound was playing,
  as well as Sound::getNumSyncPoints/getSyncPoint returning incorrect values.
- Fixed sounds with 1 syncpoint, or a syncpoint on position 0 only triggering 
  once, or a looping sound with a syncpoint right at the end not triggering.
- Removed the following functions in favour of the DSPConnection class.
  DSPConnection handles are faster as they don't rely on indicies which need
  to serialize and block the main thread against the mixer thread to be correct.
        DSP::setInputMix    
        DSP::getInputMix    
        DSP::setInputLevels 
        DSP::getInputLevels 
        DSP::setOutputMix   
        DSP::getOutputMix   
        DSP::setOutputLevels
        DSP::getOutputLevels
- Fix behaviour when ChannelGroup::addDSP is used and virtual voices.
- Fix software voices leaking in rare timing cases causing sound to drop out.
- Reduced memory overhead for memory blocks in the memory manager.

- Linux - Fixed stuttering in ALSA recording.
- Linux64 - Fixed example makefile errors.
- Win32 - (Vista) Potentially reduced stuttering.
- Win32 - (OpenAL) Disabled EAX-RAM feature for Creative XFI cards to improve
          streaming performance.
- Mac - Fixed crash when enumerating available devices quickly after a device 
        removal, via the device list changed callback. 
- Mac - Fixed potential problems with GUIDs from devices using unicode.
- PS2 - Fix hang thanks to recursive criticalsections not being implemented.
- PS3 - Fixed noise being played when an orphan dsp node is connected to FMOD
        SoundCard Unit.
- PS3 - fixed buzzing if a channel that has been split and re-combined in the 
        dsp tree is paused.
- PS3 - Fixed rare case where sounds on dsp the network that have more that 1
        output, where the extra output is fed into a mixer unit, are not being
        mixed in that mixer unit.
- PS3 - Optimized DSP tree traversal speed to allow more voices to be played
        when reverb is enabled.
- PS3 - Fixed possible rare SPU crash.
- PS3 - Fixed distortion/sound corruption when dsp effects are added to certain
        dsp tree combinations.
- Wii - Fixed problems with loading short, non-interleaved multichannel fsb
        samples.

- Event API - Fixed envelope cache flags colliding with Channel Mix effect
              flags (this could cause Channel Mix effects to work incorrectly).
- Event API - Removed spurious use of new operator.
- Event API - Resolved inconsistencies surrounding EventSystem::setMediaPath.
              NOTE: Media path now requires a trailing slash/backslash as
                    appropriate!
- Event API - Improved FMOD_EVENT_INFO.positionms accuracy when events are 
              paused and unpaused
- Event API - Fixed envelope cache flags being incorrectly read from FEV files
- Event API - Fixed channel mix effect not working on streamed sounds
- Event API - Made EventSystem::init initialise the random number generator.
              This fixes broken sound definition shuffling.
- Event API - Various programmer report fixes.
- Event API - Fixed events unexpectedly starting paused.
- Event API - Fixed FMOD_ERR_EVENT_MISMATCH error on Wii.
- Fixed incorrect path issue when using -b with fmod_designercl.
- PS3 - Fixed all sounds dropping out for a small moment when a virtual voice
        is swapped in.
- Fixed rare crash when playing it/mod/s3m/xm files.

* When using FMOD_NONBLOCKING, if neither FMOD_HARDWARE nor FMOD_SOFTWARE is
  specified, then FMOD will default to FMOD_HARDWARE which may cause an error
  if hardware is not available.
* Changed FMOD_DSP_SFXREVERB_DRYLEVEL to have default level of 0db instead of 
  -10,000, to match what the docs were saying. (caused some confusion of stuff 
  going silent if it was added with the default values).
* Changed virtual voice behaviour.  Now the first time a sound plays, if it 
  immediately steals a voice, the start of the sound will never be cut off, 
  it will just delay the start of playback until the other voice has stopped.
  FMOD_VIRTUAL_PLAYFROMSTART only affects sounds that swap in later because
  their audibility/priority changed at a later date in relation to other voices.
* Changed System::addDSP, Channel::addDSP, ChannelGroup::addDSP, DSP::addInput,
  DSP::getInput, DSP::getOutput to now also return a DSPConnection handle. 
  Optional, can be 0.
* Changed EventSystem::getReverbProperties, System::getReverbProperties, 
  Channel::getReverbProperties to require the instance you are talking about to
  be set!  Otherwise you will get incorrect values or FMOD_ERR_REVERB_INSTANCE.
* Renamed FMOD_REVERB_CHANNELFLAGS_ENVIRONMENT0
          FMOD_REVERB_CHANNELFLAGS_ENVIRONMENT1
          FMOD_REVERB_CHANNELFLAGS_ENVIRONMENT2
          FMOD_REVERB_CHANNELFLAGS_ENVIRONMENT3
  to
          FMOD_REVERB_CHANNELFLAGS_INSTANCE0
          FMOD_REVERB_CHANNELFLAGS_INSTANCE1
          FMOD_REVERB_CHANNELFLAGS_INSTANCE2
          FMOD_REVERB_CHANNELFLAGS_INSTANCE3
  to make it align better with FMOD_REVERB_PROPERTIES::Instance member.

* FSBankEx - Change optimize samplerate from 'Further reduce rate by' to 
  'Percentage of optimized rate' so 10 would now become 90 for example.
* FSBankEx - Change samplerate optimization to allow scaling up to 1000%
  instead of 100% (in case it scales too low for some wavs).

!* PS3 - SPU elfs are now embedded into the FMOD library. You no longer need to
         load the elfs yourself. Use fmodex.a for SPU Threads and fmodex_SPURS.a
         for SPURS.
!* PS3 - spu_mixer_elfname_or_spursdata, spu_streamer_elfname_or_spursdata, 
         spu_load_from_memory, force5point1 and attenuateDDLFE members removed
         from FMOD_PS3_EXTRADRIVERDATA.

* Event API - EventSystem::setMediaPath has been changed to expect a path that
              contains a trailing slash/backslash as appropriate. Failure to 
              include this trailing seperator char will result in numerous
              FMOD_ERR_FILE_NOTFOUND errors!
* PS3 - Now built with SDK 210.001

6/11/07 4.11.00 - Development release update
---------------------------------------------

+ Added ability to change output driver at runtime.
+ Event API - Added a "Pitch randomization units" Event property in Designer.
              If this property is set to a unit other than Octaves, the pitch
              variation is snapped to exact multiples of that unit.
+ Event API - Added FMOD_EVENT_INIT_SEARCH_PLUGINS init flag.
+ Event API - Added ability to load .fev files from memory.
+ Event API - Added a "units" parameter to Event::setPitch/getPitch and
              EventCategory::setPitch/getPitch, allowing the pitch to be set
              and retrieved in the desired units
+ Event API - Added FMOD_EVENTPROPERTY_PITCH_OCTAVES/SEMITONES/TONES and
              FMOD_EVENTPROPERTY_PITCHRANDOMIZATION_OCTAVES etc, allowing pitch
              properties to be set and retrieved in the desired units
+ Event API - Added a "Spawn intensity randomization" Event property. The event
              spawn intensity is randomized based on this value when
              Event::start is called. Access via Event::setPropertyByIndex
              with FMOD_EVENTPROPERTY_SPAWNINTENSITY_RANDOMIZATION
 
              
+ Added System::getDriverInfo and System::getRecordDriverInfo functions to
  replace System::getDriverName and System::getRecordDriverName. They provide
  the same functionality but now optionally provide GUIDs to uniquely identify
  a driver. GUIDs are available from DSound, WASAPI and CoreAudio output modes.
+ fsbankex - Added ability to build multichannel Wii/GC/PSP/PS2 hardware banks
             as non-interleaved so that they can be used with FMOD_MEMORY_POINT.
+ Added support for loading multichannel hardware banks built as non-interleaved
  on supported platforms.
+ PS3 / Xbox 360 - Optimized SFX reverb.
+ Added version and build date to API docs

- Fix System::setDriver not allowing a switch to a driver with the same index.
- Fix System::setDriver in driver-list-changed callback causing infinte loop if
  desired driver is unsupported.
- Fix Channel::setPosition with stream sentences that are not CD or FSB (ie 
  user created sounds with user added subsounds.
- Fix Channel::setSpeakerMix settings being overriden when virtual voices were 
  swapping, which caused audible panning glitches.
- Fix 4, 6 or 8 channel WAV/FSB not downmixing to stereo as it should be if a 
  lower speakermode was selected (ie stereo).
- Fix high priority sounds not being audible when played amongst a load of 
  lower priority voices.
- Fix Sound::getSubSound not seeking to the right sound if the sound was a stream.
- Fix loop points on Sound::setSubSoundSentence.
- Fix crash if Channel::stop was called from SyncPoint callback.
- Fix Sound::getLength on FSB or CDDA sentences.
- Fix 8ch+ sounds with DSP filters added causing corruption or NaN values being 
  fed into the mixer.  Specifically when using compressor, highpass, lowpass, 
  lowpass simple, itlowpass or parameq.
- Fix FMOD_ERR_INVALID_PARAM return code if values > 8 were passed to 
  Channel::set/getSpeakerLevels.
- Fix FMOD filesystem and netstream support due to issue introduced in 
  4.08.08.
- Fixed bug introduced in 4.09.07 to do with stream crackling and bad behaviour
  when seeking.
- Fixed software stereo sounds coming out as mono when FMOD_SPEAKERMODE_PROLOGIC
  is used.
- Fixed rare case of streams giving bad data which could cause crash on XMA 
  hardware or corrupted sound?
- Fixed crash when loading MIDI files.
- Stopped Sound::lock returning a large length if the length passed in was 
  larger than the sound.  Now returns error.
- Fixed problem with FMOD Highpass effect
- Linux - Fixed crash due to incorrectly freeing memory.
- Linux - Fixed freeze when recording with ALSA.
- PS2 - Fixed FMOD_ERR_INVALID_PARAM being returned from System::createSound
  and other file loading Event based functions.
- Mac - Removed last bits of MP library to improve performance.
- Mac - Added missing fmod_event_net.dylib to release.
- Mac - Modified device list changed callback to trigger when the default input
        or output device has changed.
- PS3 - Fixed dsp effects having no affect if added directly to a System object,
  or to a master channel group derived from System::getMasterChannelGroup.
- PS3 - Fixed crash when loading .wav files.
- Win32 - WASAPI, fixed overriding FMOD_SPEAKERMODE_RAW when doing System::init.
- Xbox 360. Fixed seeking with XMAs with no seek table hanging machine if seek 
  position was near end of sound.
- Wii - Fixed not being able to re-play a stream after disk has been ejected
  and re-inserted.
- FSBankEx - Fixed FSB GUID always being regenerated when using encryption.
- FSBankEx - upgrade allowed input channel count for wave files from 8 to 16.
- Event API - Fix 'programmer sounds' using the parent FSB as the sound pointer
              (instead of a subsound), crashing on a null pointer.  This is
              typically if a sentence was attempted to be used as a programmer
              sound.
- Event API - Fixed automatic parameters (3d distance, listener angle, event
              angle) to be read-only.
- Event API - Fixed memory leak when using oneshot sounds.
- Event API - Fixed issue with stolen / leaking channels.
- Event API - Fixed FMOD_EVENT_ERROR_ON_DISKACCESS not working properly with
              EventSystem::registerMemoryFSB.
- PS3 - Fixed dry mix not being heard when using system reverb.


* System::setDriver will no longer restore the original driver if the desired
  driver is not supported. User must call System::setDriver with the index of
  the original driver.
* System::getDriverName and System::getRecordDriverName have been replaced with
  System::getDriverInfo and System::getRecordDriverInfo as they now also provide
  unique device GUIDs.
* PS3 - Now built with Sony SDK200.002
* Event API - Changed FMOD_EVENT_INFO struct numplayingstances/playinginstances
              to numinstances/instances. Now all instances are returned, not 
              just instances that are playing.
* Event API - Event envelope value calculations are now cached for efficiency
* .FEV file format updated! FMOD Designer 4.11.00 requires FMOD version 4.11.00,
  4.10.00, 4.08.10 or higher.
* FSBank now writes out FSB files with GUID so that multiple load instances of
  the same FSB can be cached at runtime to save memory.
* PS3 - DSP effects code is now streamed onto the SPU as it is needed. 

1/11/07 4.09.07 - Development release update
---------------------------------------------

+ Added FMOD_INIT_ENABLE_DSPNET and DSPNet Listener.exe application!  Now
  you can visually view what is happening inside FMOD Ex's DSP network while
  your application runs, over TCP/IP.
+ Added ChannelGroup::set3DOcclusion and ChannelGroup::get3DOcclusion. Final
  Channel occlusion values are scaled by ChannelGroup values as for setVolume,
  and so will be affected by both ChannelGroup occlusion and geometry (if any).
+ Added System::getRecordDriverCaps to WASAPI output mode.
+ Event API - Added the ability to prevent an event from being stolen by
              returning FMOD_ERR_EVENT_FAILED from the
              FMOD_EVENT_CALLBACKTYPE_STOLEN callback.
+ Event API - Added FMOD_EVENT_INFO.numplayinginstances and
              FMOD_EVENT_INFO.playinginstances. Use these to get a list of
              playing instances for a specific event. NOTE: You must initialise
              these members before calling Event::getInfo!
+ Event API - Added maxdistance scaling for events with custom rolloff. See
              Event::setPropertyByIndex and FMOD_EVENTPROPERTY_3D_MAXDISTANCE

- Fixed logic with SoundGroups if System::setSoundGroup was called after a 
  sound was played.
- Fixed a bunch of broken links and outdated names in the API documentation.
- Fixed FMOD_DSP_LOWPASS_SIMPLE swapping lfe and rear left speaker around.
- Replaced recording resampler to add support for upsampling.
- Fixed doppler calculation to give more correct results when the channel is
  moving away from the listener
- Win32 Dsound - Fixed limited number of streams being able to be created using 
  FMOD_HARDWARE | FMOD_3D.
- Win32 - Fixed memory leak in OpenAL output mode.
- Mac - added workaround for Digidesign drivers.
- Mac - improved recording with Bluetooth devices.
- PS2 - Fix multichannel FSB streams with more than 8 channels in them causing
  streamer to crash.
- PS2/WII/PSP/GC/Xbox1 - Fix Channel::setInputChannelMix not working on 
  multichannel streams using FMOD_HARDWARE.
- Event API - Fix FMOD_EVENT_INFO::positionms drifting over time.
- Event API - FMOD_EVENT_INFO::positionms now takes note of Event::setPitch.
- Event API - Fixed wavebank file close callback being needlessly deferred.
- Event API - Improved memory fragmentation/wastage.

* Memory System - Changed mimumum malloc block size to 16 bytes instead of 64 
                  bytes to lower rounding overhead on smaller mallocs.
* ChannelGroup::addDSP - Changed behaviour of DSP connections so that dsp 
  effects are below the channelgroup DSP head, instead of above it.  If you 
  are doing manual DSP connections please take note of this.  See new graph
  in documentation.
* Event API - Changed Event::set3DOcclusion to use ChannelGroup::set3DOcclusion
              rather than Channel::set3DOcclusion. This now interacts with 
              geometry occlusion as described above.
* Event API - Input members have been added to FMOD_EVENT_INFO! You must
              initialise these members before calling Event::getInfo!

18/10/07 4.09.06 - Development release update
---------------------------------------------

+ Added System::setCallback, currently there is one available callback, to
  be notified when the number of attached audio devices changes. (Windows
  and Mac only for now).
+ Added the ability to query the number and names of input and output drivers
  at runtime, with accurate results. (Windows and Mac only for now).
+ Added System::getRecordDriverCaps which provides similar information to
  System::getDriverCaps but for input devices. (CoreAudio only for now).
+ Optimized FMOD_DSP_LOWPASS_SIMPLE and FMOD_DSP_ITLOWPASS effects.

- Fixed Xbox 360 music TRC for nested channelgroups
- Fixed FMOD_DSP_ITLOWPASS from making a pop noise followed by silence 
  in the whole mixer.
- Fixed FMOD_DSP_TYPE_HIGHPASS from popping when large cutoff frequency 
  changes were made, and also filter instability with high cutoff frequencies.

* PS3 - Now built with Sony SDK192.001
* Mac - Improved performance by adding POSIX style semaphores. 
* FMOD_DSP_HIGHPASS_CUTOFF has had minimum cutoff changed from 10hz to 1hz.

12/10/07 4.09.05 - Development release update
---------------------------------------------

+ Enabled MIDI playback from DLS files without articulation information.
+ Added FMOD_TIMEUNIT_SENTENCE_SUBSOUND support to Channel::SetPosition.
+ Event API - Added FMOD_EVENT_INIT_UPPERCASE_FILENAMES init flag
+ Event API - Added parameter property "Keyoff on silence". Use this with oneshot
              events to make a parameter keyoff when previously it would have 
              ended. Put a sustain point in each sound and give your parameter a
              very large velocity and you can effectively sequence oneshot sounds
              together. Great for random dialog!

- Fixed MIDI playback chirping when using a DLS file that has shared wave sample
  chunks.
- Fixed incorrect number of channels tag for format 1 MIDI files.
- Fixed Channel::getSpeakerLevels returning incorrect values.

- Sound::setSubSoundSentence 
	- Fix subsound 0 always being played instead of first entry in sentence.
	- Fix parent sound playback playing sentence incorrectly (subsounds were 
	  cutting  off early, seeking was incorrect)

- Fixed error when oneshot event finished before loading
- PS3 - Fixed certain combinations of dsp units causing volume to double up 
	sometimes.
- Event API - Fixed excessive memory usage bug
- Event API - Fixed event refcnt problem
- Event API - Fixed Event::getState() not returning FMOD_EVENT_STATE_LOADING when
              stream seeking is in progress
- Event API - Fixed leaking stream instances under very slow loading conditions
- FSBank - Fixed error when building MP2/MP3 with waveform quality < 10

* Updated cdplayer example.
* Added float checks to DSP::setParameter calls (for logging version).
* Mac - Improved performance by implementing pthreads.

05/10/07 4.09.04 - Development release update
---------------------------------------------

+ Added "initialseekposition" and "initialseekpostype" to FMOD_CREATESOUNDEXINFO,
  these can be used to flush a stream to a specific position when it is created.

- Win32 - WASAPI / OpenAL - Fixed rare crash when closing FMOD.
- Fixed incorrect MIDI playback in moments of silence.
- Fixed MIDI file ending early when more than one tempo change was used.
- Wii - Fix crash when shutting down FMOD if software mixer is enabled.
- Fixed setparam threading issues in IIR filters
- Event API - Optimized EventGroup::loadEventData so it doesn't flood async queue
- Event API - Fixed crash when using "text" user properties

01/10/07 4.09.03 - Development release update
---------------------------------------------

* Win32 - Changed FMOD_CAPS_HARDWARE_EMULATED to report only if user sets the 
  hardware acceleration slider in XP to 'off' instead of just if the sound 
  device doesn't support hardware mixing.  That can be checked with 
  System::getHardwareChannels.

29/09/07 4.09.02 - Development release update
----------------------------------------------

+ Added "recommended startup sequence" for Windows apps.  Added to 3d example,
  geometry example, and Windows platform specific issues tutorial in fmodex.chm.
+ Event API - Added FMOD_EVENT_CALLBACKTYPE_SOUNDDEF_SELECTINDEX callback. Use
              this to programatically choose sound definition entries at runtime.

- Fixed FMOD_SPEAKERMODE_SURROUND not being configured as 5.0, and 
  initialization failure if this mode was selected?
- Fix FMOD_PRESET_OFF not clearing out reverb buffers meaning you were able to 
  hear some left over reverb from the old setting when it was switched back on.
- Fix memory leak if errors occured in random places during System::createSound
  such as memory allocation failure or disk ejection.
- Win32 - WASAPI - Fixed time sensitive crash when stopping a record. 
- Event API - Fixed EventGroup::loadEventData always returning
              FMOD_ERR_FILE_DISKEJECTED for a non-blocking load if it is called
              again after the error. You can now call EventGroup::loadEventData
              after the disk error has recovered to resume loading.
- Event API - Fixed setting user properties when using "this_instance" = true
- Fixed rare memory corruption issue when not using pre-alloced memory pool.
- Event API - Fixed Event::getState only setting FMOD_EVENT_STATE_STARVING flag
              if stream is looping.
- Fixed c# wrapper compile error.
- Wii - Fixed crash when loading a sound as FMOD_HARDWARE and FMOD_NONBLOCKING.

* PS3 - 7.1 to 2ch downmixing is now done using Sony's downmixer, not FMOD's.
        This means that "2ch LPCM, Downmix from 7.1 LPCM" should be checked
        rather than just "2ch LPCM" in PS3 Master Disc Specifications Form.
        (Please refer to FMOD docs for more information).

21/09/07 4.09.01 - Development release update
-----------------------------------------------

+ Slight speed up in fmod's default lowpass filter when it is set to 22khz 
  cutoff.

- Fix hang in Sound::release if FMOD_INIT_STREAM_FROM_UPDATE was used.
- Fix crash when loading MOD files.
- Fix geometry system not updating occlusion properly if there was no delay
  between calls to System::update.
- Wii - Fix sounds being played out of both the WiiMote and main speakers if a
        channel that was previously set to play out of the WiiMote is re-used
        to play a sound out of the main speakers.
- Linux - Fix ALSA playback sometimes playing no sound, but with the sound
          position moving very fast.
- Xbox360 - Fixed crash when loading an XMA format .fsb file compiled with
            "small sample headers".

* Event API - FMOD_EVENT_INFO.positionms now takes into account
              FMOD_EVENTPROPERTY_TIMEOFFSET
* Event API - EventGroup::loadEventData now only loads waveforms referenced by
              events in the EventGroup, not the whole .fsb

17/09/07 4.08.00 - Official stable branch release
-------------------------------------------------

+ Added FMOD_VIRTUAL_PLAYFROMSTART.  Instead of a virtual voice swapping from 
  virtual to real and playing at the correct offset according to time, this flag 
  makes the sound play from the start.
+ Event API - Added a "Spawn Intensity" property to events; this is a
              multiplier for the spawn frequency of all sounds in the event

- Fixed Memory_GetStats, it was reporting incorrect maximum usage values.
- Removed FMOD_DONTRESTOREVIRTUAL.  If a user wants a sound to not come back 
  from being virtual, they can call Channel::isVirtual and Channel::stop.
- Recording - Fixed wasapi/mac clicking issues with recording.
- Win32 - OpenAL - fixed potential stuttering issues with Windows Vista.
- Win32 - OpenAL - fixed random crash when playing sounds.
- Win32 - OpenAL - fixed incorrect capabilities being reported by some OpenAL
                   software drivers.
- PS2 - Fix support for incorrectly written .vag files which could cause a 
  click noise at end.
- Event API - Fix EventGroup::getState returning it was ready before loading had
  actually finished.
- Event API - Fix FMOD_File_SetDiskBusy / FMOD_File_GetDiskBusy when being used
  in event api.
- Event API - On machines with limited timers, the 'time' parameter could 
  sometimes jump ahead to the end of the range all of a sudden, this has been 
  fixed.
- Event API - Fixed Event::getState not setting FMOD_EVENT_STATE_STARVING flag.
- Event API - Fixed invalid handle error when network auditioning.
- Event API - Fixed Event/EventCategory pause and mute logic so you can 
  pause/unpause the master category or any parent categories without it screwing 
  up the pause/mute state of the individual events.

* .FEV file format updated! FMOD Designer 1.07.26 requires FMOD version 4.06.28,
  4.07.26 or higher.

7/09/07 4.07.25 - Dev release update
-------------------------------------

- Fix 2d/3d pan morphing from not working properly with stereo and above sounds.
- Fix sound cutting out using certain DSP network configurations 
  (event categories/effects) with reverb enabled.
- Wii - Fix FMOD_ERR_FILE_DISKEJECTED not being returned from FMOD_NONBLOCKING 
  loads via Sound::getState.
- Fix reverb having absense of 'diffusion'.  Switching diffusion from 100 to 99
  then back to 100 would have also fixed it.
- Event API - Fix EventProject::release not releasing reverb presets from memory.
- Event API - Fix getState not returning errors from nonblocking loads.

4/09/07 4.07.24 - Dev release update
-------------------------------------

+ Event API - Added an "(event angle)" parameter; any parameter with the name
              "(event angle)" is automatically updated with the angle to the
              listener from the event's forward vector (0 to 180 degrees).

- Fix channels not actually pausing properly if reverb was enabled.  
  Introduced in 4.07.23.
- Event API - Fixed 'just fail if quietest' when FMOD_EVENT_NONBLOCKING was 
              used on events that weren't ready yet.

* Event API - Changed the name of the "(heading)" automatic parameter to
              "(listener angle)" for greater clarity.

3/09/07 4.07.23 - Dev release update
-------------------------------------

+ Added initialsoundgroup to FMOD_CREATESOUNDEXINFO which is accessible via
  the soundgroup even while asynchronously loading.
+ Added FMOD_DONTRESTOREVIRTUAL to flag sounds/voices that you don't want
  to become real again after turning virtual.  (ie just let them be swapped
  out but not back in to avoid sounds coming in and out and sounding weird)
+ Event API - Added a "(heading)" parameter; any parameter with the name
              "(heading)" is automatically updated with the angle to the
              event about the listener's up vector (-180 to 180 degrees).
+ Event API - Added a "3D Position randomization" property to sound
              definitions; sound definition instances are offset from their
              parent event by a random vector based on this value, recalculated
              each time the sound is triggered
+ Event API - Win64 build now supports network auditioning.
+ PS3 - Added extra member, "maxPCMcodecs" to the FMOD_ADVANCEDSETTINGS. This
        allows the user to set the maximum number of PCM voices (including streams)
        that can be played at once.
        This was previously set to the total number of software channels.
+ Event API - Added extra parameter, 'loadintorsx' to the
              EventSystem::registerMemoryFSB function. When it is set to true,
              the whole fsbdata will be copied into the RSX memory pool.

- Fixed performance issue with FMOD_PRESET_OFF not reducing cpu usage.
- fixed MIDI playback issue where notes would play late causing several notes to
  sound bunched together or out of place.
- Channel::set3DOcclusion.  Fixed if directocclusion was set to 1.0, but 
                   reverbocclusion wasn't and the reverb mix cancelling out
                   instead of being audible.
- Fix stream related crash.
- Fix distortion noise with certain configurations of DSP network.
- Removed FMOD_EVENTPROPERTY_TIMEOFFSETMS as it was found to be already
          supported via FMOD_EVENTPROPERTY_TIMEOFFSET.
- Win32 - OpenAL - fixed previous sound being heard when an channel was reused.
- Win32 - OpenAL - fixed crash when using non-blocking and create compressed
                   sample flags without specifying hardware or software mode.
- Win32 - WASAPI - removed an un-needed error return in certain circumstances
                   when initialising WASAPI output mode for Windows Vista.
- Win32 - WASAPI - fixed stuttering on certain Vista machines.
- Mac - fixed MIDI playback sounding poor when using MacOSX DLS file.
- Mac - fixed crash during MIDI playback when using MacOSX DLS file.
- PS3 - Fixed crash when releasing a DSP Chorus unit.
- PS3 - Fixed hang when running for extended period of time.
- Wii - Fixed FMOD_SOFTWARE sounds being distorted/garbled when speakermode is
        set to FMOD_SPEAKERMODE_MONO.
- Event API - Changed EventI spawn timer handling to improve accuracy somewhat
              for small spawn times.
- Event API - Fixed bad distance parameter calculation for head-relative events
- Event API - Fixed automatic parameters to handle minimum > maximum correctly
- Event API - Fix EventGroup::getState setting state to 'loading' forever if 
  there happened to be an error creating a stream/sample in the FMOD_NONBLOCKING
  thread.
- Event API - Fixed oneshot events stopping when sounds with both
              "Wait for Previous" and "Loop and cutoff" set are still playing
- Event API - Fixed "Wait for Previous" sounds not being updated properly
- Mac - Fixed recording resampling problems.

* Mac - it is no longer necessary to specify a DLS file when playing MIDI on
        MacOSX as a default has been added pointing to "gs_instruments.dls".
* Wii - Software mixer is now driven from FMOD's output polling mechanism rather
        than the AX callback.
* Updated 'virtual voices' tutorial.
* PS3 - Now built with Sony SDK190.002

21/08/07 4.07.22 - Dev release update
-------------------------------------

+ Event API - Added event property FMOD_EVENTPROPERTY_TIMEOFFSETMS. Use this to
              specify an accurate time offset in milliseconds with no upper limit.

- More secure stream release fix, there was still a rare crash in stream thread 
  if stream was released.

20/08/07 4.07.21 - Dev release update
-------------------------------------

+ PS3 - Added new pointer to CellAudioOutConfiguration member "cell_audio_config"
        to FMOD_PS3_EXTRADRIVERDATA structure. This information can be used for
        initialisation of Bink etc.
+ Optimized FSB memory consumption so it caches/shares header memory if an FSB 
  is opened more than once.  Can save significant memory for streams with lots of 
  sounds in them.
+ Event API - Added FMOD_EVENT_STATE_STARVING.  Streaming events may be playing, 
  but not being fed data in time, so may be stuttering.  This flag gives this 
  information.

- Removed FMOD_OPENSTATE_STOPPING flag.
- Fixed hang to do FMOD_NONBLOCKING, streams, FMOD_OPENSTATE_STOPPING flag 
  and Sound::release.  
- Fixed remote tweaking of envelopes causing incorrect results and sometimes
  a crash.
- Fixed loading playlists from the Internet.
- Fixed garbage data being returned when a sync point was never given a name.
- Fixed bug where an error was returned when trying to play an FSB that contains
  2 mono ADPCM channels interleaved (requires rebuild with fsbank).
- Wii - Fixed voices occasionally playing with no volume.
- Mac - Auditioning from the FMOD Designer tool is now enabled on Mac. Also an
        FMOD_Event_Net library is provided to allow remote tweaking. 
- Xbox360 - Fixed seeking not working for .xma files loaded as
	    FMOD_CREATECOMPRESSEDSAMPLE.
- FSBank - Fixed Designer and FSBank not supporting sounds with > 6 channels
- PS3 - Fixed rare MPEG SPU hang when initialising FMOD.
- Upgraded Ogg Vorbis to version 1.1.3(Ogg) / 1.20(Vorbis) to fix rare seeking
  crash.
- PS3 - Fixed memory leak in AT3 codec.
- Xbox360 - Fixed problems when mixing XMA banks with seeking disabled and 
            XMA banks with seeking enabled.
- Win32 - Fixed a problem with Vista WASAPI output mode, initial enumeration
          should not report an error when no default input device is detected.
- Wii - FMOD_ERR_FILE_DISKEJECTED is now returned if there is a disk retry error,
        rather than hanging.
- PS3 - Fixed sound corruption when trying to seek a PCM voice.

* Xbox360 - If an XMA FSB bank is built without a seek table, when seeking,
            FMOD will do a *non-accurate* CBR seek rather than not seeking
            at all. 

2/08/07 4.07.20 - Dev release update
-------------------------------------

+ Added FMOD_SPEAKER_SBL/FMOD_SPEAKER_SBR to make it clearer what speakers are
  being addressed on PS3.  (On PS3, extra 2 speakers in 7.1 are located behind 
  the listener instead of to  the sides like on PC).
+ Added FMOD_OPENSTATE_STOPPING to denote that even though Channel::stop has 
  been called on a stream, it is not actually stopped because the stream thread 
  has not finished with it.
+ Added ability to call System::getNumHardwareChannels before System::init.
+ Added SoundGroup::setVolume, SoundGroup::getVolume, SoundGroup::stop.
+ Event API - Added get/setUserData functions to all Event API classes
+ Event API - Decreased memory usage/fragmentation.
+ Event API - Optimized .fev file format.
+ Event API - Added FMOD_EVENTPROPERTY_3D_POSRANDOMIZATION to specify a random
              deviation in the 3D position of an event.
+ Event API - Added "Max playbacks" and "Max playbacks behavior" for event
              categories: If too many events are playing in a category when
              Event::start is called, an event is stopped according to "Max
              playbacks behavior"
+ Xbox360 - Added support for XMA FSBs built without seek tables to save memory.
+ FSBank - Added the ability to disable seek table generation for XMA banks
           with the FSBANK_BUILD_DISABLESEEKING build flag.
+ FSBank - Added the ability to override XMA filtering per waveform with the
           new FSBANK_SAMPLE_DEFAULTS.buildflags member and the
           FSBANK_BUILD_OVERRIDE_XMAFILTERHIGHFREQ build flag.
+ FSBank - Added the ability to disable syncpoint writing for wavebanks
           with the FSBANK_BUILD_DISABLESYNCPOINTS build flag.
+ FSBank - Added the ability to specify source files from the command line.
+ FSBank - Added the ability to enable sample rate optimization via the GUI
           and command line.

- Fixed hang if System::close was called directly after System::init in 
  rare cases.
- Fixed soundgroup causing a channelsteal but not calling channel end callback
  for the stolen channel.
- Fixed soundgroup crash.
- Fixed Channel::isPlaying returning true from within channel end callback.
- Fixed Sound::getName not working on streamed FSB file subsounds.
- Removed stall when starting and stopping a stream.
- Fixed reverb when switched on, then off with FMOD_PRESET_OFF
- Fix channel not inheriting channelgroup properties (volume etc) when using
  Channel::setChannelGroup 
- Remove stall from Sound::release, System::createChannelGroup.
- Win32 / Linux - Fix crackle when multiple system objects were used.
- Win32 - Fix multichannel streams not coming out of speakers correctly thanks
          to bad directsound behaviour.  Directsound only.
- Win32 - Fixed WASAPI and OpenAL output modes causing a crash if stopped
          before they are initialised.
- Win32 - Fixed WASAPI pitch issue when Windows mix format didn't match the
          FMOD default or user specified value.
- Win32 - Fixed mono recording for WASAPI output mode.
- Mac x86 - Fixed CDROM support, playback is no longer static noise.
- Mac - Fixed FSBankLib, it now produces correct FSBs on Mac PowerPC.
- Mac - Fixed crash during CoreAudio driver enumeration.
- FSBank - Fixed FSBs being built having a default channel priority of 255
           rather than the correct default of 128.
- FSBank - Fixed non-sound files being added to file list based on file
           extension
- Fixed System::getAdvancedSettings sometimes returning too many ASIO channels
- PS3 - Fix pcm voices returning FMOD_ERR_CHANNEL_ALLOC after 32 instances.
- PS3 - Fix error being returned when loading interleaved streams of greater
        than 6 channels. A maximum of 8 channels is allowed for PS3.
- PS3 - Fixed hang in stream SPU thread if only 1 SPU is available due to SPU
        thread not swapping.
- PS3 - Fix memory still being allocated into MRAM rather than the given VRAM
        pool when FMOD_LOADSECONDARYRAM is specified.
- PS3 - Fixed reverb tails not sounding when a sound stops playing.
- Xbox 360 - Fix music TRC issue with new game tracks starting in nested 
             channelgroups/categories after music in dashboard had started.
- Event API - Fixed threading issues.  Hangs/crashes if FMOD_EVENT_NONBLOCKING
              was used.
- Event API - "Just fail if quietest" was always stealing if "Max playbacks" = 1
- Event API - "Just fail if quietest" wasn't taking into account event volume or
              category volume.
- Event API - Fixed FMOD_ERR_EVENT_MAXSTREAMS sometimes being returned even 
              though less than "Max streams" had been created.
- Event API - Fixed Event::getInfo returning incorrect projectid
- Event API - Fixed FMOD_EVENT_CALLBACKTYPE_SOUNDDEF_RELEASE sometimes not being
              called
- Event API - Fixed problem with events with no parameters

- PS3 - Fixed occasional hang when rapidly starting up and shutting down FMOD.
- Fixed performance spikes with virtual voices in System::update().
- Wii - Fixed System::setSpeakerMix not working correctly.
- Mac/Vista - Fixed rare recording crash.
- Fixed setPosition on MPEG streams not always working correctly.
- Wii - Fixed stall when calling Channel::setPaused.
- Wii - Fixed no sound every playing out of 4th controller when
        "muteremotespeakerifnosound" is set.

* FMOD_NONBLOCKING now affects Channel::stop / Event::stop for streaming sounds.
* Changed sounds that go virtual upon playback, to delay their playback  instead
  of cutting off the start of the sound.
* XBox360 - Worked around XDK bug with Xbox Music Player notification, by
            changing technique and functions used to detect dashboard music.
            Should work now even with the broken XDK.
* FSBank - Changed the FSBank_Build function signature. All the separate
           integer flag parameters have been replaced by a single buildflags
           bitfield of type FSBANK_BUILDFLAGS.
* FSBank - Changed misspelt FSBANK_SAMPLE_DEFAULTS.optmisedratereduction
           to FSBANK_SAMPLE_DEFAULTS.optimisedratereduction
* Mac - FMOD libraries on Mac are now distributed as universal binaries
        containing both x86 and PPC versions in one.
* Event API - "3D Distance" parameters are now read-only.
* PS3 - Now built with Sony SDK181.001
* .FEV file format updated! FMOD Designer 1.07.20 requires FMOD version 4.06.23,
  4.07.20 or higher.

22/06/07 4.07.19 - Dev release update
-------------------------------------

+ Added FMOD_SPEAKERMAPTYPE which includes FMOD_SPEAKERMAPTYPE_ALLMONO, 
  FMOD_SPEAKERMAPTYPE_ALLSTEREO.  Used with new FMOD_CREATESOUNDEXINFO 
  'speakermap' value, multichannel sounds can now be forced to a speakermap
  that is either all channels go into the front center (allmono) or they
  alternate as stereo pairs on front left/front right speakers.  Good for
  multichannel interactive music.

+ Event API - Added "waituntilready" parameter to EventGroup::freeEventData(). 
              Use this to avoid blocking the main thread.
+ Event API - Added FMOD_EVENT_CALLBACKTYPE_EVENTSTARTED.

- XBox360 - Fix small streams not buffering when FSB and 
            FMOD_CREATESOUNDEXINFO::initialsubsound was used.
- Fixed Sound::setSubSound crash if the parameter was a stream.
- Fixed crash when changing FMOD echo dsp parameters in low memory situation.
- Fixed crash when using nested channelgroups and using System::close.
- PS3 - Fix SPURS only hang when calling Channel::setPosition on an MPEG voice.
- Event API - Fixed EventSystem::getNumEvents returning incorrect value after 
              EventProject::release.
- Event API - PS3 - Fixed Event::getInfo returning incorrect values for the 
                    positionms member of FMOD_EVENT_INFO structure.

* Sounds with more than 6 channels now default to L/R alternating pan in the 
  speakermap, every second channel starting from 0 being left, and every second
  channel starting from1 being right.

18/06/07 4.07.18 - Dev release update
------------------------------------

+ Added ability to be able to disable speakers from 3D calculation.  
  Useful for things like disabling center speaker for dialog, or the LFE.
  See renamed System::setSpeakerPosition change below.
+ Added ChannelGroup::set/getPaused, ChannelGroup::set/getMute.  These 
  are different to override as now any new channels added to the group will 
  respect the group's pause / mute state instead of ignoring it.
+ Added ASIOSpeakerList to FMOD_ADVANCEDSETTINGS and allow user to set a 
  speaker list at runtime to remap FMOD speakers to ASIO channels.
+ Event API - Optimised update for events with dsp unit effects.
+ Added support for FMOD_OUTPUTTYPE_WASAPI - Native Vista audio support!
+ Added support for FMOD_OUTPUTTYPE_OPENAL - Considered beta.  Software 
  mixes into OpenAL buffers, so that effects and realtime compressed samples 
  still work, but the soundcard hardware takes care of 3d virtualization.

- XBox360 - Fixed XMA2 support for .xma files properly.
- Fix 40 byte memory leak if 2 System objects were used in 1 application.
- Fix .IT file playback crash.
- PSP - Fix hang when releasing a stream if more than one is playing at a time.
- Fix System::registerCodec from not working - bug introduced in 4.07.16.
- Fix crash if FMOD_CREATESOUNEXINFO::initialsubsound was > 1 and a user 
  created (FMOD_OPENUSER) multisubsound stream was used.
- Fix Sound::setSubSoundSentence when first subsound was not index 0.
- Fix audible glitch when starting an mp3 netstream.
- Removed ChannelGroup::overridePaused, ChannelGroup::overrideMute.
- PS2 - Fix cdrom0: loading issue with forward slashes.
- Fix hang with FMOD_INIT_VOL0_BECOMES_VIRTUAL with channelgroups/events.
- Fix performance issue with FMOD internal malloc routine.  Should notice big
  improvement for large memory pools.
- Fix FSB stream not ending if FMOD_CREATESOUNDEXINFO::initialsubsound was used.
- Event API - Fixed 'steal oldest' and EVENT_INFO.positionms if using _reduced
              versions of library with no software mixer (ie psp/ps2/wii).
- Event API - Fixed leaking streams
- Event API - Fixed crash if out of memory.
- Event API - Wii - Fixed crash when playing more than 1 event with stereo 
              samples at once.
- Event API - Fixed event instances not taking their initial volume from their
              INFOONLY event.
- Event API - Updated docs for event callback types
- Event API - Fix forwardslash/backslash issue with registerMemoryFSB.
- Event API - Fix stack overflow if "" (empty string) was passed to getEvent.
- FSBank - fix FSB files being generated which would cause memory overrwrites if
           FMOD_OPENMEMORY_POINT was used and the data was PCM.  This also applies
           to Event API - using registerMemoryFSB function.
- Fixed crash in pitch shifter when setting the FMOD_DSP_PITCHSHIFT_MAXCHANNELS
  parameter.
- Fixed clicks in "Lowpass" dsp unit when changing cutoff frequency

* Changed System::set/getSpeakerPosition to System::set/get3DSpeakerPosition to 
  give the function a more correct name and also add 'active' flag.
* Channel::set3DPanLevel now affects doppler as well.
* Changed Sound::getOpenState to return FMOD_OPENSTATE_ERROR in openstate and
  whatever the error was if a fatal stream error occured.  This may happen with
  an error such as FMOD_ERR_NET_SOCKET_ERROR for example.
* The fsbankex utility now preserves the case of file names from the listing
  file, rather than folding them to lowercase
* Event API - When an event is stolen, FMOD_EVENT_CALLBACKTYPE_STOLEN is now called 
              *before* FMOD_EVENT_CALLBACKTYPE_EVENTFINISHED, not after.
*** Event API - FMOD_EVENT_SYSTEMINFO.numplayingevents field changed! It's no 
                longer a pointer!
* PS3 - Now build with Sony SDK180.002

5/06/07 4.07.17 - Dev release update
------------------------------------

+ Removed the "Spawn Intensity" sound definition property and re-introduced
  the minimum and maximum spawn time properties. The spawn intensity layer
  effect now scales the average spawn time by (1 / (envelope value))
+ Added new error code, FMOD_ERR_EVENT_MISMATCH, which is returned when a FSB
  file doesn't matched a FEV file.
+ Added 'name' and 'index' to EventSystem::getReverbPresetByIndex / 
  EventSystem::getReverbPreset to allow user to get id from name, and vice 
  versa.
+ Speed up in FMOD memory allocation routines.
* + Speed up in System::update when virtual voices swap.  CriticalSections 
  removed so performance increase should be significant in this case.
+ Added FMOD_INIT_VOL0_BECOMES_VIRTUAL.  Any voices with volume or audibility 
  of 0 will go virtual automatically!
+ Sped up MP3 decoding about 25%.
+ Added FMOD_ERR_FILE_DISKEJECTED and stopped the main thread hanging when 
  the cd was ejected.  The load functions now return this error.  Only 
  supported on Wii at the moment.
+ Added Channel::setInputChannelMix / getInputChannelMix.  Now a user can 
  easily set the incoming levels of a multichannel sound, to set volumes of 
  subchannels for things like interleaved multichannel music etc.
+ Event API - Added "playingevents" to FMOD_EVENT_SYSTEMINFO. Get a list of
              all playing events in the event system.
+ Event API - Added FMOD_EVENT_INIT_FAIL_ON_MAXSTREAMS.  Events will fail 
  with an error if this init flag is specified and "Max streams" was reached 
  when playing streamed banks.
+ Event API - Added the "Channel Mix" effect, providing control over the
  incoming levels of multichannel sounds in an event layer.

- Fixed Sound::getLength with FMOD_TIMEUNIT_PCMBYTES, when using a 
  FMOD_CREATECOMPRESSEDSAMPLE sound.
- Fixed Reverb::get3DAttibutes / EventReverb::get3DAttibutes not returning a 
  valid value in maxdistance.
- Fixed a crash if user ran out of memory while loading a .ogg file.
- Fixed a crash if user ran out of memory while opening a stream.
- Fixed XMA timeout on very small .xma files when /l option was used with 
  xmaencode.exe.
- Fixed rare stack corruption when using FMOD_NONBLOCKING 
- Fixed FSB with mp3 data and mono/stereo sounds in the same FSB causing mono 
  sounds to play at double pitch.
- Fixed Sound::seekData not resetting codec properly, so causing an audible 
  glitch.
- Small quality fix to FMOD_DSP_LOWPASS_SIMPLE filter.
- Fix buzzing noise in mixer after using Channel::setChannelGroup with reverb.
- Fixed FMOD_INIT_SOFTWARE_HRTF not respecting Channel::set3DPanLevel.
- Wii - fix sleep function leaking and causing hang in streamer after a long time.
- Fixed logic behind System::set3DRolloffCallback when Channel::set3DMinMaxDistance 
  is called.  Bug was that volumes were set/calculated incorrectly.
- Fix timing in mod/s3m/xm/it playback.
- Fixed virtual voice priority not updating if its ChannelGroup volume changed.
- Event API - Fixed FMOD_ERR_INTERNAL when using FMOD_EVENT_NONBLOCKING with 
              EventGroup::loadEventData.
- Event API - Fixed projects with waves that were 2d and 3d not loading.
- Event API - Wii - Fixed certain events not stopping when Event::stop is called.
- Event API - Wii - Fixed certain looping events stopping by themselves when
                    they shouldn't be.
- Event API - Wii - Fix crash when using GCADPCM wavebanks.
- Event API - Fixed problem where stolen events with non-zero "Fadeout"
              would still be playing after they were stolen.
- Event API - Fixed event "Max playbacks behaviour" "Just fail if quietest"
              sometimes not working as expected.
- Event API - Fixed disc access occuring sometimes even though registerMemoryFSB
              was used.
- Event API - Fixed events with fade in / fade out not calling 
              FMOD_EVENT_CALLBACKTYPE_EVENTFINISHED if stopped soon after 
              starting.
- Event API - Fixed file handle leak in streamed banks.
- Event API - If user mixed up FEV and FSB files, now returns 
              FMOD_ERR_EVENT_MISMATCH instead of crashing.

* .FEV file format updated! FMOD Designer 1.07.17 requires FMOD version 4.06.20,
  4.07.17 or higher.
* Event API - FMOD_EVENT_CALLBACKTYPE_EVENTFINISHED is now always called
              when an event is stopped by the user or naturally.
* Updated FLAC to 1.1.4 to better support certain files.
* Changed FMOD_CHANNEL_CALLBACKTYPE_END to trigger when Channel::stop is called, 
  and also when a sound steals that voice and stops it.

18/05/07 4.07.16 - Dev release update
-------------------------------------

+ Added FMOD_INIT_SOFTWARE_HRTF.  This is a fake hrtf which just adds a lowpass 
  filter to voices when they go behind you.  See FMOD_ADVANCEDSETTINGS for settings.
+ PS2 - Added FMOD_SPU_Alloc, FMOD_SPU_GetRawAddress, FMOD_SPU_Free to allocate
  and reserve PS2 sound ram for use in other libraries.
+ PS2 - Added FMOD_SPU_ReserveVoice to stop fmod using certain hardware voices 
  (again so that other libraries can use them).
+ Event API - Added c# wrapper and examples.
+ Event API - Can now set/get event properties per-instance as well as for all instances.
  Added "this_instance" parameter to all setPropertyXXX and getPropertyXXX functions.
+ Event API - Added event property FMOD_EVENTPROPERTY_WII_CONTROLLERSPEAKER. Use this to 
  play events on the Wii controller speakers!
+ Added recording downsampling. On platforms that only support recording at a
  fixed rate (ie CoreAudio), it is now possible to record at any rate lower
  than the hardware supported fixed rate.

- Stop rare cases of crashing if Sound::release was called while Sound::readData
  was being called simultaneously in a different thread.
- Event API - Clamped event "Max playbacks" to 1 on EventSystem::load if it's < 1.

* Event API - Enabled "Surround Pan" in hardware on Wii and Gamecube
* Renamed FMOD_INIT_DISABLESOFTWARE to FMOD_INIT_SOFTWARE_DISABLE.
* Renamed FMOD_INIT_OCCLUSION_LOWPASS to FMOD_INIT_SOFTWARE_OCCLUSION.

11/5/07 4.07.15 - Dev release update
-------------------------------------

+ Event API - Added C wrapper. C users use fmod_event.h, C++ users use fmod_event.hpp
  and fmod_event.h.
+ Added System::set3DRolloffCallback.  When FMOD wants to calculate 3d volume for a
  channel, this callback can be used to override the internal volume calculation 
  based on distance.  

- Fixed crash if quickly releasing sound while it is still in the process of loading 
  with FMOD_NONBLOCKING
- Wii - Fixed rare crash when playing looping GCADPCM fsb files with looppoints.
- Wii - Fixed ProLogic not working correctly.
- Fix Sound::release crash if subsound was released before parent, introduced in 4.07.15.
- Fix Sound::release memory leak if subsound was released before parent.
- Fix streams not ending when stream was certain size.

- Event API - Fixed a bug where oneshot sounds would retrigger if the
              parameter left the sound and returned to it while it was playing

*** Event API - C++ users should now use fmod_event.hpp!
*** Event API - Event callback signature has changed!  The parameter "FMOD::Event *event"
                is now "FMOD_EVENT *event" so you must cast back to FMOD::Event * to get
                old behaviour.
*** Event API - EVENT_xxx values are no longer namespaced! You must put "FMOD_" in 
                front of them!

9/05/07 4.07.14 - Dev release update
------------------------------------

+ PSP - Added support for FMOD_OPENMEMORY_POINT for hardware vag samples.
+ Added SoundGroup::setMaxAudibleBehavior/getMaxAudibleBehavior.  Determines what
  happens if you exceed maxaudible count.  New behaviour modes include
  - FMOD_SOUNDGROUP_BEHAVIOR_FAIL
  - FMOD_SOUNDGROUP_BEHAVIOR_MUTE
  - FMOD_SOUNDGROUP_BEHAVIOR_STEALLOWEST
  See docs for more on what they do.
+ Added SoundGroup::setMuteFadeSpeed/getMuteFadeSpeed.  Sets the fade
+ Event API - Added EVENT_STATE_LOADING to EventGroup::getState for determining if 
  any event in the eventgroup is loading.
+ Event API - Added "Load into RSX memory" wavebank property (PS3 only)
 
- Fix blocking behaviour in System::playSound/System::update/
  EventSystem::update/Event::start.
- Fixed crash in some cases when calling Channel::setSpeakerLevels while
  speakermode is set to FMOD_SPEAKERMODE_PROLOGIC.
- Fix SoundGroup::setMaxAudible not allowing -1 as a parameter.
- Fix crash in ogg vorbis codec if out of memory.
- Fix crash using echo filters if out of memory.
!- FSBankEx - Fix bug in 4.07.13 that introduced bad FSB output 
 (Caused hang on Xbox 360 during play, sync points weren't exported).
- Fix memory leak when using more than 1 System object.
- Fixed non blocking streams with subsounds stalling main thread.
- Fix rare Sound::release crash on Xbox 360 with XMA FSB files.

- Event API - Fixed a bug where oneshot sounds with "Wait for previous" set
              didn't play at all if forced to wait
- Event API - Fixed a bug where adjacent sounds could both play when only one
              should play (if the parameter was exactly on the boundary)
- Event API - Fixed a bug where parameters with velocity or seek speed could
              skip sounds and syncpoints when the framerate was low
- Event API - Event sustain points are now clamped to valid parameter range
- Event API - Fixed a bug where sustain points could be written to .fev in the
              wrong order
- Event API - Fixed a bug where distance parameters weren't updated correctly
              until the first EventSystem::update call after Event::start
- Event API - Fixed parameter value rounding issue.
- Event API - Fixed "programmer sound" with no parameter not working.
- Event API - Fixed negative m_streamrefcnt spam.
- Event API - Fixed 3D doppler factor not heeding listener speed.

* PS3 - FMOD libs now built with Sony SDK 170.003
* Event API - Changed Event::getInfo lengthms calculation to return the length
              of the longest sound definition

26/04/07 4.07.13 - Dev release update
----------------------------------------

+ Mac - Overhaul of CoreAudio output to fix compatibility with various sound cards.
+ Event API - Added support for individual layer priorities
+ Event API - Added "just fail if quietest" max playbacks behaviour
+ Added Reverb::setActive/getActive.
+ Added SoundGroups!  Now have the ability to group sounds and control their max 
  playbacks.  More functionality will be added to this class in the future.
  See new functions
      System::createSoundGroup
      System::getMasterSoundGroup
      Sound::getSoundGroup
      Sound::setSoundGroup     
      SoundGroup::getSystemObject
      SoundGroup::setMaxAudible
      SoundGroup::getName
      SoundGroup::getNumSounds
      SoundGroup::getSound
      SoundGroup::getNumAudible
      SoundGroup::setUserData
      SoundGroup::getUserData
+ Added FMOD_ERR_MAXAUDIBLE returned by System::playSound when 
  SoundGroup::setMaxAudible is used.
+ PS3 - Added support for FMOD_DSP_TYPE_CHORUS effect.

- Event API - Fixed "don't play" sound definition entry.
- Event API - Fixed oneshot events sometimes ending prematurely when used with 
  EVENT_NONBLOCKING
- Event API - Fixed broken "steal quietest" max playbacks behaviour
- Event API - Fixed 3d cone values not taking effect until update was called.
- Event API - Fixed crash when using EVENT_INIT_USER_ASSETMANAGER with events with
  no parameters.
- Event API - Optimised event system memory usage a little.
- Event API - Removed 'EventReverb3D' class and EventSystem::create3DReverb.
- Fix crash when System::createCodec was used.
- Mac - Fixed hang on system release.
- PS3 - Fixed "Too many DSP units" error/assert when using big event projects.
- fsbank - PCM data is now written out as big-endian format if platform selected
	   is Xbox 360. The allows FMOD_OPENMEMORY_POINT to be used properly.
- Wii - Fixed high pitched whining noise and sounds going silent when virtual
	voices are being swapped in and out.
- Wii - Fixed hang when re-using a stream channel to play a new stream.
- ASIO - Fixed 32bit output noise.
- Fix midi/mod/s3m/xm/it files connecting their internal channels to reverb causing
  extra cpu usage.
- Stopped System::release hanging if user didn't manually release their
  ChannelGroups.
- Fixed streaming subsounds not ending sometimes, due to calling getSubSound while
  another subsound was still playing.
- Fix stereo sounds in 7.1 speaker mode not being audible if panned to side left or 
  side right speakers.
- Fixed various documentation issues.

* System::create3DReverb renamed to System::createReverb.
* System::set/get3DReverbAmbientProperties renamed to 
  System::set/getReverbAmbientProperties.
* Replaced the following
          Reverb::setPosition
          Reverb::getPosition
          Reverb::setMinRadius
          Reverb::getMinRadius
          Reverb::setMaxRadius
          Reverb::getMaxRadius
  with
          Reverb::set3DAttributes
          Reverb::get3DAttributes
* All output plugins now present the default output and record driver as the first
  item in the list. 
* PS3 - FMOD libs now built with Sony SDK 160.008
* Event API - Changed EventReverb3D class to be EventReverb and 
  EventSystem::createReverb3D to EventSystem::createReverb.
* Now instead of EventSystem::createReverb creating a pointless object, it simply 
  returns the reverb property structure associated with the reverb.  New functions
  are called EventSystem::getReverbPreset and EventSystem::getReverbPresetByIndex.
* .FEV file format updated! FMOD Designer 1.7.13 requires 4.06.16, 4.07.13 or higher.

16/04/07 4.07.12 - Dev release update
----------------------------------------

- Fix FMOD_ERR_CHANNEL_STOLEN error message being displayed, among other possible
  bugs when mixing streams/samples.
- Wii/GC/PSP/PS2 - Fixed corrupt sound at the start of a multichannel stream, if
  it is created while another multichannel stream is currently playing.
- Fixed extreme 3d velocities being passed into FMOD commands causing mixer crash.
- Fix rare DSPConnection::mix/mixAndRamp crash.
- Delphi header fixes.
- Fixed non-blocking fsb streams flushing twice and Xbox360 XMA hang.
- Fixed recording in PCM8 and PCMFLOAT formats.
- Fixed access violation in Channel::stop if channel source is an oscillator
- Fixed multichannel mp3 playing silent channels on non ps3 platforms.
- Event API - Fixed resource management bugs.
- Event API - Fixed EventParameter::setVelocity causing problems when called from 
  event callback

5/04/07 4.07.11 - Dev release update
----------------------------------------

+ FSBank - add support for multichannel mp3 encoding from multichannel wave files.
+ Add support for multichannel mp3 encoded FSB playback.

- Event API - Fixed event categories not inheriting mute flag from parent category
  during add.
- Event API - Fixed newly created events not inheriting mute flag from category.
- Event API - Fixed problem with streamed wavebanks that contain 2D and 3D subsounds.
- Fixed 24-bit AIFF problems between fsb storage and readback.
- Wii - Fixed hang when releasing stream while disk is ejected.
- PS3 - Fixed output buzzing.
- Fixed bad Pro Logic encode caused by using -3dB midpoint pan gain.
- Fixed system flag FMOD_INIT_3D_RIGHTHANDED getting reset.
- PS3 - Fixed rare popping when reverb is enabled.
- Wii/GC - Fixed hardware lowpass being disabled whenever a channel is paused and
           then unpaused.
- Wii/GC - Fixed hardware channel reverb and lowpass properties not being preserved
	   when channel swaps from virtual to real.
- Wii - Fixed FMOD_Channel_GetControllerSpeaker not returning the correct value.
- Wii - Fixed normal speaker sounds sometimes playing out of the controller speaker
        when channel swaps from virtual to real.
- Wii/GC - Fixed problems when streaming mixed mono/stereo fsbs.

* PS3 - Release is now built using Sony SDK 1.54.001

22/03/07 4.07.10 - Dev release update
----------------------------------------

+ Event API - Added EVENTPROPERTY_TIMEOFFSET for adjusting start offset for all 
  sounds in the event
+ Added "Reverb notes" to documentation

- Fixed bad subchannel locations when using 3D speaker spread for multichannel sources
- Fixed sounds not starting when FMOD_SUPPORT_MULTIREVERB not defined.
- FSBank - Added -n command line option to turn off C header file generation
- PS2 / Wii / PSP / GC.  Fix stereo sounds coming out mono if Channel::setSpeakerMix was 
  used, or the Event API was used (which calls Channel::setSpeakerMix internally).
- PS2 / Wii / PSP / GC.  Fix linker error on 'reduced' versions of the libraries.
- Fixed crash when alternating between recordStart and recordStop.
- Wii - Fixed crash when passing invalid values to channel::setReverbProperties.
- XBox360 - Fixed XMA2 support for .xma files.
- Fixed truncated network file reads.
- Event API - Fixed issue with EVENT_NONBLOCKING and streamed wavebanks.
- Event API - Fixed crash when unloading events that are still loading asynchronously.
- Event API - Fixed pitch envelope disabled by autopitch. Their effect is now cumulative.
- PS3 - Fixed rare hang when trying to stop a sound.
- PS2 - Fixed various memory/alignment issues.
- PS2 - Fixed leaking voices.
- Fixed crash when playing oscillators after normal sounds.
- Event API - Fixed crash on freeEventData when same wavebank referenced by events in
  multiple eventgroups.
- FSBank - Fixed waveform compression quality not having any effect

* EVENT_WAVEBANKINFO::samplerefcnt is now per subsound reference so it will appear larger
  than in previous versions

1/03/07 4.07.09 - Dev release update
----------------------------------------

+ Event API - Sound definitions : simplified spawn intensity parameter (replaces 
  spawn min/max repeat time)
+ Event API - Added Spawn Intensity effect, a multiplier for a sound definition's 
  spawn intensity parameter.

- Re-fix system reverb getting only one channel
- PS2 - Fix crash on file close when using file callbacks.
- Fix thread memory leak on stream free.
- Removed spawn min/max repeat time parameters of sound definitions
- Event API - Fixed event fadein/out fighting with Event::setVolume
- Event API - Fixed "Reverb Dry/Wet Level" not working correctly for 2D events
- Event API - Fixed EVENT_INFO positionms sometimes giving incorrect values
- Wii - Fixed possible noise when playing some sub-streams.

23/02/07 4.07.08 - Dev release update
-------------------------------------

+ Added support for FMOD_OPENRAW + FMOD_CREATECOMPRESSEDSAMPLE + 
  FMOD_SOUND_FORMAT_IMAADPCM.
+ Mac - Can now record in other formats besides FMOD_SOUND_FORMAT_PCMFLOAT with
        CoreAudio output (default).

!- Fix voices 'leaking' or dropping out, when using FMOD_CREATECOMPRESSEDAMPLE.
   Most likely last fix.
- Fixed speaker levels not being set properly when voices go from virtual to real
  again.
- Win32 - Fix EAX with FMOD_HARDWARE not working (accidently disabled it during 
  testing).
- Fix mp2/mp3 setposition/looping not seeking to the right place.
- Linux - Fixed link error in plugins version of library.
- Mac - Fixed error when trying to initialize certain audio devices
	(PreSonus Firebox and possibly other devices).
- Fix DSP effects added with Channel::addDSP not staying when the channel is 
  swapped to be virtual and then becomes real/audible again.
- Event API - Fixed oneshot events sometimes not triggering with EVENT_NONBLOCKING
- Fix System reverb defaulting to one-channel mode with only one voice

20/02/07 4.07.07 - Dev release update
-------------------------------------

+ Add gapless mp2/mp3 looping.  Use FSBank or FMOD designer to get this through
  .fsb.  Will not work with normal .mp2/.mp3 files unless they have been 
  preencoded properly to loop.
+ Add 5.1 XMA support.  This only works for .XMA files at the moment not FSB.

- Fixed seeking with FMOD_CREATECOMPRESSEDSAMPLE sounds not seeking to the right place.
- Fixed multichannel sounds not playing properly when maxinputchannels is set to
  anything other than 6.
- Fixed channel->reverb gain initialisation for 2D events whose channel count 
  matches output channel count.
- Fixed reverb balance dry gain control for 2D events.
- Fix mapping of 4.0 sound sources.
- Fix Channel::setDelay causing channel to not stop / crash in System::update.
- Wii - Fixed reduced release library printing debug messages.
- XBox360 - Fixed "music" category not being paused properly in some cases if
            dashboard music is playing before "music" has started playing.
- PS3 - Fixed channels dropping sometimes when there are a lot of virtual voices.
- Event API - Fixed EventSystem::load problem when loading events based on 
  templates with no parameters.
- Event API - Fix wait-for-previous mode in layer for play-to-end sounds
- Event API - Fixed main thread blocking when using streamed wavebanks

* Event API - Changed EVENT_LOADINFO field "sounddefentrylimit" from a set number
  to a 0 -> 1 multiplier e.g. 0.5 = half the number of sounddef entries.
* Sound::GetSubSound with FMOD_NONBLOCKING streams will now go into seeking mode
  if you call it on the same subsound index 2 times in a row, the second and 
  further times returning FMOD_ERR_NOTREADY just as it would if you specified 
  a different index than the one currently active.

13/02/07 4.07.06 - Dev release update
-------------------------------------

!- FSBank - Fixed bad FSB data being written out which could cause hang with XMA
  and garbled sound on other formats.  This bug is present from 
  4.07.02 to 4.07.05 inclusive.
- Fixed very small memory leak in user created streams with multiple subsounds.
- Fix doppler by defaulting Channel::set3DDopplerLevel to 1.0 like it should.
- Event API - Fixed rare syncpoint callback crash
- Event API - Fixed eventcategory problems when loading multiple projects.
- Event API - Fixed crash when repeatedly calling Event::start() on an event.
- Event API - Fixed encryption key support.
- Fixed channel speakermix not being reset on FMOD_HARDWARE sounds.

8/02/07 4.07.05 - Dev release update
------------------------------------

+ Added EventGroup::getState() interface.

!- Fix hang bug introduced in 4.07.04.
- Fix System::setStreamBufferSize and FMOD_TIMEUNIT_MS with FSB files.
- Event API - Fix wait-for-previous mode in layer for play-to-end sounds
- 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
- Event API - Fixed event volume randomisation
- 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.07.04 - Dev 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.

- Wii - Fixed hardware reverb issues.
- Filled out documentation for DSP::setOutput*/setOutput* type functions.
- Fixed channel leak issue with virtual voices.
- Fix channels defaulting reverb to dry.
- Event API - Fixed EventSystem::getGroup/getEvent to be case insensitive
- Event API - Fix reverb balance effect not setting correct gain levels.
- Event API - Fixed Vista networking issue
- Event API - Fixed Loop count bug

* Sound::getUserData now works while sound is still loading nonblocking
* Xbox 360 - FMOD_HARDWARE support removed.  
  FMOD_HARDWARE will just re-route to FMOD_SOFTWARE now to save confusion.
  (360 has no mixing hardware, FMOD_HARDWARE was wrapping XAudio voice support).
* Event API - Sound Definitions - RandomNoRepeat play mode universal across 
  all events.
* 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.

29/01/07 4.07.03 - Dev release update
-------------------------------------

+ Added 'Loop count' parameter to event sound instances

- Event API - Fixed leaking channels
- Mac - Fixed hang when using certain multi-channel FireWire devices.

25/01/07 4.07.02 - Dev release update
-------------------------------------

+ Added head-related transfer function to software channels. 
+ Added fields to FMOD_ADVANCEDSETTINGS structure (min/maxHRTFAngle, 
  min/maxHRTFFreq) to control HRTF behaviour.
+ 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.

- Event API - Fixed problems with template events.
- Event API - Fixed possible click when sounds stop in an event.
- 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.07.01 - Dev release update
-------------------------------------

+ Wii - Added support for FMOD_OPENMEMORY_POINT for hardware samples. Due to 
  memory alignment requirements, currently only works with .dsp files.
- Fixed up <1 "Max playbacks" on fev load
- Fix oscillators not going virtual and maybe causing crash when virtual 
  voices being used.

05/01/07 4.07.00 - Official dev branch release.
-----------------------------------------------

+ Added 3D virtual reverbs.  Added System::create3DReverb / 
  System::set3DReverbAmbientProperties / System::get3DReverbAmbientProperties 
  and Reverb class.
+ SFX reverb has two new parameters : "Room LF" and "LF Reference".
+ Event API - Added EventCategory::getEventByIndex and EventCategory::getNumEvents.
+ Event API - Event system memory/speed optimisations.
+ Event API - Added EventSystem::create3DReverb.
+ Event API - Added EventSystem::set3DReverbAmbientProperties.
+ Event API - Added EventSystem::get3DReverbAmbientProperties.
+ Event API - Added Event3DReverb class.
+ Event API - Added Event::setProperty and Event::setPropertyByIndex.
+ FSBank - Added fsbankexcl -i command line option to ignore compilation errors
+ Optimize virtual voices, so that System::update is faster.
+ Event API - Sped up loading time.  Reduced memory usage.

- Fix PS3 dissapearing voices bug.
- Fix C# header errors.
- Fix netstream example ignoring tags.  Fixed certain mp3 netstreams with tags 
  not opening correctly.
- Fix Channel::setChannelGroup wiping out Channel::set3DAttributes for 1 frame.
- Fix 3d Pan Level still 3d volume attenuating even when 0.0f or '2d'.
- Event API - Fix small audible click in FMOD software mixer when playing 
              more than 1 event.
- Event API - Fix 'FMOD_ERR_INVALID_HANDLE' error when loading multiple .FEV files
  when FEV have nested categories under the "music" category.
- FSBank - Removed fsbankexcl -a command line option (use -i)
- 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.

* 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.
* Increased file thread stack size to 8k on non Nintendo platforms (Nintendo stack = 16k)

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
