soundchip 0.4.61

Software sinth with configurable channels for authentic sounding virtual sound chips.
Documentation
use crate::prelude::{Envelope, Knot, EnvelopeState};

#[derive(Debug, Clone, Copy, PartialEq)]
pub enum PresetEnv {
    None,
    Piano,
    LinearDown,
    LinearUp,
}

impl PresetEnv {

    pub fn get_envelope(&self) -> Option<Envelope> {
        match self {
            PresetEnv::None => {
                None
            }
            PresetEnv::Piano => {Some(
                Envelope{
                    attack: Knot { time: 0.0, value: 1.0 },
                    decay: Knot { time: 0.1, value: 0.5 },
                    sustain: Knot { time: 0.3, value: 0.2 },
                    release: Knot { time: 1.0, value: 0.0 },
                    state: EnvelopeState::Idle,
                }
            )},
            PresetEnv::LinearDown => {Some(
                Envelope{
                    attack: Knot { time: 0.0, value: 1.0 },
                    decay: Knot { time: 0.25, value: 0.75 },
                    sustain: Knot { time: 0.5, value: 0.5 },
                    release: Knot { time: 1.0, value: 0.0 },
                    state: EnvelopeState::Idle,
                }
            )},
            PresetEnv::LinearUp => {Some(
                Envelope{
                    attack: Knot { time: 0.0, value: 0.0 },
                    decay: Knot { time: 0.25, value: 0.25 },
                    sustain: Knot { time: 0.5, value: 0.5 },
                    release: Knot { time: 1.0, value: 1.0 },
                    state: EnvelopeState::Idle,
                }
            )},
        }
    }
}