Dynamic Stochastic Synthesis — User Guide
Time-evolving granular synthesis: creates textures that transform over time with controlled density and frequency evolution, from gentle blooms to intense storms, using optimized chunking for ultra-fast performance.
What this does
This script implements dynamic stochastic synthesis — generating evolving granular textures where density and frequency systematically change over time. Unlike static granular synthesis, this creates textures with narrative arcs: starting sparse and building to dense climaxes, or starting high and decaying to whispers. Process: (1) Pre-generates grain parameters with time-dependent properties, (2) Implements density evolution (sparse→dense or dense→sparse), (3) Applies frequency evolution (rising, falling, or complex trajectories), (4) Uses chunking optimization for ultra-fast synthesis, (5) Applies sophisticated spatial processing with time-varying stereo effects.
Key Features:
- 8 Evolving Presets — Different narrative arcs from gentle to stormy
- Dual Evolution Control — Independent density and frequency evolution
- Time-Varying Parameters — Grain properties change systematically over duration
- 4 Spatial Modes — Advanced stereo processing with temporal evolution
- Ultra-Fast Chunking — 1.5-second chunks with 40-grain limit for stability
- Preset-Specific Character — Each preset has unique grain envelopes and evolution
- Natural Evolution Curves — Exponential and power-law evolution for organic feel
Technical Implementation: (1) Parameter pre-generation: Calculate total grains based on average density. For each grain: assign random time (uniform), calculate normalized_time (0→1), compute current_density and current_freq using evolution functions, apply preset-specific grain characteristics (duration, amplitude variations). (2) Chunking synthesis: Split duration into 1.5-second chunks, build formula for each chunk with grains whose times fall in chunk, limit to 40 grains per chunk for performance. (3) Concatenation: Concatenate all chunks into final mono sound. (4) Spatial processing: Apply one of four spatial modes with time-varying stereo effects. (5) Final processing: Normalize peak amplitude. Key innovations: Time-dependent parameter calculation before synthesis, efficient chunking with grain limits, sophisticated spatial processing with evolution.
Quick start
- In Praat, ensure no objects selected (generates from scratch).
- Run script… →
dynamic_stochastic_synthesis.praat. - Choose Preset (Gentle Bloom recommended for first try).
- Select Spatial_mode (Stereo Evolution creates immersive movement).
- Adjust Duration (6 seconds typical, longer for slow evolution).
- Set Base_frequency for overall pitch range.
- Define Initial_density and Final_density for evolution arc.
- Set Frequency_evolution_speed for pitch change rate.
- Click OK — synthesis runs with chunk-by-chunk progress.
- Output named "stochastic_presetname" appears in Objects window.
- Output automatically played when complete.
Dynamic Evolution Theory
Evolution Functions
Time Normalization
⏱️ Time Normalization
Normalized time: t_norm = t / duration
Where: t = current time (0 to duration)
duration = total sound length
Result: t_norm ∈ [0, 1] (start to end)
Purpose: Makes evolution functions independent of absolute duration
Same evolution curve works for any duration
5-second and 30-second versions have same proportional evolution
Density Evolution
Frequency Evolution
Grain Parameter Evolution
Amplitude Evolution
Duration Evolution
Total Grain Calculation
Estimating Total Grains
Evolution Visualization
DENSITY: ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Sparse → Dense (linear progression)
FREQUENCY: ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Low → High (exponential rise)
AMPLITUDE: ████████████████████████████████████████████████████
Loud → Soft (power-law decay)
GRAIN DURATION: ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Random within preset range
SPATIAL WIDTH: ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
Narrow → Wide (time-varying)
Result: Multi-dimensional evolution creates complex narrative arc
Preset Evolutions
Preset Overview
1 Custom
User-defined evolution
Arc: User-controlled
2 Gentle Bloom
Slow, organic growth
Arc: Sparse→Moderate
3 Storm Build
Intense crescendo
Arc: Moderate→Intense
4 Cosmic Drift
Slow atmospheric shift
Arc: Very sparse→Sparse
5 Digital Cascade
Fast digital build
Arc: Dense→Very dense
6 Organic Growth
Natural expansion
Arc: Moderate→Dense
7 Harmonic Swarm
Focused frequency band
Arc: Dense→Very dense
8 Metallic Storm
Extreme density build
Arc: Dense→Extreme
9 Whisper Cloud
Quiet, delicate evolution
Arc: Very sparse→Sparse
Preset Details
🌸 Gentle Bloom (Preset 2)
Evolution character: Slow, organic growth like flowers opening
Parameters:
- Base frequency: 80 Hz (warm, bass-oriented)
- Initial density: 15 grains/sec (very sparse start)
- Final density: 60 grains/sec (moderate density)
- Frequency evolution speed: 0.5 (gentle half-octave rise)
Grain characteristics:
- Frequency: base × (0.9-1.1) (narrow variation)
- Amplitude: 0.4 × (1 - t^0.5) (slow decay)
- Duration: 0.03-0.11s (medium-long grains)
Narrative arc: Begins with isolated, warm tones that gradually multiply and rise gently in pitch, creating a sense of organic growth and emergence.
Best for: Natural environments, gentle transitions, meditative backgrounds
🌩️ Storm Build (Preset 3)
Evolution character: Intense crescendo like approaching storm
Parameters:
- Base frequency: 100 Hz (mid-range tension)
- Initial density: 20 grains/sec (moderate start)
- Final density: 200 grains/sec (very dense climax)
- Frequency evolution speed: 1.2 (strong 1.2-octave rise)
Grain characteristics:
- Frequency: base × (0.7-1.3) (wide variation)
- Amplitude: 0.7 × (1 - t^0.8) (fast decay)
- Duration: 0.01-0.05s (very short grains)
Narrative arc: Starts with ominous rumbles that rapidly increase in density and pitch, creating intense tension and climax in a dense granular storm.
Best for: Tension builds, dramatic transitions, intense film scenes
🌌 Cosmic Drift (Preset 4)
Evolution character: Slow, atmospheric spatial drift
Parameters:
- Base frequency: 60 Hz (deep, sub-bass)
- Initial density: 10 grains/sec (extremely sparse)
- Final density: 80 grains/sec (still sparse)
- Frequency evolution speed: 2.0 (dramatic 2-octave rise)
Grain characteristics:
- Frequency: base × (0.5-1.5) (very wide variation)
- Amplitude: 0.5 × (1 - t^0.3) (very slow decay)
- Duration: 0.05-0.17s (long grains)
Narrative arc: Deep, isolated tones slowly multiply and rise dramatically through frequency space, creating sense of vast cosmic movement and spatial travel.
Best for: Space/sci-fi atmospheres, deep ambient, spatial effects
💻 Digital Cascade (Preset 5)
Evolution character: Fast, digital accumulation like data stream
Parameters:
- Base frequency: 180 Hz (bright, digital)
- Initial density: 40 grains/sec (already dense)
- Final density: 180 grains/sec (extremely dense)
- Frequency evolution speed: 1.5 (strong 1.5-octave rise)
Grain characteristics:
- Frequency: base × (0.8-1.2) (moderate variation)
- Amplitude: 0.6 × (1 - t^0.7) (medium decay)
- Duration: 0.02-0.08s (short-medium grains)
Narrative arc: Starts with bright digital texture that rapidly accumulates into dense data cascade, rising in pitch for sense of digital overload or information flood.
Best for: Digital interfaces, data visualization, cyberpunk scenes
🌿 Organic Growth (Preset 6)
Evolution character: Natural, biological growth process
Parameters:
- Base frequency: 90 Hz (natural, earthy)
- Initial density: 25 grains/sec (moderate start)
- Final density: 100 grains/sec (rich density)
- Frequency evolution speed: 0.8 (moderate rise)
Grain characteristics:
- Frequency: base × (0.8-1.4) (organic variation)
- Amplitude: 0.6 × (1 - t^0.7) (balanced decay)
- Duration: 0.02-0.06s (balanced grains)
Narrative arc: Natural-sounding texture grows steadily in density and rises gently in pitch, like biological expansion or ecological development.
Best for: Nature documentaries, organic interfaces, growth metaphors
🐝 Harmonic Swarm (Preset 7)
Evolution character: Focused frequency band swarm
Parameters:
- Base frequency: 110 Hz (harmonic, musical)
- Initial density: 35 grains/sec (dense start)
- Final density: 120 grains/sec (very dense)
- Frequency evolution speed: 1.0 (exact octave rise)
Grain characteristics:
- Frequency: base × (0.8-1.4) (musical variation)
- Amplitude: 0.6 × (1 - t^0.7) (standard decay)
- Duration: 0.02-0.06s (focused grains)
Narrative arc: Harmonic texture starts dense and becomes even denser while rising exactly one octave, creating musical swarm effect with clear pitch center.
Best for: Musical textures, harmonic backgrounds, tuned effects
⚡ Metallic Storm (Preset 8)
Evolution character: Extreme metallic density build
Parameters:
- Base frequency: 140 Hz (metallic, bright)
- Initial density: 50 grains/sec (very dense start)
- Final density: 250 grains/sec (extreme density)
- Frequency evolution speed: 1.8 (near 2-octave rise)
Grain characteristics:
- Frequency: base × (0.8-1.4) (metallic variation)
- Amplitude: 0.6 × (1 - t^0.7) (standard decay)
- Duration: 0.02-0.06s (metallic grains)
Narrative arc: Starts as dense metallic texture and builds to extreme density with dramatic pitch rise, creating overwhelming metallic storm effect.
Best for: Industrial scenes, mechanical overload, extreme tension
☁️ Whisper Cloud (Preset 9)
Evolution character: Delicate, quiet evolution
Parameters:
- Base frequency: 70 Hz (soft, subtle)
- Initial density: 8 grains/sec (extremely sparse)
- Final density: 40 grains/sec (still very sparse)
- Frequency evolution speed: 0.3 (very gentle rise)
Grain characteristics:
- Frequency: base × (0.8-1.1) (narrow, delicate)
- Amplitude: 0.3 × (1 - t^0.6) (quiet, medium decay)
- Duration: 0.04-0.14s (long, smooth grains)
Narrative arc: Extremely sparse, quiet texture that gently increases in density and very slightly rises in pitch, like distant whispers gradually becoming audible.
Best for: Subtle backgrounds, delicate transitions, whisper effects
Spatial Modes
Spatial Processing Overview
🎧 Spatial Evolution Concept
Key innovation: Spatial processing evolves over time alongside density/frequency
Unlike static stereo: Width, balance, filtering change systematically
Synchronized evolution: Spatial changes complement sonic evolution
Psychoacoustic effect: Creates immersive, moving sound field
Implementation: Different amplitude/filtering for L/R that changes over time
Spatial Mode Details
🔊 Mono (Mode 1)
Processing: No spatial processing
Characteristics: Centered, focused, mono-compatible
Evolution: None (static mono)
Best for: Further processing, mono systems, simple applications
Implementation: Direct output with no modification
🔄 Stereo Evolution (Mode 2)
Concept: Stereo image evolves from left-focused to right-focused
Left channel evolution: 0.8 → 0.5 (decreases over time)
Right channel evolution: 0.5 → 0.8 (increases over time)
Filtering:
- Left: 0-3500 Hz (fuller low-mid)
- Right: 100-6000 Hz (brighter)
Evolution formula:
Narrative: Sound gradually moves from left to right while brightening
Best for: Moving textures, panoramic sweeps, evolving spaces
🌀 Rotating Cloud (Mode 3)
Concept: Sound rotates in stereo field with accelerating rotation
Left channel: 0.5 + 0.4×cos(2π×0.1×x×(1+x/duration))
Right channel: 0.5 + 0.4×sin(2π×0.1×x×(1+x/duration))
Rotation rate: Starts at 0.1 Hz, accelerates to 0.2 Hz by end
Phase relationship: 90° difference (cos vs sin) creates circular rotation
Evolution formula:
Narrative: Sound swirls around listener with increasing speed
Best for: Spinning effects, vortex sounds, dynamic movement
🌊 Wide Field (Mode 4)
Concept: Stereo field widens over time with frequency separation
Left channel evolution: 0.7 → 0.5 (decreases slightly)
Right channel evolution: 0.5 → 0.8 (increases significantly)
Filtering:
- Left: 0-2000 Hz (low-mid focused, narrow)
- Right: 200-7000 Hz (wide bright range)
Evolution formula:
Narrative: Sound starts centered, widens significantly with highs moving right
Best for: Expanding textures, opening up spaces, wide cinematic effects
Spatial Evolution Visualization
Chunking Optimization
The Chunking Strategy
⚡ Ultra-Fast Performance Architecture
Chunk duration: 1.5 seconds (optimized balance)
Grains per chunk limit: 40 grains (prevents formula overflow)
Calculation: 40 grains × ~150 chars = ~6,000 characters (safe)
Praat limit: ~1,000,000 characters practical
Safety margin: 166× safety factor (6K vs 1M)
Performance benefit: Many small formulas instead of one huge formula
Memory benefit: Smaller strings in memory during synthesis
Chunking Algorithm
chunk_duration = 1.5 seconds
num_chunks = ceil(total_duration / chunk_duration)
max_grains_per_chunk = 40
For chunk = 1 to num_chunks:
chunk_start = (chunk-1) × chunk_duration
chunk_end = min(chunk × chunk_duration, total_duration)
chunk_formula$ = "0"
grains_in_chunk = 0
For each pre-generated grain:
If grain_time in [chunk_start, chunk_end):
If grains_in_chunk < max_grains_per_chunk:
# Build grain term
local_time = grain_time - chunk_start
term$ = "+if x>=" + local_time$ + " and x<" + end$ +
" then " + amp$ + "*sin(2*pi*" + freq$ + "*x)*" +
"sin(pi*(x-" + local_time$ + ")/" + dur$ + ") else 0 fi"
chunk_formula$ = chunk_formula$ + term$
grains_in_chunk = grains_in_chunk + 1
Else:
# Skip remaining grains (safety limit)
Continue to next chunk
Create Sound from formula: chunk_formula$
Concatenate all chunks → final sound
Grain Distribution Considerations
Problem: High final densities may exceed 40 grains/1.5s limit
Example: Final density = 200 grains/sec
1.5s chunk should have ~300 grains, but limited to 40
Effect: Only 40 grains included, rest skipped
Audible result: Texture less dense than expected in later chunks
Solution: Reduce final_density or increase chunk_duration in script
Calculation: Max supported density = 40/1.5 ≈ 26.7 grains/sec per chunk
Note: Random timing means actual grains per chunk varies
Concatenation Process
Performance Analysis
| Scenario | Duration | Avg Density | Total Grains | Chunks | Grains/Chunk | Performance |
|---|---|---|---|---|---|---|
| Gentle Bloom | 6s | 37.5 | 225 | 4 | ~56 | Fast (some skipping) |
| Storm Build | 6s | 110 | 660 | 4 | ~165 | Medium (heavy skipping) |
| Whisper Cloud | 10s | 24 | 240 | 7 | ~34 | Very fast |
| Metallic Storm | 8s | 150 | 1200 | 6 | ~200 | Slow (extreme skipping) |
| Custom Dense | 15s | 200 | 3000 | 10 | ~300 | Very slow (severe skipping) |
Parameters & Effects
Core Evolution Parameters
| Parameter | Type | Default | Range | Description |
|---|---|---|---|---|
| Duration | real | 6.0 | 1-30 seconds | Total evolution time length |
| Base_frequency | real | 120 | 20-500 Hz | Starting frequency at time 0 |
| Initial_density | real | 30 | 1-100 grains/sec | Grains per second at start |
| Final_density | real | 150 | 1-300 grains/sec | Grains per second at end |
| Frequency_evolution_speed | real | 1.0 | -2.0 to 3.0 | Octaves change over duration (2^speed) |
Mode Selection Parameters
| Parameter | Type | Options | Description |
|---|---|---|---|
| Preset | optionmenu | Custom + 8 evolution presets | Pre-defined evolution characteristics |
| Spatial_mode | optionmenu | Mono, Stereo Evolution, Rotating Cloud, Wide Field | Spatial processing with time evolution |
| Play_after | boolean | 0/1 | Auto-play result after processing |
Parameter Interaction Guide
- Short duration (1-3s): Quick, dramatic changes
- Medium duration (3-10s): Natural evolution, good for most applications
- Long duration (10-30s): Gradual, subtle evolution
- Evolution speed perception: Speed/Duration ratio matters
- Example: speed=2.0 over 2s = very fast, over 20s = very slow
Consider evolution rate = speed/duration for consistent perception
- Sparse texture: 1-30 grains/sec (isolated events)
- Medium texture: 30-100 grains/sec (continuous texture)
- Dense texture: 100-200 grains/sec (thick cloud)
- Extreme texture: 200-300 grains/sec (noise-like)
- Practical limit: 40 grains/1.5s chunk = ~26.7 grains/sec supported
- Higher densities: Grains skipped, texture less dense than expected
For very dense textures, increase chunk_duration in script or accept skipping
- Falling tension (negative speed): -2.0 to -0.2 (resolution, decay)
- Stable: -0.2 to 0.2 (minimal change)
- Rising tension (positive speed): 0.2 to 3.0 (build-up, intensity)
- Octave interpretation: speed=1.0 = 2× frequency (one octave up)
- Musical intervals: speed=0.5 ≈ tritone, speed=0.33 ≈ minor third
- Extreme ranges: >2.0 can create very high frequencies
Combine with base_frequency for desired pitch range
Preset Parameter Summary
| Preset | Base Freq | Initial Density | Final Density | Speed | Density Ratio | Octave Change |
|---|---|---|---|---|---|---|
| Gentle Bloom | 80 | 15 | 60 | 0.5 | 4.0× | 0.5 oct |
| Storm Build | 100 | 20 | 200 | 1.2 | 10.0× | 1.2 oct |
| Cosmic Drift | 60 | 10 | 80 | 2.0 | 8.0× | 2.0 oct |
| Digital Cascade | 180 | 40 | 180 | 1.5 | 4.5× | 1.5 oct |
| Organic Growth | 90 | 25 | 100 | 0.8 | 4.0× | 0.8 oct |
| Harmonic Swarm | 110 | 35 | 120 | 1.0 | 3.4× | 1.0 oct |
| Metallic Storm | 140 | 50 | 250 | 1.8 | 5.0× | 1.8 oct |
| Whisper Cloud | 70 | 8 | 40 | 0.3 | 5.0× | 0.3 oct |
Applications
Film & Video Sound Design
Use case: Create tension builds, transitions, atmospheric evolution
Technique: Match evolution arc to visual narrative
Examples:
- Storm Build: approaching danger, climax buildup
- Gentle Bloom: sunrise, awakening, opening sequences
- Cosmic Drift: space travel, dimensional shifts
- Digital Cascade: data flow, interface activation
Music Production
Use case: Evolving pads, risers, transition effects
Technique: Sync evolution duration to musical timing
Workflow:
- 8-bar build: duration = (8×beats×60)/BPM seconds
- Riser before drop: Storm Build with high speed
- Atmospheric intro: Cosmic Drift with long duration
- Texture evolution: Organic Growth for natural feel
Game Audio
Use case: Dynamic environments, spell charging, UI feedback
Technique: Parameter control for game state
Applications:
- Spell charging: density/frequency increase with charge level
- Environmental changes: texture evolves with day/night cycle
- UI feedback: Digital Cascade for data transfer sounds
- Tension: Storm Build for enemy approaching
Generative Art & Installations
Use case: Never-repeating evolving soundscapes
Technique: Long durations, parameter randomization
Advantages: Deterministic yet complex, parameter control
Therapeutic & Meditative Audio
Use case: Guided meditation, focus enhancement, relaxation
Technique: Gentle evolution, slow changes, soothing frequencies
Examples:
- Breathing meditation: Gentle Bloom synced to breath cycle
- Focus enhancement: Harmonic Swarm for concentration
- Sleep induction: Whisper Cloud with very slow evolution
Practical Workflow Examples
🎬 Film: Tension Build Before Reveal
Scene: 10-second shot building to monster reveal
Settings:
- Preset: Storm Build (modified)
- Duration: 10 seconds (match shot length)
- Base frequency: 90 Hz (ominous low end)
- Initial density: 15 → Final: 180 (dramatic increase)
- Frequency speed: 1.5 (rising tension)
- Spatial mode: Stereo Evolution (sound moves right)
Integration: Start quiet, peak at reveal moment with hit sound
Result: Intense tension build that culminates at exact reveal moment
🎵 Music: 8-Bar Riser Before Drop
Context: Electronic track at 128 BPM, 8-bar buildup
Settings:
- Duration: (8×4×60)/128 = 15 seconds (8 bars at 128 BPM)
- Preset: Digital Cascade
- Base frequency: 110 Hz (musical A)
- Initial density: 30 → Final: 160
- Frequency speed: 2.0 (2-octave rise to drop key)
- Spatial mode: Rotating Cloud (spinning effect)
Processing: Add high-pass filter sweep, side-chain to kick
Result: Perfectly timed riser that leads exactly into drop
🎮 Game: Spell Charging Effect
Mechanic: Player holds button to charge spell, 3 charge levels
Implementation: Generate 3 versions with different endpoints
- Level 1 (quick): Duration=1s, Final density=60
- Level 2 (medium): Duration=2s, Final density=120
- Level 3 (full): Duration=3s, Final density=200
Common settings: Preset=Metallic Storm, Base=140Hz, Speed=1.5
Game integration: Play corresponding sound based on charge time
Result: Audio feedback that clearly indicates charge level
Advanced Techniques
- Multi-section evolution: Generate multiple sounds with different parameter sets
- Crossfade composition: Blend between different evolution stages
- Real-time parameter control: Modify script for interactive control
- External data mapping: Use data (MIDI, OSC, sensor) to control parameters
Script can be modified for dynamic parameter changes during evolution
- Multi-channel evolution: Different evolution for each speaker
- Height channel evolution: Add vertical movement (for surround systems)
- Distance simulation: Evolution includes near→far or far→near
- Complex trajectories: Custom spatial paths through 3D space
Spatial processing can be extended for immersive audio formats
- Evolution + samples: Use evolving parameters to process samples
- Multi-evolution layers: Different evolutions for different frequency bands
- Feedback evolution: Output feeds back to influence evolution parameters
- Cross-modal evolution: Sync with visual or other media evolution
Evolution synthesis as control source for other processes
Troubleshooting Common Issues
Causes: Speed/duration mismatch, extreme parameter values
Solutions: Adjust speed parameter, change duration, use presets as reference
Causes: Final density too high, exceeds chunk grain limit
Solutions: Reduce final density, increase chunk_duration in script, accept skipping
Causes: Speed too high, base frequency inappropriate
Solutions: Reduce speed, adjust base frequency, use milder presets
Causes: Spatial mode too aggressive for material
Solutions: Use Mono mode, milder spatial mode, custom spatial processing
Causes: High grain count, many chunks, spatial processing
Solutions: Reduce parameters, be patient, use faster computer
Creative Parameter Explorations
| Exploration | Parameter Settings | Expected Result | Creative Use |
|---|---|---|---|
| Reverse evolution | Initial>Final density, speed negative | Texture decays and falls in pitch | Resolution effects, endings |
| Arc evolution | Generate multiple sections | Build then decay narrative arc | Complete story sounds |
| Micro-evolution | Duration=0.5s, extreme parameters | Ultra-fast transformation burst | Impact sounds, stings |
| Static texture | Initial=Final, speed=0 | Constant granular texture | Background beds, sustained tones |
| Spatial focus shift | Combine different spatial modes | Complex 3D movement | Immersive environments |
Technical Implementation Details
Grain Formula Optimization
Simplified Sine Envelope
Parameter Pre-generation Algorithm
total_grains = round(average_density × duration)
For i = 1 to total_grains:
# Random time placement
t = randomUniform(0, duration)
normalized_time = t / duration
# Current evolution state
current_density = initial + (final-initial) × normalized_time
current_freq = base × 2^(speed × normalized_time)
# Preset-specific variations
If preset = GentleBloom:
freq_variation = 0.9 + 0.2×random()
amp = 0.4 × (1 - normalized_time^0.5)
dur = 0.03 + 0.08×random()
Elsif preset = StormBuild:
freq_variation = 0.7 + 0.6×random()
amp = 0.7 × (1 - normalized_time^0.8)
dur = 0.01 + 0.04×random()
# ... other presets
grain_freq[i] = current_freq × freq_variation
grain_amp[i] = amp × 0.15 # Overall scaling
grain_time[i] = t
grain_dur[i] = dur
End For
Key insight: All parameters computed before synthesis
No chaotic systems, simple deterministic evolution
Spatial Processing Implementation
Time-Varying Spatial Formulas
Performance Optimization Details
Why Pre-generation is Efficient
- Separation: Evolution calculation separate from synthesis
- Efficiency: Compute once, not during formula building
- Flexibility: Can modify parameters before synthesis
- Debugging: Can inspect parameter arrays
- Memory: Arrays (4×total_grains) smaller than formula strings
- Deterministic: Same parameters = same evolution
Memory example: 1000 grains × 4 parameters × 8 bytes = 32KB (negligible)