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
040ab9999d
Reduce OSC synth attack/decay envelope times
2026-04-04 20:21:59 +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
62e6a75f4f
Add harmonic compactness factor
...
- Compute sum of harmonic distances between all pitch pairs
- Lower sum = more compact chord = higher probability
- Uses pitch_difference() to get diff, then log2(n*d) for distance
- Add CLI arg: --weight-harmonic-compactness
2026-04-04 18:44:23 +02:00
Michael Winter
65e3a64a0c
Add RGR voice movement factor
...
- Track consecutive voice change selections (change_counts)
- Favor voices that have been selected to change multiple times
- Block selection when threshold reached (default: 5)
- Add CLI args: --weight-rgr-voice-movement, --rgr-voice-movement-threshold
2026-04-04 16:53:44 +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
e09fbbae45
Fix OSC receiver port binding, add long attack/decay envelope
2026-04-01 21:53:33 +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
Michael Winter
3e0f2bc906
Add target register oscillations, amplitude, and fix negative target_register
2026-03-30 20:47:20 +02:00
Michael Winter
dfdc0497a0
Add independent voice control to OSC sender with improved display
2026-03-28 17:13:51 +01:00
Michael Winter
1dff1022ce
Add custom dims support via --dims-custom and update JSON output format
2026-03-28 15:12:14 +01:00
Michael Winter
bb7a9ccb21
Add DIMS_3 support and fix dim_diff for prime 11
2026-03-28 13:51:05 +01:00
Michael Winter
7dd7f23611
Fix uniform symdiff to fallback to other symdiff groups when no valid candidates
2026-03-27 10:14:33 +01:00
Michael Winter
863423ca7a
Add uniform symdiff selection and store symdiff in graph edges
...
- Add symdiff to edge tuple in _find_valid_edges() and store in graph
- Add --uniform-symdiff CLI option to make symdiff selection uniform
- Implement uniform selection in pathfinder by grouping edges by symdiff
- With uniform: path uses symdiff 2 and 4 roughly equally
- Without uniform: path uses mostly symdiff 4 (most common)
2026-03-27 10:05:14 +01:00
Michael Winter
74aa937ec2
Add --target-register-power option to curve target register progression
2026-03-26 15:41:41 +01:00
Michael Winter
8ea5c4fe0c
Use --fundamental for frequencies output as well as OSC
2026-03-25 10:28:04 +01:00
Michael Winter
44506eed14
Add source_node and destination_node to path_steps.json
2026-03-25 10:23:44 +01:00
Michael Winter
c1ff66265d
Fix max-path to represent total chord count instead of edge count
2026-03-24 11:57:04 +01:00
Michael Winter
6245ce5e27
Make JSON output more readable - each pitch on one line
2026-03-24 11:04:21 +01:00
Michael Winter
4804c0c244
Add LilyPond transcriber documentation to README
2026-03-23 20:09:03 +01:00
Michael Winter
0f419a15b5
Add dynamic date placeholder to score template
2026-03-23 20:01:51 +01:00
Michael Winter
c0ffaac95f
Use SemiStaffGroup in generated score
2026-03-23 20:00:21 +01:00
Michael Winter
4ffbcc79d2
Fix score block structure - wrap staves in StaffGroup
2026-03-23 19:55:48 +01:00
Michael Winter
6bf97e5abe
Make LilyPond template dynamic - title and staves generated from parameters
2026-03-23 19:54:50 +01:00
Michael Winter
306de8b5c2
Add --transcribe option to CLI for generating LilyPond transcriptions
2026-03-23 19:46:00 +01:00
Michael Winter
9dbde6a63d
Fix PDF output location and set default name
2026-03-23 19:23:53 +01:00
Michael Winter
a0723e5ae3
Show dimension markup for first chord using refs within same chord
...
- Add _find_ref_in_same_chord() to find adjacent pitches within the same chord
- Update first chord handling to show refs to other pitches in chord
2026-03-23 19:15:49 +01:00