MegaGlest/source/shared_lib/sources/sound/sound.cpp
Mark Vejvoda 18249c02bd - Some changes to try to reload textures for win32 when doing alt-enter
- Added better logging and guards in sound and socket classes
2010-04-04 04:14:27 +00:00

129 lines
2.7 KiB
C++

// ==============================================================
// This file is part of Glest Shared Library (www.glest.org)
//
// Copyright (C) 2001-2008 Martio Figueroa
//
// You can redistribute this code 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
// ==============================================================
#include "sound.h"
#include <fstream>
#include <stdexcept>
#include "leak_dumper.h"
namespace Shared{ namespace Sound{
// =====================================================
// class SoundInfo
// =====================================================
SoundInfo::SoundInfo(){
channels= 0;
samplesPerSecond= 0;
bitsPerSample= 0;
size= 0;
}
// =====================================================
// class Sound
// =====================================================
Sound::Sound(){
volume= 0.0f;
fileName = "";
}
// =====================================================
// class StaticSound
// =====================================================
StaticSound::StaticSound(){
samples= NULL;
soundFileLoader = NULL;
fileName = "";
}
StaticSound::~StaticSound(){
close();
}
void StaticSound::close(){
if(samples != NULL) {
delete [] samples;
samples = NULL;
}
if(soundFileLoader!=NULL){
soundFileLoader->close();
delete soundFileLoader;
soundFileLoader= NULL;
}
}
void StaticSound::load(const string &path){
close();
fileName = path;
string ext= path.substr(path.find_last_of('.')+1);
soundFileLoader= SoundFileLoaderFactory::getInstance()->newInstance(ext);
soundFileLoader->open(path, &info);
samples= new int8[info.getSize()];
soundFileLoader->read(samples, info.getSize());
soundFileLoader->close();
if(soundFileLoader!=NULL){
soundFileLoader->close();
delete soundFileLoader;
soundFileLoader= NULL;
}
}
// =====================================================
// class StrSound
// =====================================================
StrSound::StrSound(){
soundFileLoader= NULL;
next= NULL;
fileName = "";
}
StrSound::~StrSound(){
close();
}
void StrSound::open(const string &path){
close();
fileName = path;
string ext= path.substr(path.find_last_of('.')+1);
soundFileLoader= SoundFileLoaderFactory::getInstance()->newInstance(ext);
soundFileLoader->open(path, &info);
}
uint32 StrSound::read(int8 *samples, uint32 size){
return soundFileLoader->read(samples, size);
}
void StrSound::close(){
if(soundFileLoader!=NULL){
soundFileLoader->close();
delete soundFileLoader;
soundFileLoader= NULL;
}
}
void StrSound::restart(){
soundFileLoader->restart();
}
}}//end namespace