vkmEngine 1.0.0
A C++ game engine · vkmengine.com
Loading...
Searching...
No Matches
audio_clip_asset.h
1#pragma once
2
3#include <cstdint>
4#include <memory>
5#include <vector>
6
7#include "resource/resource.h"
8#include "resource/resource_handle.h"
9
10namespace Vkm::Engine {
11
22class ClipSamples {
23 public:
24 ClipSamples() = default;
25
31 explicit ClipSamples(std::vector<int16_t> samples);
32
33 ~ClipSamples() = default;
34
35 ClipSamples(const ClipSamples& other) = default;
36 ClipSamples& operator=(const ClipSamples& other) = default;
37
38 ClipSamples(ClipSamples && other) = default;
39 ClipSamples& operator=(ClipSamples && other) = default;
40
41 public:
42 explicit operator bool() const noexcept { return m_samples != nullptr; }
43
44 const std::vector<int16_t>& operator*() const { return *m_samples; }
45 const std::vector<int16_t>* operator->() const { return m_samples.get(); }
46
47 private:
48 std::shared_ptr<const std::vector<int16_t>> m_samples;
49};
50
58struct AudioClipAsset : public Resource {
59 uint32_t sampleRate = 0;
60 uint32_t channels = 0;
61
63
65 size_t sampleCount() const { return samples ? samples->size() : 0; }
66
72 uint64_t frameCount() const { return channels == 0 ? 0 : sampleCount() / channels; }
73
75 float duration() const {
76 return sampleRate == 0 ? 0.0f : static_cast<float>(frameCount()) / static_cast<float>(sampleRate);
77 }
78};
79
80using AudioClipHandle = Handle<AudioClipAsset>;
81
82} // namespace Vkm::Engine
A clip's interleaved PCM, shared with every voice playing it.
Definition audio_clip_asset.h:22
ClipSamples(std::vector< int16_t > samples)
Take samples as a clip's buffer, shared from vkm_core.
A sound: fully decoded interleaved PCM, plus the rate and layout it was written at.
Definition audio_clip_asset.h:58
uint64_t frameCount() const
Length in sample frames (one frame is one sample per channel).
Definition audio_clip_asset.h:72
uint32_t channels
1 = mono, 2 = stereo, up to MAX_AUDIO_CHANNELS; only a mono clip positions.
Definition audio_clip_asset.h:60
ClipSamples samples
Interleaved PCM, shared with the voices playing it.
Definition audio_clip_asset.h:62
float duration() const
Length in seconds, or 0 when the clip carries no rate.
Definition audio_clip_asset.h:75
uint32_t sampleRate
Frames per second, as authored; AudioDevice resamples if it differs.
Definition audio_clip_asset.h:59
size_t sampleCount() const
Total samples across all channels.
Definition audio_clip_asset.h:65