Skip to content
This repository has been archived by the owner on Jun 10, 2018. It is now read-only.

At A Glance

jwm-art-net edited this page Sep 14, 2010 · 3 revisions

BoxySeq

Classification

  • 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 × 128 units.

Boundaries

  • 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.

Pattern

  • 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