Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/sound/sound_engine.h @ 6694

Last change on this file since 6694 was 5930, checked in by bensch, 19 years ago

orxonox/trunk: remake of the SoundEngine (faster, and millions of SoundSources can be defined, as Many are not needed for playing

File size: 2.9 KB
RevLine 
[4597]1/*!
[4959]2 * @file sound_engine.h
3 * Definition of the SoundEngine singleton Class
4 */
[4504]5
6#ifndef _SOUND_ENGINE_H
7#define _SOUND_ENGINE_H
8
9#include "base_object.h"
10#include "alincl.h"
11
[5386]12#include "sound_buffer.h"
13#include "sound_source.h"
14
[5779]15#include <list>
[5917]16#include <stack>
[5779]17
[4506]18#define SOUND_DOPPLER_FACTOR       0.001          //!< A factor for the audible doppler effect
19#define SOUND_DOPPLER_VELOCITY     5000000        //!< A factor for the TravelSpeed of sound
[4504]20
[5405]21// FORWARD DECLARATION
[4504]22class PNode;
[4985]23class IniParser;
[4504]24
[5917]25
[4504]26//! A class that handles audio via the openAudioLibrary
27class SoundEngine : public BaseObject {
[4959]28  public:
29    virtual ~SoundEngine();
30    /** @returns a Pointer to the only object of this Class */
[5216]31    inline static SoundEngine* getInstance() { if (!SoundEngine::singletonRef) SoundEngine::singletonRef = new SoundEngine();  return SoundEngine::singletonRef; };
[4504]32
[4985]33    void loadSettings(IniParser* iniParser);
34
[4959]35    SoundSource* createSource(const char* fileName, PNode* sourceNode = NULL);
[4504]36
[4961]37    /** @param listener the listener in the scene */
38    void setListener(PNode* listener) { this->listener = listener; };
[4959]39    void setDopplerValues(ALfloat dopplerFactor, ALfloat dopplerVelocity);
[4504]40
41
[4985]42    /** @returns the Music Volume in % */
43    inline float getMusicVolume() { return this->musicVolume; };
44    /** @returns the Effects Volume in % */
45    inline float getEffectsVolume() { return this->effectsVolume; };
46
[4961]47    void update();
48
49  // administrative
[5930]50    void popALSource(ALuint& source);
51    void pushALSource(ALuint& source) { if (source != 0) this->ALSources.push(source); };
[4504]52
[4959]53    void flushUnusedBuffers();
54    void flushAllBuffers();
55    void flushAllSources();
[5917]56
[5930]57    bool initAudio();
[5917]58    bool allocateSources(unsigned int count);
[4504]59
60  // error handling:
[5930]61    static const char* getALErrorString(ALenum err);
[4504]62
[4959]63  private:
64    SoundEngine();
[5930]65
[4959]66    void listDevices();
[4504]67
[4959]68  private:
[5885]69    static SoundEngine*            singletonRef;             //!< Reference to this class
[4504]70
[5885]71    ALCdevice*                     device;                   //!< the used audio-device.
72    ALCcontext*                    context;                  //!< the context, currently in use.
[5819]73
[5885]74    float                          musicVolume;              //!< the maximum volume of the music in % (0f,1f]
75    float                          effectsVolume;            //!< the maximum volume of sound-effects in % (0f,1f]
76    PNode*                         listener;                 //!< The listener of the Scene
[5819]77
[5885]78    const std::list<BaseObject*>*  bufferList;               //!< A list of buffers
79    const std::list<BaseObject*>*  sourceList;               //!< A list for all the sources in the scene.
[4959]80
[5917]81    unsigned int                   maxSourceCount;           //!< How many Sources is the Maximum
82    std::stack<ALuint>             ALSources;                //!< A list of real openAL-Sources, the engine allocates, and stores for reuse.
[4504]83};
84
85#endif /* _SOUND_ENGINE_H */
Note: See TracBrowser for help on using the repository browser.