Skip to main content

Crate auracle_grammar

Crate auracle_grammar 

Source
Expand description

§auracle-grammar

The patch prior: a typed probabilistic context-free grammar (PCFG) over quiver-backed synthesizer patch terms, plus the compiler from sampled terms to playable quiver Patch graphs.

The genome is a term (term::PatchTree), not a raw patch graph. The Audio/Mod sort distinction is enforced by the Rust type system — ill-sorted terms are unrepresentable — and the grammar (prior::PatchGrammarPrior) is a fugue generative program, so all three levels of evolution live in one representation:

  • node settings → leaf parameter sites (F64/Usize draws per module)
  • connectivity → interior structure (chains, mix, modulation slots)
  • node set → which module productions fire

PatchTree implements fugue-evo’s genome traits with a canonical trace encoding that is the grammar’s address scheme, so subtree mutation/crossover are generic trace moves and tempered SMC / typed MH come for free.

§v1 constraints (the reference: The genome, The vetting gate)

  • Acyclic terms only — no feedback combinator productions. Modules with internal feedback (delay, chorus) are allowed.
  • Curated palette: Vco, Supersaw, NoiseGenerator, Wavetable, KarplusStrong, FormantOsc, Svf, DiodeLadderFilter, ParametricEq, Wavefolder, Distortion, Bitcrusher, DelayLine, Chorus, Reverb, Phaser, Flanger, Tremolo, Vibrato, Granular, PitchShifter, RingModulator, Compressor, Ducker, NoiseGate, Vocoder, Adsr, Vca, Lfo, SampleAndHold, SlewLimiter, EnvelopeFollower.
  • Every compiled patch gets the mandatory voice stage — amp ADSR → VCA → Limiter → StereoOutput — and bounded parameter mappings (resonance, feedback), so the grammar cannot express the most degenerate settings.

Re-exports§

pub use compile::compile;
pub use compile::CompiledVoice;
pub use compile::ParamHandle;
pub use compile::ParamMap;
pub use describe::describe;
pub use describe::RackDescription;
pub use diff::tree_diff;
pub use diff::DiffEntry;
pub use edit::set_param;
pub use edit::EditError;
pub use edit::ParamValue;
pub use genome::in_domain;
pub use genome::PARAM_DOMAIN;
pub use mutate::apply_struct_op;
pub use mutate::validate_tree;
pub use mutate::ModKind;
pub use mutate::NodeKind;
pub use mutate::StructError;
pub use mutate::StructOp;
pub use presets::preset_bank;
pub use presets::presets;
pub use presets::Category;
pub use presets::Preset;
pub use presets::CATEGORIES;
pub use prior::PatchGrammarPrior;
pub use term::AudioNode;
pub use term::ModNode;
pub use term::PatchTree;
pub use term::Uid;

Modules§

compile
Compile a PatchTree term into a playable quiver [Patch].
describe
Rack description: a frontend-facing view of a PatchTree as modules, knobs, and wires.
diff
Structural/parameter diff between two patch trees, in trace-address terms.
edit
Address-based knob edits: turning a panel knob is a write at a trace address, so hand edits and MH proposals move through the same encoding and cannot drift from the grammar.
genome
PatchTree as a fugue-evo genome.
mutate
User-driven structural edits: create, delete, replace, and rewire nodes in a patch tree — the “reconnect anything” surface of the workbench.
presets
Hand-designed preset patches: a starting vocabulary for the bank, and a fast way to seed the taste model (“keep the ones you like”).
prior
The patch prior: a typed PCFG over PatchTree terms as a fugue program.
term
The patch term: a typed tree over the v1 module palette.