Calamity Engine 1.0.0
A cross-platform 2D game engine written in C++ and SDL3.
Loading...
Searching...
No Matches
audio.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <SDL3/SDL_audio.h>
4#include "../core/definitions.hpp"
5#include "../core/node/node.hpp"
6#include "../core/node/components.hpp"
7#include "../utils/logger.hpp"
8#include "../core/signal.hpp"
10
11static SDL_AudioDeviceID audio_device = SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK;
12
13class Audio
14{
15public:
16 Audio();
17
18 static const int bufferSize = 4096 * 4;
19 static const int chunkSize = 4096;
20 void openAudioDevice(int id);
21 SDL_AudioDeviceID getAudioDevice() const;
22
23 void exit();
24 void initialize();
25private:
26 SDL_AudioDeviceID device;
27};
28
32typedef struct Sound
33{
34 Uint8 *wav_data = nullptr;
35 Uint32 wav_data_len = 0;
36 SDL_AudioStream *stream = nullptr;
38
81class AudioSource : public Component
82{
83public:
84 AudioSource(const std::string& path);
85 std::string path;
86
87 float getVolume() const;
88 float getPitch() const;
89 bool getPlaying() const;
90 void setPitch(float pitch);
91 void setVolume(float volume);
92
93 bool loop = false;
98
99 void play();
100 void stop();
101 void pause();
102 bool loadAudio();
103 void update(float deltaTime);
104 void exit();
105
106 template <class Archive>
107 void save(Archive &ar) const
108 {
109 ar(CEREAL_NVP(volume), CEREAL_NVP(pitch), CEREAL_NVP(playing), CEREAL_NVP(path), CEREAL_NVP(loop));
110 }
111
112 template <class Archive>
113 void load(Archive &ar)
114 {
115 ar(CEREAL_NVP(volume), CEREAL_NVP(pitch), CEREAL_NVP(playing), CEREAL_NVP(path), CEREAL_NVP(loop));
116 this->fsPath = File::getAbsoluteFilePath(path);
117 loadAudio();
118 SDL_SetAudioStreamFrequencyRatio(this->handle.stream, this->pitch);
119 SDL_SetAudioStreamGain(this->handle.stream, this->volume);
120 if (playing)
121 {
122 play();
123 }
124 }
125
126private:
127 bool playing = false;
128 float volume = 1.0f;
129 float pitch = 1.0f;
130 size_t cursor = 0;
131 bool finishedFeeding = false;
132
133 std::string fsPath;
134 Sound handle;
135};
Definition audio.hpp:82
float getVolume() const
Definition audio.cpp:100
void exit()
Definition audio.cpp:165
void load(Archive &ar)
Definition audio.hpp:113
void play()
Definition audio.cpp:36
Signal paused
Definition audio.hpp:97
Signal finished
Definition audio.hpp:94
void setPitch(float pitch)
Definition audio.cpp:89
float getPitch() const
Definition audio.cpp:95
void save(Archive &ar) const
Definition audio.hpp:107
void update(float deltaTime)
Definition audio.cpp:126
void setVolume(float volume)
Definition audio.cpp:83
std::string path
Definition audio.hpp:85
void pause()
Definition audio.cpp:119
void stop()
Definition audio.cpp:110
bool loadAudio()
Definition audio.cpp:52
bool loop
Definition audio.hpp:93
Signal looped
Definition audio.hpp:95
bool getPlaying() const
Definition audio.cpp:105
Signal stopped
Definition audio.hpp:96
Definition audio.hpp:14
static const int bufferSize
Definition audio.hpp:18
void openAudioDevice(int id)
Definition audio.cpp:18
void initialize()
Definition audio.cpp:16
static const int chunkSize
Definition audio.hpp:19
Audio()
Definition audio.cpp:7
SDL_AudioDeviceID getAudioDevice() const
Definition audio.cpp:25
void exit()
Definition audio.cpp:12
static std::string getAbsoluteFilePath(const std::string &path)
Definition file.cpp:207
Definition signal.hpp:53
Definition components.hpp:21
Definition audio.hpp:33
Uint8 * wav_data
Definition audio.hpp:34
SDL_AudioStream * stream
Definition audio.hpp:36
Uint32 wav_data_len
Definition audio.hpp:35