From a911088d392ef541f954178ac276a46581aba1a0 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Sat, 1 May 2010 04:34:23 +0000 Subject: [PATCH] Trying an experiment with a thread for playing streamed sounds --- mk/windoze/Glest.suo | Bin 226304 -> 235008 bytes mk/windoze/shared_lib.vcproj | 18 +++- source/glest_game/main/program.cpp | 13 ++- source/glest_game/main/program.h | 3 + source/glest_game/sound/sound_renderer.h | 80 ++++++++++++++++++ .../include/platform/common/simple_threads.h | 28 ++++++ .../platform/common/simple_threads.cpp | 38 +++++++++ 7 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 source/glest_game/sound/sound_renderer.h diff --git a/mk/windoze/Glest.suo b/mk/windoze/Glest.suo index e7c9a3f199b4b1150f9da79f449bc3f4af403273..e16002a82ea8262b49975eba563d0cb1dbefdd50 100755 GIT binary patch delta 14763 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 H3mNd=Ft5zE delta 9939 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 + + + + @@ -401,6 +409,10 @@ RelativePath="..\..\source\shared_lib\sources\platform\common\platform_common.cpp" > + + @@ -708,11 +720,11 @@ Name="platform" > start(); } NetworkInterface::setAllowGameDataSynchCheck(Config::getInstance().getBool("AllowGameDataSynchCheck","0")); diff --git a/source/glest_game/main/program.h b/source/glest_game/main/program.h index b1e63655..1f077770 100644 --- a/source/glest_game/main/program.h +++ b/source/glest_game/main/program.h @@ -18,6 +18,7 @@ #include "socket.h" #include "components.h" #include "window.h" +#include "simple_threads.h" using Shared::Platform::MouseButton; using Shared::Graphics::Context; @@ -26,6 +27,7 @@ using Shared::Platform::SizeState; using Shared::Platform::MouseState; using Shared::PlatformCommon::PerformanceTimer; using Shared::Platform::Ip; +using namespace Shared::PlatformCommon; namespace Glest{ namespace Game{ @@ -77,6 +79,7 @@ public: class Program{ private: static const int maxTimes; + SimpleTaskThread *soundThreadManager; class ShowMessageProgramState : public ProgramState { GraphicMessageBox msgBox; diff --git a/source/glest_game/sound/sound_renderer.h b/source/glest_game/sound/sound_renderer.h new file mode 100644 index 00000000..3470b076 --- /dev/null +++ b/source/glest_game/sound/sound_renderer.h @@ -0,0 +1,80 @@ +// ============================================================== +// This file is part of Glest (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 +// ============================================================== + +#ifndef _GLEST_GAME_SOUNDRENDERER_H_ +#define _GLEST_GAME_SOUNDRENDERER_H_ + +#include "sound.h" +#include "sound_player.h" +#include "window.h" +#include "vec.h" +#include "simple_threads.h" +#include "platform_common.h" + +namespace Glest{ namespace Game{ + +using Shared::Sound::StrSound; +using Shared::Sound::StaticSound; +using Shared::Sound::SoundPlayer; +using Shared::Graphics::Vec3f; +using namespace Shared::PlatformCommon; + +// ===================================================== +// class SoundRenderer +// +/// Wrapper to acces the shared library sound engine +// ===================================================== + +class SoundRenderer : public SimpleTaskCallbackInterface { +public: + static const int ambientFade; + static const float audibleDist; +private: + SoundPlayer *soundPlayer; + + //volume + float fxVolume; + float musicVolume; + float ambientVolume; + +private: + SoundRenderer(); + +public: + //misc + ~SoundRenderer(); + static SoundRenderer &getInstance(); + void init(Window *window); + void update(); + virtual void simpleTask() { update(); } + SoundPlayer *getSoundPlayer() const {return soundPlayer;} + + //music + void playMusic(StrSound *strSound); + void stopMusic(StrSound *strSound); + + //fx + void playFx(StaticSound *staticSound, Vec3f soundPos, Vec3f camPos); + void playFx(StaticSound *staticSound); + + //ambient + //void playAmbient(StaticSound *staticSound); + void playAmbient(StrSound *strSound); + void stopAmbient(StrSound *strSound); + + //misc + void stopAllSounds(); + void loadConfig(); +}; + +}}//end namespace + +#endif diff --git a/source/shared_lib/include/platform/common/simple_threads.h b/source/shared_lib/include/platform/common/simple_threads.h index 72366648..60b04259 100644 --- a/source/shared_lib/include/platform/common/simple_threads.h +++ b/source/shared_lib/include/platform/common/simple_threads.h @@ -36,6 +36,34 @@ public: void setTechDataPaths(vector techDataPaths) { this->techDataPaths = techDataPaths; } }; +// ===================================================== +// class SimpleTaskThread +// ===================================================== + +// +// This interface describes the methods a callback object must implement +// +class SimpleTaskCallbackInterface { +public: + virtual void simpleTask() = 0; +}; + +class SimpleTaskThread : public BaseThread +{ +protected: + + SimpleTaskCallbackInterface *simpleTaskInterface; + unsigned int executionCount; + unsigned int millisecsBetweenExecutions; + +public: + SimpleTaskThread(); + SimpleTaskThread(SimpleTaskCallbackInterface *simpleTaskInterface, + unsigned int executionCount=0, + unsigned int millisecsBetweenExecutions=0); + virtual void execute(); +}; + }}//end namespace #endif diff --git a/source/shared_lib/sources/platform/common/simple_threads.cpp b/source/shared_lib/sources/platform/common/simple_threads.cpp index 5e8254a3..dd5a909b 100644 --- a/source/shared_lib/sources/platform/common/simple_threads.cpp +++ b/source/shared_lib/sources/platform/common/simple_threads.cpp @@ -63,4 +63,42 @@ void FileCRCPreCacheThread::execute() { SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); } + +SimpleTaskThread::SimpleTaskThread( SimpleTaskCallbackInterface *simpleTaskInterface, + unsigned int executionCount, + unsigned int millisecsBetweenExecutions) { + this->simpleTaskInterface = simpleTaskInterface; + this->executionCount = executionCount; + this->millisecsBetweenExecutions = millisecsBetweenExecutions; +} + +void SimpleTaskThread::execute() { + try { + setRunningStatus(true); + + unsigned int idx = 0; + for(;this->simpleTaskInterface != NULL;) { + this->simpleTaskInterface->simpleTask(); + if(this->executionCount > 0) { + idx++; + if(idx >= this->executionCount) { + break; + } + } + if(getQuitStatus() == true) { + //SystemFlags::OutputDebug(SystemFlags::debugNetwork,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); + break; + } + + sleep(this->millisecsBetweenExecutions); + } + } + catch(const exception &ex) { + setRunningStatus(false); + + throw runtime_error(ex.what()); + } + setRunningStatus(false); +} + }}//end namespace