7#include "../utility/module.hpp"
8#include "../SIMD/module.hpp"
11namespace hi::inline
v1 {
27struct audio_sample_format {
59 constexpr audio_sample_format() noexcept :
77 [[nodiscard]] constexpr audio_sample_format(
90 return {4, 8, 23,
true, std::endian::little};
93 [[nodiscard]]
static constexpr audio_sample_format float32_be() noexcept
95 return {4, 8, 23,
true, std::endian::big};
98 [[nodiscard]]
static constexpr audio_sample_format float32() noexcept
100 return {4, 8, 23,
true, std::endian::native};
103 [[nodiscard]]
static constexpr audio_sample_format int16_le() noexcept
105 return {2, 0, 15,
false, std::endian::little};
108 [[nodiscard]]
static constexpr audio_sample_format int16_be() noexcept
110 return {2, 0, 15,
false, std::endian::big};
113 [[nodiscard]]
static constexpr audio_sample_format int16() noexcept
115 return {2, 0, 15,
false, std::endian::native};
118 [[nodiscard]]
static constexpr audio_sample_format int20_le() noexcept
120 return {3, 0, 19,
false, std::endian::little};
123 [[nodiscard]]
static constexpr audio_sample_format int20_be() noexcept
125 return {3, 0, 19,
false, std::endian::big};
128 [[nodiscard]]
static constexpr audio_sample_format int20() noexcept
130 return {3, 0, 19,
false, std::endian::native};
133 [[nodiscard]]
static constexpr audio_sample_format int24_le() noexcept
135 return {3, 0, 23,
false, std::endian::little};
138 [[nodiscard]]
static constexpr audio_sample_format int24_be() noexcept
140 return {3, 0, 23,
false, std::endian::big};
143 [[nodiscard]]
static constexpr audio_sample_format int24() noexcept
145 return {3, 0, 23,
false, std::endian::native};
148 [[nodiscard]]
static constexpr audio_sample_format int32_le() noexcept
150 return {4, 0, 31,
false, std::endian::little};
153 [[nodiscard]]
static constexpr audio_sample_format int32_be() noexcept
155 return {4, 0, 31,
false, std::endian::big};
158 [[nodiscard]]
static constexpr audio_sample_format int32() noexcept
160 return {4, 0, 31,
false, std::endian::native};
163 [[nodiscard]]
static constexpr audio_sample_format fix8_23_le() noexcept
165 return {4, 8, 23,
false, std::endian::little};
168 [[nodiscard]]
static constexpr audio_sample_format fix8_23_be() noexcept
170 return {4, 8, 23,
false, std::endian::big};
173 [[nodiscard]]
static constexpr audio_sample_format fix8_23() noexcept
175 return {4, 8, 23,
false, std::endian::native};
178 constexpr explicit operator bool() const noexcept
180 return num_bytes != 0;
225 (
endian == std::endian::little ||
endian == std::endian::big);
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253
DOXYGEN BUG.
Definition algorithm.hpp:13
Audio sample format.
Definition audio_sample_format.hpp:27
bool is_float
The numeric type is floating point.
Definition audio_sample_format.hpp:53
uint8_t num_guard_bits
The number of bits used for the integer part of a fixed point number.
Definition audio_sample_format.hpp:36
uint8_t num_bits
The number of significant bits of the sample format.
Definition audio_sample_format.hpp:48
float pack_multiplier() const noexcept
How much to multiply float samples to create integer samples.
constexpr bool holds_invariant() const noexcept
Is the audio sample format valid.
Definition audio_sample_format.hpp:222
i8x16 load_shuffle_indices(std::size_t stride) const noexcept
Return a shuffle indices for loading samples into 32 bit integers.
i8x16 concat_shuffle_indices(std::size_t stride) const noexcept
Return a shuffle indices to shift previous loaded samples for concatenation.
i8x16 store_shuffle_indices(std::size_t stride) const noexcept
Return a shuffle indices for storing 32 bit samples into packed samples.
std::size_t num_fast_quads(std::size_t stride, std::size_t num_samples) const noexcept
Calculate the number of 4 sample-quads can be handled as chunked loads and stores.
std::size_t num_samples_per_chunk(std::size_t stride) const noexcept
The number of packed samples that are handled in a single 128 bit load or store.
std::size_t num_chunks_per_quad(std::size_t stride) const noexcept
The number of chunks to load or store to handle 4 samples.
std::size_t chunk_stride(std::size_t stride) const noexcept
The number of bytes to advance to the next chunk to be loaded or stored.
std::endian endian
The endian order of the bytes in the container.
Definition audio_sample_format.hpp:57
float unpack_multiplier() const noexcept
How much to multiply integer samples to create float samples.
uint8_t num_bytes
The number of bytes of the container.
Definition audio_sample_format.hpp:31