use std::collections::HashMap;
use std::path::PathBuf;
use crate::sfz::Opcode;
pub const MAX_SAMPLE_RATE: f32 = 384_000.0;
#[allow(non_camel_case_types)]
#[derive(Clone, Debug, PartialEq)]
pub enum OpcodeType {
i8(Option<i8>),
u8(Option<u8>),
i16(Option<i16>),
u16(Option<u16>),
u32(Option<u32>),
f32(Option<f32>),
fil_type(Option<fil_type>),
loop_mode(Option<loop_mode>),
trigger(Option<trigger>),
PathBuf(Option<PathBuf>),
String(Option<&'static str>),
}
pub type OpcodeMap = HashMap<String, Opcode>;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum loop_mode {
no_loop,
one_shot,
loop_continuous,
loop_sustain,
}
impl Default for loop_mode {
fn default() -> loop_mode {
Self::no_loop
}
}
impl loop_mode {
pub fn from_name(name: &str) -> Option<Self> {
match name {
"no_loop" => Some(Self::no_loop),
"one_shot" => Some(Self::one_shot),
"loop_continuous" => Some(Self::loop_continuous),
"loop_sustain" => Some(Self::loop_sustain),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum trigger {
attack,
release,
first,
legato,
release_key, }
impl Default for trigger {
fn default() -> trigger {
Self::attack
}
}
impl trigger {
pub fn from_name(name: &str) -> Option<Self> {
match name {
"attack" => Some(Self::attack),
"release" => Some(Self::release),
"first" => Some(Self::first),
"legato" => Some(Self::legato),
"release_key" => Some(Self::legato),
_ => None,
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[allow(non_camel_case_types)]
pub enum fil_type {
lpf_1p,
hpf_1p,
lpf_2p,
hpf_2p,
bpf_2p,
brf_2p,
bpf_1p,
brf_1p,
apf_1p,
lpf_2p_sv,
hpf_2p_sv,
bpf_2p_sv,
brf_2p_sv,
pkf_2p,
lpf_4p,
hpf_4p,
lpf_6p,
hpf_6p,
comb,
pink,
lsh,
hsh,
peq,
}
impl Default for fil_type {
fn default() -> fil_type {
Self::lpf_2p
}
}
impl fil_type {
pub fn from_name(name: &str) -> Option<Self> {
match name {
"lpf_1p" => Some(Self::lpf_1p),
"hpf_1p" => Some(Self::hpf_1p),
"lpf_2p" => Some(Self::lpf_2p),
"hpf_2p" => Some(Self::bpf_2p),
"bpf_2p" => Some(Self::bpf_2p),
"brf_2p" => Some(Self::brf_2p),
"bpf_1p" => Some(Self::bpf_1p),
"brf_1p" => Some(Self::brf_1p),
"apf_1p" => Some(Self::apf_1p),
"lpf_2p_sv" => Some(Self::lpf_2p_sv),
"hpf_2p_sv" => Some(Self::hpf_2p_sv),
"bpf_2p_sv" => Some(Self::bpf_2p_sv),
"brf_2p_sv" => Some(Self::brf_2p_sv),
"pkf_2p" => Some(Self::pkf_2p),
"lpf_4p" => Some(Self::lpf_4p),
"hpf_4p" => Some(Self::hpf_4p),
"lpf_6p" => Some(Self::lpf_6p),
"hpf_6p" => Some(Self::hpf_6p),
"comb" => Some(Self::comb),
"pink" => Some(Self::pink),
"lsh" => Some(Self::lsh),
"hsh" => Some(Self::hsh),
"peq" => Some(Self::peq),
_ => None,
}
}
}
pub type UndefinedInteger = i32;
pub type UndefinedUnsignedInteger = u32;
pub type UnknownType = never::Never;