use std::fmt;
use rand::Rng;
use crate::Ranged;
pub mod amp;
pub mod effect;
pub mod filter;
pub mod lfo;
pub mod multi;
pub mod single;
pub mod source;
pub mod wave;
pub mod drum;
pub mod bank;
pub mod sysex;
pub const NAME_LENGTH: usize = 10;
pub const SOURCE_COUNT: usize = 4;
pub const DRUM_NOTE_COUNT: usize = 61;
pub const SUBMIX_COUNT: usize = 8;
fn get_effect_number(b: u8) -> u8 {
let value = b & 0b00011111;
value + 1
}
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct EnvelopeTime(i32);
crate::ranged_impl!(EnvelopeTime, 0, 100, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct EnvelopeLevel(i32);
crate::ranged_impl!(EnvelopeLevel, 0, 100, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Level(i32);
crate::ranged_impl!(Level, 0, 100, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct ModulationDepth(i32);
crate::ranged_impl!(ModulationDepth, -50, 50, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Decay(i32);
crate::ranged_impl!(Decay, 1, 100, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct SmallEffectParameter(i32);
crate::ranged_impl!(SmallEffectParameter, -7, 7, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct BigEffectParameter(i32);
crate::ranged_impl!(BigEffectParameter, 0, 31, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct FilterEnvelopeLevel(i32);
crate::ranged_impl!(FilterEnvelopeLevel, -50, 50, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Cutoff(i32);
crate::ranged_impl!(Cutoff, 0, 100, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Resonance(i32);
crate::ranged_impl!(Resonance, 0, 7, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct EffectNumber(i32);
crate::ranged_impl!(EffectNumber, 1, 32, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Curve(i32);
crate::ranged_impl!(Curve, 1, 8, 1);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Coarse(i32);
crate::ranged_impl!(Coarse, -24, 24, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Fine(i32);
crate::ranged_impl!(Fine, -50, 50, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct WaveNumber(i32);
crate::ranged_impl!(WaveNumber, 1, 256, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct PatchNumber(i32);
crate::ranged_impl!(PatchNumber, 0, 63, 0);
#[derive(Debug, Clone, Copy, Eq, PartialEq)]
pub struct Transpose(i32);
crate::ranged_impl!(Transpose, -24, 24, 0);