Browse Source

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
Loïc Blot 6 years ago
parent
commit
4fd9715876

+ 2 - 2
build/android/jni/Android.mk

@@ -227,8 +227,6 @@ LOCAL_SRC_FILES := \
 		jni/src/serverobject.cpp                  \
 		jni/src/shader.cpp                        \
 		jni/src/sky.cpp                           \
-		jni/src/sound.cpp                         \
-		jni/src/sound_openal.cpp                  \
 		jni/src/staticobject.cpp                  \
 		jni/src/subgame.cpp                       \
 		jni/src/tileanimation.cpp                 \
@@ -280,6 +278,8 @@ LOCAL_SRC_FILES := \
 		jni/src/client/hud.cpp                    \
 		jni/src/client/inputhandler.cpp           \
 		jni/src/client/renderingengine.cpp        \
+		jni/src/client/sound.cpp                  \
+		jni/src/client/sound_openal.cpp           \
 		jni/src/client/tile.cpp                   \
 		jni/src/client/joystick_controller.cpp    \
 		jni/src/client/render/factory.cpp         \

+ 0 - 15
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

+ 1 - 0
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"

+ 1 - 0
src/client.h

@@ -48,6 +48,7 @@ class MapBlockMesh;
 class IWritableTextureSource;
 class IWritableShaderSource;
 class IWritableItemDefManager;
+class ISoundManager;
 class NodeDefManager;
 //class IWritableCraftDefManager;
 class ClientMediaDownloader;

+ 17 - 0
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

+ 0 - 2
src/sound.cpp → 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;
-
-

+ 111 - 0
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;

+ 5 - 27
src/sound_openal.cpp → 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;
 

+ 2 - 1
src/sound_openal.h → 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);

+ 2 - 1
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);
 }
 

+ 3 - 3
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
 */

+ 0 - 1
src/gamedef.h

@@ -27,7 +27,6 @@ class IItemDefManager;
 class NodeDefManager;
 class ICraftDefManager;
 class ITextureSource;
-class ISoundManager;
 class IShaderSource;
 class MtEventManager;
 class IRollbackManager;

+ 1 - 1
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"

+ 1 - 1
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"
 

+ 1 - 0
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"

+ 1 - 0
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"

+ 1 - 84
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;

+ 1 - 0
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"

+ 1 - 2
util/travis/clang-format-whitelist.txt

@@ -7,6 +7,7 @@ src/chat.h
 src/chat_interface.h
 src/client/clientlauncher.cpp
 src/client/clientlauncher.h
+src/client/sound_openal.cpp
 src/client.cpp
 src/clientenvironment.cpp
 src/clientenvironment.h
@@ -328,8 +329,6 @@ src/shader.cpp
 src/shader.h
 src/sky.cpp
 src/sound.cpp
-src/sound_openal.cpp
-src/sound_openal.h
 src/staticobject.cpp
 src/staticobject.h
 src/subgame.cpp