use crate::event::*;
use crate::generator::{GenModFun, Generator};
use crate::generator_processor::GeneratorProcessor;
use crate::parameter::*;
use dashmap::DashMap;
use std::collections::{BTreeSet, HashMap};
use ruffbox_synth::building_blocks::SynthParameterLabel;
#[derive(Clone)]
pub enum Part {
Combined(Vec<Generator>, Vec<PartProxy>),
}
pub type PartsStore = HashMap<String, Part>;
#[derive(Clone)]
pub enum ConfigParameter {
Numeric(f32),
Dynamic(DynVal),
Symbolic(String),
}
#[derive(Clone, PartialEq, Eq, Hash)]
pub enum BuiltinGlobalParameters {
LifemodelGlobalResources,
GlobalTimeModifier,
GlobalLatency, DefaultDuration,
}
pub type GlobalParameters = DashMap<BuiltinGlobalParameters, ConfigParameter>;
#[derive(Clone)]
pub enum Command {
Clear, Tmod(DynVal), Latency(DynVal), Bpm(f32), DefaultDuration(f32), GlobRes(f32), GlobalRuffboxParams(HashMap<SynthParameterLabel, ParameterValue>), LoadSampleAsWavematrix(String, String, String, (usize, usize), f32), LoadSample((String, Vec<String>, String)), LoadSampleSet(String), LoadSampleSets(String), LoadPart((String, Part)), StepPart(String), FreezeBuffer(usize, usize), ExportDotStatic((String, Generator)), ExportDotRunning((String, BTreeSet<String>)), ExportDotPart((String, String)), Once((Vec<StaticEvent>, Vec<ControlEvent>)), ConnectVisualizer, StartRecording(Option<String>, bool), StopRecording, }
#[derive(Clone)]
pub enum PartProxy {
Proxy(String, Vec<GeneratorProcessorOrModifier>),
}
#[derive(Clone)]
pub enum GeneratorProcessorOrModifier {
GeneratorProcessor(Box<dyn GeneratorProcessor + Send>),
GeneratorModifierFunction(
(
GenModFun,
Vec<ConfigParameter>,
HashMap<String, ConfigParameter>,
),
),
}