summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoïc Blot <nerzhul@users.noreply.github.com>2018-03-24 15:45:25 +0100
committerGitHub <noreply@github.com>2018-03-24 15:45:25 +0100
commit4fd97158762b4cdd4c73a6e29960e371d9de56e7 (patch)
treec768a82d972f2d7d80d20c0eccab0494b24d3538 /src
parentbcd22fc34cf70c3fe246f500633aa42e388fabc4 (diff)
downloadminetest-4fd97158762b4cdd4c73a6e29960e371d9de56e7.tar.gz
minetest-4fd97158762b4cdd4c73a6e29960e371d9de56e7.tar.bz2
minetest-4fd97158762b4cdd4c73a6e29960e371d9de56e7.zip
Cleanup sound manager class (#7158)
* Cleanup sound manager client * Use some const refs * Use auto on iterators * Drop unused parameters * Move sound_openal.* to client folder * Move sound.cpp + OnDemandSoundFetcher to client/ folder + reorganize includes properly
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt15
-rw-r--r--src/client.cpp1
-rw-r--r--src/client.h1
-rw-r--r--src/client/CMakeLists.txt17
-rw-r--r--src/client/sound.cpp (renamed from src/sound.cpp)2
-rw-r--r--src/client/sound.h111
-rw-r--r--src/client/sound_openal.cpp (renamed from src/sound_openal.cpp)32
-rw-r--r--src/client/sound_openal.h (renamed from src/sound_openal.h)3
-rw-r--r--src/content_cao.cpp3
-rw-r--r--src/game.cpp6
-rw-r--r--src/gamedef.h1
-rw-r--r--src/gui/guiEngine.cpp2
-rw-r--r--src/gui/guiEngine.h2
-rw-r--r--src/network/clientpackethandler.cpp1
-rw-r--r--src/script/lua_api/l_client.cpp1
-rw-r--r--src/sound.h85
-rw-r--r--src/unittest/test.cpp1
17 files changed, 148 insertions, 136 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 7673b6fa5..8c7f6b56e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -101,19 +101,6 @@ if(BUILD_CLIENT AND ENABLE_SOUND)
endif()
endif()
-if(USE_SOUND)
- set(sound_SRCS sound_openal.cpp)
- set(SOUND_INCLUDE_DIRS
- ${OPENAL_INCLUDE_DIR}
- ${VORBIS_INCLUDE_DIR}
- ${OGG_INCLUDE_DIR}
- )
- set(SOUND_LIBRARIES
- ${OPENAL_LIBRARY}
- ${VORBIS_LIBRARIES}
- )
-endif()
-
option(ENABLE_GLES "Enable OpenGL ES support" FALSE)
mark_as_advanced(ENABLE_GLES)
@@ -440,7 +427,6 @@ set(common_SRCS
serverlist.cpp
serverobject.cpp
settings.cpp
- sound.cpp
staticobject.cpp
subgame.cpp
terminal_chat_console.cpp
@@ -489,7 +475,6 @@ set(client_SRCS
${client_SRCS}
${common_SRCS}
${gui_SRCS}
- ${sound_SRCS}
${client_network_SRCS}
${client_irrlicht_changes_SRCS}
camera.cpp
diff --git a/src/client.cpp b/src/client.cpp
index 837116888..5356ef151 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -30,6 +30,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/clientevent.h"
#include "client/gameui.h"
#include "client/renderingengine.h"
+#include "client/sound.h"
#include "client/tile.h"
#include "util/auth.h"
#include "util/directiontables.h"
diff --git a/src/client.h b/src/client.h
index 8b8923f29..a468aa721 100644
--- a/src/client.h
+++ b/src/client.h
@@ -48,6 +48,7 @@ class MapBlockMesh;
class IWritableTextureSource;
class IWritableShaderSource;
class IWritableItemDefManager;
+class ISoundManager;
class NodeDefManager;
//class IWritableCraftDefManager;
class ClientMediaDownloader;
diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt
index ea8acd064..1cabe1b11 100644
--- a/src/client/CMakeLists.txt
+++ b/src/client/CMakeLists.txt
@@ -1,4 +1,21 @@
+set(sound_SRCS ${CMAKE_CURRENT_SOURCE_DIR}/sound.cpp)
+
+if(USE_SOUND)
+ set(sound_SRCS ${sound_SRCS}
+ ${CMAKE_CURRENT_SOURCE_DIR}/sound_openal.cpp)
+ set(SOUND_INCLUDE_DIRS
+ ${OPENAL_INCLUDE_DIR}
+ ${VORBIS_INCLUDE_DIR}
+ ${OGG_INCLUDE_DIR}
+ PARENT_SCOPE)
+ set(SOUND_LIBRARIES
+ ${OPENAL_LIBRARY}
+ ${VORBIS_LIBRARIES}
+ PARENT_SCOPE)
+endif()
+
set(client_SRCS
+ ${sound_SRCS}
${CMAKE_CURRENT_SOURCE_DIR}/meshgen/collector.cpp
${CMAKE_CURRENT_SOURCE_DIR}/render/anaglyph.cpp
${CMAKE_CURRENT_SOURCE_DIR}/render/core.cpp
diff --git a/src/sound.cpp b/src/client/sound.cpp
index 707065043..44a96dd25 100644
--- a/src/sound.cpp
+++ b/src/client/sound.cpp
@@ -21,5 +21,3 @@ with this program; if not, write to the Free Software Foundation, Inc.,
// Global DummySoundManager singleton
DummySoundManager dummySoundManager;
-
-
diff --git a/src/client/sound.h b/src/client/sound.h
new file mode 100644
index 000000000..c1d3c0cfa
--- /dev/null
+++ b/src/client/sound.h
@@ -0,0 +1,111 @@
+/*
+Minetest
+Copyright (C) 2013 celeron55, Perttu Ahola <celeron55@gmail.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along
+with this program; if not, write to the Free Software Foundation, Inc.,
+51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#pragma once
+
+#include <set>
+#include <string>
+#include "irr_v3d.h"
+#include "../sound.h"
+
+class OnDemandSoundFetcher
+{
+public:
+ virtual void fetchSounds(const std::string &name,
+ std::set<std::string> &dst_paths,
+ std::set<std::string> &dst_datas) = 0;
+};
+
+class ISoundManager
+{
+public:
+ virtual ~ISoundManager() = default;
+
+ // Multiple sounds can be loaded per name; when played, the sound
+ // should be chosen randomly from alternatives
+ // Return value determines success/failure
+ virtual bool loadSoundFile(
+ const std::string &name, const std::string &filepath) = 0;
+ virtual bool loadSoundData(
+ const std::string &name, const std::string &filedata) = 0;
+
+ virtual void updateListener(
+ const v3f &pos, const v3f &vel, const v3f &at, const v3f &up) = 0;
+ virtual void setListenerGain(float gain) = 0;
+
+ // playSound functions return -1 on failure, otherwise a handle to the
+ // sound. If name=="", call should be ignored without error.
+ virtual int playSound(const std::string &name, bool loop, float volume,
+ float fade = 0.0f, float pitch = 1.0f) = 0;
+ virtual int playSoundAt(const std::string &name, bool loop, float volume, v3f pos,
+ float pitch = 1.0f) = 0;
+ virtual void stopSound(int sound) = 0;
+ virtual bool soundExists(int sound) = 0;
+ virtual void updateSoundPosition(int sound, v3f pos) = 0;
+ virtual bool updateSoundGain(int id, float gain) = 0;
+ virtual float getSoundGain(int id) = 0;
+ virtual void step(float dtime) = 0;
+ virtual void fadeSound(int sound, float step, float gain) = 0;
+
+ int playSound(const SimpleSoundSpec &spec, bool loop)
+ {
+ return playSound(spec.name, loop, spec.gain, spec.fade, spec.pitch);
+ }
+ int playSoundAt(const SimpleSoundSpec &spec, bool loop, const v3f &pos)
+ {
+ return playSoundAt(spec.name, loop, spec.gain, pos, spec.pitch);
+ }
+};
+
+class DummySoundManager : public ISoundManager
+{
+public:
+ virtual bool loadSoundFile(const std::string &name, const std::string &filepath)
+ {
+ return true;
+ }
+ virtual bool loadSoundData(const std::string &name, const std::string &filedata)
+ {
+ return true;
+ }
+ void updateListener(const v3f &pos, const v3f &vel, const v3f &at, const v3f &up)
+ {
+ }
+ void setListenerGain(float gain) {}
+ int playSound(const std::string &name, bool loop, float volume, float fade,
+ float pitch)
+ {
+ return 0;
+ }
+ int playSoundAt(const std::string &name, bool loop, float volume, v3f pos,
+ float pitch)
+ {
+ return 0;
+ }
+ void stopSound(int sound) {}
+ bool soundExists(int sound) { return false; }
+ void updateSoundPosition(int sound, v3f pos) {}
+ bool updateSoundGain(int id, float gain) { return false; }
+ float getSoundGain(int id) { return 0; }
+ void step(float dtime) {}
+ void fadeSound(int sound, float step, float gain) {}
+};
+
+// Global DummySoundManager singleton
+extern DummySoundManager dummySoundManager;
diff --git a/src/sound_openal.cpp b/src/client/sound_openal.cpp
index 853aba1cc..d66360057 100644
--- a/src/sound_openal.cpp
+++ b/src/client/sound_openal.cpp
@@ -68,26 +68,6 @@ static void delete_alccontext(ALCcontext *p)
}
}
-static const char *alcErrorString(ALCenum err)
-{
- switch (err) {
- case ALC_NO_ERROR:
- return "no error";
- case ALC_INVALID_DEVICE:
- return "invalid device";
- case ALC_INVALID_CONTEXT:
- return "invalid context";
- case ALC_INVALID_ENUM:
- return "invalid enum";
- case ALC_INVALID_VALUE:
- return "invalid value";
- case ALC_OUT_OF_MEMORY:
- return "out of memory";
- default:
- return "<unknown OpenAL error>";
- }
-}
-
static const char *alErrorString(ALenum err)
{
switch (err) {
@@ -331,7 +311,6 @@ private:
int m_next_id;
std::unordered_map<std::string, std::vector<SoundBuffer*>> m_buffers;
std::unordered_map<int, PlayingSound*> m_sounds_playing;
- v3f m_listener_pos;
struct FadeState {
FadeState() = default;
@@ -563,9 +542,8 @@ public:
return false;
}
- void updateListener(v3f pos, v3f vel, v3f at, v3f up)
+ void updateListener(const v3f &pos, const v3f &vel, const v3f &at, const v3f &up)
{
- m_listener_pos = pos;
alListener3f(AL_POSITION, pos.X, pos.Y, pos.Z);
alListener3f(AL_VELOCITY, vel.X, vel.Y, vel.Z);
ALfloat f[6];
@@ -634,7 +612,7 @@ public:
return;
float chkGain = 0;
- for (std::unordered_map<int, FadeState>::iterator i = m_sounds_fading.begin();
+ for (auto i = m_sounds_fading.begin();
i != m_sounds_fading.end();) {
if (i->second.step < 0.f)
chkGain = -(i->second.current_gain);
@@ -665,7 +643,7 @@ public:
void updateSoundPosition(int id, v3f pos)
{
- std::unordered_map<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
+ auto i = m_sounds_playing.find(id);
if (i == m_sounds_playing.end())
return;
PlayingSound *sound = i->second;
@@ -678,7 +656,7 @@ public:
bool updateSoundGain(int id, float gain)
{
- std::unordered_map<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
+ auto i = m_sounds_playing.find(id);
if (i == m_sounds_playing.end())
return false;
@@ -689,7 +667,7 @@ public:
float getSoundGain(int id)
{
- std::unordered_map<int, PlayingSound*>::iterator i = m_sounds_playing.find(id);
+ auto i = m_sounds_playing.find(id);
if (i == m_sounds_playing.end())
return 0;
diff --git a/src/sound_openal.h b/src/client/sound_openal.h
index f2cff4daa..f04ad7cac 100644
--- a/src/sound_openal.h
+++ b/src/client/sound_openal.h
@@ -27,4 +27,5 @@ class SoundManagerSingleton;
extern std::shared_ptr<SoundManagerSingleton> g_sound_manager_singleton;
std::shared_ptr<SoundManagerSingleton> createSoundManagerSingleton();
-ISoundManager *createOpenALSoundManager(SoundManagerSingleton *smg, OnDemandSoundFetcher *fetcher);
+ISoundManager *createOpenALSoundManager(
+ SoundManagerSingleton *smg, OnDemandSoundFetcher *fetcher);
diff --git a/src/content_cao.cpp b/src/content_cao.cpp
index 2e9f8f39d..1dec95839 100644
--- a/src/content_cao.cpp
+++ b/src/content_cao.cpp
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/numeric.h" // For IntervalLimiter
#include "util/serialize.h"
#include "util/basic_macros.h"
+#include "client/sound.h"
#include "client/tile.h"
#include "environment.h"
#include "collision.h"
@@ -1177,7 +1178,7 @@ void GenericCAO::updateAnimationSpeed()
{
if (!m_animated_meshnode)
return;
-
+
m_animated_meshnode->setAnimationSpeed(m_animation_speed);
}
diff --git a/src/game.cpp b/src/game.cpp
index fada349db..685fb0651 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -69,10 +69,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "script/scripting_client.h"
#if USE_SOUND
- #include "sound_openal.h"
+ #include "client/sound_openal.h"
+#else
+ #include "client/sound.h"
#endif
-
-
/*
Text input system
*/
diff --git a/src/gamedef.h b/src/gamedef.h
index 9d3b889a0..f86eb13cd 100644
--- a/src/gamedef.h
+++ b/src/gamedef.h
@@ -27,7 +27,6 @@ class IItemDefManager;
class NodeDefManager;
class ICraftDefManager;
class ITextureSource;
-class ISoundManager;
class IShaderSource;
class MtEventManager;
class IRollbackManager;
diff --git a/src/gui/guiEngine.cpp b/src/gui/guiEngine.cpp
index 00c3f85bc..7654bf7b3 100644
--- a/src/gui/guiEngine.cpp
+++ b/src/gui/guiEngine.cpp
@@ -31,7 +31,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "settings.h"
#include "guiMainMenu.h"
#include "sound.h"
-#include "sound_openal.h"
+#include "client/sound_openal.h"
#include "clouds.h"
#include "httpfetch.h"
#include "log.h"
diff --git a/src/gui/guiEngine.h b/src/gui/guiEngine.h
index 817d76014..409ba94c4 100644
--- a/src/gui/guiEngine.h
+++ b/src/gui/guiEngine.h
@@ -25,7 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "irrlichttypes.h"
#include "modalMenu.h"
#include "guiFormSpecMenu.h"
-#include "sound.h"
+#include "client/sound.h"
#include "client/tile.h"
#include "util/enriched_string.h"
diff --git a/src/network/clientpackethandler.cpp b/src/network/clientpackethandler.cpp
index 07a38e397..37b649364 100644
--- a/src/network/clientpackethandler.cpp
+++ b/src/network/clientpackethandler.cpp
@@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "server.h"
#include "util/strfnd.h"
#include "client/clientevent.h"
+#include "client/sound.h"
#include "network/clientopcodes.h"
#include "network/connection.h"
#include "script/scripting_client.h"
diff --git a/src/script/lua_api/l_client.cpp b/src/script/lua_api/l_client.cpp
index 2d36e977c..8e802d2a2 100644
--- a/src/script/lua_api/l_client.cpp
+++ b/src/script/lua_api/l_client.cpp
@@ -22,6 +22,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "chatmessage.h"
#include "client.h"
#include "client/clientevent.h"
+#include "client/sound.h"
#include "clientenvironment.h"
#include "common/c_content.h"
#include "common/c_converter.h"
diff --git a/src/sound.h b/src/sound.h
index 0ad34e5cd..81d918c81 100644
--- a/src/sound.h
+++ b/src/sound.h
@@ -23,14 +23,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <string>
#include "irrlichttypes_bloated.h"
-class OnDemandSoundFetcher
-{
-public:
- virtual void fetchSounds(const std::string &name,
- std::set<std::string> &dst_paths,
- std::set<std::string> &dst_datas) = 0;
-};
-
struct SimpleSoundSpec
{
SimpleSoundSpec(const std::string &name = "", float gain = 1.0f,
@@ -42,83 +34,8 @@ struct SimpleSoundSpec
bool exists() const { return !name.empty(); }
- std::string name = "";
+ std::string name;
float gain = 1.0f;
float fade = 0.0f;
float pitch = 1.0f;
};
-
-class ISoundManager
-{
-public:
- virtual ~ISoundManager() = default;
-
- // Multiple sounds can be loaded per name; when played, the sound
- // should be chosen randomly from alternatives
- // Return value determines success/failure
- virtual bool loadSoundFile(
- const std::string &name, const std::string &filepath) = 0;
- virtual bool loadSoundData(
- const std::string &name, const std::string &filedata) = 0;
-
- virtual void updateListener(v3f pos, v3f vel, v3f at, v3f up) = 0;
- virtual void setListenerGain(float gain) = 0;
-
- // playSound functions return -1 on failure, otherwise a handle to the
- // sound. If name=="", call should be ignored without error.
- virtual int playSound(const std::string &name, bool loop, float volume,
- float fade = 0.0f, float pitch = 1.0f) = 0;
- virtual int playSoundAt(const std::string &name, bool loop, float volume, v3f pos,
- float pitch = 1.0f) = 0;
- virtual void stopSound(int sound) = 0;
- virtual bool soundExists(int sound) = 0;
- virtual void updateSoundPosition(int sound, v3f pos) = 0;
- virtual bool updateSoundGain(int id, float gain) = 0;
- virtual float getSoundGain(int id) = 0;
- virtual void step(float dtime) = 0;
- virtual void fadeSound(int sound, float step, float gain) = 0;
-
- int playSound(const SimpleSoundSpec &spec, bool loop)
- {
- return playSound(spec.name, loop, spec.gain, spec.fade, spec.pitch);
- }
- int playSoundAt(const SimpleSoundSpec &spec, bool loop, const v3f &pos)
- {
- return playSoundAt(spec.name, loop, spec.gain, pos, spec.pitch);
- }
-};
-
-class DummySoundManager : public ISoundManager
-{
-public:
- virtual bool loadSoundFile(const std::string &name, const std::string &filepath)
- {
- return true;
- }
- virtual bool loadSoundData(const std::string &name, const std::string &filedata)
- {
- return true;
- }
- void updateListener(v3f pos, v3f vel, v3f at, v3f up) {}
- void setListenerGain(float gain) {}
- int playSound(const std::string &name, bool loop, float volume, float fade,
- float pitch)
- {
- return 0;
- }
- int playSoundAt(const std::string &name, bool loop, float volume, v3f pos,
- float pitch)
- {
- return 0;
- }
- void stopSound(int sound) {}
- bool soundExists(int sound) { return false; }
- void updateSoundPosition(int sound, v3f pos) {}
- bool updateSoundGain(int id, float gain) { return false; }
- float getSoundGain(int id) { return 0; }
- void step(float dtime) {}
- void fadeSound(int sound, float step, float gain) {}
-};
-
-// Global DummySoundManager singleton
-extern DummySoundManager dummySoundManager;
diff --git a/src/unittest/test.cpp b/src/unittest/test.cpp
index 150bddc56..18215a947 100644
--- a/src/unittest/test.cpp
+++ b/src/unittest/test.cpp
@@ -19,6 +19,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "test.h"
+#include "client/sound.h"
#include "nodedef.h"
#include "itemdef.h"
#include "gamedef.h"