Skip to content

Add DMX scenes: drag presets onto the events of the master deck - #39

Merged
strikeout merged 1 commit into
mainfrom
basseterre/dmx-scenes
Oct 27, 2026
Merged

strikeout merged 1 commit into
mainfrom
basseterre/dmx-scenes

Conversation

@strikeout

Copy link
Copy Markdown
Owner

Summary

The DMX Scenes panel assigns the presets of a DMX controller to events of the master deck. Each preset is a MIDI note. The user drags a preset onto a row.

  • The rows are in four groups: Phrases, Rhythm, Transport and Mixer. The firmware has no mixer data, so the page hides the Mixer rows there.
  • The phrase rows use six buckets of the rekordbox phrases: Intro, Groove, Build, Drop, Break and Outro. The page names the phrases below the waveforms with the same buckets.
  • A row with more presets steps through them. It steps on each trigger or after a number of bars, in the order up, ping-pong or random.
  • A row sends a pulse, holds the note, or sends a flash with a decay in milliseconds or in beats.
  • The page blinks the title of a row when its event occurs. It shows the cell of the current phrase and the last preset of each row in yellow.
  • The user can add extra notes outside the preset range.
  • The scene setting "One preset at a time" (default on) is for a controller with one preset at a time. With it, no note off comes after a newer note on, and the held scene comes back after an overlay.
  • The new MIDI setting "Note Off Velocity 0" (index 33, default on) sends each note off as a note on with velocity 0. A DMX controller ignored the 0x80 note off. The test of a preset always uses 0x80.

The engine is in autoblink-core-midi (scenes.rs). The host and the firmware use it. The host writes the scenes to scenes.json next to the config file. The firmware keeps them in NVS. The firmware accepts a page from localhost, so that a page change needs no flash (AGENTS.md, section "Web page without a flash").

The version changes from 1.22.2 to 1.23.0.

Test

  • sh scripts/check.sh --esp32 passes: format, clippy, tests and the two firmware builds.
  • The engine has unit tests for the steps, the gates, the overlay priority and the note-off order.
  • The firmware runs on the box with a DMX controller. Live playback with real decks did not occur yet.

The DMX Scenes panel of the page assigns the presets of a DMX controller
to events. Each preset is a MIDI note. The user drags a preset onto a row.

- The rows are in four groups: Phrases, Rhythm, Transport and Mixer.
- The phrase rows use six buckets of the rekordbox phrases: Intro, Groove,
  Build, Drop, Break and Outro.
- A row with more presets steps through them. It steps on each trigger or
  after a number of bars, in the order up, ping-pong or random.
- A row sends a pulse, holds the note, or sends a flash with a decay in
  milliseconds or in beats.
- The page blinks the title of a row when its event occurs. It shows the
  cell of the current phrase and the last preset of each row.
- Extra notes outside the preset range are available.
- The setting "One preset at a time" (default on) is for a controller that
  shows one preset at a time. With it, no note off comes after a newer
  note on, and the held scene comes back after an overlay.

The shared crate autoblink-core-midi holds the engine (scenes.rs). The host
writes the scenes to scenes.json next to the config file. The firmware
keeps them in NVS.

The new MIDI setting "Note Off Velocity 0" (index 33, default on) sends
each note off as a note on with velocity 0. A DMX controller ignored the
0x80 note off and kept the light on.

The page names the phrases below the waveforms with the buckets. The
firmware accepts a page from localhost, so that a page change needs no
flash.
@strikeout
strikeout merged commit 5b6f230 into main Oct 27, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant