Morphic Form — Grain Placement Engine — User Guide
Time-domain grain placement controlled by a bounded morph trajectory between two behavioral attractors. Grain size, density, source-position jitter, backtracking, repetition, and onset gaps evolve over time while the grains themselves are not pitch-shifted or spectrally filtered.
What this does
Morphic Form analyzes the source on a 50 ms control grid and generates a time-varying grain-placement trajectory between two behavioral attractors. Attractor A favors larger, sparser, more stable placement; Attractor B favors shorter, denser, more jittered placement with more backtracking and repetition.
The morph trajectory is shaped by the selected pacing curve and bounded by Morph_intensity. Local acoustic activity and the voiced/unvoiced state can accelerate movement toward that ceiling, but they cannot push the trajectory beyond the range selected by the user.
Key Features:
- Two-attractor grain-placement model — stable/sparse A and turbulent/dense B.
- Bounded morph control — Morph_intensity defines the maximum permitted excursion toward B.
- Three pacing curves — Linear, Accelerate, Decelerate.
- Feature-responsive modulation — driven by frame-to-frame intensity activity and voiced/unvoiced state.
- Independent output-duration ratio — stretches or compresses the source-to-output time mapping.
- Source-position variation — jitter, probabilistic backtracking, and repetition.
- Onset gaps — sparse states can introduce short silent intervals by delaying the next grain onset.
- Time-placed overlap-add — grains are summed directly into a fixed-duration output buffer.
- Channel preservation — feature analysis uses a mono copy, while grain resynthesis preserves the source channel count.
- Random_seed — reproducible stochastic scheduling when set to a positive integer.
Quick start
- Select exactly one Sound object in Praat.
- Run
Morphic_Form.praat. - Choose a preset or Custom.
- For Custom, set Morph_intensity, Base_grain_ms, Base_density_gps, Max_jitter_ms, Output_duration_ratio, and Pacing_curve.
- Set Random_seed if you want reproducible scheduling.
- Enable Draw_visualization if you want to inspect the morph, grain parameters, acoustic features, and source-read map.
- Click OK. The output is named
<source>_morphic.
Morphic Model
The Two Attractors
Attractor Definitions
| Parameter | Attractor A | Attractor B |
|---|---|---|
| Grain size | base_grain_ms × 1.35 | base_grain_ms × 0.67 |
| Density | base_density_gps × 0.55 | base_density_gps × 1.90 |
| Jitter | max_jitter_ms × 0.08 | max_jitter_ms |
| Backtrack probability | 0.02 | 0.22 |
| Repeat probability | 0.04 | 0.28 |
| Gap probability | 0.07 | 0.00 |
| Gap duration | random 12–40 ms | none |
The derived grain sizes and densities are additionally bounded internally: A grain size to 15–150 ms, B grain size to 10–100 ms, A density to at least 3 grains/s, and B density to at most 100 grains/s.
Pacing Curves
Bounded Feature Modulation
Morph-state update
Normalized intensity itself is retained for analysis and visualization, but it is not a separate term in the morph-state update. The responsive terms are activity and voiced/unvoiced state.
Acoustic Analysis
Control features are evaluated every 50 ms on an output-time grid. Each output frame is mapped back to the corresponding source time.
- Intensity: Praat Intensity analysis, minimum pitch 75 Hz, sampled at the mapped source time.
- Voiced flag: 1 when Pitch (75–600 Hz) is defined, otherwise 0.
- Activity: absolute frame-to-frame change in normalized intensity, normalized by the largest observed change.
Output-Duration Mapping
This maps the full source timeline across the requested output duration. A ratio of 2.0 spreads the source trajectory over twice the time; a ratio of 0.5 traverses it in half the time. The ratio itself does not inherently create source wrapping or skip a fixed portion of the source. Jitter, backtracking, and repetition perturb the reference trajectory.
Preset Strategies
| Preset | Morph | Base grain | Density | Jitter | Ratio | Pacing | Initial state |
|---|---|---|---|---|---|---|---|
| Slow Bloom | 0.60 | 52 ms | 17 g/s | 7 ms | 1.0× | Linear | A |
| Tidal Surge | 0.90 | 30 ms | 38 g/s | 28 ms | 1.2× | Accelerate | A |
| Nervous Scatter | 0.95 | 22 ms | 52 g/s | 40 ms | 0.85× | Linear | 0.75 |
| Still Center | 0.15 | 68 ms | 11 g/s | 4 ms | 1.0× | Decelerate | A |
| Time Stretch | 0.45 | 60 ms | 20 g/s | 12 ms | 2.0× | Decelerate | A |
| Collapse | 0.80 | 25 ms | 45 g/s | 20 ms | 0.5× | Accelerate | A |
Parameters & Controls
| Parameter | Default | Effective range / behavior |
|---|---|---|
| Morph_intensity | 0.75 | Clamped 0–1; maximum allowed morph state |
| Base_grain_ms | 40 | Clamped 10–120 ms before attractor scaling |
| Base_density_gps | 25 | Clamped 5–80 grains/s before attractor scaling |
| Max_jitter_ms | 15 | Clamped 0–50 ms |
| Output_duration_ratio | 1.0 | Clamped 0.1–10.0 |
| Pacing_curve | Linear | Linear / Accelerate / Decelerate |
| Random_seed | 0 | 0 = unpredictable; positive integer = reproducible |
| Draw_visualization | On | Draw suite-standard diagnostic page |
| Play_result | On | Play final Sound |
Internal Control Constants
| Parameter | Value | Meaning |
|---|---|---|
| gd_lr | 0.22 | Morph-state response rate |
| local_weight | 0.30 | Strength of local acoustic modulation within the allowed morph range |
| analysis hop | 50 ms | Control-feature sampling interval |
| grain edge fade | 10% | Linear fade-in and fade-out on each extracted grain |
| final edge fade | up to 5 ms | Protects the assembled buffer boundaries |
Grain Scheduling & Rendering
Per-Frame Placement Parameters
Grain Schedule
Reflection at the source boundaries prevents large jitter or backtracking values from artificially accumulating grains exactly at the first or last legal source position.
Dynamic Grain Budget
The budget is derived from the maximum density the model can request. If the budget is nevertheless exhausted before the timeline is fully scheduled, the script reports the unscheduled duration; the output buffer remains exact in duration and the uncovered tail is silent.
Time-Placed Overlap-Add
There is no separate concatenate/crossfade stage. Density controls onset spacing, while grain duration determines how strongly neighboring grains overlap.
Visualization
The v1.4 visualization uses the Praat AudioTools suite layout and summarizes the source, control trajectories, grain schedule, and output.
Applications
Gradual Texture Transformation
Use Slow Bloom or Tidal Surge to move from relatively stable grain placement toward denser, more irregular scheduling while keeping the source material recognizable at the grain level.
Dense Fragmentation
Nervous Scatter starts near the turbulent side and combines short grains, high density, strong position jitter, and greater backtrack/repeat probability.
Temporal Expansion and Compression
Output_duration_ratio changes how the source timeline is distributed across the output. Time Stretch expands the trajectory; Collapse compresses it.
Multichannel Recomposition
Stereo or multichannel material can be analyzed with a common mono control trajectory while retaining the original channel structure in the extracted grains.
Feature-Responsive Grain Placement
Activity and voiced/unvoiced structure influence how quickly the morph approaches its user-defined ceiling, linking acoustic change in the source to the evolving grain schedule.
Troubleshooting
The selected parameter combination did not produce a usable schedule. Check source duration and grain settings; very short or silent sources are rejected before scheduling.
If the scheduling budget is exhausted before the full timeline is covered, the buffer duration remains correct but the unscheduled tail is silent. The Info window reports this condition.
The current implementation reflects out-of-range source positions before its final safety clamp, specifically to reduce edge accumulation. If the effect remains strong, reduce Max_jitter_ms or use a less turbulent preset.
Correct for the current visualization: the red line shows the target morph curve. Actual modulation is reflected indirectly in the derived grain-size, density, and jitter trajectories.