capo-lite v2.1.0
Simple audio playback library
 
Loading...
Searching...
No Matches
buffer.hpp
Go to the documentation of this file.
1#pragma once
2#include <cstdint>
3#include <optional>
4#include <span>
5#include <string_view>
6#include <vector>
7
8namespace capo {
10enum class Encoding : std::int8_t { Wav, Mp3, Flac };
11
13class Buffer {
14 public:
16 static constexpr auto sample_rate_v = 48000u;
17
18 [[nodiscard]] auto get_samples() const -> std::span<float const> { return m_samples; }
19 [[nodiscard]] auto get_channels() const -> std::uint8_t { return m_channels; }
20
21 [[nodiscard]] auto get_frame_count() const -> std::uint64_t {
22 if (m_samples.empty() || m_channels == 0) { return 0; }
23 return m_samples.size() / m_channels;
24 }
25
26 [[nodiscard]] auto is_loaded() const -> bool { return m_channels > 0 && !m_samples.empty(); }
27
29 void set_frames(std::vector<float> samples, std::uint8_t channels);
30
35 [[nodiscard]] auto decode_bytes(std::span<std::byte const> bytes, std::optional<Encoding> encoding = {}) -> bool;
36
41 [[nodiscard]] auto decode_file(char const* path, std::optional<Encoding> encoding = {}) -> bool;
42
43 private:
44 std::vector<float> m_samples{};
45 std::uint8_t m_channels{};
46};
47
49[[nodiscard]] auto guess_encoding(std::string_view path) -> std::optional<Encoding>;
50
52[[nodiscard]] auto file_to_bytes(char const* path) -> std::vector<std::byte>;
53} // namespace capo
Audio Buffer: stores decoded PCM data in memory.
Definition buffer.hpp:13
void set_frames(std::vector< float > samples, std::uint8_t channels)
Set custom PCM data.
auto decode_bytes(std::span< std::byte const > bytes, std::optional< Encoding > encoding={}) -> bool
Decode bytes in memory.
static constexpr auto sample_rate_v
Sample rate is constant (48kHz).
Definition buffer.hpp:16
auto get_channels() const -> std::uint8_t
Definition buffer.hpp:19
auto decode_file(char const *path, std::optional< Encoding > encoding={}) -> bool
Decode an audio file.
auto get_samples() const -> std::span< float const >
Definition buffer.hpp:18
auto is_loaded() const -> bool
Definition buffer.hpp:26
auto get_frame_count() const -> std::uint64_t
Definition buffer.hpp:21
Definition buffer.hpp:8
auto guess_encoding(std::string_view path) -> std::optional< Encoding >
Guess the Encoding format based on the file extension.
Encoding
Format of encoded data.
Definition buffer.hpp:10
auto file_to_bytes(char const *path) -> std::vector< std::byte >
Load file data as a binary byte array.