Renders the signal data based on interpolation points.
84 {
85 auto out = std::vector<ComplexType>(_size);
86 size = _size;
87
88 const RealType timestep = 1.0 / _rate;
91
92 auto iter = points.begin();
93 auto next = points.size() > 1 ? std::next(iter) : iter;
94 const RealType idelay = std::round(_rate * iter->delay);
96
97 for (int i = 0; i < static_cast<int>(_size); ++i)
98 {
99 if (sample_time > next->time && next != iter)
100 {
101 iter = next;
102 if (std::next(next) != points.end())
103 {
104 ++next;
105 }
106 }
107
108 auto [amplitude, phase, fdelay, i_sample_unwrap] =
109 calculateWeightsAndDelays(iter, next, sample_time, idelay, fracWinDelay);
110 const auto& filt =
interp.getFilter(fdelay);
111 ComplexType accum = performConvolution(i, filt.data(), filt_length, amplitude, i_sample_unwrap);
112 out[
static_cast<std::size_t
>(i)] = std::exp(
ComplexType(0.0, 1.0) * phase) * accum;
113
114 sample_time += timestep;
115 }
116
117 return out;
118 }
static InterpFilter & getInstance() noexcept
Retrieves the singleton instance of the InterpFilter class.
double RealType
Type for real numbers.
std::complex< RealType > ComplexType
Type for complex numbers.
unsigned renderFilterLength() noexcept
Get the render filter length.