1#ifndef NNGN_AUDIO_WAV_H
2#define NNGN_AUDIO_WAV_H
17using namespace std::string_view_literals;
22 static_assert(std::endian::native == std::endian::little,
"TODO");
27 constexpr explicit WAV(std::span<std::byte> buffer);
33 constexpr std::size_t
n_samples(
void)
const;
37 constexpr void fill(
void)
const;
38 constexpr std::span<std::byte>
data(
void)
const;
39 bool check(
void)
const;
58 static constexpr auto RIFF =
"RIFF"sv;
59 static constexpr auto WAVE =
"WAVE"sv;
60 static constexpr auto FMT =
"fmt "sv;
61 static constexpr auto DATA =
"data"sv;
63 constexpr std::span<std::byte>
subspan(
offset o, std::size_t
n)
const;
64 template<
typename T>
constexpr T read(
offset o)
const;
65 template<
typename T>
constexpr void write(
offset o,
const T &x)
const;
66 constexpr std::size_t
size(
void)
const;
67 std::span<std::byte>
b = {};
70inline constexpr WAV::WAV(std::span<std::byte> buffer) : b{buffer} {
77 const auto oz =
static_cast<std::size_t
>(o);
79 return this->
b.subspan(oz,
n);
85 std::memcpy(&ret, this->
subspan(o,
sizeof(ret)).
data(),
sizeof(ret));
91 if constexpr(std::ranges::range<T>) {
93 std::memcpy(
s.data(), x.data(), x.size());
96 std::memcpy(
s.data(), &x,
sizeof(
T));
128inline constexpr std::span<std::byte>
WAV::data(
void)
const {
149 const auto r = this->
rate();
158 static_cast<u32>(
r * bytes_per_sample *
c));
A non-owning wrapper for a byte buffer containing a WAV file.
Definition wav.h:21
constexpr void set_rate(u32 r) const
Definition wav.h:142
constexpr u16 bits_per_sample(void) const
Definition wav.h:116
WAV(void)=default
Constructs an empty object, must be initialized before it is used.
constexpr void write(offset o, const T &x) const
Definition wav.h:90
constexpr void set_size(u32 s) const
Definition wav.h:133
offset
Definition wav.h:41
constexpr std::span< std::byte > data(void) const
Definition wav.h:128
constexpr u32 fmt_size(void) const
Definition wav.h:100
std::span< std::byte > b
Definition wav.h:67
static constexpr std::size_t HEADER_SIZE
Definition wav.h:24
constexpr u16 channels(void) const
Definition wav.h:108
constexpr void fill(void) const
Definition wav.h:146
constexpr u16 format(void) const
Definition wav.h:104
constexpr T read(offset o) const
Definition wav.h:83
constexpr u32 rate(void) const
Definition wav.h:112
bool check(void) const
Definition wav.cpp:16
constexpr std::span< std::byte > subspan(offset o, std::size_t n) const
Definition wav.h:74
constexpr std::size_t size(void) const
Definition wav.h:124
constexpr std::size_t n_samples(void) const
Definition wav.h:120
constexpr void set_channels(u16 c) const
Definition wav.h:138
assert
Definition debug.lua:3
local n
Definition dump_lights.lua:5
local c
Definition gamma.lua:11
local r
Definition gamma.lua:7
std::uint16_t u16
Definition def.h:13
std::uint32_t u32
Definition def.h:14
static constexpr auto RIFF
Definition wav.h:58
static constexpr auto FMT
Definition wav.h:60
static constexpr auto WAVE
Definition wav.h:59
static constexpr auto DATA
Definition wav.h:61
std::chrono::seconds s
Definition timing.cpp:6