Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

orxonox/branches/openAL: implemented some basic Functions

File:
1 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
Note: See TracChangeset for help on using the changeset viewer.