Commit graph

38 commits

Author SHA1 Message Date
Michael Winter 9c84ed7a09 Remove chord info tables from bottom of page 2026-04-21 17:01:29 +02:00
Michael Winter b8f50a4563 Add ghost nodes for Y-drag with frequency ratios, fix display and play handling
- Y-drag creates ghost nodes at quantized ratios (2/1, 3/2, 5/4, etc.)
- Ghost nodes store their own frequency (fundamental * new fraction)
- Preview ghost shows frequency in real-time while dragging
- Final ghost created on release (if dragged >100 cents from original)
- Server API accepts frequency directly for ghost nodes
- Fix frequency display: fundamental * fraction (not cents-adjusted)
- Fix negative snap ratios to use correct reciprocals
- Add colored circle on click (both ramp and non-ramp modes)
- Ghost nodes: no border initially, opacity 0.7, border shows on click
- Chord label clicks exclude ghost nodes
- Remove octaveOffset, use cents or direct frequency instead
2026-04-21 16:55:40 +02:00
Michael Winter e709d1a7a7 Add Y-axis octave drag, fix label positions, display toggle, ramp coloring, server octaveOffset support 2026-04-20 22:46:41 +02:00
Michael Winter a28ebb8a71 Fix label clicks to always use auto; reorder click handler: Shift=SC, Ramp=ramp, click=siren 2026-04-20 18:18:30 +02:00
Michael Winter 8f92185e5e Add Go To index input field 2026-04-20 17:56:53 +02:00
Michael Winter 5a1a4f03dd Add multi-siren control to Path Navigator
- Add siren selection (1-4) and auto (A) toggle buttons
- Keyboard: 1-4 select siren, 0/A auto, R ramp toggle
- Click plays to siren, Shift+click to SuperCollider
- Add RAMP toggle button
- Colored borders on nodes based on which siren is playing
- Fix label clicks to use auto (node's voice)
- Add toggle styling to cents/freq button
- Disable siren hotkeys when typing in input fields
- Disable Flask debug mode for background operation
2026-04-20 17:56:11 +02:00
Michael Winter 3b68c1a49e Add Reseed & Generate button; adjust voice movement weights 2026-04-19 01:34:56 +02:00
Michael Winter a377558f89 Fix weight values allowing 0 and add normalization floor 2026-04-18 15:33:49 +02:00
Michael Winter a08c944f34 Add inline +/- buttons for number inputs, hide default spinners 2026-04-09 11:07:18 +02:00
Michael Winter c217e04243 Add Path Generator UI with import/export settings, save/load defaults, and transcribe 2026-04-08 13:24:58 +02:00
Michael Winter 30675756c9 Add ramp exponent UI and split ramp_to_pitch for single voice 2026-04-07 08:48:06 +02:00
Michael Winter f6a98bf8a7 Add per-voice ramp cancellation and frequency tracking in osc_sender 2026-04-04 22:11:27 +02:00
Michael Winter f3a5dda4bc Add ramp-to-chord with per-voice tracking and configurable siren IP 2026-04-04 21:46:15 +02:00
Michael Winter 42aa7798d2 Simplify play-siren: remove unused frequency+voice mode 2026-04-04 19:57:54 +02:00
Michael Winter 90f00e56c6 Add chord number labels with click-to-siren
- Add label nodes at top of each chord column
- Modify xforce layout to skip label nodes
- Click label to play entire chord on siren
- Use chordIndex/nodeIndex (server calculates frequency)
- Fix server to support both calling conventions
- Fix client to use proper JSON headers for kill-siren
2026-04-04 19:56:39 +02:00
Michael Winter 1a56c35276 Add cents/frequency toggle for node labels
- Add toggle button and 'f' keyboard shortcut
- Calculate frequencies on-demand using fundamental * fraction
- Use direct style updates for reliable label refresh
2026-04-04 13:56:42 +02:00
Michael Winter 2a17339edc Add octave offset for play-freq, adjustable via UI input 2026-04-01 18:39:13 +02:00
Michael Winter 990e59b1d6 Fix edge bug: add broke flag to match Python for-else behavior 2026-04-01 18:01:09 +02:00
Michael Winter 7259cd67bd Add weighted cross-chord edges: 100x weaker than regular edges 2026-04-01 17:48:47 +02:00
Michael Winter ab7e949f07 Clean up unused API endpoints and server code 2026-04-01 17:14:15 +02:00
Michael Winter b4d6ea81a1 Fix: use change event instead of input for spinner buttons 2026-04-01 17:02:08 +02:00
Michael Winter c1f11184af Add input listener back for spinner buttons 2026-04-01 16:57:00 +02:00
Michael Winter e819c374e4 Fix fundamental setting: remove input listener that spams server, only send on Enter/arrows 2026-04-01 16:55:29 +02:00
Michael Winter 5b92e4ff83 Fix calculate_cents - use simple math.log2 instead of broken bit_length logic 2026-04-01 16:47:45 +02:00
Michael Winter 8f332fac52 Add batch API endpoints for cents calculation, client fetches cents from server 2026-04-01 16:44:20 +02:00
Michael Winter c6bb3a12ce Move graph computation from server to client 2026-04-01 16:37:45 +02:00
Michael Winter 79e1259f5b Add filepath input for loading any JSON file via API 2026-04-01 16:33:13 +02:00
Michael Winter a93ade34b4 Simplify UI: remove file dropdown, auto-send fundamental on keypress 2026-04-01 13:18:09 +02:00
Michael Winter 94b34b4dc4 Add Shift+click for siren and k/K for kill
- Add /api/play-siren endpoint for Shift+click
- Add /api/kill-siren endpoint for k/K keys
- Add set_chords method to OSCSender for dynamic voice count
- Update soft kill to 20Hz in osc_sender.py
- Refactor CLI to use send_kill method
- Fix kill to send to all voices regardless of count
2026-04-01 13:01:50 +02:00
Michael Winter 6ab162003e Add OSC playback to path navigator webapp
- Add /api/set-fundamental and /api/play-freq endpoints to server.py
- Add send_single method to osc_sender.py for sending single frequencies
- Add fundamental frequency input and click handler to path_navigator.html
- Distinguish between click (play) and drag (move) on nodes
- Add osc_receiver.scd for SuperCollider to receive /freq messages
2026-04-01 11:23:24 +02:00
Michael Winter dff8a4e6c2 Add all-chords continuous canvas with xforce bounds and pan navigation 2026-04-01 09:59:30 +02:00
Michael Winter 2b7c882bc9 Fix column width in chord panel tables 2026-04-01 09:18:39 +02:00
Michael Winter e0bacce10a Apply sleek black theme and table format for chord panels 2026-03-31 19:17:37 +02:00
Michael Winter 00cfac2e5c Add Cytoscape.js with custom xforce layout for chord visualization 2026-03-31 18:44:47 +02:00
Michael Winter 88a9528e12 Add Flask server with Python backend for Path Navigator
- Server calculates graph edges and ratios using src/pitch.py
- Frontend fetches computed graph from API
- Supports loading different output files via dropdown
- All pitch calculations now in Python, JS only for rendering
2026-03-30 22:38:52 +02:00
Michael Winter 2a027ba552 Add prev/current/next graph panels to Path Navigator 2026-03-30 22:17:01 +02:00
Michael Winter 6924c85d19 Add vertical node positioning by frequency in Path Navigator 2026-03-30 22:09:07 +02:00
Michael Winter 27d34fdafc Add Path Navigator webapp for visualizing chord paths 2026-03-30 21:06:14 +02:00