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