aboutsummaryrefslogtreecommitdiff
path: root/guile/starlet/midi-control
AgeCommit message (Collapse)Author
2023-06-15Get rid of old MIDI control stuffThomas White
2023-04-01Separate 'engine' and 'scanout'Thomas White
The new module "engine" contains everything to do with working out the final attribute values. This module should be referenced for anything that needs to register states, get values etc. Now, "scanout" is only about converting attribute values to DMX values and sending them to OLA. This module only needs to be referenced by fixture definitions, and once by the top level program.
2022-11-12Introduce new type for attribute namesThomas White
There's a serious problem with the design so far, where symbols are used for attribute names (intensity, strobe, colour etc), and also for attribute values (on, off, random etc). There's no way for 'at' to tell the difference between the two. For example, this form is ambiguous: (at myfixture 'strobe 'on) This commit introduces a new class, <starlet-attribute>, to replace the use of symbols here. The attributes are enumerated in (starlet attributes), and new ones can be added later. The attribute objects remember their 'canonical' names, to allow states to be printed. Apart from solving the ambiguity problem, this has two further advantages. First, attribute names no longer need to be quoted everywhere. Second, multiple names can be used to refer to the same attribute. For example: (define color colour).
2022-10-30MIDI control: Set go button LED on startupThomas White
Previously, the LED would not be lit until the first playback event (go/back etc) after startup.
2022-10-30Add find-midi-deviceThomas White
2022-07-17Improve the syntax of "set-midi-control-map!"Thomas White
This replaces the mess of "list" forms: (set-midi-control-map! controller (list (list 'intensity 'fader 16 '(108 72)) ...)) With something a bit clearer: (set-midi-control-map! controller (fader 16 'intensity #:congruent 108 #:incongruent 72) ...) There's a corresponding improvement in the internal code.
2022-07-10Don't send fix/attr/val to state update hookThomas White
It's not used anywhere, and it doesn't work - there are many other kinds of update apart from setting an individual value.
2022-06-11MIDI control: pull entire colour into programmer stateThomas White
This prevents the other colour channels from getting messed up, when an individual channel is changed via the controller.
2022-06-02Debounce "go" button on MIDI controllerThomas White
2021-10-23Handle controller=#f in 'set-midi-control-map!'Thomas White
2021-10-19Replace partial application functions with SRFI-26 "cut"Thomas White
2021-09-12Variable sensitivity for jogwheelsThomas White
Use make-sensitivity-knob
2021-09-11Re-assert MIDI control map on parameter changeThomas White
This makes the MIDI controller stay in sync with the programmer state values. It's kind of a coarse solution, though. It would be better to: 1. Only re-assert the map if the changed parameter currently appears on the MIDI control surface 2. Only re-assert the part of the map related to the parameter Almost as a side-effect, this enables switching between multiple control maps. Just call 'set-midi-control-map!' on the controller with the new map.
2021-08-08Add hook for state updatesThomas White
This includes a "source", intended to be used for avoiding hook users from responding to their own changes.
2021-08-08Make each MIDI controller into its own objectThomas White
2021-06-26Remove tnow parameter from current-valueThomas White
2021-05-24Indicate when stop button can be pressedThomas White
2021-05-22Handle LED via select-on-buttonThomas White
2021-05-22Indicate playback paused via LEDsThomas White
2021-05-22send-note-on/off: Handle #f argumentThomas White
2021-05-22Add make-back-buttonThomas White
2021-05-16Get rid of time parameter and use clock objects for cross-fadesThomas White
Because we can stop a clock object, but not "gettimeofday".
2021-05-12Trigger apply-fader when fader crosses its original valueThomas White
This fixes a problem whereby lights couldn't be turned off via the fader
2021-05-10Split 'base' module up into 'fixture', 'state' and 'scanout'Thomas White
2021-05-06Add GPL boilerplate everywhereThomas White
2021-05-06Slow down MIDI transmisisonsThomas White
My control surface (A&H Xone:K2) seems to respond badly to being blasted with note on/off events to turn its LEDs on and off: some of the LEDs end up in the wrong state. The effect is reproducible using a small test program using the ALSA API from C, which excludes multi-threading problems in Starlet and buffer overruns in the ALSA device. The controller simply doesn't cope well with large numbers of events arriving in quick succession. Adding a very small delay seems to completely fix the problem without causing any noticable flicker.
2021-04-18Update MIDI buttonsThomas White
2021-04-18Use individual CMY channels in MIDI control mapThomas White
2021-04-18Special case colour components for MIDI fadersThomas White
2021-04-05When using jogwheel control, clamp values to end of rangeThomas White
2021-04-04Add the ability to make certain states uniqueThomas White
This allows easy re-assignment of faders with state-on-fader
2021-04-04New state-on-faderThomas White
2021-04-03New state-on-faderThomas White
2021-04-03Fix sel/at (again)Thomas White
2021-04-02Replace merging of states with search through list of statesThomas White
This is LOADS faster.
2021-03-08enqueue-midi-bytes: Actually enqueue, rather than waiting for empty queueThomas White
This avoids a deadlock if the midi readout isn't happening for some reason.
2021-03-08Remove home state and abolish fixture-attribute use in statesThomas White
The "home state" has no reason to exist. The home values are already stored perfectly well in the attribute lists of the fixtures. Any time we need to look up a home value, we already have the fixture itself available. This also gets rid of any use of <fixture-attribute> in states. This was confusing me. Better to just pass symbols around and only get the real attribute objects when needed (which isn't very often).
2021-03-02Refuse to start MIDI control twiceThomas White
2021-02-25Gracefully handle unavailable MIDI control deviceThomas White
2021-02-21Make MIDI callbacks (optionally) uniqueThomas White
2021-01-30Move useful stuff to utilsThomas White
2021-01-26Move "sel" to base, and add a callbackThomas White
2021-01-26New, scaled approach to MIDI fadersThomas White
2021-01-25FormattingThomas White
2021-01-19Rename "on-fader" to "state-on-fader"Thomas White
More specific name.
2021-01-19on-fader: Soft pickupThomas White
This is a bit nasty, because we might not know what value the fader was at before it was moved.
2021-01-19sel: Handle listsThomas White
2021-01-19Implement selection of multiple fixtures at onceThomas White
2021-01-15Remove selection-stateThomas White
There's no reason for this to exist. Just change things directly in programmer-state.
2021-01-09Add select-on-buttonThomas White