This repository has been archived by the owner on Jun 10, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
README
88 lines (59 loc) · 3.43 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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/