PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
miniaudio_backend.h
1#pragma once
2
3#include "pixelbullet/audio/audio_backend.h"
4
5#include <miniaudio.h>
6
7#include <memory>
8#include <string>
9#include <unordered_map>
10
11namespace pixelbullet
12{
15{
16 void operator()(ma_sound* sound) const
17 {
18 if (!sound)
19 {
20 return;
21 }
22
23 ma_sound_uninit(sound);
24 delete sound;
25 }
26};
27
29class MiniaudioBackend : public AudioBackend
30{
31public:
33 {
34 std::unique_ptr<ma_sound, MaSoundDeleter> sound;
35 bool paused = false;
36 };
37
38 MiniaudioBackend();
39 virtual ~MiniaudioBackend() override;
40
41 virtual bool init() override;
42 virtual void shutdown() override;
43 virtual void update() override;
44 virtual void play_sound(AudioPlaybackHandle handle, const std::string& file_path, AudioPlaybackSettings settings) override;
45 virtual void stop_sound(AudioPlaybackHandle handle) override;
46 virtual void pause_sound(AudioPlaybackHandle handle) override;
47 virtual void resume_sound(AudioPlaybackHandle handle) override;
48 virtual void set_volume(AudioPlaybackHandle handle, float volume) override;
49 virtual void set_looping(AudioPlaybackHandle handle, bool loop) override;
50 virtual void set_listener_transform(glm::vec3 position, glm::vec3 forward, glm::vec3 up) override;
51 virtual void set_spatial_settings(AudioPlaybackHandle handle, AudioSpatialSettings settings) override;
52 virtual void set_playback_position(AudioPlaybackHandle handle, glm::vec3 position) override;
53 virtual void stop_all() override;
54
55private:
56 void CullFinishedSounds();
57
58 ma_engine engine_{};
59 bool initialized_ = false;
61 std::unordered_map<AudioPlaybackHandle::ValueType, ActiveSound> active_sounds_;
62};
63} // namespace pixelbullet
The abstract interface for an audio backend.
Definition audio_backend.h:15
virtual void resume_sound(AudioPlaybackHandle handle) override
Resumes an active playback handle if it still exists.
Definition miniaudio_backend.cc:173
virtual void play_sound(AudioPlaybackHandle handle, const std::string &file_path, AudioPlaybackSettings settings) override
Plays the sound file at filePath using an owned playback handle.
Definition miniaudio_backend.cc:84
virtual void shutdown() override
Shuts down the backend.
Definition miniaudio_backend.cc:58
virtual void set_looping(AudioPlaybackHandle handle, bool loop) override
Updates whether an active playback loops.
Definition miniaudio_backend.cc:206
virtual bool init() override
Initializes the backend. Returns true on success.
Definition miniaudio_backend.cc:39
virtual void stop_sound(AudioPlaybackHandle handle) override
Stops an active playback handle if it still exists.
Definition miniaudio_backend.cc:133
virtual void update() override
Performs periodic backend maintenance.
Definition miniaudio_backend.cc:79
virtual void set_volume(AudioPlaybackHandle handle, float volume) override
Updates the playback volume for an active handle.
Definition miniaudio_backend.cc:193
virtual void stop_all() override
Stops all active sounds.
Definition miniaudio_backend.cc:265
virtual void set_spatial_settings(AudioPlaybackHandle handle, AudioSpatialSettings settings) override
Updates spatial settings for an active playback handle.
Definition miniaudio_backend.cc:231
virtual void set_playback_position(AudioPlaybackHandle handle, glm::vec3 position) override
Updates the world-space position of an active playback handle.
Definition miniaudio_backend.cc:252
virtual void set_listener_transform(glm::vec3 position, glm::vec3 forward, glm::vec3 up) override
Updates the active listener transform used by spatial sounds.
Definition miniaudio_backend.cc:219
virtual void pause_sound(AudioPlaybackHandle handle) override
Pauses an active playback handle if it still exists.
Definition miniaudio_backend.cc:153
Definition audio_playback_handle.h:8
Definition audio_playback_settings.h:11
Definition audio_spatial_settings.h:6
A custom deleter for a dynamically allocated ma_sound.
Definition miniaudio_backend.h:15
Definition miniaudio_backend.h:33