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