* Forgot include files for irrklang in last commit

This commit is contained in:
Shlainn 2010-08-18 15:58:30 +02:00
parent 87b5a5f765
commit 1fede6d76c
20 changed files with 3012 additions and 2950 deletions

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h
@ -21,22 +21,25 @@ namespace irrklang
ESOD_DIRECT_SOUND_8, ESOD_DIRECT_SOUND_8,
//! DirectSound sound output driver, windows only. //! DirectSound sound output driver, windows only.
/* This uses DirectSound 3 or above, if available. If DX8 sound effects /** This uses DirectSound 3 or above, if available. If DX8 sound effects
are needed, use ESOD_DIRECT_SOUND_8 instead. The are needed, use ESOD_DIRECT_SOUND_8 instead. The
ESOD_DIRECT_SOUND driver may be available on more and older windows ESOD_DIRECT_SOUND driver may be available on more and older windows
versions than ESOD_DIRECT_SOUND_8.*/ versions than ESOD_DIRECT_SOUND_8.*/
ESOD_DIRECT_SOUND, ESOD_DIRECT_SOUND,
//! WinMM sound output driver, windows only. //! WinMM sound output driver, windows only.
/** Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */
ESOD_WIN_MM, ESOD_WIN_MM,
//! ALSA sound output driver, linux only. //! ALSA sound output driver, linux only.
/* When using ESOD_ALSA in createIrrKlangDevice(), it is possible to set the third parameter, /** When using ESOD_ALSA in createIrrKlangDevice(), it is possible to set the third parameter,
'deviceID' to the name of specific ALSA pcm device, to the irrKlang force to use this one. 'deviceID' to the name of specific ALSA pcm device, to the irrKlang force to use this one.
Set it to 'default', or 'plug:hw' or whatever you need it to be.*/ Set it to 'default', or 'plug:hw' or whatever you need it to be.
Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */
ESOD_ALSA, ESOD_ALSA,
//! Core Audio sound output driver, mac os only. //! Core Audio sound output driver, mac os only.
/** Supports the ISoundMixedOutputReceiver interface using setMixedDataOutputReceiver. */
ESOD_CORE_AUDIO, ESOD_CORE_AUDIO,
//! Null driver, creating no sound output //! Null driver, creating no sound output

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -29,8 +29,11 @@ namespace irrklang
buffer, use startRecordingCustomHandledAudio(). buffer, use startRecordingCustomHandledAudio().
\param sampleRate: Sample rate of the recorded audio. \param sampleRate: Sample rate of the recorded audio.
\param sampleFormat: Sample format of the recorded audio. \param sampleFormat: Sample format of the recorded audio.
\param channelCount: Amount of audio channels.
\return Returns true if successfully started recording and false if not.*/ \return Returns true if successfully started recording and false if not.*/
virtual bool startRecordingBufferedAudio(ik_s32 sampleRate=22000, ESampleFormat sampleFormat=ESF_S16) = 0; virtual bool startRecordingBufferedAudio(ik_s32 sampleRate=22000,
ESampleFormat sampleFormat=ESF_S16,
ik_s32 channelCount=1) = 0;
//! Starts recording audio. //! Starts recording audio.
/** Clears all possibly previously recorded buffered audio data and starts to record /** Clears all possibly previously recorded buffered audio data and starts to record
@ -42,9 +45,12 @@ namespace irrklang
captured audio data chunk. captured audio data chunk.
\param sampleRate: Sample rate of the recorded audio. \param sampleRate: Sample rate of the recorded audio.
\param sampleFormat: Sample format of the recorded audio. \param sampleFormat: Sample format of the recorded audio.
\param channelCount: Amount of audio channels.
\return Returns true if successfully started recording and false if not. */ \return Returns true if successfully started recording and false if not. */
virtual bool startRecordingCustomHandledAudio(ICapturedAudioDataReceiver* receiver, virtual bool startRecordingCustomHandledAudio(ICapturedAudioDataReceiver* receiver,
ik_s32 sampleRate=22000, ESampleFormat sampleFormat=ESF_S16) = 0; ik_s32 sampleRate=22000,
ESampleFormat sampleFormat=ESF_S16,
ik_s32 channelCount=1) = 0;
//! Stops recording audio. //! Stops recording audio.
virtual void stopRecordingAudio() = 0; virtual void stopRecordingAudio() = 0;

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h
@ -14,27 +14,29 @@ namespace irrklang
It also is able to store a debug string for every instance of an object. It also is able to store a debug string for every instance of an object.
Most objects of irrKlang are derived from IRefCounted, and so they are reference counted. Most objects of irrKlang are derived from IRefCounted, and so they are reference counted.
When you create an object in irrKlang, calling a method When you receive an object in irrKlang (for example an ISound using play2D() or
which starts with 'create', an object is created, and you get a pointer play3D()), and you no longer need the object, you have
to the new object. If you no longer need the object, you have
to call drop(). This will destroy the object, if grab() was not called to call drop(). This will destroy the object, if grab() was not called
in another part of you program, because this part still needs the object. in another part of you program, because this part still needs the object.
Note, that you only need to call drop() to the object, if you created it, Note, that you only don't need to call drop() for all objects you receive, it
and the method had a 'create' in it. will be explicitely noted in the documentation.
A simple example: A simple example:
If you want to create a texture, you may want to call an imaginable method If you want to play a sound, you may want to call the method
IDriver::createTexture. You call ISoundEngine::play2D. You call
ITexture* texture = driver->createTexture(128, 128); ISound* mysound = engine->play2D("foobar.mp3", false, false true);
If you no longer need the texture, call texture->drop(). If you no longer need the sound interface, call mysound->drop(). The
sound may still play on after this because the engine still has a reference
to that sound, but you can be sure that it's memory will be released as soon
the sound is no longer used.
If you want to load a texture, you may want to call imaginable method If you want to add a sound source, you may want to call a method
IDriver::loadTexture. You do this like ISoundEngine::addSoundSourceFromFile. You do this like
ITexture* texture = driver->loadTexture("example.jpg"); ISoundSource* mysource = engine->addSoundSourceFromFile("example.jpg");
You will not have to drop the pointer to the loaded texture, because You will not have to drop the pointer to the source, because
the name of the method does not start with 'create'. The texture sound sources are managed by the engine (it will live as long as the sound engine) and
is stored somewhere by the driver. the documentation says so.
*/ */
class IRefCounted class IRefCounted
{ {
@ -59,54 +61,40 @@ namespace irrklang
//! with its methods grab() and drop(). Most objects of irrklang //! with its methods grab() and drop(). Most objects of irrklang
//! are derived from IRefCounted, and so they are reference counted. //! are derived from IRefCounted, and so they are reference counted.
//! //!
//! When you create an object in irrKlang, calling a method //! When you receive an object in irrKlang (for example an ISound using play2D() or
//! which starts with 'create', an object is created, and you get a pointer //! play3D()), and you no longer need the object, you have
//! to the new object. If you no longer need the object, you have
//! to call drop(). This will destroy the object, if grab() was not called //! to call drop(). This will destroy the object, if grab() was not called
//! in another part of you program, because this part still needs the object. //! in another part of you program, because this part still needs the object.
//! Note, that you only need to call drop() to the object, if you created it, //! Note, that you only don't need to call drop() for all objects you receive, it
//! and the method had a 'create' in it. //! will be explicitely noted in the documentation.
//! //!
//! A simple example: //! A simple example:
//! //!
//! If you want to create a texture, you may want to call an imaginable method //! If you want to play a sound, you may want to call the method
//! IDriver::createTexture. You call //! ISoundEngine::play2D. You call
//! ITexture* texture = driver->createTexture(128, 128); //! ISound* mysound = engine->play2D("foobar.mp3", false, false true);
//! If you no longer need the texture, call texture->drop(). //! If you no longer need the sound interface, call mysound->drop(). The
//! If you want to load a texture, you may want to call imaginable method //! sound may still play on after this because the engine still has a reference
//! IDriver::loadTexture. You do this like //! to that sound, but you can be sure that it's memory will be released as soon
//! ITexture* texture = driver->loadTexture("example.jpg"); //! the sound is no longer used.
//! You will not have to drop the pointer to the loaded texture, because
//! the name of the method does not start with 'create'. The texture
//! is stored somewhere by the driver.
void grab() { ++ReferenceCounter; } void grab() { ++ReferenceCounter; }
//! Drops the object. Decrements the reference counter by one. //! When you receive an object in irrKlang (for example an ISound using play2D() or
//! Returns true, if the object was deleted. //! play3D()), and you no longer need the object, you have
//! The IRefCounted class provides a basic reference counting mechanism
//! with its methods grab() and drop(). Most objects of irrKlang
//! Engine are derived from IRefCounted, and so they are reference counted.
//!
//! When you create an object in irrKlang, calling a method
//! which starts with 'create', an object is created, and you get a pointer
//! to the new object. If you no longer need the object, you have
//! to call drop(). This will destroy the object, if grab() was not called //! to call drop(). This will destroy the object, if grab() was not called
//! in another part of you program, because this part still needs the object. //! in another part of you program, because this part still needs the object.
//! Note, that you only need to call drop() to the object, if you created it, //! Note, that you only don't need to call drop() for all objects you receive, it
//! and the method had a 'create' in it. //! will be explicitely noted in the documentation.
//! //!
//! A simple example: //! A simple example:
//! //!
//! If you want to create a texture, you may want to call an imaginable method //! If you want to play a sound, you may want to call the method
//! IDriver::createTexture. You call //! ISoundEngine::play2D. You call
//! ITexture* texture = driver->createTexture(128, 128); //! ISound* mysound = engine->play2D("foobar.mp3", false, false true);
//! If you no longer need the texture, call texture->drop(). //! If you no longer need the sound interface, call mysound->drop(). The
//! If you want to load a texture, you may want to call imaginable method //! sound may still play on after this because the engine still has a reference
//! IDriver::loadTexture. You do this like //! to that sound, but you can be sure that it's memory will be released as soon
//! ITexture* texture = driver->loadTexture("example.jpg"); //! the sound is no longer used.
//! You will not have to drop the pointer to the loaded texture, because
//! the name of the method does not start with 'create'. The texture
//! is stored somewhere by the driver.
bool drop() bool drop()
{ {
--ReferenceCounter; --ReferenceCounter;

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h
@ -11,11 +11,13 @@
#include "ik_ISound.h" #include "ik_ISound.h"
#include "ik_EStreamModes.h" #include "ik_EStreamModes.h"
#include "ik_IFileFactory.h" #include "ik_IFileFactory.h"
#include "ik_ISoundMixedOutputReceiver.h"
namespace irrklang namespace irrklang
{ {
class IAudioStreamLoader; class IAudioStreamLoader;
struct SInternalAudioInterface;
//! Interface to the sound engine, for playing 3d and 2d sound and music. //! Interface to the sound engine, for playing 3d and 2d sound and music.
/** This is the main interface of irrKlang. You usually would create this using /** This is the main interface of irrKlang. You usually would create this using
@ -199,7 +201,7 @@ namespace irrklang
file format it is and might be able to start playback faster. file format it is and might be able to start playback faster.
\param copyMemory If set to true which is default, the memory block is copied \param copyMemory If set to true which is default, the memory block is copied
and stored in the engine, after calling addSoundSourceFromMemory() the memory pointer can be deleted and stored in the engine, after calling addSoundSourceFromMemory() the memory pointer can be deleted
savely. If set to true, the memory is not copied and the user takes the responsibility that savely. If set to false, the memory is not copied and the user takes the responsibility that
the memory block pointed to remains there as long as the sound engine or at least this sound the memory block pointed to remains there as long as the sound engine or at least this sound
source exists. source exists.
\return Returns the pointer to the added sound source or 0 if not sucessful because for \return Returns the pointer to the added sound source or 0 if not sucessful because for
@ -386,9 +388,43 @@ namespace irrklang
\return returns true if sucessful or fals if not, for example because the path could \return returns true if sucessful or fals if not, for example because the path could
not be found. */ not be found. */
virtual bool loadPlugins(const ik_c8* path) = 0; virtual bool loadPlugins(const ik_c8* path) = 0;
//! Returns a pointer to internal sound engine pointers, like the DirectSound interface.
/** Use this with caution. This is only exposed to make it possible for other libraries
such as Video playback packages to extend or use the sound driver irrklang uses. */
virtual const SInternalAudioInterface& getInternalAudioInterface() = 0;
//! Sets the OutputMixedDataReceiver, so you can receive the pure mixed output audio data while it is being played.
/** This can be used to store the sound output as .wav file or for creating a Oscillograph or similar.
This works only with software based audio drivers, that is ESOD_WIN_MM, ESOD_ALSA, and ESOD_CORE_AUDIO.
Returns true if sucessful and fals if the current audio driver doesn't support this feature. Set this to null
again once you don't need it anymore. */
virtual bool setMixedDataOutputReceiver(ISoundMixedOutputReceiver* receiver) = 0;
}; };
//! structure for returning pointers to the internal audio interface.
/** Use ISoundEngine::getInternalAudioInterface() to get this. */
struct SInternalAudioInterface
{
//! IDirectSound interface, this is not null when using the ESOD_DIRECT_SOUND audio driver
void* pIDirectSound;
//! IDirectSound8 interface, this is not null when using the ESOD_DIRECT_SOUND8 audio driver
void* pIDirectSound8;
//! HWaveout interface, this is not null when using the ESOD_WIN_MM audio driver
void* pWinMM_HWaveOut;
//! ALSA PCM Handle interface, this is not null when using the ESOD_ALSA audio driver
void* pALSA_SND_PCM;
//! AudioDeviceID handle, this is not null when using the ESOD_CORE_AUDIO audio driver
ik_u32 pCoreAudioDeciceID;
};
} // end namespace irrklang } // end namespace irrklang

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h
@ -146,7 +146,7 @@ namespace irrklang
//! Returns the threshold size where irrKlang decides to force streaming a file independent of the user specified setting. //! Returns the threshold size where irrKlang decides to force streaming a file independent of the user specified setting.
/** The value is specified in uncompressed bytes and its default value is /** The value is specified in uncompressed bytes and its default value is
about one Megabyte. See setForcedStreamingThreshold() for details. */ about one Megabyte. See setForcedStreamingThreshold() for details. */
virtual ik_s32 getForcedStreamingForceThreshold() = 0; virtual ik_s32 getForcedStreamingThreshold() = 0;
//! Returns a pointer to the loaded and decoded sample data. //! Returns a pointer to the loaded and decoded sample data.
/** \return Returns a pointer to the sample data. The data is provided in decoded PCM data. The /** \return Returns a pointer to the sample data. The data is provided in decoded PCM data. The

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,4 +1,4 @@
// Copyright (C) 2002-2008 Nikolaus Gebhardt // Copyright (C) 2002-2009 Nikolaus Gebhardt
// This file is part of the "irrKlang" library. // This file is part of the "irrKlang" library.
// For conditions of distribution and use, see copyright notice in irrKlang.h // For conditions of distribution and use, see copyright notice in irrKlang.h

View File

@ -1,6 +1,6 @@
/* irrKlang.h -- interface of the 'irrKlang' library /* irrKlang.h -- interface of the 'irrKlang' library
Copyright (C) 2002-2007 Nikolaus Gebhardt Copyright (C) 2002-2009 Nikolaus Gebhardt
This software is provided 'as-is', without any express or implied This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages warranty. In no event will the authors be held liable for any damages
@ -31,11 +31,12 @@
#include "ik_IFileReader.h" #include "ik_IFileReader.h"
#include "ik_ISoundDeviceList.h" #include "ik_ISoundDeviceList.h"
#include "ik_IAudioRecorder.h" #include "ik_IAudioRecorder.h"
#include "ik_ISoundMixedOutputReceiver.h"
//! irrKlang Version //! irrKlang Version
#define IRR_KLANG_VERSION "1.1.0" #define IRR_KLANG_VERSION "1.3.0"
/*! \mainpage irrKlang 1.1.0 API documentation /*! \mainpage irrKlang 1.3.0 API documentation
* *
* <div align="center"><img src="logobig.png" ></div> * <div align="center"><img src="logobig.png" ></div>
@ -44,6 +45,7 @@
* @ref intro <br/> * @ref intro <br/>
* @ref features <br/> * @ref features <br/>
* @ref links <br/> * @ref links <br/>
* @ref tipsandtricks <br/>
* <br/> * <br/>
* Programming irrKlang:<br/> * Programming irrKlang:<br/>
* @ref concept <br/> * @ref concept <br/>
@ -97,6 +99,7 @@
* <li>RIFF WAVE (*.wav)</li> * <li>RIFF WAVE (*.wav)</li>
* <li>Ogg Vorbis (*.ogg)</li> * <li>Ogg Vorbis (*.ogg)</li>
* <li>MPEG-1 Audio Layer 3 (*.mp3)</li> * <li>MPEG-1 Audio Layer 3 (*.mp3)</li>
* <li>Free Lossless Audio Codec (*.flac)</li>
* <li>Amiga Modules (*.mod)</li> * <li>Amiga Modules (*.mod)</li>
* <li>Impulse Tracker (*.it)</li> * <li>Impulse Tracker (*.it)</li>
* <li>Scream Tracker 3 (*.s3d)</li> * <li>Scream Tracker 3 (*.s3d)</li>
@ -104,7 +107,7 @@
* </ul> * </ul>
* It is also able to run on different operating systems and use several output drivers: * It is also able to run on different operating systems and use several output drivers:
*<ul> *<ul>
* <li>Windows 98, ME, NT 4, 2000, XP, Vista</li> * <li>Windows 98, ME, NT 4, 2000, XP, Vista, Windows 7</li>
* <ul> * <ul>
* <li>DirectSound</li> * <li>DirectSound</li>
* <li>DirectSound8</li> * <li>DirectSound8</li>
@ -135,6 +138,32 @@
* <br/> * <br/>
* *
* *
*
* \section tipsandtricks Tips and Tricks
*
* This section lists a few tips you might consider when implementing the sound part of your application
* using irrKlang:
*
* <ul>
* <li>If you can choose which audio file format is the primary one for your application,
* use .OGG files, instead of for example .MP3 files. irrKlang uses a lot less memory
* and CPU power when playing .OGGs.</li>
* <li>To keep your application simple, each time you play a sound, you can use for example
* play2D("filename.mp3") and let irrKlang handle the rest. There is no need to implement
* a preloading/caching/file management system for the audio playback. irrKlang will handle
* all this by itself and will never load a file twice. </li>
* <li>irrKlang is crashing in your application? This should not happen, irrKlang is pretty stable,
* and in most cases, this is a problem in your code: In a lot of cases the reason is simply
* a wrong call to irrklang::IRefCounted::drop(). Be sure you are doing it correctly. (If you are unsure,
* tempoarily remove all calls to irrklang::IRefCounted::drop() and see if this helps.)</li>
* </ul>
*
* <br/>
* <br/>
* <br/>
* <br/>
*
*
* *
* \section concept Starting up the Engine * \section concept Starting up the Engine
* *