Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 8, 2009, 10:09:39 AM (16 years ago)
Author:
rgrieder
Message:

Switched from ResourceInfo to std::string for the buffer identification. That should speed up BaseSound::setSource() by factor 10 if the buffer already exists.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation2/src/orxonox/sound/SoundBuffer.cc

    r6260 r6270  
    4040namespace orxonox
    4141{
    42     SoundBuffer::SoundBuffer(shared_ptr<ResourceInfo> fileInfo)
    43         : fileInfo_(fileInfo)
     42    SoundBuffer::SoundBuffer(const std::string& filename)
     43        : filename_(filename)
    4444        , audioBuffer_(AL_NONE)
    4545    {
    46         if (this->fileInfo_ == NULL)
     46        if (this->filename_.empty())
    4747            ThrowException(General, "SoundBuffer construction: fileInfo was NULL");
    48         DataStreamPtr dataStream = Resource::open(this->fileInfo_);
    4948
    50         std::string extension(this->fileInfo_->basename.substr(this->fileInfo_->basename.find_last_of('.') + 1));
     49        // Get resource info
     50        shared_ptr<ResourceInfo> fileInfo = Resource::getInfo(filename);
     51        if (fileInfo == NULL)
     52        {
     53            COUT(2) << "Sound: Warning: Sound file '" << filename << "' not found" << std::endl;
     54            return;
     55        }
     56        // Open data stream
     57        DataStreamPtr dataStream = Resource::open(fileInfo);
     58
     59        std::string extension(this->filename_.substr(this->filename_.find_last_of('.') + 1));
    5160        if (getLowercase(extension) == "ogg")
    5261        {
    5362            // Try ogg loader
    54             this->loadOgg(dataStream);
     63            this->loadOgg(fileInfo, dataStream);
    5564        }
    5665        else
    5766        {
    5867            // Try standard OpenAL loader
    59             this->loadStandard(dataStream);
     68            this->loadStandard(fileInfo, dataStream);
    6069        }
    6170    }
     
    7786    }
    7887
    79     void SoundBuffer::loadStandard(DataStreamPtr dataStream)
     88    void SoundBuffer::loadStandard(const shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream)
    8089    {
    8190        // Read everything into a temporary buffer
    82         char* buffer = new char[this->fileInfo_->size];
    83         dataStream->read(buffer, this->fileInfo_->size);
     91        char* buffer = new char[fileInfo->size];
     92        dataStream->read(buffer, fileInfo->size);
    8493        dataStream->seek(0);
    8594
    86         this->audioBuffer_ = alutCreateBufferFromFileImage(buffer, this->fileInfo_->size);
     95        this->audioBuffer_ = alutCreateBufferFromFileImage(buffer, fileInfo->size);
    8796        delete[] buffer;
    8897
     
    115124    }
    116125
    117     void SoundBuffer::loadOgg(DataStreamPtr dataStream)
     126    void SoundBuffer::loadOgg(const shared_ptr<ResourceInfo>& fileInfo, DataStreamPtr dataStream)
    118127    {
    119128        char inbuffer[256*1024];
Note: See TracChangeset for help on using the changeset viewer.