diff --git a/src/samples_formats.rs b/src/samples_formats.rs index dd4c6f1..b350b3b 100644 --- a/src/samples_formats.rs +++ b/src/samples_formats.rs @@ -96,11 +96,23 @@ impl Sample for f32 { } fn to_vec_i16(input: &[f32]) -> Cow, [i16]> { - unimplemented!() + Cow::Owned(input.iter().map(|&value| { + if value >= 0.0 { + (value * 32767.0) as i16 + } else { + (value * 32768.0) as i16 + } + }).collect()) } fn to_vec_u16(input: &[f32]) -> Cow, [u16]> { - unimplemented!() + Cow::Owned(input.iter().map(|&value| { + if value >= 0.0 { + ((value * 32767.0) + 32768.0) as u16 + } else { + ((value * 32768.0) + 32768.0) as u16 + } + }).collect()) } fn to_vec_f32(input: &[f32]) -> Cow, [f32]> { @@ -149,14 +161,12 @@ mod test { } #[test] - #[ignore] // TODO: not yet implemented fn f32_to_i16() { let out = Sample::to_vec_i16(&[0.0f32, -0.5, 1.0, -1.0]).into_owned(); assert_eq!(out, vec![0, -16384, 32767, -32768]); } #[test] - #[ignore] // TODO: not yet implemented fn f32_to_u16() { let out = Sample::to_vec_u16(&[-1.0f32, 0.0, 1.0]).into_owned(); assert_eq!(out, vec![0, 32768, 65535]);