10#ifndef SBL_DSP_MATH_INTERPOLATE_HPP_
11#define SBL_DSP_MATH_INTERPOLATE_HPP_
26inline constexpr float crossfade(
float a,
float b,
float t) {
27 return a + (b - a) * t;
41 return t * t * (3.0f - 2.0f * t);
52inline constexpr int32_t
crossfade_i16(int16_t a, int16_t b, uint16_t t) {
53 return a + ((
static_cast<int32_t
>(b) - a) * t) / 65535;
69 return a * sqrtf(1.0f - t) + b * sqrtf(t);
80 float* out,
float mix, uint16_t frames) {
81 const float ga = 1.0f - mix;
82 for (uint16_t i = 0; i < frames; ++i) {
83 out[i] = a[i] * ga + b[i] * mix;
93 float* out,
float mix, uint16_t frames) {
94 const float ga = sqrtf(1.0f - mix);
95 const float gb = sqrtf(mix);
96 for (uint16_t i = 0; i < frames; ++i) {
97 out[i] = a[i] * ga + b[i] * gb;
Cross-cutting math used at every audio layer.
float crossfade_equal_power(float a, float b, float t)
Equal-power crossfade between two values.
void crossfade_block(const float *a, const float *b, float *out, float mix, uint16_t frames)
Linear crossfade over a block with constant mix.
constexpr float smooth_step(float t)
Hermite smooth step (3rd-order S-curve)
void crossfade_block_equal_power(const float *a, const float *b, float *out, float mix, uint16_t frames)
Equal-power crossfade over a block with constant mix.
constexpr int32_t crossfade_i16(int16_t a, int16_t b, uint16_t t)
Integer crossfade for 16-bit values.
constexpr float crossfade(float a, float b, float t)
Linear crossfade between two values.