[utils] add various crossfading things
parent
b53fa00e86
commit
37e9626b24
|
@ -0,0 +1,30 @@
|
||||||
|
/// Linear crossfade
|
||||||
|
/// x is the crossfading param, [0, 1]
|
||||||
|
/// Returns (fade_in, fade_out)
|
||||||
|
pub fn lin_crossfade(x: f32) -> (f32, f32) {
|
||||||
|
(x, 1.0 - x)
|
||||||
|
}
|
||||||
|
|
||||||
|
// next two are from https://signalsmith-audio.co.uk/writing/2021/cheap-energy-crossfade/
|
||||||
|
|
||||||
|
/// Amplitude preserving crossfade
|
||||||
|
/// x is the crossfading param, [0, 1]
|
||||||
|
/// Returns (fade_in, fade_out)
|
||||||
|
pub fn ap_crossfade(x: f32) -> (f32, f32) {
|
||||||
|
let fin = x * x * (3.0 - 2.0 * x);
|
||||||
|
|
||||||
|
(fin, 1.0 - fin)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Energy preserving crossfade
|
||||||
|
/// x is the crossfading param, [0, 1]
|
||||||
|
/// Returns (fade_in, fade_out)
|
||||||
|
pub fn ep_crossfade(x: f32) -> (f32, f32) {
|
||||||
|
let x2 = 1.0 - x;
|
||||||
|
let a = x * x2;
|
||||||
|
let b = a * (1.0 + 1.4186 * a);
|
||||||
|
let c = b + x;
|
||||||
|
let d = b + x2;
|
||||||
|
|
||||||
|
(c * c, d * d)
|
||||||
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
pub mod buffers;
|
pub mod buffers;
|
||||||
|
pub mod crossfade;
|
||||||
pub mod delay;
|
pub mod delay;
|
||||||
pub mod envelope;
|
pub mod envelope;
|
||||||
pub mod logs;
|
pub mod logs;
|
||||||
|
|
Loading…
Reference in New Issue