MayaFlux 0.3.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ quantize()

void MayaFlux::Kinesis::Discrete::quantize ( std::span< double >  data,
uint8_t  bits 
)
noexcept

Quantize to n-bit resolution in-place Input is assumed to be in [-1, 1]; values outside are clamped first.

Uses lrint bias trick to avoid scalar std::round and improve auto-vectorisation.

Parameters
dataTarget span
bitsBit depth (1–53)

Definition at line 50 of file Transform.cpp.

51{
52 const double levels = std::pow(2.0, bits) - 1.0;
53 const double inv_levels = 1.0 / levels;
54 std::ranges::transform(data, data.begin(),
55 [levels, inv_levels](double x) {
56 const double clamped = std::clamp(x, -1.0, 1.0);
57 return static_cast<double>(std::lrint(clamped * levels)) * inv_levels;
58 });
59}