summaryrefslogtreecommitdiff
path: root/src/audio-types.hpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-06-25 17:50:44 -0400
committerJonathan Bradley <jcb@pikum.xyz>2025-06-25 17:50:44 -0400
commit9e791d26560b566bb21b5cd39d9042a41f29714c (patch)
tree7e95ca82423feb1009b6916bca82142d1326a94a /src/audio-types.hpp
parent3c73b503330eb67ad9489da6941ae3b28a686780 (diff)
audio: first-pass, pipewire
Diffstat (limited to 'src/audio-types.hpp')
-rw-r--r--src/audio-types.hpp36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/audio-types.hpp b/src/audio-types.hpp
new file mode 100644
index 0000000..84ab155
--- /dev/null
+++ b/src/audio-types.hpp
@@ -0,0 +1,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 */