From 42e2e53f664e51da60467fff99b84cab6491e744 Mon Sep 17 00:00:00 2001 From: Nicolas Braud-Santoni Date: Thu, 1 Oct 2020 16:48:28 +0200 Subject: [PATCH] conversions::Sample: Fix bug in linear interpolation for u16 The previous implementation panicked if first > second. --- src/conversions/sample.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/conversions/sample.rs b/src/conversions/sample.rs index 85735bb..1fe8f18 100644 --- a/src/conversions/sample.rs +++ b/src/conversions/sample.rs @@ -84,7 +84,11 @@ pub trait Sample: CpalSample { impl Sample for u16 { #[inline] fn lerp(first: u16, second: u16, numerator: u32, denominator: u32) -> u16 { - (first as u32 + (second as u32 - first as u32) * numerator / denominator) as u16 + let a = first as i32; + let b = second as i32; + let n = numerator as i32; + let d = denominator as i32; + (a + (b - a) * n / d) as u16 } #[inline]