Minetest 5.10.0-dev
 
Loading...
Searching...
No Matches
proxy_sound_manager.h
Go to the documentation of this file.
1/*
2Minetest
3Copyright (C) 2023 DS
4
5This program is free software; you can redistribute it and/or modify
6it under the terms of the GNU Lesser General Public License as published by
7the Free Software Foundation; either version 2.1 of the License, or
8(at your option) any later version.
9
10This program is distributed in the hope that it will be useful,
11but WITHOUT ANY WARRANTY; without even the implied warranty of
12MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13GNU Lesser General Public License for more details.
14
15You should have received a copy of the GNU Lesser General Public License along
16with this program; if not, write to the Free Software Foundation, Inc.,
1751 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18*/
19
20#pragma once
21
22#include "sound_manager.h"
23
24namespace sound {
25
26/*
27 * The public ISoundManager interface
28 */
29
30class ProxySoundManager final : public ISoundManager
31{
33 // sound names from loadSoundData and loadSoundFile
34 std::unordered_set<std::string> m_known_sound_names;
35
37 {
39 }
40
41 enum class MsgResult { Ok, Empty, Stopped};
43
44public:
46 std::unique_ptr<SoundFallbackPathProvider> fallback_path_provider) :
47 m_sound_manager(smg, std::move(fallback_path_provider))
48 {
50 }
51
52 ~ProxySoundManager() override;
53
54 /* Interface */
55
56 void step(f32 dtime) override;
57 void pauseAll() override;
58 void resumeAll() override;
59
60 void updateListener(const v3f &pos_, const v3f &vel_, const v3f &at_, const v3f &up_) override;
61 void setListenerGain(f32 gain) override;
62
63 bool loadSoundFile(const std::string &name, const std::string &filepath) override;
64 bool loadSoundData(const std::string &name, std::string &&filedata) override;
65 void addSoundToGroup(const std::string &sound_name, const std::string &group_name) override;
66
67 void playSound(sound_handle_t id, const SoundSpec &spec) override;
68 void playSoundAt(sound_handle_t id, const SoundSpec &spec, const v3f &pos_,
69 const v3f &vel_) override;
70 void stopSound(sound_handle_t sound) override;
71 void fadeSound(sound_handle_t soundid, f32 step, f32 target_gain) override;
72 void updateSoundPosVel(sound_handle_t sound, const v3f &pos_, const v3f &vel_) override;
73};
74
75} // namespace sound
Definition sound.h:60
void push_back(const T &t)
Definition container.h:145
bool start()
Definition thread.cpp:109
Definition sound_manager.h:51
MutexedQueue< SoundManagerMsgToMgr > m_queue_to_mgr
Definition sound_manager.h:88
Definition proxy_sound_manager.h:31
void send(SoundManagerMsgToMgr msg)
Definition proxy_sound_manager.h:36
bool loadSoundData(const std::string &name, std::string &&filedata) override
Same as loadSoundFile, but reads the OggVorbis file from memory.
Definition proxy_sound_manager.cpp:119
~ProxySoundManager() override
Definition proxy_sound_manager.cpp:45
void pauseAll() override
Pause all sound playback.
Definition proxy_sound_manager.cpp:81
void resumeAll() override
Resume sound playback after pause.
Definition proxy_sound_manager.cpp:86
void addSoundToGroup(const std::string &sound_name, const std::string &group_name) override
Adds sound with name sound_name to group group_name.
Definition proxy_sound_manager.cpp:131
void playSoundAt(sound_handle_t id, const SoundSpec &spec, const v3f &pos_, const v3f &vel_) override
Same as playSound, but at a position.
Definition proxy_sound_manager.cpp:144
void updateListener(const v3f &pos_, const v3f &vel_, const v3f &at_, const v3f &up_) override
Definition proxy_sound_manager.cpp:91
MsgResult
Definition proxy_sound_manager.h:41
void setListenerGain(f32 gain) override
Definition proxy_sound_manager.cpp:97
bool loadSoundFile(const std::string &name, const std::string &filepath) override
Adds a sound to load from a file (only OggVorbis).
Definition proxy_sound_manager.cpp:102
std::unordered_set< std::string > m_known_sound_names
Definition proxy_sound_manager.h:34
void playSound(sound_handle_t id, const SoundSpec &spec) override
Plays a random sound from a sound group (position-less).
Definition proxy_sound_manager.cpp:137
void step(f32 dtime) override
Removes finished sounds, steps streamed sounds, and does similar tasks.
Definition proxy_sound_manager.cpp:66
void stopSound(sound_handle_t sound) override
Request the sound to be stopped.
Definition proxy_sound_manager.cpp:152
MsgResult handleMsg(SoundManagerMsgToProxy &&msg)
Definition proxy_sound_manager.cpp:26
void fadeSound(sound_handle_t soundid, f32 step, f32 target_gain) override
Definition proxy_sound_manager.cpp:157
OpenALSoundManager m_sound_manager
Definition proxy_sound_manager.h:32
ProxySoundManager(SoundManagerSingleton *smg, std::unique_ptr< SoundFallbackPathProvider > fallback_path_provider)
Definition proxy_sound_manager.h:45
void updateSoundPosVel(sound_handle_t sound, const v3f &pos_, const v3f &vel_) override
Update position and velocity of positional sound.
Definition proxy_sound_manager.cpp:162
Class for the openal device and context.
Definition sound_singleton.h:35
int sound_handle_t
Definition client.h:75
core::vector3df v3f
Definition irr_v3d.h:26
Definition al_extensions.cpp:26
std::variant< std::monostate, sound_manager_messages_to_proxy::ReportRemovedSound, sound_manager_messages_to_proxy::Stopped > SoundManagerMsgToProxy
Definition sound_manager_messages.h:76
std::variant< std::monostate, sound_manager_messages_to_mgr::PauseAll, sound_manager_messages_to_mgr::ResumeAll, sound_manager_messages_to_mgr::UpdateListener, sound_manager_messages_to_mgr::SetListenerGain, sound_manager_messages_to_mgr::LoadSoundFile, sound_manager_messages_to_mgr::LoadSoundData, sound_manager_messages_to_mgr::AddSoundToGroup, sound_manager_messages_to_mgr::PlaySound, sound_manager_messages_to_mgr::PlaySoundAt, sound_manager_messages_to_mgr::StopSound, sound_manager_messages_to_mgr::FadeSound, sound_manager_messages_to_mgr::UpdateSoundPosVel, sound_manager_messages_to_mgr::PleaseStop > SoundManagerMsgToMgr
Definition sound_manager_messages.h:48
Describes the sound information for playback.
Definition sound.h:35