Prop is a tiny rhythmic notation language based on proportions. Prop can be used to elegantly and succintly express rhythmic patterns that would otherwise be very complicated to notate in western music notation.
The original implementation of Prop was written in 2014 as a standalone program using Flex/Bison, with the intent generate Csound scores. Later, it was rewritten as a Soundpipe module to generate triggers.
Events are things that happen in time. In prop, only one event can happen at a time.
The basic events of time are triggers (+) and rests (-):
By default, events have a musical duration of a quarter note. These durations can be changed through the use of rhythmic operations.
The duration of an event can be reduced by a factor of N when the events are contained in parenthesis following the number N:
In the example above, there are three trigger events, where the last two events are half the duration of first event. One musical interpretation of this rhythmic figure could be a quarter note, followed by two eigth notes.
Rhythms can be nested inside other rhythms:
Inside the duple rhythm, there is an event followed by a triplet rhythm. The triplet rhythm further reduces the duration of the events inside of it by a factor of 3.
Rhythmic modifiers must be whole number positive integers, but they need not be traditional factors of 2:
There is no restriction on how many events can be inside a rhythmic modifier (although there is a maximum level of depths):
Rhythmic durations can also be increased using brackets instead of parenthesis:
Probability is a more recent feature to the Prop language. They exist in the form of maybe events, slices, and sets. These can be combined together to create very compelling generative rhythms.
Maybe events (?) are events that have a 50% percent chance of triggering:
Slices allow prop to hold multiple rhythmic figures. At the beginning of every loop, prop chooses one of the slices at random to perform. Slices use the pipe (|) as a delimiter:
Sets group up chunks of prop code. They are a very powerful way to create complex patterns. Sets can be sliced up, which allow rhythmic segements to be chosen and random. Sets can also be nested: