blob: c573f2baf5765fce372aeee653721d497fc36dbd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#ifndef PKE_AUDIO_TYPES_INTERNAL_HPP
#define PKE_AUDIO_TYPES_INTERNAL_HPP
#include "asset-manager.hpp"
#include "components.hpp"
#include "pk.h"
#include "vendor-glm-include.hpp"
#define PKE_AUDIO_MAX_CONCURRENT_COUNT 8
#define PKE_AUDIO_MAX_SPATIAL_DISTANCE 256.f
#define PKE_AUDIO_BITRATE 48000
#define PKE_AUDIO_BUFFER_FRAMES 2048
TypeSafeInt_constexpr(pke_audio_flags, uint8_t, 0xFF);
TypeSafeInt_constexpr(pke_audio_source, uint8_t, 0x40);
const pke_audio_flags pke_audio_flag_none = pke_audio_flags{0x00};
const pke_audio_flags pke_audio_flag_pos_spatial = pke_audio_flags{0x01};
const pke_audio_source pke_audio_source_music = pke_audio_source{0x00};
const pke_audio_source pke_audio_source_ambient = pke_audio_source{0x01};
const pke_audio_source pke_audio_source_voices = pke_audio_source{0x02};
const pke_audio_source pke_audio_source_sfx = pke_audio_source{0x03};
struct pke_audio_fx_params_reverb {
float reverb_strength;
};
struct pke_audio_fx_params_delay {
int64_t delay_frames;
};
struct pke_audio_fx_params_low_pass_filter {
float cutoff_freq;
float prev_output;
};
struct pke_audio_obj {
AssetHandle handle; // key
pke_audio_source source; // key
InstanceHandle instance_handle[PKE_AUDIO_MAX_CONCURRENT_COUNT];
glm::vec3 position_source[PKE_AUDIO_MAX_CONCURRENT_COUNT];
pke_audio_flags flags[PKE_AUDIO_MAX_CONCURRENT_COUNT];
uint32_t play_heads[PKE_AUDIO_MAX_CONCURRENT_COUNT];
uint8_t play_count;
};
struct pke_audio_master {
pk_arr_t<pke_audio_obj> playing_objects;
pk_membucket *bkt;
float master_volume;
float source_volumes[pke_audio_source_T_MAX];
uint32_t channel_count; // mono, stereo, 7.1
float *buffer;
int64_t buffer_size;
int64_t buffer_frames;
int64_t elapsed_ns;
std::mutex mtx_buffer;
std::chrono::time_point<std::chrono::steady_clock> last_tick_tp{};
};
extern struct pke_audio_master pke_audio_mstr;
#endif /* PKE_AUDIO_TYPES_INTERNAL_HPP */
|