#include #include #include namespace rack { namespace random { static Xoroshiro128Plus rng; void init() { // Don't reset state if already seeded if (rng.isSeeded()) return; // Get epoch time for seed double time = system::getUnixTime(); uint64_t sec = time; uint64_t nsec = std::fmod(time, 1.0) * 1e9; rng.seed(sec, nsec); // Shift state a few times due to low seed entropy for (int i = 0; i < 4; i++) { rng(); } } Xoroshiro128Plus& local() { return rng; } } // namespace random } // namespace rack