#![cfg(feature = "rand")]
use crate::pitch::Pitch;
use rand::{Rng, RngExt};
use rand_distr::{Distribution, StandardUniform};
impl<T> Pitch<T>
where
StandardUniform: Distribution<T>,
{
pub fn random() -> Self {
Pitch::rand_from_rng(&mut rand::rng())
}
pub fn rand_from_rng<R: Rng + ?Sized>(rng: &mut R) -> Self {
Pitch(rng.random())
}
}
#[cfg(feature = "rand")]
impl<T> Distribution<Pitch<T>> for StandardUniform
where
StandardUniform: Distribution<T>,
{
fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Pitch<T> {
Pitch(rng.sample(StandardUniform))
}
}