Game Audio Module
A C++ audio system using miniaudio with Python bindings
Loading...
Searching...
No Matches
sound.h
Go to the documentation of this file.
1#pragma once
2
3#include "miniaudio/miniaudio.h"
4#include "vec3.h"
5#include <memory>
6#include <string>
7#include <vector>
8
14namespace audio {
15
16// Forward declarations
17class AudioGroup;
18
27 ma_sound* sound;
28 bool finished;
29
34
41};
42
51class Sound {
55 friend class AudioManager;
56
60 friend class AudioSystem;
61
65 friend class AudioTrack;
66
67 public:
80 static std::unique_ptr<Sound> Create(ma_engine* engine, const std::string& filepath, AudioGroup* group = nullptr);
81
82 private:
90 Sound(ma_engine* engine, const std::string& filepath, AudioGroup* group);
91
92 public:
98 ~Sound();
99
100 private:
103
114 void Play();
115
129 void Play(const Vec3& position);
130
136 void Stop();
137
143 void SetLooping(bool should_loop);
144
150 void SetVolume(float volume);
151
157 void SetPitch(float pitch);
158
161
170 void SetPosition(const Vec3& position);
171
177 Vec3 GetPosition() const { return position_; }
178
187 void SetMinDistance(float minDistance);
188
194 float GetMinDistance() const { return min_distance_; }
195
203 void SetMaxDistance(float maxDistance);
204
210 float GetMaxDistance() const { return max_distance_; }
211
220 void SetRolloff(float rolloff);
221
227 float GetRolloff() const { return rolloff_; }
228
234 void SetSpatializationEnabled(bool enabled);
235
242
244
246
249
255 float GetVolume() const { return volume_; }
256
262 bool IsLooping() const { return looping_; }
263
269 bool IsPlaying() const;
271
272 private:
279
280 std::vector<std::unique_ptr<SoundInstance>> sound_instances_;
281 ma_engine* engine_;
282 ma_sound_group* group_;
283 std::string filepath_;
284 bool looping_;
285 float volume_;
286 float pitch_;
287
293 float rolloff_;
296};
297
298} // namespace audio
Controls multiple sounds as a single unit.
Definition audio_group.h:24
Central manager for all audio functionality.
Definition audio_manager.h:179
Low-level audio system that interfaces directly with miniaudio.
Definition audio_system.h:32
Manages a collection of synchronized audio layers.
Definition audio_track.h:32
Represents an audio file that can be played multiple times simultaneously.
Definition sound.h:51
~Sound()
Destructor.
Definition sound.cpp:46
float GetMaxDistance() const
Get the maximum distance.
Definition sound.h:210
bool IsSpatializationEnabled() const
Check if spatialization is enabled.
Definition sound.h:241
float GetVolume() const
Gets the current volume level.
Definition sound.h:255
void SetSpatializationEnabled(bool enabled)
Enable or disable spatialization for this sound.
Definition sound.cpp:233
void SetVolume(float volume)
Sets volume for all instances.
Definition sound.cpp:146
bool IsPlaying() const
Checks if any instance of this sound is playing.
Definition sound.cpp:166
void Stop()
Stops all instances of this sound.
Definition sound.cpp:128
static std::unique_ptr< Sound > Create(ma_engine *engine, const std::string &filepath, AudioGroup *group=nullptr)
Factory method for creating Sound instances.
Definition sound.cpp:12
Vec3 position_
3D position of the sound
Definition sound.h:290
std::string filepath_
Path to the audio file.
Definition sound.h:283
float volume_
Current volume level.
Definition sound.h:285
bool looping_
Whether new instances should loop.
Definition sound.h:284
void SetMaxDistance(float maxDistance)
Set the maximum distance for distance attenuation.
Definition sound.cpp:203
ma_engine * engine_
Pointer to miniaudio engine.
Definition sound.h:281
float min_distance_
Minimum distance for attenuation.
Definition sound.h:291
std::vector< std::unique_ptr< SoundInstance > > sound_instances_
Collection of playing instances.
Definition sound.h:280
void CleanupFinishedInstances()
Removes and deletes finished instances.
Definition sound.cpp:50
float pitch_
Pitch for next instance (1.0 = normal)
Definition sound.h:286
void SetRolloff(float rolloff)
Set the rolloff factor for distance attenuation.
Definition sound.cpp:218
void SetLooping(bool should_loop)
Sets whether new instances should loop.
Definition sound.cpp:137
ma_sound_group * group_
Pointer to parent sound group (if any)
Definition sound.h:282
void Play()
Starts a new instance of the sound.
Definition sound.cpp:62
void SetPitch(float pitch)
Sets pitch for the next instance to be played.
Definition sound.cpp:159
void SetPosition(const Vec3 &position)
Set the 3D position of the sound.
Definition sound.cpp:177
Vec3 GetPosition() const
Get the 3D position of the sound.
Definition sound.h:177
float GetRolloff() const
Get the rolloff factor.
Definition sound.h:227
float GetMinDistance() const
Get the minimum distance.
Definition sound.h:194
void SetMinDistance(float minDistance)
Set the minimum distance for distance attenuation.
Definition sound.cpp:188
bool spatialization_enabled_
Whether spatialization is enabled.
Definition sound.h:294
float rolloff_
Rolloff factor for distance attenuation.
Definition sound.h:293
bool IsLooping() const
Checks if this sound is set to loop.
Definition sound.h:262
float max_distance_
Maximum distance for attenuation.
Definition sound.h:292
Definition audio_group.cpp:7
Represents a single instance of a playing sound.
Definition sound.h:26
~SoundInstance()
Destructor.
Definition sound.cpp:25
ma_sound * sound
Pointer to miniaudio sound.
Definition sound.h:27
SoundInstance()
Constructor.
Definition sound.cpp:23
bool finished
Flag indicating if this instance has finished playing.
Definition sound.h:28
3D vector for spatial audio positioning
Definition vec3.h:46
3D vector class for spatial audio positioning