use bounded_integer::bounded_integer;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
bounded_integer! {
pub struct Volume { 0..=100 }
}
bounded_integer! {
pub struct Speed { 0..=100 }
}
bounded_integer! {
pub struct Tone { 0..=100 }
}
bounded_integer! {
pub struct ToneScale { 0..=100 }
}
bounded_integer! {
pub struct Alpha { 0..=100 }
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub enum VoicePreset {
Normal,
Fast,
Slow,
HighPitch,
LowPitch,
Energetic,
Calm,
}
impl VoicePreset {
#[must_use]
pub const fn to_parameters(self) -> (Volume, Speed, Tone, ToneScale, Alpha) {
match self {
Self::Normal => (
Volume::new(50).unwrap(),
Speed::new(50).unwrap(),
Tone::new(50).unwrap(),
ToneScale::new(50).unwrap(),
Alpha::new(50).unwrap(),
),
Self::Fast => (
Volume::new(50).unwrap(),
Speed::new(75).unwrap(),
Tone::new(50).unwrap(),
ToneScale::new(50).unwrap(),
Alpha::new(50).unwrap(),
),
Self::Slow => (
Volume::new(50).unwrap(),
Speed::new(25).unwrap(),
Tone::new(50).unwrap(),
ToneScale::new(50).unwrap(),
Alpha::new(50).unwrap(),
),
Self::HighPitch => (
Volume::new(50).unwrap(),
Speed::new(50).unwrap(),
Tone::new(75).unwrap(),
ToneScale::new(50).unwrap(),
Alpha::new(50).unwrap(),
),
Self::LowPitch => (
Volume::new(50).unwrap(),
Speed::new(50).unwrap(),
Tone::new(25).unwrap(),
ToneScale::new(50).unwrap(),
Alpha::new(50).unwrap(),
),
Self::Energetic => (
Volume::new(70).unwrap(),
Speed::new(60).unwrap(),
Tone::new(60).unwrap(),
ToneScale::new(60).unwrap(),
Alpha::new(50).unwrap(),
),
Self::Calm => (
Volume::new(40).unwrap(),
Speed::new(40).unwrap(),
Tone::new(40).unwrap(),
ToneScale::new(40).unwrap(),
Alpha::new(50).unwrap(),
),
}
}
}