//! Shared TPDF dither PRNG for audio encoders. /// Minimal xorshift64 PRNG for dither — no external dependency needed. pub(crate) struct SimpleRng { state: u64, } impl SimpleRng { pub(crate) fn new(seed: u64) -> Self { // xorshift64 is degenerate with state 0 (outputs 0 forever) Self { state: if seed == 0 { 0x5A5A_5A5A_5A5A_5A5A } else { seed } } } fn next_u32(&mut self) -> u32 { // xorshift64 self.state ^= self.state << 13; self.state ^= self.state >> 7; self.state ^= self.state << 17; (self.state & 0xFFFF_FFFF) as u32 } pub(crate) fn next_f32(&mut self) -> f32 { self.next_u32() as f32 / u32::MAX as f32 } }