Files
glest-source/source/shared_lib/sources/sound/sound.cpp
2018-05-06 00:01:36 +02:00

152 lines
3.4 KiB
C++

// ==============================================================
// This file is part of Glest Shared Library (www.glest.org)
//
// Copyright (C) 2001-2008 Martiño 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 "util.h"
#include "leak_dumper.h"
using namespace Shared::Util;
namespace Shared {
namespace Sound {
//bool Sound::masterserverMode = false;
// =====================================================
// class SoundInfo
// =====================================================
SoundInfo::SoundInfo() {
channels = 0;
samplesPerSecond = 0;
bitsPerSample = 0;
size = 0;
bitRate = 0;
}
// =====================================================
// class Sound
// =====================================================
Sound::Sound() {
volume = 0.0f;
fileName = "";
soundFileLoader = 0;
}
// =====================================================
// 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;
if (GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
return;
}
string ext = (path.empty() == false ? path.substr(path.find_last_of('.') + 1) : "");
soundFileLoader = SoundFileLoaderFactory::getInstance()->newInstance(ext);
if (soundFileLoader == NULL) {
throw megaglest_runtime_error("soundFileLoader == NULL");
}
soundFileLoader->open(path, &info);
samples = new int8[info.getSize()];
soundFileLoader->read(samples, info.getSize());
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;
if (GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
return;
}
string ext = (path.empty() == false ? path.substr(path.find_last_of('.') + 1) : "");
soundFileLoader = SoundFileLoaderFactory::getInstance()->newInstance(ext);
soundFileLoader->open(path, &info);
}
uint32 StrSound::read(int8 *samples, uint32 size) {
if (GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
return 0;
}
return soundFileLoader->read(samples, size);
}
void StrSound::close() {
if (soundFileLoader != NULL) {
soundFileLoader->close();
delete soundFileLoader;
soundFileLoader = NULL;
}
}
void StrSound::restart() {
if (GlobalStaticFlags::getIsNonGraphicalModeEnabled() == true) {
return;
}
soundFileLoader->restart();
}
}
}//end namespace