Index: /code/branches/sound2/src/CMakeLists.txt
===================================================================
--- /code/branches/sound2/src/CMakeLists.txt	(revision 3012)
+++ /code/branches/sound2/src/CMakeLists.txt	(revision 3013)
@@ -141,5 +141,4 @@
 ADD_SUBDIRECTORY(util)
 ADD_SUBDIRECTORY(core)
-#ADD_SUBDIRECTORY(audio)
 ADD_SUBDIRECTORY(network)
 ADD_SUBDIRECTORY(orxonox)
Index: /code/branches/sound2/src/orxonox/CMakeLists.txt
===================================================================
--- /code/branches/sound2/src/orxonox/CMakeLists.txt	(revision 3012)
+++ /code/branches/sound2/src/orxonox/CMakeLists.txt	(revision 3013)
@@ -31,4 +31,5 @@
 ADD_SUBDIRECTORY(overlays)
 ADD_SUBDIRECTORY(tools)
+ADD_SUBDIRECTORY(sound)
 GET_ALL_HEADER_FILES(ORXONOX_HDR_FILES)
 SET(ORXONOX_FILES ${ORXONOX_SRC_FILES} ${ORXONOX_HDR_FILES})
@@ -51,4 +52,9 @@
   ${CEGUILUA_LIBRARY}
   ${Boost_SYSTEM_LIBRARY}
+  ${OPENAL_LIBRARY}
+  ${ALUT_LIBRARY}
+  ${VORBISFILE_LIBRARY}
+  ${VORBIS_LIBRARY}
+  ${OGG_LIBRARY}
   ogreceguirenderer_orxonox
   tinyxml++_orxonox
@@ -58,5 +64,4 @@
   core
   network
-  #audio
 )
 
Index: /code/branches/sound2/src/orxonox/OrxonoxPrereqs.h
===================================================================
--- /code/branches/sound2/src/orxonox/OrxonoxPrereqs.h	(revision 3012)
+++ /code/branches/sound2/src/orxonox/OrxonoxPrereqs.h	(revision 3013)
@@ -250,4 +250,8 @@
     //gui
     class GUIManager;
+
+    //sound
+    class SoundBase;
+    class SoundManger;
 }
 
Index: /code/branches/sound2/src/orxonox/objects/Level.cc
===================================================================
--- /code/branches/sound2/src/orxonox/objects/Level.cc	(revision 3012)
+++ /code/branches/sound2/src/orxonox/objects/Level.cc	(revision 3013)
@@ -41,4 +41,5 @@
 #include "objects/gametypes/Gametype.h"
 #include "overlays/OverlayGroup.h"
+#include "sound/SoundBase.h"
 
 #include "util/Math.h"
@@ -68,4 +69,7 @@
             if (this->xmlfile_)
                 Loader::unload(this->xmlfile_);
+
+            if(this->ambientsound_ != NULL)
+                delete this->ambientsound_;
         }
     }
@@ -77,4 +81,6 @@
         XMLPortParam(Level, "description", setDescription, getDescription, xmlelement, mode);
         XMLPortParam(Level, "gametype", setGametypeString, getGametypeString, xmlelement, mode).defaultValues("Gametype");
+
+        XMLPortParamLoadOnly(Level, "ambientsound", loadAmbientSound, xmlelement, mode);
 
         XMLPortObjectExtended(Level, BaseObject, "", addObject, getObject, xmlelement, mode, true, false);
@@ -148,4 +154,19 @@
     }
 
+    void Level::loadAmbientSound(const std::string& filename)
+    {
+        if(filename == "") return;
+        else
+        {
+            if(this->ambientsound_ == NULL)
+            {
+                this->ambientsound_ = new SoundBase();
+            }
+
+            this->ambientsound_->loadFile(filename);
+            this->ambientsound_->play(true);
+        }
+    }
+
     void Level::playerEntered(PlayerInfo* player)
     {
Index: /code/branches/sound2/src/orxonox/objects/Level.h
===================================================================
--- /code/branches/sound2/src/orxonox/objects/Level.h	(revision 3012)
+++ /code/branches/sound2/src/orxonox/objects/Level.h	(revision 3013)
@@ -51,4 +51,6 @@
                 { return this->description_; }
 
+            void loadAmbientSound(const std::string& filename);
+
             void playerEntered(PlayerInfo* player);
             void playerLeft(PlayerInfo* player);
@@ -69,4 +71,6 @@
             XMLFile*               xmlfile_;
             std::list<BaseObject*> objects_;
+
+            SoundBase*             ambientsound_;
     };
 }
Index: /code/branches/sound2/src/orxonox/objects/items/Engine.cc
===================================================================
--- /code/branches/sound2/src/orxonox/objects/items/Engine.cc	(revision 3012)
+++ /code/branches/sound2/src/orxonox/objects/items/Engine.cc	(revision 3013)
@@ -36,4 +36,5 @@
 #include "objects/worldentities/pawns/SpaceShip.h"
 #include "tools/Shader.h"
+#include "sound/SoundBase.h"
 
 namespace orxonox
@@ -66,4 +67,6 @@
         this->setConfigValues();
         this->registerVariables();
+
+        this->sound_ = NULL;
     }
 
@@ -76,4 +79,7 @@
             if (this->boostBlur_)
                 delete this->boostBlur_;
+
+            if(this->sound_ != NULL)
+                delete this->sound_;
         }
     }
@@ -95,4 +101,6 @@
         XMLPortParam(Engine, "accelerationleftright", setAccelerationLeftRight, setAccelerationLeftRight, xmlelement, mode);
         XMLPortParam(Engine, "accelerationupdown",    setAccelerationUpDown,    setAccelerationUpDown,    xmlelement, mode);
+
+        XMLPortParamLoadOnly(Engine, "sound", loadSound, xmlelement, mode);
     }
 
@@ -219,4 +227,5 @@
     {
         this->ship_ = ship;
+
         if (ship)
         {
@@ -230,4 +239,7 @@
                 this->boostBlur_ = 0;
             }
+
+            if(this->sound_ != NULL)
+                this->sound_->attachToEntity(ship);
         }
     }
@@ -240,3 +252,18 @@
             return Vector3::ZERO;
     }
+
+    void Engine::loadSound(const std::string filename)
+    {
+        if(filename == "") return;
+        else
+        {
+            if(this->sound_ == NULL)
+            {
+                this->sound_ = new SoundBase(this->ship_);
+            }
+
+            this->sound_->loadFile(filename);
+            this->sound_->play(true);
+        }
+    }
 }
Index: /code/branches/sound2/src/orxonox/objects/items/Engine.h
===================================================================
--- /code/branches/sound2/src/orxonox/objects/items/Engine.h	(revision 3012)
+++ /code/branches/sound2/src/orxonox/objects/items/Engine.h	(revision 3013)
@@ -107,4 +107,6 @@
             virtual const Vector3& getDirection() const;
 
+            void loadSound(const std::string filename);
+
         private:
             void networkcallback_shipID();
@@ -129,4 +131,6 @@
             Shader* boostBlur_;
             float blurStrength_;
+
+            SoundBase* sound_;
     };
 }
Index: /code/branches/sound2/src/orxonox/sound/CMakeLists.txt
===================================================================
--- /code/branches/sound2/src/orxonox/sound/CMakeLists.txt	(revision 3013)
+++ /code/branches/sound2/src/orxonox/sound/CMakeLists.txt	(revision 3013)
@@ -0,0 +1,8 @@
+ADD_SOURCE_FILES(ORXONOX_SRC_FILES
+    SoundManager.h
+    SoundBase.h
+
+    SoundManager.cc
+    SoundBase.cc
+)
+
Index: /code/branches/sound2/src/orxonox/sound/SoundBase.cc
===================================================================
--- /code/branches/sound2/src/orxonox/sound/SoundBase.cc	(revision 3013)
+++ /code/branches/sound2/src/orxonox/sound/SoundBase.cc	(revision 3013)
@@ -0,0 +1,214 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *       Erwin 'vaiursch' Herrsche
+ *   Co-authors:
+ *      ...
+ *
+ */
+#include <vector>
+#include <AL/alut.h>
+#include <vorbis/vorbisfile.h>
+
+#include "orxonox/objects/worldentities/WorldEntity.h"
+#include "util/Math.h"
+#include "SoundBase.h"
+#include "SoundManager.h"
+#include "core/Core.h"
+
+namespace orxonox 
+{
+    SoundManager* SoundBase::soundmanager_s = NULL;
+
+    SoundBase::SoundBase(WorldEntity* entity)
+    {
+        if(SoundBase::soundmanager_s == NULL)
+        {
+            SoundBase::soundmanager_s = new SoundManager();
+        }
+
+        this->source_ = 0;
+        this->buffer_ = 0;
+        this->entity_ = entity;
+
+        SoundBase::soundmanager_s->addSound(this);
+    }
+
+    SoundBase::~SoundBase()
+    {
+        alSourcei(this->source_, AL_BUFFER, 0);
+        alDeleteSources(1, &this->source_);
+        alDeleteBuffers(1, &this->buffer_);
+    }
+
+    void SoundBase::attachToEntity(WorldEntity* entity)
+    {
+        this->entity_ = entity;
+        this->update();
+    }
+
+    void SoundBase::update() {
+        if(this->entity_ != NULL && alIsSource(this->source_)) {
+            Vector3 pos = this->entity_->getPosition();
+            alSource3f(this->source_, AL_POSITION, pos.x, pos.y, pos.z);
+            ALenum error = alGetError();
+            if(error == AL_INVALID_VALUE)
+                COUT(2) << "Sound: OpenAL: Invalid sound position" << std::endl;
+
+            Vector3 vel = this->entity_->getVelocity();
+            alSource3f(this->source_, AL_VELOCITY, vel.x, vel.y, vel.z);
+            error = alGetError();
+            if(error == AL_INVALID_VALUE)
+                COUT(2) << "Sound: OpenAL: Invalid sound velocity" << std::endl;
+
+            Quaternion orient = this->entity_->getOrientation();
+            Vector3 at = orient.zAxis();
+            alSource3f(this->source_, AL_DIRECTION, at.x, at.y, at.z);
+            error = alGetError();
+            if(error == AL_INVALID_VALUE)
+                COUT(2) << "Sound: OpenAL: Invalid sound direction" << std::endl;
+        }
+    }
+
+    void SoundBase::play(bool loop) {
+        if(alIsSource(this->source_)) {
+            if(loop)
+                alSourcei(this->source_, AL_LOOPING, AL_TRUE);
+            else
+                alSourcei(this->source_, AL_LOOPING, AL_FALSE);
+            alSourcePlay(this->source_);
+        }
+    }
+
+    void SoundBase::stop() {
+        if(alIsSource(this->source_)) {
+            alSourceStop(this->source_);
+        }
+    }
+
+    void SoundBase::pause() {
+        if(alIsSource(this->source_)) {
+            alSourcePause(this->source_);
+        }
+    }
+
+    bool SoundBase::isPlaying() {
+        if(alIsSource(this->source_)) {
+            return getSourceState() == AL_PLAYING;
+        }
+        return false;
+    }
+
+    bool SoundBase::isPaused() {
+        if(alIsSource(this->source_)) {
+            return getSourceState() == AL_PAUSED;
+        }
+        return true;
+    }
+
+    bool SoundBase::isStopped() {
+        if(alIsSource(this->source_)) {
+            return getSourceState() == AL_INITIAL || getSourceState() == AL_STOPPED;
+        }
+        return true;
+    }
+
+    bool SoundBase::loadFile(std::string filename) {
+        filename = Core::getMediaPathString() + "/audio/" + filename;
+
+        if(!SoundBase::soundmanager_s->isSoundAvailable())
+        {
+            COUT(3) << "Sound: not available, skipping " << filename << std::endl;
+            return false;
+        }
+
+        COUT(3) << "Sound: OpenAL ALUT: loading file " << filename << std::endl;
+        this->buffer_ = alutCreateBufferFromFile(filename.c_str());
+        if(this->buffer_ == AL_NONE) {
+            COUT(2) << "Sound: OpenAL ALUT: " << alutGetErrorString(alutGetError()) << std::endl;
+            if(filename.find("ogg", 0) != std::string::npos)
+            {
+                this->buffer_ = loadOggFile(filename);
+            }
+
+            if(this->buffer_ == AL_NONE) 
+                return false;
+        }
+
+        alGenSources(1, &this->source_);
+        alSourcei(this->source_, AL_BUFFER, this->buffer_);
+        if(alGetError() != AL_NO_ERROR) {
+            COUT(2) << "Sound: OpenAL: Error loading sample file" << std::endl;
+            return false;
+        }
+        return true;
+    }
+
+    ALint SoundBase::getSourceState() {
+        ALint state;
+        alGetSourcei(this->source_, AL_SOURCE_STATE, &state);
+        return state;
+    }
+
+    ALuint SoundBase::loadOggFile(std::string filename)
+    {
+        COUT(2) << "Sound: Trying fallback ogg loader";
+
+        char inbuffer[4096];
+        std::vector<char> outbuffer;
+        OggVorbis_File vf;
+        int eof = false;
+        int current_section;
+
+        FILE* f = fopen(filename.c_str(), "rb");
+
+        if(ov_open(f, &vf, NULL, 0) < 0)
+        {
+            COUT(2) << "Sound: libvorbisfile: File seems not to be an Ogg Vorbis bitstream" << std::endl;
+            ov_clear(&vf);
+            return AL_NONE;
+        }
+
+        while(!eof)
+        {
+            long ret = ov_read(&vf, inbuffer, sizeof(inbuffer), 0, 2, 1, &current_section);
+            if (ret == 0)
+            {
+                eof = true;
+            }
+            else if (ret < 0)
+            {
+                COUT(2) << "Sound: libvorbisfile: error reading the file" << std::endl;
+                ov_clear(&vf);
+                return AL_NONE;
+            }
+            else
+            {
+                outbuffer.insert(outbuffer.end(), inbuffer, inbuffer + sizeof(inbuffer));
+            }
+        }
+        
+        ov_clear(&vf);
+
+        return alutCreateBufferFromFileImage(&outbuffer, outbuffer.size());
+    }
+} // namespace: orxonox
Index: /code/branches/sound2/src/orxonox/sound/SoundBase.h
===================================================================
--- /code/branches/sound2/src/orxonox/sound/SoundBase.h	(revision 3013)
+++ /code/branches/sound2/src/orxonox/sound/SoundBase.h	(revision 3013)
@@ -0,0 +1,74 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *       Erwin 'vaiursch' Herrsche
+ *   Co-authors:
+ *      ...
+ *
+ */
+#ifndef _SOUNDBASE_H__
+#define _SOUNDBASE_H__
+
+#include <AL/al.h>
+#include <string>
+
+namespace orxonox
+{
+    class SoundManager;
+    class WorldEntity;
+
+    /**
+     * The SoudBase class is the base class for all sound file loader classes.
+     * It server as main interface to the OpenAL library.
+     *
+     */
+    class _OrxonoxExport SoundBase
+    {
+    public:
+        SoundBase(WorldEntity* entity = NULL);
+        ~SoundBase();
+
+        void attachToEntity(WorldEntity* entity);
+        void update();
+        void play(bool loop = false);
+        void stop();
+        void pause();
+
+        bool isPlaying();
+        bool isPaused();
+        bool isStopped();
+
+        bool loadFile(std::string filename);
+
+    private:
+        ALuint loadOggFile(std::string filename);
+        ALuint source_;
+        ALuint buffer_;
+        WorldEntity* entity_;
+
+        ALint getSourceState();
+
+        static SoundManager* soundmanager_s;
+    }; // class SoundBase
+} // namepsace orxonox
+
+#endif // _SOUNDBASE_H__
Index: /code/branches/sound2/src/orxonox/sound/SoundManager.cc
===================================================================
--- /code/branches/sound2/src/orxonox/sound/SoundManager.cc	(revision 3013)
+++ /code/branches/sound2/src/orxonox/sound/SoundManager.cc	(revision 3013)
@@ -0,0 +1,160 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *       Erwin 'vaiursch' Herrsche
+ *   Co-authors:
+ *      ...
+ *
+ */
+
+#include <AL/alut.h>
+
+#include "orxonox/CameraManager.h"
+#include "orxonox/objects/worldentities/Camera.h"
+#include "util/Math.h"
+#include "SoundBase.h"
+#include "SoundManager.h"
+
+namespace orxonox
+{
+    ALCdevice* SoundManager::device_s = NULL;
+
+    /**
+     * Default constructor
+     */
+    SoundManager::SoundManager()
+    {
+        this->soundavailable_ = true;
+        if(!alutInitWithoutContext(NULL,NULL))
+        {
+            COUT(2) << "Sound: OpenAL ALUT: " << alutGetErrorString(alutGetError()) << std::endl;
+            this->soundavailable_ = false;
+        }
+        else
+        {
+            COUT(4) << "Sound: OpenAL ALUT version:" << alutGetMajorVersion() << "." << alutGetMinorVersion() << std::endl;
+            COUT(4) << "Sound: OpenAL ALUT supported MIME types:" << alutGetMIMETypes(ALUT_LOADER_BUFFER) << std::endl;
+            if(SoundManager::device_s == NULL)
+            {
+                COUT(3) << "Sound: OpenAL: Open sound device..." << std::endl;
+                SoundManager::device_s = alcOpenDevice(NULL);
+            }
+
+            if(SoundManager::device_s == NULL)
+            {
+                COUT(2) << "Sound: OpenAL: Could not open sound device" << std::endl;
+                this->soundavailable_ = false;
+            }
+            else
+            {
+                COUT(3) << "Sound: OpenAL: Sound device opened" << std::endl;
+                this->context_ = alcCreateContext(SoundManager::device_s, NULL);
+                if(this->context_ == NULL)
+                {
+                    COUT(2) << "Sound: OpenAL: Could not create sound context" << std::endl;
+                    this->soundavailable_ = false;
+                }
+                else
+                {
+                    if(alcMakeContextCurrent(this->context_) == AL_TRUE)
+                        COUT(3) << "Sound: OpenAL: Context " << this->context_ << "loaded" << std::endl;
+                }
+            }
+        }
+    }
+
+    SoundManager::~SoundManager()
+    {
+        alcDestroyContext(this->context_);
+        alcCloseDevice(SoundManager::device_s);
+        alutExit();
+    }
+
+    /**
+     * Add a SoundBase object to the list. Every SoundBase object should be in
+     * this list.
+     *
+     * @param sound Pointer to the SoundBase object to add
+     */
+    void SoundManager::addSound(SoundBase* sound)
+    {
+        this->soundlist_.push_back(sound);
+    }
+
+    /**
+     * Remove a SoundBase object from the list and destroy it.
+     */
+    void SoundManager::removeSound(SoundBase* sound)
+    {
+        std::list<SoundBase*>::iterator pos = this->soundlist_.end();
+        for(std::list<SoundBase*>::iterator i = this->soundlist_.begin(); i != this->soundlist_.end(); i++)
+        {
+            if((*i) == sound)
+                pos = i;
+        }
+
+        delete (*pos);
+        this->soundlist_.erase(pos);
+    }
+
+    /**
+     * Tick function, updates listener and registred SoundBase objects
+     *
+     * @param dt @see Orxonox::Tickable
+     */
+    void SoundManager::tick(float dt)
+    {
+        // update listener position
+        Camera* camera = CameraManager::getInstance().getActiveCamera();
+        if(camera == NULL) return;
+        Vector3 pos = camera->getPosition();
+        alListener3f(AL_POSITION, pos.x, pos.y, pos.z);
+        ALenum error = alGetError();
+        if(error == AL_INVALID_VALUE)
+            COUT(2) << "Sound: OpenAL: Invalid listener position" << std::endl;
+
+        // update listener orientation
+        Quaternion orient = camera->getOrientation();
+        Vector3 up = orient.xAxis(); // just a wild guess
+        Vector3 at = orient.zAxis();
+
+        ALfloat orientation[6] = { at.x, at.y, at.z, 
+                                 up.x, up.y, up.z };
+
+        alListenerfv(AL_POSITION, orientation);
+        error = alGetError();
+        if(error == AL_INVALID_VALUE)
+            COUT(2) << "Sound: OpenAL: Invalid listener orientation" << std::endl;
+
+        // update sounds
+        for(std::list<SoundBase*>::iterator i = this->soundlist_.begin(); i != this->soundlist_.end(); i++)
+            (*i)->update();
+    }
+    
+    /**
+    * Check if sound is available
+    */
+    bool SoundManager::isSoundAvailable()
+    {
+        return this->soundavailable_;
+    }
+}
Index: /code/branches/sound2/src/orxonox/sound/SoundManager.h
===================================================================
--- /code/branches/sound2/src/orxonox/sound/SoundManager.h	(revision 3013)
+++ /code/branches/sound2/src/orxonox/sound/SoundManager.h	(revision 3013)
@@ -0,0 +1,64 @@
+/*
+ *   ORXONOX - the hottest 3D action shooter ever to exist
+ *                    > www.orxonox.net <
+ *
+ *
+ *   License notice:
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU General Public License
+ *   as published by the Free Software Foundation; either version 2
+ *   of the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ *   You should have received a copy of the GNU General Public License
+ *   along with this program; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+ *
+ *   Author:
+ *       Erwin 'vaiursch' Herrsche
+ *   Co-authors:
+ *      ...
+ */
+#ifndef _SOUNDMANGER_H__
+#define _SOUNDMANGER_H__
+
+#include <AL/al.h>
+#include <AL/alc.h>
+
+#include <orxonox/objects/Tickable.h>
+
+namespace orxonox
+{
+    class SoundBase;
+
+    /**
+     * The SoundManager class manages the OpenAL device, context and listener
+     * position. It has a list of all SoundBase objects and calls their update
+     * function every tick. It is a singleton.
+     *
+     */
+    class _OrxonoxExport SoundManager : public Tickable 
+    {
+    public:
+        SoundManager();
+        ~SoundManager();
+        void addSound(SoundBase* sound);
+        void removeSound(SoundBase* sound);
+        virtual void tick(float dt);
+        bool isSoundAvailable();
+
+    private:
+        static ALCdevice* device_s;
+        ALCcontext* context_;
+        std::list<SoundBase*> soundlist_;
+        bool soundavailable_;
+
+    }; // class SoundManager
+} // namespace orxonox
+
+#endif // _SOUNDMANAGER_H__
