Control crossing between channels: the GX-1's shared modulators and clocks #131

Open
opened 2026-10-05 23:46:14 +00:00 by bcox · 0 comments
Owner

bcox asked on 2026-10-05 for a ticket for each engine gap in his moregaps.md feature table that no existing ticket covers. Engine claims are from reading the tree at f6aa8eba on main. Instrument claims are from that day's research, read as OCR of Yamaha's owner's and service manuals by a research agent and not re-checked; the sources are listed in that document. Nothing here is built, measured or listened to.

Summary

Audio crosses channels through sends and the two input buses; control does not. Each channel's two LFOs are its own (dsp/mod_source.h:113-125), and nothing a voice reads comes from another channel. The GX-1 crosses control three ways:

  • Two PWM oscillators serve the whole instrument: one feeds every row-I card and the Solo card, the other every row-II card, across all its keyboards.
  • The Solo manual's sample-and-hold can be clocked by any of the rhythm unit's drum sounds.
  • The Upper keyboard's LFO speed can follow the last key played on Solo.

In Tymbal's terms a GX-1 is several channels, one per keyboard and rank, so each of those is a value made on one channel and read on another.

What is reachable, as read

  • Through audio. A channel-scope layer on one channel can render a control-rate signal, a send carries it to another channel's sidechain input, and that channel's voices read it as kSharedSidechain (dsp/mod_source.h:84-89). That is a modulator crossing channels today, at audio rate and one sample late, as long as a layer can make the signal: a VA oscillator reaches a few hertz through its coarse range and a pivot only partly, and an LFO is not a layer output. A hack, and not a design.

The work, as a sketch

  • A control send: a channel publishes one or more of its shared sources (its channel LFOs, its highest held key, a macro) onto a control bus, and another channel names that bus as the value behind one of its own shared sources. The routing transaction already carries which input an edge lands in (fabric/routing.h); a control edge is a third kind, carrying a value a sample late the way the input buses do.
  • The cases above become: a channel LFO shared by reference (the PWM oscillators), a trigger source from another channel (the drum clock, once the envelope-trigger ticket #116's edge exists), and a key value from another channel (Solo's last key).

Open

  • Whether this is a fabric routing feature or a project-document feature with the fabric only carrying it.
  • Cycle rules: Compile refuses an audio cycle; a control cycle is harmless at one sample of delay and may be wanted.
bcox asked on 2026-10-05 for a ticket for each engine gap in his `moregaps.md` feature table that no existing ticket covers. Engine claims are from reading the tree at `f6aa8eba` on `main`. Instrument claims are from that day's research, read as OCR of Yamaha's owner's and service manuals by a research agent and not re-checked; the sources are listed in that document. **Nothing here is built, measured or listened to.** ## Summary Audio crosses channels through sends and the two input buses; control does not. Each channel's two LFOs are its own (`dsp/mod_source.h:113-125`), and nothing a voice reads comes from another channel. The GX-1 crosses control three ways: - Two PWM oscillators serve the whole instrument: one feeds every row-I card and the Solo card, the other every row-II card, across all its keyboards. - The Solo manual's sample-and-hold can be clocked by any of the rhythm unit's drum sounds. - The Upper keyboard's LFO speed can follow the last key played on Solo. In Tymbal's terms a GX-1 is several channels, one per keyboard and rank, so each of those is a value made on one channel and read on another. ## What is reachable, as read - Through audio. A channel-scope layer on one channel can render a control-rate signal, a send carries it to another channel's sidechain input, and that channel's voices read it as `kSharedSidechain` (`dsp/mod_source.h:84-89`). That is a modulator crossing channels today, at audio rate and one sample late, as long as a layer can make the signal: a VA oscillator reaches a few hertz through its coarse range and a pivot only partly, and an LFO is not a layer output. A hack, and not a design. ## The work, as a sketch - A control send: a channel publishes one or more of its shared sources (its channel LFOs, its highest held key, a macro) onto a control bus, and another channel names that bus as the value behind one of its own shared sources. The routing transaction already carries which input an edge lands in (`fabric/routing.h`); a control edge is a third kind, carrying a value a sample late the way the input buses do. - The cases above become: a channel LFO shared by reference (the PWM oscillators), a trigger source from another channel (the drum clock, once the envelope-trigger ticket #116's edge exists), and a key value from another channel (Solo's last key). ## Open - Whether this is a fabric routing feature or a project-document feature with the fabric only carrying it. - Cycle rules: `Compile` refuses an audio cycle; a control cycle is harmless at one sample of delay and may be wanted.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
bcox/tymbal#131
No description provided.