Open mitchhentges opened 4 years ago
Thanks for the issue @mitchhentges and thanks so much for the kind words!
From memory, the primary reason for using f64
is that the rounding error in f32
is very audible in some occasions (e.g. resampling something like a sine wave), but I agree this should probably be a choice that the user can make. #26 I think is also related to this in a way.
Also chiming in to suggest an f32 option. While on most platforms performance of f32 and f64 math is similar (or even f64 being faster), it is also the case that there exists platforms where f64 math is considerably more expensive (often because of small cache sizes or size of SIMD registers). Therefore it would be preferable to let the user pick f32 vs f64 depending on the particular use-case, even if there are audible artefacts with 32bit precision.
Some other audio-related packages that I'm using for my application both only support up to
f32
(C'sfloat
) when handling data:opus
, seeopus_encode_float
rnnoise
Details
On Windows, my pipeline looks like:
F32
, convert tof32
here48_000
as required byopus
andrnnoise
f32
->f64
as required bysample::Interpolator
.f32
once donernnoise
opus
This package has been invaluable to me - seeing in easy-to-understand rust an implementation of combining signals, interpolating sample rates and representing how formats look under-the-hood has been awesome! Thanks for your hard work 🎉