25inline constexpr float crossfade(
float a,
float b,
float t) {
26 return a + (b - a) * t;
40 return t * t * (3.0f - 2.0f * t);
51inline constexpr int32_t
crossfade_i16(int16_t a, int16_t b, uint16_t t) {
52 return a + ((
static_cast<int32_t
>(b) - a) * t) / 65535;
68 return a * sqrtf(1.0f - t) + b * sqrtf(t);
79 float* out,
float mix, uint16_t frames) {
80 const float ga = 1.0f - mix;
81 for (uint16_t i = 0; i < frames; ++i) {
82 out[i] = a[i] * ga + b[i] * mix;
92 float* out,
float mix, uint16_t frames) {
93 const float ga = sqrtf(1.0f - mix);
94 const float gb = sqrtf(mix);
95 for (uint16_t i = 0; i < frames; ++i) {
96 out[i] = a[i] * ga + b[i] * gb;
DSP atoms for audio signal processing.
constexpr float crossfade(float a, float b, float t)
Linear 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.
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.
float crossfade_equal_power(float a, float b, float t)
Equal-power crossfade between two values.
constexpr float smooth_step(float t)
Hermite smooth step (3rd-order S-curve)