Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 4196 in orxonox.OLD for orxonox/branches/openAL/src/lib/sound


Ignore:
Timestamp:
May 16, 2005, 3:16:33 PM (20 years ago)
Author:
bensch
Message:

orxonox/branches/openAL: implemented some basic Functions

Location:
orxonox/branches/openAL/src/lib/sound
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orxonox/branches/openAL/src/lib/sound/sound_engine.cc

    r4195 r4196  
    1717
    1818#include "sound_engine.h"
     19#include "p_node.h"
     20#include "list.h"
    1921
    2022using namespace std;
    2123
     24
     25/**
     26   \brief Creates a Soundbuffer out of an inputfile
     27   \param fileName The name of the File
     28*/
     29SoundBuffer::SoundBuffer(const char* fileName)
     30{
     31  SoundEngine::getInstance()->addBuffer(this);
     32
     33  ALenum format;
     34  ALvoid* data;
     35  ALsizei freq;
     36
     37  alGenBuffers(1, &this->bufferID);
     38  alutLoadWAVFile((ALbyte*)fileName, &format, &data, &this->size, &freq, &this->loop);
     39  alBufferData(this->bufferID, format, data, this->size, freq);
     40  alutUnloadWAV(format, data, this->size, freq);
     41}
     42
     43SoundBuffer::~SoundBuffer(void)
     44{
     45  SoundEngine::getInstance()->removeBuffer(this);
     46}
     47
     48
     49
     50/**
     51   \brief creates a SoundSource at position sourceNode with the SoundBuffer buffer
     52*/
     53SoundSource::SoundSource(SoundBuffer* buffer, PNode* sourceNode)
     54{
     55  SoundEngine::getInstance()->addSource(this);
     56
     57  this->buffer = buffer;
     58  this->sourceNode = sourceNode;
     59}
     60
     61SoundSource::~SoundSource(void)
     62{
     63  SoundEngine::getInstance()->removeSource(this);
     64}
    2265
    2366/**
     
    2669SoundEngine::SoundEngine ()
    2770{
    28    this->setClassName ("SoundEngine");
     71  this->setClassName ("SoundEngine");
     72   
     73   this->initAudio();
    2974
     75   this->listener = NULL;
     76   this->bufferList = new tList<SoundBuffer>;
     77   this->sourceList = new tList<SoundSource>;
    3078}
    3179
     
    54102
    55103}
     104
     105/**
     106   \brief sets The listener (normaly the Camera)
     107*/
     108void SoundEngine::setListener(PNode* listener)
     109{
     110  this->listener = listener;
     111}
     112
     113
     114void SoundEngine::addBuffer(SoundBuffer* buffer)
     115{
     116  this->bufferList->add(buffer);
     117}
     118
     119void SoundEngine::removeBuffer(SoundBuffer* buffer)
     120{
     121  this->bufferList->remove(buffer);
     122}
     123
     124void SoundEngine::addSource(SoundSource* source)
     125{
     126  this->sourceList->add(source);
     127}
     128void SoundEngine::removeSource(SoundSource* source)
     129{
     130  this->sourceList->remove(source);
     131}
     132
     133
     134/**
     135   \brief updates all The positions, Directions and Velocities of all Sounds
     136*/
     137void SoundEngine::update(void)
     138{
     139
     140  // updating the Listeners Position
     141  if (this->listener)
     142    {
     143      alListener3f(AL_POSITION,
     144                   this->listener->getAbsCoor().x,
     145                   this->listener->getAbsCoor().y,
     146                   this->listener->getAbsCoor().z);
     147      alListener3f(AL_VELOCITY,
     148                   this->listener->getVelocity().x,
     149                   this->listener->getVelocity().y,
     150                   this->listener->getVelocity().z);
     151      Vector absDirV = this->listener->getAbsDirV();
     152      alListener3f(AL_ORIENTATION,
     153                   absDirV.x,
     154                   absDirV.y,
     155                   absDirV.z);
     156    }
     157  // updating all the Sources positions
     158  tIterator<SoundSource>* iterator = this->sourceList->getIterator();
     159  SoundSource* enumSource = iterator->nextElement();
     160  while (enumSource)
     161    {
     162      alSource3f(enumSource->getID(), AL_POSITION,
     163                 enumSource->getNode()->getAbsCoor().x,
     164                 enumSource->getNode()->getAbsCoor().y,
     165                 enumSource->getNode()->getAbsCoor().z);
     166      alSource3f(enumSource->getID(), AL_VELOCITY,
     167                 enumSource->getNode()->getVelocity().x,
     168                 enumSource->getNode()->getVelocity().y,
     169                 enumSource->getNode()->getVelocity().z);
     170
     171      enumSource = iterator->nextElement();
     172    }
     173  delete iterator;
     174}
     175
     176/**
     177   \brief initializes Audio in general
     178*/
     179bool SoundEngine::initAudio(void)
     180{
     181  alutInit(NULL, 0);
     182  alGetError();
     183}
     184
  • orxonox/branches/openAL/src/lib/sound/sound_engine.h

    r4195 r4196  
    99
    1010#include "base_object.h"
     11#include "alincl.h"
    1112
    1213// FORWARD DEFINITION
     14class PNode;
     15template<class T> class tList;
    1316
    14 //! A Class that handles audio via the openAudioLibrary
     17
     18//! A class that represents a datastructure to play Sounds.
     19class SoundBuffer
     20{
     21 public:
     22  SoundBuffer(const char* fileName);
     23  ~SoundBuffer(void);
     24
     25 private:
     26  ALuint bufferID;              //!< The address of the Buffer.
     27
     28  ALsizei size;                 //!< The size of the Buffer.
     29  ALboolean loop;               //!< loop information.
     30};
     31
     32//! A class that represents a SoundSource
     33class SoundSource
     34{
     35 public:
     36  SoundSource(SoundBuffer* buffer, PNode* sourceNode = NULL);
     37  ~SoundSource(void);
     38
     39  /** \retruns The ID of the Source */
     40  inline ALuint getID(void) { return this->sourceID; }
     41  /** \returns the SourceNode of this Source */
     42  inline PNode* getNode(void) { return this->sourceNode;}
     43
     44 private:
     45  ALuint sourceID;              //!< The ID of the Source
     46  SoundBuffer* buffer;          //!< The buffer to play in this source.
     47  PNode* sourceNode;            //!< The SourceNode represente the position/velocity... of this source.
     48};
     49
     50
     51
     52//! A class that handles audio via the openAudioLibrary
    1553class SoundEngine : public BaseObject {
    1654
     
    1957  virtual ~SoundEngine(void);
    2058
     59  void setListener(PNode* listener);
     60
     61  void addBuffer(SoundBuffer* buffer);
     62  void removeBuffer(SoundBuffer* buffer);
     63  void addSource(SoundSource* source);
     64  void removeSource(SoundSource* source);
     65
     66
     67  void update(void);
     68
    2169 private:
    2270  SoundEngine(void);
    2371  static SoundEngine* singletonRef;
     72
     73  bool initAudio(void);
     74
     75  PNode* listener;                 //!< The listener of the Scene
     76  tList<SoundBuffer>* bufferList;  //!< A list of buffers
     77  tList<SoundSource>* sourceList;  //!< A list for all the sources in the scene.
     78
    2479};
    2580
Note: See TracChangeset for help on using the changeset viewer.