Skip to main content

Module phrase

Module phrase 

Source
Expand description

The standard audition phrase.

Audio features are only comparable across patches when every patch is rendered under an identical stimulus — same notes, same timing, same RNG seed for noise. This module owns that stimulus.

§The v2 phrase, and why each segment exists

The original 3-note phrase (0.6 s stab / 0.25 s stab / 0.8 s low note) was the loop’s weakest link, and the deficit compounded with every correctness fix: it could not discriminate slow pads (a 2 s attack was silent for most of the stimulus), anything modulated below ~1 Hz (no register-constant segment long enough to hold a modulation cycle), anything above Eb4 (its highest note), or how a patch stacks polyphonically (strictly monophonic) — so the grammar could express patches the audition could never reveal, and the taste model was asked to learn preferences over evidence that wasn’t in φ. The v2 default covers each hole with the cheapest segment that reveals it:

  1. C4 held 1.8 s — the attack window (onset → next onset) is now 2.0 s instead of 0.75 s, and a register-constant sustain long enough that sub-Hz modulation completes most of a cycle (crate::audio::AudioFeatures::held_centroid_std measures it here).
  2. C5 stab — one octave above the old ceiling; with the fixed 0.5 keytracking this is where dark patches reveal whether they speak at all up high (crate::audio::AudioFeatures::high_ratio).
  3. C4+E4 dyad (Note::chord) — a second compiled voice, gate-synced with the main voice, reveals intermodulation and mud when stacked (crate::audio::AudioFeatures::chord_flatness_delta). A dyad rather than a triad because render cost is per-voice-second and pairwise intermodulation is the first-order phenomenon.
  4. C3 held + 1.1 s release window — bass register, and kept last so the tail measurement (final 300 ms) still sees release length and delay/reverb tails, not a truncated chord decay.

~5.0 s of audio, ~2× the render cost of v1 (measured; the dyad’s second voice is the difference between wall seconds and rendered voice-seconds). Changing the stimulus changes what every audio feature means, which is why crate::audio::AudioFeatures::NAMES carry a stimulus tag — see the migration note there.

Structs§

Note
One note of the phrase.
PhraseSpec
The audition stimulus: notes, sample rate, and the RNG seed used for any stochastic module (noise, drift) so renders are bit-reproducible.