10struct [[gnu::hot]] Interpolator {
12 Interpolator() =
default;
13 StereoSample interpolate(
size_t channels, int32_t whichKernel, uint32_t oscPos);
14 StereoSample interpolateLinear(
size_t channels, uint32_t oscPos);
16 [[gnu::always_inline]]
constexpr void pushL(int16_t value) {
18 for (int32_t i = kInterpolationMaxNumSamples - 1; i >= 1; i--) {
19 buffer_l[i] = buffer_l[i - 1];
24 [[gnu::always_inline]]
constexpr void pushR(int16_t value) {
26 for (int32_t i = kInterpolationMaxNumSamples - 1; i >= 1; i--) {
27 buffer_r[i] = buffer_r[i - 1];
32 [[gnu::always_inline]]
constexpr void jumpForward(
size_t num_samples) {
34 for (int32_t i = kInterpolationMaxNumSamples - 1; i >= num_samples; i--) {
35 buffer_l[i] = buffer_l[i - num_samples];
36 buffer_r[i] = buffer_r[i - num_samples];
41 alignas(
sizeof(int32_t) * 4) std::array<int16_t, kInterpolationMaxNumSamples> buffer_l;
42 alignas(
sizeof(int32_t) * 4) std::array<int16_t, kInterpolationMaxNumSamples> buffer_r;