Engine
Raylib based game framework
Loading...
Searching...
No Matches
AudioSystem.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "Types.hpp"
5#include "raylib.h"
6#include <optional>
7#include <unordered_map>
8
13
18class AudioSystem : public System
19{
20public:
21
26 void Update(const float deltaT) override;
27
28 // --- Sound effects -------------------------------------------------
29
35 void PlaySound(const Sound& sound, float volume = 1);
36
41 void StopSound(const Sound& sound);
42
48 void SetSoundVolume(const Sound& sound, float volume);
49
55 static void SetSoundPitch(const Sound& sound, const float pitch);
56
62 static void SetSoundPan(const Sound& sound, const float pan);
63
64 // --- Music ---------------------------------------------------------
65
73 void PlayMusic(const Music& music, float volume = 1, const bool loop = false, const float crossfadeS = 0);
74
79 void StopMusic(const float fadeOutDuration = 0);
80
85 bool IsMusicPlaying();
86
90 void PauseMusic();
91
95 void ResumeMusic();
96
101 std::optional<float> GetMusicLengthS();
102
107 std::optional<float> GetMusicPlayedS();
108
113 void SeekMusic(const float timeS);
114
119 void SetMusicVolume(float volume);
120
125 void SetMusicPitch(const float pitch);
126
131 void SetMusicPan(float pan);
132
137 void SetMusicLoop(const bool loop);
138
139 // --- Global volume ------------------------------------------------
140
145 static void SetMasterVolume(float volume);
146
151 void SetSFXVolume(float volume);
152
153private:
154
155 enum class MusicState : u8
156 {
157 STOPPED,
158 PLAYING,
159 PAUSED,
160 FADING_IN,
161 FADING_OUT,
162 QUEUED
163 };
164
165 struct MusicData
166 {
167 Music music = {};
168 float volume = 1;
169 float fadeTargetS = 0;
170 bool loop = false;
171 };
172
173 void UpdateFade(const bool fadingIn);
174 void MusicSwap();
175 void SetMusicVolumeInternal(float volume);
176
177 float m_sfxVolume = 1;
178 float m_musicVolume = 1;
179
180 MusicState m_musicState = MusicState::STOPPED;
181 MusicData m_currentMusic;
182 std::optional<MusicData> m_nextMusic;
183 float m_fadeTargetS = 0;
184
185 bool m_sfxVolumeChange = false;
186 std::unordered_map<rAudioBuffer*, std::pair<Sound, float>> m_sounds;
187};
Engine lifelong systems and their managing.
Handles playback of sounds and music with volume control and crossfading.
Definition AudioSystem.hpp:19
void SetMusicVolume(float volume)
Sets the music volume (without affecting sound effects).
Definition AudioSystem.cpp:349
static void SetMasterVolume(float volume)
Sets the master volume for the entire audio device.
Definition AudioSystem.cpp:411
static void SetSoundPan(const Sound &sound, const float pan)
Changes stereo pan of a playing sound.
Definition AudioSystem.cpp:156
void PlayMusic(const Music &music, float volume=1, const bool loop=false, const float crossfadeS=0)
Starts playing background music.
Definition AudioSystem.cpp:168
void SetMusicPitch(const float pitch)
Sets the music pitch.
Definition AudioSystem.cpp:358
void StopSound(const Sound &sound)
Stops a sound effect immediately.
Definition AudioSystem.cpp:115
void SetMusicPan(float pan)
Sets the music stereo pan.
Definition AudioSystem.cpp:373
void PauseMusic()
Pauses the current music stream.
Definition AudioSystem.cpp:256
void SetSFXVolume(float volume)
Sets the volume multiplier for all sound effects.
Definition AudioSystem.cpp:418
std::optional< float > GetMusicPlayedS()
Gets the current playback position.
Definition AudioSystem.cpp:308
void SetSoundVolume(const Sound &sound, float volume)
Changes volume of a currently playing sound.
Definition AudioSystem.cpp:132
void StopMusic(const float fadeOutDuration=0)
Stops the current music, optionally with a fade out.
Definition AudioSystem.cpp:211
bool IsMusicPlaying()
Checks if music is currently playing or fading in.
Definition AudioSystem.cpp:238
void SetMusicLoop(const bool loop)
Enables or disables looping for the current music.
Definition AudioSystem.cpp:392
void SeekMusic(const float timeS)
Seeks to a specific time in the current music.
Definition AudioSystem.cpp:326
void ResumeMusic()
Resumes a paused music stream.
Definition AudioSystem.cpp:273
static void SetSoundPitch(const Sound &sound, const float pitch)
Changes pitch of a playing sound.
Definition AudioSystem.cpp:146
void PlaySound(const Sound &sound, float volume=1)
Plays a sound effect.
Definition AudioSystem.cpp:100
std::optional< float > GetMusicLengthS()
Gets the total length of the current music.
Definition AudioSystem.cpp:290
void Update(const float deltaT) override
Updates music stream and removes finished sounds.
Definition AudioSystem.cpp:7
Base class for all systems.
Definition SystemManager.hpp:27