kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

commit f5ed6a19c5b9409f01b03248fd08917f22b4a995
parent 9d6eeb6c78e3163d8db5acf913001fd0f889b648
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date:   Tue, 18 Dec 2018 11:40:15 +0000

Fix 24-bit files

Diffstat:
Minclude/kfr/base/conversion.hpp | 4+++-
Minclude/kfr/io/audiofile.hpp | 3+++
2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/kfr/base/conversion.hpp b/include/kfr/base/conversion.hpp @@ -53,6 +53,8 @@ inline constexpr size_t audio_sample_sizeof(audio_sample_type type) return 1; case audio_sample_type::i16: return 2; + case audio_sample_type::i24: + return 3; case audio_sample_type::i32: case audio_sample_type::f32: return 4; @@ -176,7 +178,7 @@ template <typename Tout, typename Tin, typename Tout_traits = audio_sample_trait inline Tout convert_sample(const Tin& in) { constexpr auto scale = Tout_traits::scale / Tin_traits::scale; - return cast<Tout>(in * scale); + return cast<Tout>(clamp(in * scale, -Tout_traits::scale, Tout_traits::scale)); } /// @brief Deinterleaves and converts audio samples diff --git a/include/kfr/io/audiofile.hpp b/include/kfr/io/audiofile.hpp @@ -211,6 +211,9 @@ struct audio_reader_wav : audio_reader<T> case 16: fmt.type = audio_sample_type::i16; break; + case 24: + fmt.type = audio_sample_type::i24; + break; case 32: fmt.type = audio_sample_type::i32; break;