This repository has been archived by the owner. It is now read-only.
Experimental JACK MIDI sequencer/arpeggiator
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.




    * BoxySeq is something between sequencer and arpeggiator.

Core Concept

    * Use a window-manager-like window-placement-algorithm to generate pitch and velocity data for events.
    * Sequences events in real time.
    * Uses the JACK Audio Connection Kit MIDI API.
    * Each event sequenced is displayed as a coloured box which appears and then disappears.

Placement Algorithm

    * Behaviour based upon the Fluxbox Window Manager.
    * Row-Smart or Column-Smart placement
    * Left-to-Right or Right-to-Left placement
    * Top-to-Bottom or Bottom-to-top.
    * Fast implementation using an array combined with bit manipulation to store used/unused state of space in grid.
    * No placement made which causes overlap to occur.
    * Events dropped, discarded, tossed away, ignored, not sequenced if cannot be placed.

Event Pitch/Velocity Mapping to 2D Grid

    * Event does not have meaningful pitch/velocity data until placed by placement algorithm.
    * X coordinate maps to pitch.
    * Y coordinate maps to velocity.

Grid Dimension

    * MIDI pitch range is (integer) 0 to 127
    * MIDI velocity range is (integer) 0 to 127
    * Therefor the grid is 128 x 128 units.


    * A boundary is a box marking an area in the grid where events are to be placed.
    * Events can only be placed within a boundary.
    * Multiple boundaries may be used in a single grid.
    * Boundaries may overlap each other.
    * Boundaries that overlap each other does not causes events to overlap each other.
    * The options for the placement strategy are per boundary.


    * The pattern is the rhythmic sequence of events.
    * No event within the pattern holds meaningful pitch and velocity data.
    * The pattern defines minimum and maximum values for the width and height of the event boxes.
    * The pattern randomly generates the dimensions of the event boxes before outputting them.

MIDI Output

    * One voice per pitch per channel per MIDI port.

Where the potential for more than one voice per pitch per channel per MIDI port occurs, choose one of the following:

    * Utilize width of second event box to find a different pitch between X and X + Box Width, OR
    * Do not output any MIDI messages for the event, but still place the event, OR
    * Discard the event without outputting any MIDI messages and do not perform placement of it.

Routing I - BoxySeq Port Abstraction

    * The BoxySeq port abstraction sits between a pattern and boundary.
    * Via a port, a single pattern can output one or more boundaries.
    * Via a port, a single boundary can read input from one or more patterns.
    * Via a port, multiple patterns can output to multiple boundaries.
    * A port cannot read input or write output to any other BoxySeq port.

Routing II - BoxySeq MIDI Output Port Abstraction

    * The BoxySeq MIDI output port abstraction sits between a boundary and actual MIDI output.
    * Via the port, a single boundary can output to a single MIDI port and channel
    * Via the port, a single boundary can output to multiple MIDI ports and/or channels (TODO: output to multiple MIDI 
channels on the same port is probably unimplemented right now).

Routing III - Limitations

    * Routing implementation is limited.
    * Routing implementation is temporary.

Definitely Planned and Possibly Planned Features

    * See: