RavEngine
Loading...
Searching...
No Matches
AudioSource.hpp
1#pragma once
2#if !RVE_SERVER
3#include "Queryable.hpp"
4#include <string>
5#include "mathtypes.hpp"
6#include "Ref.hpp"
7#include "AudioTypes.hpp"
8#include "Types.hpp"
9#include "ComponentWithOwner.hpp"
10#include "AudioRenderBuffer.hpp"
11
12namespace RavEngine{
13
15 friend class AudioEngine;
16 friend class AudioSyncSystem;
17 friend class AudioSourceBase;
18private:
19 const float* audiodata;
20 double lengthSeconds = 0;
21 uint8_t nchannels = 0;
22public:
29 AudioAsset(const std::string& name, decltype(nchannels) desired_channels = 1);
30
37 AudioAsset(InterleavedSampleBufferView interleavedData, decltype(nchannels) nchannels) : nchannels(nchannels){
38 audiodata = interleavedData.data();
39 data = PlanarSampleBufferInlineView{const_cast<float*>(audiodata),interleavedData.size(),nchannels };
40 data.ImportInterleavedData(interleavedData, nchannels);
41 }
42
44
45 inline double GetLength() const {return lengthSeconds;}
46 inline decltype(nchannels) GetNChanels() const {
47 return nchannels;
48 }
49
50 inline auto GetData() const{
51 return audiodata;
52 }
53
54 inline auto GetNumSamples() const{
55 return data.sizeOneChannel();
56 }
57};
58
59
60
63
64 AudioDataProvider(uint16_t nsamples, uint8_t nchannels) : renderData(nsamples, nchannels){}
65
66 SingleAudioRenderBuffer renderData;
67 float volume = 1;
68 bool loops : 1 = false;
69 bool isPlaying : 1 = false;
70
74 virtual void Play(){
75 isPlaying = true;
76 }
77
81 virtual void Pause(){
82 isPlaying = false;
83 }
84
85 virtual void Restart() = 0;
86
87
88 inline float GetVolume() const { return volume; }
89
94 inline void SetVolume(float vol){volume = vol;}
95
101 inline void SetLoop(bool loop) {this->loops = loop;}
102
106 inline bool IsPlaying() const { return isPlaying; }
107};
108
109
114class AudioListener : public Queryable<AudioListener>, public AudioGraphComposed, public AutoCTTI{};
115
120 Ref<AudioAsset> asset;
121
122 uint64_t lastPlayTime = 0;
123
124 SampledAudioDataProvider(decltype(asset) a, uint8_t nchannels = 1);
125
130 inline void SetAudio(decltype(SampledAudioDataProvider::asset) a) {
131 asset = a;
132 }
133
137 void Restart() final;
138
139 void Pause() final;
140
141 void Play() final;
142
149};
150
155
156protected:
157 friend class AudioEngine;
158 friend class AudioSyncSystem;
160
161public:
162
163 AudioSourceBase(decltype(player) a) : player(a){}
164
165 inline void SetPlayer(decltype(player) p ){
166 player = p;
167 }
168
169 inline decltype(player) GetPlayer() const{
170 return player;
171 }
172
173};
174
178struct AudioSourceComponent : public AudioSourceBase, public ComponentWithOwner, public Queryable<AudioSourceComponent>{
180};
181
185struct AmbientAudioSourceComponent : public AudioSourceBase, public Queryable< AmbientAudioSourceComponent>, public AutoCTTI {
187};
188
193 vector3 source_position;
194
195 InstantaneousAudioSource(Ref<AudioAsset> a, const vector3& position, float vol = 1);
196};
197
200 Entity fakeOwner{{INVALID_ENTITY}, nullptr};
202 source(source), fakeOwner(fakeOwner,nullptr) {}
203};
204
205
212
213}
214#endif
Definition AudioSource.hpp:14
AudioAsset(InterleavedSampleBufferView interleavedData, decltype(nchannels) nchannels)
Definition AudioSource.hpp:37
Definition AudioSource.hpp:114
Definition ComponentWithOwner.hpp:6
Definition AudioTypes.hpp:20
Definition concurrentqueue.h:747
Definition Animation.hpp:6
std::span< float, std::dynamic_extent > InterleavedSampleBufferView
Definition AudioTypes.hpp:13
Definition Types.hpp:10
Definition AudioSource.hpp:185
Definition AudioSource.hpp:61
virtual void Pause()
Definition AudioSource.hpp:81
virtual void Play()
Definition AudioSource.hpp:74
void SetVolume(float vol)
Definition AudioSource.hpp:94
void SetLoop(bool loop)
Definition AudioSource.hpp:101
bool IsPlaying() const
Definition AudioSource.hpp:106
Definition AudioTypes.hpp:114
Definition AudioSource.hpp:154
Definition AudioSource.hpp:178
Definition CTTI.hpp:14
Definition Entity.hpp:11
Definition AudioSource.hpp:209
Definition AudioSource.hpp:198
Definition AudioSource.hpp:192
Definition Queryable.hpp:21
Definition AudioSource.hpp:119
void Play() final
Definition AudioSource.cpp:124
void Pause() final
Definition AudioSource.cpp:135
void ProvideBufferData(PlanarSampleBufferInlineView &buffer, PlanarSampleBufferInlineView &scratchSpace) final
Definition AudioSource.cpp:143
void Restart() final
Definition AudioSource.cpp:131
void SetAudio(decltype(SampledAudioDataProvider::asset) a)
Definition AudioSource.hpp:130
Definition qualifier.hpp:35