6#include "detail/minblep_table.hpp"
45 static_assert(MaximumEvents > 0,
"minBLEP event capacity must be positive");
47 static constexpr std::size_t
capacity = MaximumEvents;
57 if (!(position >= 0.0 && position <= 1.0))
59 if (!std::isfinite(height))
64 for (
auto& slot : slots_) {
76 [[nodiscard]]
double next() noexcept {
77 double correction = 0.0;
78 constexpr auto last_index = detail::kMinBlepResidual.size() - 1;
79 for (
auto& slot : slots_) {
83 const auto index =
static_cast<std::size_t
>(slot.table_position);
84 const double fraction = slot.table_position -
static_cast<double>(index);
85 const double first =
static_cast<double>(detail::kMinBlepResidual[index]);
86 const double second =
static_cast<double>(detail::kMinBlepResidual[index + 1]);
89 if (slot.table_position >=
static_cast<double>(last_index)) {
98 return active_events_;
103 double table_position = 0.0;
108 std::array<Slot, MaximumEvents> slots_{};
109 std::size_t active_events_ = 0;
Accumulates causal minBLEP corrections for discontinuities found between adjacent output samples.
Definition minblep.hpp:43
static constexpr std::size_t phases_per_sample
Definition minblep.hpp:49
void reset() noexcept
Definition minblep.hpp:51
std::size_t active_events() const noexcept
Definition minblep.hpp:97
double next() noexcept
Definition minblep.hpp:76
static constexpr std::size_t kernel_samples
Definition minblep.hpp:48
MinBlepInsertResult insert(double position, double height) noexcept
Definition minblep.hpp:56
static constexpr std::size_t capacity
Definition minblep.hpp:47
MinBlepInsertResult
Definition minblep.hpp:14
@ non_finite_height
Definition minblep.hpp:18
@ inserted
Definition minblep.hpp:15
@ zero_height
Definition minblep.hpp:16
@ invalid_position
Definition minblep.hpp:17
@ capacity_exceeded
Definition minblep.hpp:19
@ first
Definition dither.hpp:23
@ second
Definition dither.hpp:24