From 1525afe8aaadfaa877f8987f0ea224263a612b5e Mon Sep 17 00:00:00 2001 From: jacqueline Date: Fri, 19 Jan 2024 08:47:37 +1100 Subject: [PATCH] fix issue with unclipped dither --- src/codecs/sample.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/codecs/sample.cpp b/src/codecs/sample.cpp index c99710f1..63d14203 100644 --- a/src/codecs/sample.cpp +++ b/src/codecs/sample.cpp @@ -17,12 +17,9 @@ static uint64_t sSeed1{0}; static uint64_t sSeed2{0}; auto shiftWithDither(int64_t src, uint_fast8_t bits) -> Sample { - // Generate `bits` random bits - uint64_t mask = 0xFFFFFFFF; - mask >>= 32 - bits; - int64_t noise = static_cast(komirand(&sSeed1, &sSeed2) & mask); - // Apply to the sample, then shift to 16 bit. - return (src + noise) >> bits; + // FIXME: Use a better dither. + int16_t noise = static_cast(komirand(&sSeed1, &sSeed2) & 1); + return (src >> bits) ^ noise; } } // namespace sample