ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
载入中...
搜索中...
未找到
AudioPlayer.h
浏览该文件的文档.
1#pragma once
2#include "../Core/Core.h"
3#include "AudioTrack.h"
4#include <string>
5#include <unordered_map>
6#include <memory>
7#include <vector>
8
9namespace Shit {
10
11class AudioTrackGroup {
12public:
13 ~AudioTrackGroup() = default;
14
15 void pauseAll();
16 void resumeAll();
17 void stopAll();
18 void setVolume(float gain);
19 float getVolume() const { return m_gain; }
20 const std::string& getName() const { return m_name; }
21
22private:
23 friend class AudioPlayer;
24 friend class AudioTrack;
25 AudioTrackGroup(const std::string& name) : m_name(name) {}
26 void registerTrack(AudioTrack* track);
27 void unregisterTrack(AudioTrack* track);
28
29 std::string m_name;
30 float m_gain = 1.0f;
31 std::vector<AudioTrack*> m_tracks;
32};
33
35public:
36 static inline bool Init() { return GetInstance().init(); }
37 static inline void Destroy() { GetInstance().destroy(); }
38 static inline void Update() { GetInstance().update(); }
39 static inline AudioTrackGroup* CreateTrackGroup(const std::string& name) {
40 return GetInstance().createTrackGroup(name);
41 }
42 static inline AudioTrackGroup* GetTrackGroup(const std::string& name) {
43 return GetInstance().getTrackGroup(name);
44 }
45 static inline AudioTrack* Play(const std::string& filePath, const std::string& group = "default") {
46 auto& inst = GetInstance();
47 return inst.play(filePath, inst.getTrackGroup(group));
48 }
49 static inline void SetMasterVolume(float gain) { GetInstance().setMasterVolume(gain); }
50 static inline float GetMasterVolume() { return GetInstance().m_masterGain; }
51 static inline void PauseAll() { GetInstance().pauseAll(); }
52 static inline void ResumeAll() { GetInstance().resumeAll(); }
53 static inline void StopAll() { GetInstance().stopAll(); }
54 static inline void ApplyTrackGain(AudioTrack* track, const AudioTrackGroup* group) {
55 GetInstance().applyTrackGain(track, group);
56 }
57
59
60 AudioPlayer(const AudioPlayer&) = delete;
64
65private:
66 AudioPlayer() = default;
67 ~AudioPlayer() = default;
68
69 bool init();
70 void destroy();
71 void update();
72 AudioTrackGroup* createTrackGroup(const std::string& name);
73 AudioTrackGroup* getTrackGroup(const std::string& name);
74 AudioTrack* play(const std::string& filePath, AudioTrackGroup* group, int loopCount = 0);
75 void setMasterVolume(float gain);
76 void pauseAll();
77 void resumeAll();
78 void stopAll();
79 void applyTrackGain(AudioTrack* track, const AudioTrackGroup* group);
80
81 struct MIX_Mixer* m_mixer = nullptr;
82 bool m_isInited = false;
83 float m_masterGain = 1.0f;
84 std::unordered_map<std::string, std::unique_ptr<AudioTrackGroup>> m_groups;
85 std::vector<std::unique_ptr<AudioTrack>> m_tracks;
86};
87
88} // namespace Shit
#define SHIT_API
定义 Core.h:12
static AudioTrack * Play(const std::string &filePath, const std::string &group="default")
定义 AudioPlayer.h:45
static AudioTrackGroup * GetTrackGroup(const std::string &name)
定义 AudioPlayer.h:42
static void Update()
定义 AudioPlayer.h:38
static void Destroy()
定义 AudioPlayer.h:37
AudioPlayer(const AudioPlayer &)=delete
AudioPlayer & operator=(const AudioPlayer &)=delete
static void ResumeAll()
定义 AudioPlayer.h:52
static AudioPlayer & GetInstance()
static void PauseAll()
定义 AudioPlayer.h:51
static AudioTrackGroup * CreateTrackGroup(const std::string &name)
定义 AudioPlayer.h:39
static void SetMasterVolume(float gain)
定义 AudioPlayer.h:49
static void ApplyTrackGain(AudioTrack *track, const AudioTrackGroup *group)
定义 AudioPlayer.h:54
AudioPlayer(AudioPlayer &&)=delete
static void StopAll()
定义 AudioPlayer.h:53
AudioPlayer & operator=(AudioPlayer &&)=delete
static float GetMasterVolume()
定义 AudioPlayer.h:50
static bool Init()
定义 AudioPlayer.h:36
定义 AudioPlayer.h:11
const std::string & getName() const
定义 AudioPlayer.h:20
friend class AudioPlayer
定义 AudioPlayer.h:23
~AudioTrackGroup()=default
void setVolume(float gain)
float getVolume() const
定义 AudioPlayer.h:19
friend class AudioTrack
定义 AudioPlayer.h:24
定义 AudioTrack.h:10
定义 AudioPlayer.h:9