Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
T
Tidal
  • Overview
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • PLN
  • Tidal
  • Repository

Switch branch/tag
  • Tidal
  • tools
  • midi-autoconnect.sh
Find file
BlameHistoryPermalink
  • PLN (Algolia)'s avatar
    feat(surface): translate the LCXL3 instead of renumbering the corpus a second time · c628415e
    The v3 and the 169 tracks disagree about what a CC means, and only one of them
    is cheap to change.
    
    Paint is DAW-mode-only. Tested rather than believed, in three steps with PLN
    watching the surface: magenta on the MIDI port in standalone did nothing; the
    same paint on the DAW port with DAW mode off did nothing; `daw on` followed by
    the same bytes lit all 24 rings and 16 buttons. So the guide's "only available
    once DAW mode is enabled" is a hardware fact, not an artefact of how the
    document is organised.
    
    But DAW mode's CC map is fixed, and it overlaps v2's with DIFFERENT meanings.
    The map was read off the hardware, one control per row, not off the PDF's
    low-resolution diagram: fader1 -> cc5 ch16, A1 -> 13, B1 -> 21, C1 -> 29,
    E1 -> 37 ch1, F1 -> 45 ch1, shift -> 63 ch7.
    
        row   v2 (lcxl_grid)   v3 DAW
        A     13-20            13-20     identical
        B     29-36            21-28
        C     49-56            29-36     <- v2's row B numbers
        D     77-84            5-12
        E     41-44, 57-60     37-44
        F     73-76, 89-92     45-52
    
    Sixteen indices collide. The one that decides it: v3 #41 is button E5, while v2
    #41 is button E1 — the kick gate the whole #94 migration just aligned 169 files
    onto. Renumbering would move the kick gate four buttons to the right, silently,
    with nothing erroring. That is the same failure class b5ad8b6c was written to
    end, so the corpus keeps its numbering and software absorbs the difference.
    
    Three things make this cheap rather than clever:
    
    SuperCollider's binding is `MIDIFunc.cc({...})` with no cc, channel or src
    filter — only the number matters, so a pure renumber is sufficient and no
    channel juggling is needed.
    
    Every encoder row is still in ABSOLUTE mode (queried: rows 1/2/3 all read 0),
    so a v3 encoder already behaves like a v2 pot. Relative mode needs an
    integrator that owns the value — genuinely better, since it kills pot-pickup
    outright, and it is where paint-by-value belongs — but it is a separate change
    and `--relative` is left as an experiment that honestly warns the map no longer
    applies.
    
    The v2 numbers are DERIVED from lcxl_grid.ROW_CCS positionally rather than
    retyped, so if the authored table moves, the translation follows.
    
    Publishing a virtual port rather than resolving SuperCollider's once: SC runs
    MIDIIn.connectAll a single time at boot, so a port that appears later is never
    connected, and a binding resolved once is the rig's most repeated failure mode.
    The driver re-asserts the aconnect link on a timer, the same shape as the two
    reconciler units.
    
    midi-autoconnect had the same stale-name bug: it hardcoded "Launch Control XL",
    which matches neither v3 port, and since it routes aconnect's complaints to
    /dev/null the failure was completely silent — Ardour stopped hearing the surface
    with every check green. It now resolves the source, preferring the driver's
    translated port over the raw device, and echoes what it picked once per change
    rather than every two seconds.
    PLN (Algolia) authored Aug 28, 2026
    c628415e
midi-autoconnect.sh 4.7 KB
EditWeb IDE
×

Replace midi-autoconnect.sh

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.