summaryrefslogtreecommitdiff
path: root/src/audio-types.hpp
blob: 84ab1553c5e830bbc96c250f0811bddb456660c1 (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
#ifndef PKE_AUDIO_TYPES_INTERNAL_HPP
#define PKE_AUDIO_TYPES_INTERNAL_HPP

#include "asset-manager.hpp"
#include "pk.h"

#define PKE_AUDIO_MAX_CONCURRENT_COUNT 8

TypeSafeInt_constexpr(pke_audio_flags, uint8_t, 0xFF);
TypeSafeInt_constexpr(pke_audio_source, uint8_t, 0x0F);

const pke_audio_flags  pke_audio_flag_none      = pke_audio_flags{0x00};

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_obj {
	AssetHandle      handle; // key
	pke_audio_source source; // key
	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;
	float                   source_volumes[pke_audio_source_T_MAX];
	uint32_t                channel_count; // mono, stereo, 7.1
	std::mutex              mtx_buffer;
};

extern struct pke_audio_master pke_audio_mstr;

#endif /* PKE_AUDIO_TYPES_INTERNAL_HPP */