Skip to content

Latest commit

 

History

History
132 lines (96 loc) · 3.79 KB

File metadata and controls

132 lines (96 loc) · 3.79 KB

Signal Chain Module

The Signal Chain module lets you build patchable chains of MIDI FX, an optional MIDI source, a sound generator, and audio FX.

Architecture

[Input or MIDI Source] -> [MIDI FX] -> [Sound Generator] -> [Audio FX] -> [Output]

Components live under src/modules/chain/:

  • midi_fx/: JavaScript MIDI effects registry and implementations
  • sound_generators/: Built-in generators (linein)
  • audio_fx/: Audio effects (freeverb)

Patch JSON files are stored in /data/UserData/move-anything/patches/ on the device.

Patch Format

Example:

{
    "name": "Chord Piano",
    "version": 1,
    "chain": {
        "input": "pads",
        "midi_source": {
            "module": "sequencer"
        },
        "midi_fx": {
            "chord": "major"
        },
        "synth": {
            "module": "sf2",
            "config": {
                "preset": 0
            }
        },
        "audio_fx": [
            {
                "type": "freeverb",
                "params": {
                    "room_size": 0.6,
                    "wet": 0.25,
                    "dry": 0.75
                }
            }
        ]
    }
}

Input Routing

input controls which MIDI sources the chain accepts:

  • pads: Move internal pads/controls only
  • external: external USB MIDI only
  • both/all: allow both sources

If no midi_source is specified, the chain uses input for MIDI as before.

MIDI FX

Native MIDI FX supported today:

  • Chord: major, minor, power, octave
  • Arp: up, down, up_down, random with arp_bpm and arp_division

JavaScript MIDI FX can be attached per patch using midi_fx_js:

"midi_fx_js": ["octave_up"]

Available JS MIDI FX live in midi_fx/ (see index.mjs for the registry).

Sound Generators

Sound generators can be built-in or external modules. Built-in: linein. External modules that work as chain sound generators include sf2, dexed, minijv, and obxd (plus any other module that is chainable with component_type: "sound_generator").

Audio FX

Audio FX are loaded by type. freeverb is included.

MIDI Source

Optional MIDI source modules can generate MIDI without external input.

Example:

{
    "chain": {
        "midi_source": {
            "module": "sequencer"
        }
    }
}

When a MIDI source is active, source-generated MIDI is routed into the chain, and external/pads input still follows the input filter.

MIDI sources can expose a full-screen UI inside the chain by providing ui_chain.js (or ui_chain in module.json to point to a different file). The file should set globalThis.chain_ui = { init, tick, onMidiMessageInternal, onMidiMessageExternal } and must not override globalThis.init/tick.

Chain will enter the source UI when a patch with a supported source loads. Press Back to return to the chain view, and Menu to re-enter the source UI.

Patch Browser Controls

  • Jog wheel: highlight patches
  • Jog click: load highlighted patch
  • Back: return to list (or exit source UI first)
  • Up/Down: octave transpose in patch view

Raw MIDI and Knob Touch

By default, the host filters knob-touch notes (0-9) from internal MIDI. To bypass this for Signal Chain, set "raw_midi": true in module.json.

External Module Presets

External modules can install chain presets into /data/UserData/move-anything/patches/ via their install scripts (for example Mini-JV and OB-Xd).

AI Assistance Disclaimer

This module is part of Move Everything and was developed with AI assistance, including Claude, Codex, and other AI assistants.

All architecture, implementation, and release decisions are reviewed by human maintainers.
AI-assisted content may still contain errors, so please validate functionality, security, and license compatibility before production use.