This repository has been archived by the owner. It is now read-only.
Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
Experimental JACK MIDI sequencer/arpeggiator
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Type||Name||Latest commit message||Commit time|
|Failed to load latest commit information.|
From: http://wiki.github.com/jwm-art-net/BoxySeq/at-a-glance 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 x 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 * See: http://wiki.github.com/jwm-art-net/BoxySeq/