dl
dl_audio.h
浏览该文件的文档.
1
18#pragma once
19
20#ifndef DL_DISABLE_AUDIO
21#include <unordered_map>
22
24#include "io/dl_json.h"
25
26namespace dl
27{
28
30constexpr size_t NUM_MAX_FILE = 256;
31
32class SoundImp;
34class Sound
35{
36 friend class Audio;
37 friend class PoolList<Sound>;
38 using ID = unsigned;
39public:
44 void Play();
49 void Stop();
54 void SetLoop(bool loop);
55
61 void SetVolume(float volume);
66 bool IsPlaying();
67
69
70private:
71 Sound();
72 ID _source;
73 bool _deleteWaitStop;// 删除时,等待播完
74};
76
77class AudioImp;
79class Audio
80{
81 friend class System;
82public:
83 Audio(bool open);
88 void Init(std::string_view path_name);
93 bool IsOpen() { return _bOpen; }
98 void SetPath(std::string_view path)
99 {
100 _bSetPath = true;
101 _strPath = path;
102 }
103
108 void SetWhitelist(const std::vector<std::string>& vec_load)
109 {
110 _vecWhitelist = vec_load;
111 }
112
117 void Load(std::string_view name, std::string_view path_name);
118
122 std::vector<std::string> GetAllSound();
123
129 gcSound Create(std::string_view name);
130
132 {
133 return get_gc<Sound>();
134 }
135
137 void _load();
138
140
142private:
143 AudioImp* _imp;
144 bool _bSetPath;
145 bool _bOpen; // 初始化前手动关闭,或声音设备不存在时设置
146 std::string _strPath;
147 std::vector<std::string> _vecWhitelist;
148 // name -> buffer下标
149 std::unordered_map<std::string, size_t> _mapName2Buffer;
150 // 删除列表(延迟删除)
151 std::list<Sound::ID> _listDelete;
152};
153
154extern Audio* g_audio;
155
162inline gcSound snd_play(std::string_view name, size_t group_id = 0, float volume = 1.0f)
163{
164 gcSound voc = g_audio->Create(name);
165 if (!voc)
166 {
167 log_err("音效创建失败:{}", name);
168 return g_audio->CreateDefault();
169 }
170
171 voc->SetVolume(volume);
172 voc->Play();
173 return voc;
174}
175
176}
177#else
178#include <string_view>
179namespace dl
180{
181 inline void snd_play(std::string_view name, size_t group_id = 0, float volume = 1.0f)
182 {
183 }
184}
185
186#endif
音频主控
void SetWhitelist(const std::vector< std::string > &vec_load)
设置加载白名单
void Init(std::string_view path_name)
初始化配置
std::vector< std::string > GetAllSound()
返回所有加载的音效名
void _load()
由system调用
gcSound CreateDefault()
void SetPath(std::string_view path)
设置资源路径(不设置则不会加载)
gcSound Create(std::string_view name)
创建一个声音
Audio(bool open)
bool IsOpen()
是否使用
void _delete_sound(Sound *snd)
void Load(std::string_view name, std::string_view path_name)
加载一个音效
friend class System
引用计数对象,通过get_gc函数创建
内存池数据
音频实例
friend class Audio
void SetLoop(bool loop)
设置循环
void Play()
播放
bool IsPlaying()
查询是否正在播放
void SetVolume(float volume)
设置音量
void Stop()
停止
json格式相关
#define log_err(...)
基于引用计数的内存池
Audio * g_audio
auto get_gc(Args &&...args)
定义一个GC变量(引用计数内存池)
constexpr size_t NUM_MAX_FILE
可加载音频文件上限
gcSound snd_play(std::string_view name, size_t group_id=0, float volume=1.0f)
播放一个音效
GC< Sound > gcSound