3#include "pixelbullet/audio/audio_backend.h"
4#include "pixelbullet/audio/audio_playback_handle.h"
5#include "pixelbullet/audio/audio_playback_settings.h"
6#include "pixelbullet/audio/audio_spatial_settings.h"
7#include "pixelbullet/audio/command_queue.h"
8#include "pixelbullet/filesystem/virtual_path.h"
25 std::string resolved_path;
31 std::thread audio_thread;
33 std::unique_ptr<AudioBackend> backend;
34 std::atomic<AudioPlaybackHandle::ValueType> next_handle_value{ 1 };
35 bool initialized =
false;
38namespace audio_internal
40using BackendFactory = std::function<std::unique_ptr<AudioBackend>()>;
42enum class WorkerStepResult
49inline constexpr auto k_worker_poll_timeout = std::chrono::milliseconds(50);
51class ScopedBackendFactoryOverride
54 explicit ScopedBackendFactoryOverride(BackendFactory factory);
55 ~ScopedBackendFactoryOverride();
57 ScopedBackendFactoryOverride(
const ScopedBackendFactoryOverride&) =
delete;
58 ScopedBackendFactoryOverride& operator=(
const ScopedBackendFactoryOverride&) =
delete;
61 BackendFactory previous_factory_;
64[[nodiscard]] std::unique_ptr<AudioBackend> CreateBackend();
65[[nodiscard]]
bool InitializeBackend(
AudioState& state);
66[[nodiscard]]
bool InitializeBackend(
AudioState& state, BackendFactory backend_factory);
72[[nodiscard]]
float ClampVolume(
float volume)
noexcept;
74[[nodiscard]]
bool SubmitCommandIfInitialized(
AudioState& state,
const std::function<
void()>& command);
75[[nodiscard]] std::optional<AudioPlaySoundRequest> BuildPlaySoundRequest(
Filesystem& filesystem,
AudioState& state,
78[[nodiscard]] WorkerStepResult ProcessWorkerStep(
AudioState& state, std::chrono::milliseconds timeout = k_worker_poll_timeout);
A simple thread-safe command queue.
Definition command_queue.h:13
Definition filesystem.h:16
Definition virtual_path.h:10
Definition audio_internal.h:23
Definition audio_playback_handle.h:8
Definition audio_playback_settings.h:6
Definition audio_spatial_settings.h:6
Definition audio_internal.h:30