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:
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;