| Age | Commit message (Collapse) | Author |
|
- synthesizeMQ output trimmed to [t_start-50ms, t_end+50ms] so playback
starts immediately at the partial instead of t=0
- Extract synth+trim logic into getAudioBuffer(partials, margin=0)
- Stack params vertically in dropdown (grid layout)
handoff(Claude): partial playback and CSS param layout fixes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Move all styles from index.html <style> block to style.css
- Merge duplicate :focus rules; add canvas-col, canvas-wrap, amp-edit-header, slider-val classes
- Move params (Hop/Threshold/Prominence/Birth/Death/Phase Wt/Min Len) into ⚙ Params dropdown
- Relocate Keep slider to bottom-left canvas overlay
handoff(Claude): UI consolidation complete
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
trackIsoContour() follows constant energy level through STFT frames
instead of peaks. Useful for broad bass areas where peak detector finds
nothing. Preview in cyan, auto-detects spread on commit (naturally large).
Toggle: ≋ Contour button or C key. Mutually exclusive with ⊕ Explore.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Pre-compute peak frames after STFT cache is built, so trackFromSeed
works without requiring Extract Partials first.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Hover to preview a tracked partial from mouse position (peak-snapped,
forward+backward MQ tracking). Click to commit. Toggle with ⊕ Explore
button or X key. Escape exits explore mode.
handoff(Gemini): explore mode added in mq_extract.trackFromSeed + viewer.js/app.js
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- '+ Partial' button (N key): insert 440Hz/max-amp partial at front
- Undo/Redo buttons (Ctrl+Z/Y): JSON snapshot stack, 50 levels
- Hooks in delete, mute, curve edits, amp drag, freq drag
handoff(Gemini): undo/redo + new-partial added to mq_editor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Extract synth UI params into reusable getSynthParams(). Add Digit3 shortcut
to synthesize and play only the currently selected partial.
handoff(Claude): getSynthParams() now shared by playSynthesized() and Digit3 handler.
|
|
- utils.js (new): evalBezier (robust), getCanvasCoords, buildBandPoints
- app.js (new): extract ~450-line inline script from index.html
- editor.js: generalize _makeJogSlider(inp, options) with onUpdate cb,
eliminate 50-line inline resonator jog duplication, use getCanvasCoords
- mq_extract.js: extract findBestPeak(), replace two identical loop bodies
- viewer.js: remove duplicate evalBezier, use getCanvasCoords/buildBandPoints
- mq_synth.js: remove duplicate evalBezier
- index.html: inline script removed, load order: utils→fft→extract→synth→viewer→editor→app
handoff(Claude): mq_editor refactor complete — no logic changes, browser-ready.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|