ShitEngine
基于 C++20 与 SDL3 的轻量级 2D 游戏引擎
Toggle main menu visibility
载入中...
搜索中...
未找到
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
9
namespace
Shit
{
10
11
class
AudioTrackGroup {
12
public
:
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
22
private
:
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
34
class
SHIT_API
AudioPlayer
{
35
public
:
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
58
static
AudioPlayer
&
GetInstance
();
59
60
AudioPlayer
(
const
AudioPlayer
&) =
delete
;
61
AudioPlayer
&
operator=
(
const
AudioPlayer
&) =
delete
;
62
AudioPlayer
(
AudioPlayer
&&) =
delete
;
63
AudioPlayer
&
operator=
(
AudioPlayer
&&) =
delete
;
64
65
private
:
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
AudioTrack.h
Core.h
SHIT_API
#define SHIT_API
定义
Core.h:12
Shit::AudioPlayer::Play
static AudioTrack * Play(const std::string &filePath, const std::string &group="default")
定义
AudioPlayer.h:45
Shit::AudioPlayer::GetTrackGroup
static AudioTrackGroup * GetTrackGroup(const std::string &name)
定义
AudioPlayer.h:42
Shit::AudioPlayer::Update
static void Update()
定义
AudioPlayer.h:38
Shit::AudioPlayer::Destroy
static void Destroy()
定义
AudioPlayer.h:37
Shit::AudioPlayer::AudioPlayer
AudioPlayer(const AudioPlayer &)=delete
Shit::AudioPlayer::operator=
AudioPlayer & operator=(const AudioPlayer &)=delete
Shit::AudioPlayer::ResumeAll
static void ResumeAll()
定义
AudioPlayer.h:52
Shit::AudioPlayer::GetInstance
static AudioPlayer & GetInstance()
Shit::AudioPlayer::PauseAll
static void PauseAll()
定义
AudioPlayer.h:51
Shit::AudioPlayer::CreateTrackGroup
static AudioTrackGroup * CreateTrackGroup(const std::string &name)
定义
AudioPlayer.h:39
Shit::AudioPlayer::SetMasterVolume
static void SetMasterVolume(float gain)
定义
AudioPlayer.h:49
Shit::AudioPlayer::ApplyTrackGain
static void ApplyTrackGain(AudioTrack *track, const AudioTrackGroup *group)
定义
AudioPlayer.h:54
Shit::AudioPlayer::AudioPlayer
AudioPlayer(AudioPlayer &&)=delete
Shit::AudioPlayer::StopAll
static void StopAll()
定义
AudioPlayer.h:53
Shit::AudioPlayer::operator=
AudioPlayer & operator=(AudioPlayer &&)=delete
Shit::AudioPlayer::GetMasterVolume
static float GetMasterVolume()
定义
AudioPlayer.h:50
Shit::AudioPlayer::Init
static bool Init()
定义
AudioPlayer.h:36
Shit::AudioTrackGroup
定义
AudioPlayer.h:11
Shit::AudioTrackGroup::getName
const std::string & getName() const
定义
AudioPlayer.h:20
Shit::AudioTrackGroup::stopAll
void stopAll()
Shit::AudioTrackGroup::resumeAll
void resumeAll()
Shit::AudioTrackGroup::AudioPlayer
friend class AudioPlayer
定义
AudioPlayer.h:23
Shit::AudioTrackGroup::pauseAll
void pauseAll()
Shit::AudioTrackGroup::~AudioTrackGroup
~AudioTrackGroup()=default
Shit::AudioTrackGroup::setVolume
void setVolume(float gain)
Shit::AudioTrackGroup::getVolume
float getVolume() const
定义
AudioPlayer.h:19
Shit::AudioTrackGroup::AudioTrack
friend class AudioTrack
定义
AudioPlayer.h:24
Shit::AudioTrack
定义
AudioTrack.h:10
Shit
定义
AudioPlayer.h:9
ShitEngine
Audio
AudioPlayer.h
制作者
1.17.0