mirror of
https://github.com/glest/glest-source.git
synced 2025-02-25 04:02:30 +01:00
129 lines
2.7 KiB
C++
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
|