7#include "../required.hpp"
8#include "../assert.hpp"
10#include "../rapid/numeric_array.hpp"
91 return {4, 8, 23,
true, std::endian::little};
94 [[nodiscard]]
static constexpr audio_sample_format float32_be() noexcept
96 return {4, 8, 23,
true, std::endian::big};
99 [[nodiscard]]
static constexpr audio_sample_format float32() noexcept
101 return {4, 8, 23,
true, std::endian::native};
104 [[nodiscard]]
static constexpr audio_sample_format int16_le() noexcept
106 return {2, 0, 15,
false, std::endian::little};
109 [[nodiscard]]
static constexpr audio_sample_format int16_be() noexcept
111 return {2, 0, 15,
false, std::endian::big};
114 [[nodiscard]]
static constexpr audio_sample_format int16() noexcept
116 return {2, 0, 15,
false, std::endian::native};
119 [[nodiscard]]
static constexpr audio_sample_format int20_le() noexcept
121 return {3, 0, 19,
false, std::endian::little};
124 [[nodiscard]]
static constexpr audio_sample_format int20_be() noexcept
126 return {3, 0, 19,
false, std::endian::big};
129 [[nodiscard]]
static constexpr audio_sample_format int20() noexcept
131 return {3, 0, 19,
false, std::endian::native};
134 [[nodiscard]]
static constexpr audio_sample_format int24_le() noexcept
136 return {3, 0, 23,
false, std::endian::little};
139 [[nodiscard]]
static constexpr audio_sample_format int24_be() noexcept
141 return {3, 0, 23,
false, std::endian::big};
144 [[nodiscard]]
static constexpr audio_sample_format int24() noexcept
146 return {3, 0, 23,
false, std::endian::native};
149 [[nodiscard]]
static constexpr audio_sample_format int32_le() noexcept
151 return {4, 0, 31,
false, std::endian::little};
154 [[nodiscard]]
static constexpr audio_sample_format int32_be() noexcept
156 return {4, 0, 31,
false, std::endian::big};
159 [[nodiscard]]
static constexpr audio_sample_format int32() noexcept
161 return {4, 0, 31,
false, std::endian::native};
164 [[nodiscard]]
static constexpr audio_sample_format fix8_23_le() noexcept
166 return {4, 8, 23,
false, std::endian::little};
169 [[nodiscard]]
static constexpr audio_sample_format fix8_23_be() noexcept
171 return {4, 8, 23,
false, std::endian::big};
174 [[nodiscard]]
static constexpr audio_sample_format fix8_23() noexcept
176 return {4, 8, 23,
false, std::endian::native};
179 constexpr explicit operator bool () const noexcept
207 [[nodiscard]]
size_t num_fast_quads(
size_t stride,
size_t num_samples) const noexcept;
226 (
endian == std::endian::little ||
endian == std::endian::big);
Audio sample format.
Definition audio_sample_format.hpp:29
std::endian endian
The endian order of the bytes in the container.
Definition audio_sample_format.hpp:59
i8x16 store_shuffle_indices(size_t stride) const noexcept
Return a shuffle indices for storing 32 bit samples into packed samples.
bool is_float
The numeric type is floating point.
Definition audio_sample_format.hpp:55
i8x16 load_shuffle_indices(size_t stride) const noexcept
Return a shuffle indices for loading samples into 32 bit integers.
constexpr bool holds_invariant() const noexcept
Is the audio sample format valid.
Definition audio_sample_format.hpp:223
size_t num_fast_quads(size_t stride, size_t num_samples) const noexcept
Calculate the number of 4 sample-quads can be handled as chunked loads and stores.
float unpack_multiplier() const noexcept
How much to multiply integer samples to create float samples.
uint8_t num_guard_bits
The number of bits used for the integer part of a fixed point number.
Definition audio_sample_format.hpp:38
size_t chunk_stride(size_t stride) const noexcept
The number of bytes to advance to the next chunk to be loaded or stored.
float pack_multiplier() const noexcept
How much to multiply float samples to create integer samples.
uint8_t num_bytes
The number of bytes of the container.
Definition audio_sample_format.hpp:33
size_t num_chunks_per_quad(size_t stride) const noexcept
The number of chunks to load or store to handle 4 samples.
i8x16 concat_shuffle_indices(size_t stride) const noexcept
Return a shuffle indices to shift previous loaded samples for concatenation.
size_t num_samples_per_chunk(size_t stride) const noexcept
The number of packed samples that are handled in a single 128 bit load or store.
uint8_t num_bits
The number of significant bits of the sample format.
Definition audio_sample_format.hpp:50