CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
AudioResource.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "AudioMetadata.hpp"
11
13
16
18
19#include <functional>
20#include <system_error>
21
22namespace CeresEngine {
23
24 class AudioClip;
25 class AudioStream;
26
30 Clip,
31
34 Stream
35 };
36
42 public:
44 using Sample = unsigned short;
45
48
50 using SampleIndex = unsigned int;
51
53 using SampleOffset = int;
54
55 public:
56 virtual ~AbstractAudioResource() = default;
57
58 public:
60 [[nodiscard]] virtual const AudioMetadata& getMetadata() const = 0;
61
62 public:
64 [[nodiscard]] virtual AudioResourceType getType() const = 0;
65
67 [[nodiscard]] CE_SCRIPT_EXPORT()
68 bool isClip() const;
69
72 AudioClip& asClip();
73
76 [[nodiscard]] const AudioClip& asClip() const;
77
79 [[nodiscard]] CE_SCRIPT_EXPORT()
80 bool isStream() const;
81
85 AudioStream& asStream();
86
90 [[nodiscard]] const AudioStream& asStream() const;
91 };
92
98 template<typename T> class AudioResource : public AbstractAudioResource {};
99
110 class CE_SCRIPT_EXPORT() AudioClip : public AudioResource<AudioClip>, public TResource<AudioClip> {
111 public:
113 [[nodiscard]] virtual const Samples& getSamples() const = 0;
114
115 public:
117 [[nodiscard]] AudioResourceType getType() const final;
118 };
119
127 public:
129 using ReadSamplesCallback = std::function<void(
132
135 std::error_code,
136
139 Samples&)>;
140
141 public:
146 virtual void readSamples(unsigned int samples, ReadSamplesCallback&& callback) = 0;
147
150 virtual void seek(SampleIndex index) = 0;
151
152 public:
154 [[nodiscard]] AudioResourceType getType() const final;
155 };
156
157 // ---------------------------------------------------------------------------------------------
158
159 class SimpleAudioClip : public AudioClip {
160 public:
163
166
167 public:
173
174 public:
176 [[nodiscard]] const AudioMetadata& getMetadata() const override;
177
179 [[nodiscard]] const Samples& getSamples() const override;
180 };
181
182} // namespace CeresEngine
#define CE_SCRIPT_EXPORT(...)
The CE_SCRIPT_EXPORT macro marks a class or method as exportable and available in scripting environme...
Definition Macros.hpp:247
A abstract audio resource.
Definition AudioResource.hpp:41
virtual AudioResourceType getType() const =0
virtual ~AbstractAudioResource()=default
virtual const AudioMetadata & getMetadata() const =0
unsigned int SampleIndex
A type representing the index of a sample.
Definition AudioResource.hpp:50
Vector< Sample > Samples
A collection of multiple audio samples.
Definition AudioResource.hpp:47
unsigned short Sample
A audio sample type.
Definition AudioResource.hpp:44
int SampleOffset
A type representing a sample offset.
Definition AudioResource.hpp:53
A audio clip is a small piece of audio that is entirely loaded into memory.
Definition AudioResource.hpp:110
AudioResourceType getType() const final
virtual const Samples & getSamples() const =0
A audio resource.
Definition AudioResource.hpp:98
A audio stream is a larger piece of audio that will be streammed for the device (instead of feeding a...
Definition AudioResource.hpp:126
std::function< void(AudioStream &, std::error_code, Samples &)> ReadSamplesCallback
A callback used as a reply for a read samples operation.
Definition AudioResource.hpp:139
virtual void seek(SampleIndex index)=0
Seeks the audio stream.
AudioResourceType getType() const final
virtual void readSamples(unsigned int samples, ReadSamplesCallback &&callback)=0
Reads up to samples from the stream.
Definition AudioResource.hpp:159
const Samples & getSamples() const override
const AudioMetadata & getMetadata() const override
SimpleAudioClip(AudioMetadata metadata, Samples samples)
Creates a new audio clip.
Samples samples
A vector containing the audio samples as 16 bit integers.
Definition AudioResource.hpp:165
AudioMetadata metadata
The audio metadata object.
Definition AudioResource.hpp:162
An interface that all data streams must implement.
Definition Stream.hpp:116
Utility template class that can be extended by Resources to automatically implement methods that are ...
Definition Resource.hpp:272
Definition Application.hpp:19
std::vector< T, ScopedAllocatorAdaptor< StdAllocator< T, RawAllocator > > > Vector
Vector is a sequence container that encapsulates dynamic size arrays.
Definition Vector.hpp:17
AudioResourceType
Definition AudioResource.hpp:27
@ Clip
A audio clip is a small piece of audio that is entirely loaded into memory.
A class collecting audio metadata information.
Definition AudioMetadata.hpp:13