summaryrefslogtreecommitdiff
path: root/tools/spectral_editor/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'tools/spectral_editor/README.md')
-rw-r--r--tools/spectral_editor/README.md73
1 files changed, 60 insertions, 13 deletions
diff --git a/tools/spectral_editor/README.md b/tools/spectral_editor/README.md
index 221acb8..6bb3681 100644
--- a/tools/spectral_editor/README.md
+++ b/tools/spectral_editor/README.md
@@ -19,11 +19,25 @@ Replace large `.spec` binary assets with tiny procedural C++ code:
- Undo/Redo support (50-action history)
- Export to `procedural_params.txt` (re-editable)
- Generate C++ code (copy-paste ready)
+- **Live volume control** during playback
+- **Reference opacity slider** for mixing original/procedural views
+- **Per-curve volume control** for fine-tuning
### Profiles
-- **Gaussian:** Smooth harmonic falloff
-- **Decaying Sinusoid:** Resonant/metallic texture (coming soon)
-- **Noise:** Random texture/grit (coming soon)
+- **Gaussian:** Smooth harmonic falloff (fully implemented)
+- **Decaying Sinusoid:** Resonant/metallic texture (implemented)
+- **Noise:** Random texture/grit with decay envelope (implemented)
+
+### Visualization
+- **Log-scale frequency axis** (20 Hz to 16 kHz) for better bass visibility
+- **Logarithmic dB-scale intensity** for proper dynamic range display
+- **Playhead indicator** showing current playback position
+- **Mouse crosshair with tooltip** displaying frame and frequency
+- **Real-time spectrum viewer** (bottom-right):
+ - Shows frequency spectrum for frame under mouse (hover mode)
+ - Shows frequency spectrum for current playback frame (playback mode)
+ - Dual display: Reference (green) and Procedural (red) overlaid
+ - Always visible for instant feedback
## Quick Start
@@ -164,19 +178,52 @@ A spectral brush consists of:
3. Use overlap-add with Hanning window
4. Play via Web Audio API (32 kHz sample rate)
-## Limitations
+## Development Status
+
+### Phase 1: C++ Runtime ✅ COMPLETE
+- Spectral brush primitive (Bezier + profiles)
+- C++ implementation in `src/audio/spectral_brush.{h,cc}`
+- Integration with asset system
+
+### Phase 2: Web Editor ✅ COMPLETE (Milestone: February 6, 2026)
+- Full-featured web-based editor
+- Real-time audio preview and visualization
+- Log-scale frequency display with dB-scale intensity
+- All three profile types (Gaussian, Decaying Sinusoid, Noise)
+- Live volume control and reference opacity mixing
+- Real-time dual-spectrum viewer (reference + procedural)
+- Export to `procedural_params.txt` and C++ code
+
+### Phase 3: Advanced Features (TODO)
+
+**High Priority:**
+- **Effect Combination System:** How to combine effects (e.g., noise + Gaussian modulation)?
+ - Layer-based compositing (add/multiply/subtract)
+ - Profile modulation (noise modulated by Gaussian envelope)
+ - Multi-pass rendering pipeline
+
+- **Improved C++ Code Testing:**
+ - Verify generated code compiles correctly
+ - Test parameter ranges and edge cases
+ - Add validation warnings in editor
+
+- **Better Frequency Scale:**
+ - Current log-scale is too bass-heavy
+ - Investigate mu-law or similar perceptual scales
+ - Allow user-configurable frequency mapping
-### Phase 1 (Current)
-- Only Bezier + Gaussian profile implemented
-- Linear interpolation between control points
-- Single-layer spectrogram (no compositing yet)
+- **Pre-defined Shape Library:**
+ - Template curves for common sounds (kick, snare, hi-hat, bass)
+ - One-click insertion with adjustable parameters
+ - Save/load custom shape presets
-### Future Enhancements
+**Future Enhancements:**
- Cubic Bezier interpolation (smoother curves)
-- Decaying sinusoid and noise profiles
-- Composite profiles (add/subtract/multiply)
-- Multi-dimensional Bezier (vary decay, oscillation, etc.)
-- Frequency snapping (snap to musical notes)
+- Multi-dimensional Bezier (vary decay, oscillation over time)
+- Frequency snapping (snap to musical notes/scales)
+- Load `procedural_params.txt` back into editor (re-editing)
+- Frame cache optimization for faster rendering
+- FFT-based DCT optimization (O(N log N) vs O(N²))
## Troubleshooting