Renders the signal data based on interpolation points.
83 {
84 auto out = std::vector<ComplexType>(_size);
85 size = _size;
86
87 const RealType timestep = 1.0 / _rate;
90
91 auto iter = points.begin();
92 auto next = points.size() > 1 ? std::next(iter) : iter;
93 const RealType idelay = std::round(_rate * iter->delay);
95
96 for (int i = 0; i < static_cast<int>(_size); ++i)
97 {
98 if (sample_time > next->time && next != iter)
99 {
100 iter = next;
101 if (std::next(next) != points.end())
102 {
103 ++next;
104 }
105 }
106
107 auto [amplitude, phase, fdelay, i_sample_unwrap] =
108 calculateWeightsAndDelays(iter, next, sample_time, idelay, fracWinDelay);
109 const auto& filt =
interp.getFilter(fdelay);
110 ComplexType accum = performConvolution(i, filt.data(), filt_length, amplitude, i_sample_unwrap);
111 out[i] = std::exp(
ComplexType(0.0, 1.0) * phase) * accum;
112
113 sample_time += timestep;
114 }
115
116 return out;
117 }
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.