Game Audio Module
A C++ audio system using miniaudio with Python bindings
Loading...
Searching...
No Matches
audio_track.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <unordered_map>
5#include <memory>
6#include <chrono>
7
13namespace audio {
14
15// Forward declarations
16class Sound;
17class AudioSystem;
18class AudioGroup;
19
36 friend class AudioManager;
37
38 public:
48 static std::unique_ptr<AudioTrack> Create(AudioSystem* system) {
49 return std::unique_ptr<AudioTrack>(new AudioTrack(system));
50 }
51
52 private:
58 explicit AudioTrack(AudioSystem* system);
59
60 public:
67
68 private:
69
81 void AddLayer(const std::string& name, const std::string& filepath,
82 AudioGroup* group = nullptr, bool looping = true);
83
89 void RemoveLayer(const std::string& name);
90
98 void FadeLayer(const std::string& name, float target_volume,
99 std::chrono::milliseconds duration);
100
107 void SetLayerVolume(const std::string& name, float volume);
108
115 float GetLayerVolume(const std::string& name) const;
116
123 void Play();
124
130 void Stop();
131
138 void Update();
139
140 private:
148 struct Layer {
149 std::unique_ptr<Sound> sound;
153 std::chrono::steady_clock::time_point fade_start_time;
154 std::chrono::steady_clock::time_point fade_end_time;
155 std::chrono::milliseconds fade_duration;
157
162 start_volume(1.0f), is_fading(false),
163 fade_duration(std::chrono::milliseconds(0)) {}
164 };
165
167 std::unordered_map<std::string, Layer> layers_;
169};
170
171} // 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
bool is_playing_
Whether the track is currently playing.
Definition audio_track.h:168
void Play()
Starts playing all layers in sync.
Definition audio_track.cpp:86
~AudioTrack()
Destructor.
Definition audio_track.cpp:22
void FadeLayer(const std::string &name, float target_volume, std::chrono::milliseconds duration)
Sets the target volume for a layer and fades to it over time.
Definition audio_track.cpp:47
void Update()
Updates layer fading.
Definition audio_track.cpp:103
void AddLayer(const std::string &name, const std::string &filepath, AudioGroup *group=nullptr, bool looping=true)
Adds a new layer to the track.
Definition audio_track.cpp:26
void Stop()
Stops all layers.
Definition audio_track.cpp:96
static std::unique_ptr< AudioTrack > Create(AudioSystem *system)
Factory method for creating AudioTrack instances.
Definition audio_track.h:48
void SetLayerVolume(const std::string &name, float volume)
Sets layer volume immediately without fading.
Definition audio_track.cpp:63
AudioSystem * system_
Reference to the audio system.
Definition audio_track.h:166
float GetLayerVolume(const std::string &name) const
Gets current volume of a layer.
Definition audio_track.cpp:80
void RemoveLayer(const std::string &name)
Removes a layer from the track.
Definition audio_track.cpp:38
std::unordered_map< std::string, Layer > layers_
Map of layer names to layer data.
Definition audio_track.h:167
Definition audio_group.cpp:7
STL namespace.
Represents a single audio layer within a track.
Definition audio_track.h:148
std::chrono::steady_clock::time_point fade_start_time
When fade began.
Definition audio_track.h:153
Layer()
Default constructor for Layer.
Definition audio_track.h:161
float start_volume
Volume when fade started.
Definition audio_track.h:152
float current_volume
Current volume level.
Definition audio_track.h:150
std::chrono::milliseconds fade_duration
Duration of current fade.
Definition audio_track.h:155
std::unique_ptr< Sound > sound
The actual sound object.
Definition audio_track.h:149
std::chrono::steady_clock::time_point fade_end_time
When fade will end.
Definition audio_track.h:154
float target_volume
Target volume for fading.
Definition audio_track.h:151
bool is_fading
Whether this layer is currently fading.
Definition audio_track.h:156