
irrKlang 1.6

- stopped support for .NET 1.1, please use the versions for .NET 2 or .NET 4 instead,
  or an older version of irrKlang if you still need .NET 1 support
  
- irrKlang for .NET 4 now needs version 4.5 at miminum

- there is now a new function stopAllSoundsOfSoundSource() to stop all sounds of a specific sound source

- irrKlang.NET for .NET 4 now also has a strong name (it is now a signed assembly)

- irrklang for gcc now supports gcc 5.1

- irrKlang 1.5 for windows was depending on the MSVC runtime dll, this is now 
  no longer the case with irrKlang 1.6

- fixed a bug causing duplicated DirectSound buffers to share the playbackSpeed sometimes, causing
  some sounds to have a wrong frequency when played.
  
- fixed update() problem in single threaded mode
  if you run irrKlang in single threaded mode, you can now call irrKlang::update as often and 
  fast as you want. This was supposed to be called only about once every second prevousliy, and
  could cause irrklang to stall previously if called too often.

- added support for Visual Studio 2017


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

irrKlang 1.5

- Added support for unicode file names. 
  irrKlang now uses UTF8 internally on all operating systems. If you are running it on Windows, and want to use
  wchar_t types, you can use the irrKlang provided function makeUTF8fromUTF16string() to convert your wchar_t* string to
  a char* string.
  In the .NET version of irrKlang, the API hasn't changed, but irrklang now supports unicode 
  file names there automatically as well.
  
- Added 64 bit support. 
  There is now a separate irrKlang SDK for 64 bit builds
  
- Added support for playing back 24 bit flac files

- Uses less resources on linux now: PCM handles are now closed as soon as possible, freeing resources much earlier.

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


irrKlang 1.4.1

- irrKlang now loads the alsa lib from the correct directory on previously unsupported linux systems.

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

irrKlang 1.4.0

- Fixed a potential crash in the windows version, when using DirectSound8

- Improved speed of the Windows version of irrKlang by about 20%

- irrKlang now also works with newer Linux distributions (like Ubuntu 12), 
  which moved the ALSA lib file into a new directory.
  
- Cleared up some inconsistencies in the documentation

- Removed a very small memory leak in Linux and Mac OS X
  
---------------------------------------------------------------------

irrKlang 1.3.0b

- Added support for .NET framework 4.
  
- Fixed a problem with audio recording: GUIDs were not correctly
  decoded for some devices, causing manual device selection to fail
  on Windows.
  
---------------------------------------------------------------------
  
irrKlang 1.3.0

- There is now the possibility to capture the mixed output audio data
  from irrKlang, using the ISoundMixedOutputReceiver interface.
  Can be used to store the sound output as .wav file or for creating 
  an Oscillograph and similar.
  
- The movement speed of 3d sound listeners has been ignored in previous
  releases for 3d sound doppler effects, this has been corrected now.

- irrKlang now also runs on 64 bit linux systems. It previously
  looked for the alsa lib in /usr/lib/libasound.so, but on 64 bit
  system this is located in /usr/lib32/libasound.so. This is fixed now.
  
---------------------------------------------------------------------

irrKlang 1.2.0 

- Added .flac file playback support. Implemented as plugin, ikpFlac.dll.

- Fixed a bug causing the volume of 3D sounds not to be set correctly
  when using DirectSound8 and playing more than one 3D sound of the
  same file at the same time.
  
- File formats with unknown extensions are now loaded by Plugins only
  if they could not be loaded by the internal decoders.

- Several API documentation updates and improvements.

- C++ documentation now has search functionality

- Replaced .chm documentation files now with plain .html files

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

irrKlang 1.1.3c 

- [This update only changes the implementation, the interfaces all remain the
   same, so only the irrKlang.dll file needs to be replaced since version 1.1.3.]

- Fixed a bug causing irrKlang to crash when playing looped, streamed sounds in 3D
  under special circumstances.
  
-----------------------------------------------------------------------

irrKlang 1.1.3b 

- [This update only changes the implementation, the interfaces all remain the
   same, so only the irrKlang.dll file needs to be replaced since version 1.1.3.]

- Small bug fix for the DirectSound drivers: Looped streamed sounds sometimes
  restarted with a small pause (~10 ms) in between.
  
- The ISound and ISoundSource classes in irrKlang.NET now implement the 
  IDisposable interface, so it is now easily possible to free their resources
  manually. 

- The .NET version now uses less memory (earlier unmanaged resource disposal).
  
-----------------------------------------------------------------------

irrKlang 1.1.3 

- Added support for multichannel audio recording. When starting audio recording using
  startRecordingBufferedAudio() or startRecordingCustomHandledAudio(),
  set the new last parameter to the amount of channels you want to record audio data.
  
- Reduced latency of the Linux version (ALSA).

- Improved Mac OS X performance (CoreAudio), irrKlang now performs better on computers
  with slow hardware.
  
- Added two VisualBasic.NET examples

- ForcedStreamingThreshold property of ISound now also available in 
  the .NET verion of irrKlang.
  
- IAudioRecoder::IsRecording now returns the correct value in the .NET 
  version of irrKlang.
  
- IAudioRecorder now correctly returns a SampleFormat data with a lenght of 0 if 
  nothing has been recorded before.
  
- In irrKlang.NET, IAudioRecorder.RecordedAudioData does not throw an 
  OutOfMemoryException anymore if nothing has been recorded yet.

- ISoundSource::getForcedStreamingForceThreshold has been renamed to
  ISoundSource::getForcedStreamingThreshold

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

irrKlang 1.1.2b 

- Added support for (external) multichannel sound hardware on MacOSX.

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

irrKlang 1.1.2 

- Added support to play back 24 bit wave files.

- The DirectSound drivers now use more aggressive sound buffer sharing,
  causing irrKlang to use a lot less memory and also speeding it up a lot
  when playing a lot of big sounds.
  
- There is now a way to access the internal used audio interfaces (ALSA, DirectSound,
  DirectSound8, WinMM, CoreAudio) using ISoundEngine::getInternalAudioInterface().  

- There are now two .NET versions of irrKlang available, one for the .NET CLR 1.1 
  and one for .NET CLR 2.0 (.NET Framework 2, 3 and 3.5). Of course, you can still
  use every version with every project, this is mainly to reduce the size of installers.
  See details in readme.txt
  
- It is now possible in the .NET version to access the decoded sample audio data of 
  non-streamed sounds using ISound.SampleData
  
- It is now possible in the .NET version to access the recorded audio data directly
  using IAudioRecorder.RecordedAudioData

- Fixed a bug in the .NET version of the method EnableCompressorSoundEffect()
  which totally skrewed up its parameters.
  
- Fixed a bug causing the AudioRecorder only to work for one recording session
  in DirectSound.
  
- Fixed a bug causing the irrklang DirectSound driver to start playing the sound when
  it changing its 'looped' flag when the sound is paused.
  
- There is now a new example for C# available which shows how to use irrKlang with
  Windows.Forms.
  
- The forced streaming treshold has been adjusted to 2MB

- Fixed some documentation mistakes in ISoundEngine::addSoundSourceFromPCMData

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

irrKlang 1.1.0 

- Several speed optimizations and memory usage improvments.

- It is now possible to directly access the decoded PCM sample data of 
  every loaded sound source.
  Use ISoundSource::getSampleData() for this.
  
- Fixed a bug causing the UserData object and other resources not to be garbage 
  collected when using ISoundStopEventReceiver in the .NET version of irrKlang.
  
- Fixed a bug causing the sudden end of sound loops under very rare circumstances.

- The 'Could not init COM' warning was senseless and has been removed.

-----------------------------------------------------------------------
irrKlang 1.0.4 

- irrKlang is now able to record audio. Use createIrrKlangAudioRecorder() to create an
  audio recorder object. It currently only works in Windows	and with DirectSound (subject to change).	
	
- A new method ISoundEngine::addSoundSourceFromPCMData() now adds to possibility to use sound
  source from pure PCM data.
	
- The three method overloads of addSoundSource() have now been renamed to
  addSoundSourceFromFile(), addSoundSourceFromMemoryFile(), and addSoundSourceAlias().
	
-----------------------------------------------------------------------
irrKlang 1.0.3

- irrKlang now supports Power PCs (PPC). All features and file formats except 
  Module playback (.mod, .it, .xm, .s3m) are now supported on this platform.
  
- There is now a function to enumerate available audio devices. Select a device ID from this list to 
  let irrKlang use a specific audio device. You can create this list using
  irrklang::ISoundDeviceList* list = createSoundDeviceList();
  or in .NET (C#):
  IrrKlang.ISoundDeviceList list = new IrrKlang.ISoundDeviceList();

- The sound stop event receiver now has an additional parameter, describing the reason why the
  sound has been stopped. The signature of the method is now
  virtual void OnSoundStopped(ISound* sound, E_STOP_EVENT_CAUSE reason, void* userData) = 0;
  or in .NET (C#):
  public void OnSoundStopped(IrrKlang.ISound sound, IrrKlang.StopEventCause reason, object userData);
  
- irrKlang.NET is now a signed assembly to work around some security hassle Microsoft introduced on Vista.
  
- On newer linux versions (such as Ubuntu 7.10), irrKlang sometimes would play sound too fast or with
  a lot of noise, this is repaired now.

- The Linux version of irrKlang shared object file is now named 
   libirrKlang.so instead of previously irrKlang.so

- ALSA driver latency highly improved
   
- IrrKlang.NET now supports retrieving the audio format of a sound, using ISoundSource::AudioFormat.
   
- IrrKlang can now optionally be told which sound device to use for sound output. In addition using
  this feature, it is now possible to define an ALSA device name to be used for alsa output when calling
  createIrrKlangDevice().
  
- irrKlang ignored the new flag ESEO_PRINT_DEBUG_INFO_TO_STDOUT on unix based operation systems,
  this is fixed now.
 
-----------------------------------------------------------------------
irrKlang 1.0.2 

- Breaking interface changes:
   - All interfaces are now located in one single, new namespace named 'irrklang'.
   - vector3df is now named vec3df
   - IReadFile is now named IFileReader
   - IReferenceCounted is now named IRefCounted and IVirtualReferenceCounted now IVirtualRefCounted 
   - primitive types now have the prefix ik_
   - all header files have now the prefix ik_
   - IFileFactory::createAndOpenFile() is now named createFileReader().
   These changes where necessary to simplify and clean up the interface, as well as to make irrklang independent
   of future changes of the Irrlicht Engine. 
   
- It is now possible to change the play position of a sound using ISound::setPlayPosition().

- Software devices such as ALSA, WinMM and CoreAudio also support teh setPlaybackSpeed() functionality now.
   
- Max values of 3D sound now behave differently: They won't mute the sound anymore when 
  the max distance is reached. This should not affect if you set your 3D sound min/max values 
  correctly before: The audible radius of a sound is only influenced by the minimum value, 
  the maximum should be set to a extremely high value usually (such as 1mio) which is the
  default. If the maximum value is set to a small value, the sound won't attenuate anymore
  after this distance and stay audible from then on.
  In short: In nearly all cases, it is not necessary to change the max value of the sound
  if not in linear rolloff mode. Details can be found in the documentation.

- It is now possible to retrieve the audio format of sound sources. Informations
  like channel count (mono/stereo), frame count, sample rate, etc are possible to
  be retrieved using ISoundSource::getAudioFormat()
  
- The internals of irrKlang has been refactored: irrKlang.dll/.so/.dylib files are now smaller, use
  an improved thread locking mechanism and should run a bit faster.
  
- irrKlang now supports a RollOff factor for 3D sounds. Use ISoundEngine::setRolloffFactor() for this.

- it is now possible to get the name of the used sound driver by calling ISoundEngine::getDriverName();

- irrKlang now only prints status messages to stdout if ESEO_PRINT_DEBUG_INFO_TO_STDOUT was set when
  creating the device (which is the default).
  
- There is a new example application included in the SDK: A music player.   
  
- ISound::getPlayPosition() didn't return 100% accurate positions in all cases, this is fixed now.
  
- irrKlang won't touch files anymore for preloading when streaming was specified.

- ISoundSource::getIsSeekingSupported() now returns if the sound supports seeking using 
  ISound::setPlayPosition().

- Fixed a problem with 3D sounds: On some sound boards on windows operating systems older than Vista,
  the 3D sound would not stop at the maximum 3D distance when using DirectSound.
  
- Using ISoundEngine::setDefault3DSoundMaxDistance() had a small bug, which caused the max distance
  not to work in all cases, this is fixed now.
  
-----------------------------------------------------------------------
irrKlang 1.0.1 

- Removed the deprecated header ESoundEffects.h

- Fixed a rarely happening bug causing irrKlang to crash when stopping streamed sounds in the software devices
  at disadvantageous times.
  
- Fixed a rarely happening bug which could have caused a deadlock when stopping a huge
  amount of streamed at the same time sounds.
  
- Documentation fixes
  
-----------------------------------------------------------------------
irrKlang 1.0 

- Added ISound::setIsLooped(), to make it possible to change the loop mode of sounds during runtime.

- It is now possible to preload sounds when using the addSoundSource() method, by
  setting the parameter 'preload' to true. If this flag is set to false (which is default)
  the sound engine will not try to load the sound file when calling this method, 
  but only when play() is called with this sound source as parameter.
  
- Plugins can now be loaded manually from a custom path using ISoundEngine::loadPlugins();
  
- The listener position is now set to a default value when starting up irrKlang.
  Previously, when playing 3D sounds without changing or setting the listener position at all,
  3D sounds would sound differently based on the chosen audio driver.
  
- Fixed a bug of the Linux version of irrKlang, causing ALSA to crash on
  some very few systems (known as the '!snd_interval_empty(i)'-problem).

- Resampling mono sounds in all devices except directSound (it was ok there already)
  now uses only half the memory as before.

- To reduce name clashes with the windows headers for people not using namespaces,
  the Interface IUnknown has been renamed to IRefCounted.

- IrrKlang can now be used easily together with the latest 6 versions of
  Irrlicht (header compatibility).
  
- Fixed a small bug in the .NET version which could return 'false' instead of 'true' under
  special circumstances when calling isCurrentlyPlaying() (Microsoft compiler bug).
  
- The documentation has been updated and extended with lots of examples.

- Examples now also include project files for visual studio 6.0
  
-----------------------------------------------------------------------
irrKlang 1.0-RC1 

- irrKlang now supports MacOSX, using CoreAudio. 
  There is a new sound output driver enumeration literal, named ESOD_CORE_AUDIO, which
  will be chosen automaticly when using ESOD_AUTO_DETECT on MacOsX.
  Please note that irrKlang is a universal binary for both x86 and ppc, but
  only x86 hardware is supported yet, altough some few features might work with the 
  ppc irrKlang version. 

- This version is release candiate 1 for version 1.0. There are now known bugs in irrKlang 
  currently, and if no major bugs will be found, version 1.0 will be released after some time.
  We are already working on new user requested features which will be integrated after the 
  1.0 release.
  
- irrKlang.NET is now able to override the file access just like the C++ version. There is 
  a tutorial in examples.net\CSharp.04.OverrideFileAccess demonstrating this.
  Use IFileFactory with ISoundEngine::addFileFactory for this.
    
- Added a method to irrKlang.NET, making it possible to add System::IO::Streams as sound
  sources. Note that the stream is totally read into memory when adding the sound source.
  If you want irrKlang to dynamically open and close custom file streams without loading
  everything into memory, use the addFileFactory with your own IFileFactory implementation.
  
- Documentation improvements for the .NET version.

-----------------------------------------------------------------------
irrKlang 0.9.1 

- License change: All of the irrKlang Pro features (except static linking and signed assembly)
  are now available for non-commercial use too. Please take a closer look at the new
  license and the website for details.
  The license was changed because of lots of user requests, so that free and open 
  source projects are now able to use irrKlang pro's features as well. To compensate this,
  this means that irrKlang is no more free for commercial use.
  
- Mp3 files with ID3 v2 or later tags in it have not been played correctly in irrKlang, this is 
  fixed now.
  
- It is now possible to add sound source aliases for an existing sound source.
  This is useful if you want to play multiple sounds but each sound isn't necessarily one single file.
  Also useful if you want to or play the same sound using different names, volumes or min and max 3D distances.
  Use the now existing third overload of ISoundEngine::addSoundSource() which takes another 
  sound source as parameter for this.
   
- added ISound::PlayLength property to irrKlang.NET to retrieve the length of sounds in milliseconds.

- irrKlang.NET now needs a lower amount of memory every time a sound is played and also
  frees the memory used by these sounds earlier.
  
- irrKlang.NET now supports sound sources just as the irrKlang C++ version does,
  which means better access and possibility to influence sounds.
  
- irrKlang.NET now also supports default 3D min and max distances.

- irrKlang.NET now supports playing sounds directly from custom memory areas, 
  byte arrays (byte[]). Use ISoundEngine.addSoundSource(yourMemoryArray, someName) for this.
  
- Using irrKlang.NET, streamed sound files have not been closed on some systems. This is fixed now.
  
- It is now possible to set the wanted stream mode for sound sources using 
  ISoundSource::setStreamMode().
  
- Reduced the file size of the irrKlang library again a bit.

- There are two new tutorials for irrKlang.NET in C# available now.
	
-----------------------------------------------------------------------

irrKlang 0.9 

- irrKlang is now available in two editions: 
   - irrKlang which is still free, also for commercial use
   - irrKlang Pro, for a small license fee (see details on http://ambiera.com)
  Some of the new features added in this version are only available in 
  irrKlang Pro (see website for details). The 'pro' features can be accessed 
  and tested with the free version as well, but the audio engine will start playing
  additional sounds (female voice saying 'irrKlang pro') from time to time once
  a pro feature has been used.

- irrKlang now supports DirectSound8 as additional sound output driver.
  Note that the E_SOUND_OUTPUT_DRIVER enumeration has a new member now:
  ESOD_DIRECT_SOUND_8. The ESOD_DIRECT_SOUND is still available.
  
- Doppler effects are now supported (with the DirectSound drivers at least).
  Use ISound::setVelocity to set a sounds velocity, ISoundEngine::setListenerPosition()
  to set the listeners velocity and ISoundEngine::setDopplerEffectParameters() to
  adjust two parameters influencing the doppler effects intensity.
  
- There are now sound stop events: Events which are called when a sound has finished
  playback. Use the new interface ISoundStopEventReciever for this.
  The interface has only one method to be implemented by the user: OnSoundStopped().
  Implement this interface and set it via ISound::setSoundStopEventReciever().
  The sound stop event is guaranteed to be called when a sound or sound stream is finished,
  either because the sound reached its playback end, its sound source was removed,
  ISoundEngine::stopAllSounds() has been called or the whole engine was deleted.
  
- Sound effects are now usable when using the ESOD_DIRECT_SOUND_8 
  driver (default). Available sound effects are:
  - Chorus
  - Compressor
  - Distortion
  - Echo
  - Flanger
  - Gargle
  - 3DL2Reverb
  - ParamEq
  - WavesReverb
  Those effects can be accessed via ISound::getSoundEffectControl(), if the
  'enableSoundEffects' flag was set to true when starting the sound with
  play2D() or play3D().
  
- There is now the option to change the play back speed and the frequency
  of a sound. Use ISound::setPlaybackSpeed() for this.
  
- It is now possible to set a default volume for every sound source via
  ISoundSource::setDefaultVolume().
  
- There is now a statically linkable version of irrKlang available (currently
  windows and irrKlang pro only). 
  Just #Define IRRKLANG_STATIC in your project settings or before including the 
  irrKlang headers to use the static lib version of irrKlang.
  Note that you need to use multi threaded runtime libraries in your project 
  when using irrKlang as static lib, other wise you will get linker errors 
  (like "__getmbcp already defined in LIBC.lib(mbctype.obj)") or random crashes. 
  In Visual Studio, this setting can be found in 
  Project Settings -> C++ -> Code Generation -> Runtime Library.
  
- Memory sound sources are now copied by default, so the memory block can be discarded after
  calling ISoundEngine::addSoundSource(). There is a new parameter 'copyMemory' which
  can be set to false to make the engine use the old, non memory copying behavior.
  
- ISoundEngine::getSoundSource() now has a second parameter making it possible
  to only retrieve a already added sound source without loading it.
  
- There is a new example available showing how to use sound effects.
  
- Refactored a lot of internal code, reducing the file size of the 
  irrKlang binaries.
  
- Fixed a possible synchronization problem (possible crash)

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

irrKlang 0.8.1 

- There was a serious bug in the WAV file reader which read over the end of files,
  when streamed, causing a short 'click' sound. Fixed now.

- 8 Bit sound streams don't produce a click when stopped anymore. 

- Audio stream readers which report a wrong amount of frames in the stream now 
  don't get clipped before playing the end of the sound anymore.
  
-----------------------------------------------------------------------

irrKlang 0.8 

- There are now two ways to set default min and max distances for 3D sounds:
	ISoundEngine::setDefault3DSoundMinDistance(), ISoundEngine::setDefault3DSoundMaxDistance
  for global min/max control, as well as
	ISoundSource::setDefaultMinDistance(), ISoundSource::setDefaultMaxDistance().
  to influence the default min/max value based on the sound source.
  
- Some documentation updates
  
- The short 'click'/'pop' sound which sometimes has been played on streamed, non looped sounds
  when using the DirectSound device is now removed.

- The ALSA driver now also works with sound hardware not supporting power of two buffer sizes.

- License change: irrKlang.so file may also be redistributed.

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

irrKlang 0.7 

- Added possibility to remove sound sources (selective or all at once).
  See ISoundEngine::removeSoundSource() (two overloads) and 
  ISoundEngine::removeAllSoundSources().
  
- There is now the possibility to get the length of any sound source or playing sound.
  See ISound::getPlayLength() and ISoundSource::getPlayLength().
  
- Resources of finished played sounds are now freed much earlier, causing smaller memory usage.
  
- When stream playback is paused, the play position returned by ISound::getPlayPosition()
  won't advance forward anymore in DirectSound, this was a bug which is now fixed.

- Fixed a bug which caused ISound::isFinished() to be returned incorrect values when 
  using the DirectSound driver.
  
- Fixed a bug causing a wrong value being reported using getPlayPosition() when playing
  very long streams using the WinMM or the ALSA driver.

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

irrKlang 0.6 

- There are some new supported file formats: MOD, XM, IT and S3M. Implemented using the
  excellent Dynamic Universal Music Bibliotheque.

- irrKlang now is available for .NET languages (C#, VisualBasic.NET, 
  IronPhyton, Boo, Delphi.NET etc).
  See /bin/dotnet for the binary, and /examples.net for some examples.

- irrKlang now chooses sound drivers in a more intelligent way when running in
  driver auto detect mode (ESOD_AUTO_DETECT).
  For example when DirectSound is available but fails starting up (for whatever reason),
  irrKlang will select the winMM driver instead of not playing any sound. 
  
- It is now possible to influence or disable the threshold where irrKlang desides
  to stream a file regardless of the user specified setting. 
  Use ISoundSource::setForcedStreamingThreshold for this.
  
- irrKlang is now compatible with Irrlicht 1.3, the IFileReader interface has been
  updated. Meaning you can use the same IFileReader interfaces between those two 
  engines and for example make irrKlang read files using Irrlicht's file system.

- irrKlang now needs even less memory when playing a lot of short soundfiles at the same time,
  achieved through a nicer internal (de)allocation scheme.

- When using software 3d sound (using winMM or ALSA), the left and right speaker were swapped.
  This is fixed now.
  
- Failed COM initialization is now only a warning, and irrKlang will not abort with an error.

- Under some circumstances (bad windows scheduling, cpu intensive applications etc) it could 
  happen that looped, streamed sound filed played via DirectSound in irrKlang would play
  strange noises after the first repeat. This has been corrected now.

- On some hardware under Linux, irrKlang wasn't able to set the wanted buffer size, 
  this has been improved now.
  
- Removed a bug causing visual studio 2005 projects not to compile when using irrKlang without
  a WIN32 define.

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

irrKlang 0.5 

- Linux is now supported as platform. irrKlang uses ALSA as output target here by default.

- irrKlang now supports winMM as output driver next to DirectSound in Windows.

- added a new method to pause/unpause all sounds:
	ISoundEngine::setAllSoundsPaused( bool bPaused = true )

- The flag ESEO_LOAD_PLUGINS now correctly prevents loading of plugins if 
  not set. This was not working before.
  
- ISoundEngine::stopAllSounds() didn't work with the DirectSound output driver correctly,
  this has been corrected now.

- irrKlang can now be used as static lib. Just #Define IRRKLANG_STATIC in your project 
  settings or before including the irrKlang headers to use the static lib version
  of irrKlang. Note that you need to use multi threaded runtime libraries in your project 
  when using irrKlang as static lib, other wise you will get linker errors 
  (like "__getmbcp already defined in LIBC.lib(mbctype.obj)") or random crashes. 
  In Visual Studio, this setting can be found in 
  Project Settings -> C++ -> Code Generation -> Runtime Library.
  (If the static library isn't released in this package it may come as separate archive)

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

irrKlang 0.4 

- Added support for the GCC compiler

- Added the possibility to load sounds directly from memory.
  For this, two overloaded methods to the ISoundEngine interface have been added:
    ISoundSource* addSoundSource(void* memory, ik_s32 sizeInBytes, const ik_c8* soundName);
    ISoundSource* addSoundSource(const ik_c8* fileName, E_STREAM_MODE mode=SM_AUTO_DETECT);

- Added possibility to override file access easily.

- Added two tutorials: MemoryPlayback and OverrideFileAccess.

- Added support for the Code::Blocks IDE

- Removed streamMode parameter from getSoundSource(). If you needed this, please use
  addSoundSource() now instead.

- Sounds are now loaded correctly independent of their file extension.

- irrKlang no longer crashes if more than one instance of it is created.

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

irrKlang 0.3 

- Added the option to play mp3 files. This functionality is available as plugin and
  works when the  file ikpMP3.dll is available. Simply remove it if you don't want
  or need mp3 support for your software. Please note that if you are using mp3
  files in your application, you might need to pay a license fee to Thompson for
  their patent (This is nothing irrKlang specific, every application needs to do
  this today if Thompson wants it to.)
  The ikpMP3.dll decoder is available as full source in the \plugins directory
  and licensed under the LGPL.

- Added plugin support. Create a .dll which starts with ikp (for IrrKlangPlugin)
  including a function looking like this:
  __declspec(dllexport) void __stdcall irrKlangPluginInit(
        ISoundEngine* engine, const char* version) { // your code here }
  irrKlang will load the dll and invoke that function. There is an example plugin
  with full source code in the \plugins directory which enhances irrKlang
  to decode mp3 files.

- IrrKlang now supports 3D buffers (enabled by default). Previously, they have been
  emulated. By not specifying the ESEO_USE_3D_BUFFERS flag when calling
  createIrrKlangDevice(), irrKlang will not use 3D buffers.

- Added the possibility to write debug info to any windows debugger supporting
  OutputDebugString() (like VisualStudio). This is pretty useful if your application
  does not capture any console output. Use ESEO_PRINT_DEBUG_INFO_TO_DEBUGGER to
  enable this feature when calling createIrrKlangDevice().

- irrKlang now supports multiple rolloff models. 3D sounds are now played back with
  a logarithmic rolloff by default. In previous versions, irrKlang used a linear rolloff
  model. Use ESEO_LINEAR_ROLLOFF when calling createIrrKlangDevice() to switch
  to the linear rolloff model.

- The createIrrKlangDevice() function now accepts several options as flags. Note that
  the C++ compiler automaticly converts bools to this flags so if you used a previous
  version of the engine you might want to check if your parameters are correctly set.

- Added the method ISound::getPlayPosition() which returns the current play position of
  the sound in milliseconds.

- Fixed a possible crash when stopping a streamed sound manually at the same time
  it also stopped automaticly.

- Fixed playback of looped streamed sounds causing artifacts under several circumstances.

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

irrKlang 0.2 

- Fixed 3d positioning of sounds

- Fixed a bug in ik_ISound.h causing irrKlang header not to compile with some strict compiler settings.

- Added some internal performance improvements

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

irrKlang 0.1 

Initial release.

Although this is the first release, irrKlang already has some features:

- Support for .WAV and .OGG files (MP3, FLAC, SPEEX support planned and
coming soon)

- Buffered and streamed audio playback

- Seamless 2D and 3D audio: It is possible to play short simple stereo
sounds as well multiple large streamed sound files in 3D space at the
same time for example.

- High level autodetection: The engine can do everything for you. Just
tell it to play a sound file, and it will load, cache and/or stream
sound data for you automaticly, depending on what is best for
performance and memory usage. But if you want to specify how the engine
should handle this, you can specify this as well.

- Extendable: Possibility to write own file format readers/decoders to
extend the engine with it.

- Multi/Singlethreaded modes: The engine can run both multithreaded or
singlethreaded in the same thread as your application, to make it
possible to debug your application easier for example.

- Low level audio output manipulation: Before starting to play a sound
or even during it is already playing, it is possible of course to alter
any aspect of it like panning, volume and 3d position.

- Fast 3D audio on low end hardware: Because some low end audio hardware
is not able to play 3D sounds without significant performance loss or
some don't support 3d audio buffers at all, irrEdit has a high
performance 3d sound buffer emulator built-in, causing a sound
experience nearly as it was a real 3d sound buffer.

- Separate music and sound control: As most applications want to
separate between sound and music playback, the engine offers to control
them separately, like for example via a master volume control. No need
to manage alls your playing sounds just to change the volume of all
sounds. (The control of the 'music' part in the API is not available in
version 0.1 yet, but can be used via normal sounds already)

- Full playback control: Play any sound and forget about it if you want.
Then later, you can query at any time which sound is currently playing
and influene this if you want.

