athenaCL Tutorial Manual: Third Edition, Version 2.0.0a15 | ||
---|---|---|
Prev | Chapter 4. Tutorial 4: Creating and Editing Textures | Next |
Rhythm ParameterObjects are ParameterObjects specialized for generating time and rhythm information. Many Rhythm ParameterObjects use Pulse object notations to define proportional rhythms and reference a Texture's dynamic bpm attribute. Other ParameterObjects are independent of bpm and can use raw timing information provided by one or more Generator ParameterObjects.
When using proportional rhythms, athenaCL uses Pulse objects. Pulses represent a ratio of duration in relation to the duration of beat (specified in BPM and obtained from the Texture). For details on Pulse notation, enter "help pulse":
Example 4-26. View Pulse and Rhythm help
pi{auto-muteHiConga}ti{b1} :: help pulse {topic,documentation} Pulse and Rhythm Pulses represent a duration value derived from ratio and a beat-duration. Beat duration is always obtained from a Texture. Pulses are noted as a list of three values: a divisor, a multiplier, and an accent. The divisor and multiplier must be positive integers greater than zero. Accent values must be between 0 and 1, where 0 is a measured silence and 1 is a fully sounding event. Accent values my alternatively be notated as + (for 1) and o (for 0). If a beat of a given duration is equal to a quarter note, a Pulse of (1,1,1) is a quarter note, equal in duration to a beat. A Pulse of (2,1,0) is an eighth-note rest: the beat is divided by two and then multiplied by one; the final zero designates a rest. A Pulse of (4,3,1) is a dotted eight note: the beat is divided by four (a sixteenth note) and then multiplied by three; the final one designates a sounding event. A Rhythm is designated as list of Pulses. For example: ((4,2,1), (4,2,1), (4,3,1)).
To edit the rhythms used by Texture b1, enter TIe followed by an "r" to access the rhythm attribute. As before, the user is presented with the current value, then prompted for a new value. In the following example, the ParameterObject "loop" is examined first with the TPv, then the active Texture is edited by providing an random walk over an expanded rhythm. Finally, the rhythm attribute of all Textures is viewed with TEv.
Example 4-27. Editing Rhythm ParameterObjects with TIe
pi{auto-muteHiConga}ti{b1} :: tpv loop Rhythm Generator ParameterObject {name,documentation} Loop loop, pulseList, selectionString Description: Deploys a fixed list of rhythms. Pulses are chosen from this list using the selector specified by the selectionString argument. Arguments: (1) name, (2) pulseList {a list of Pulse notations}, (3) selectionString {'randomChoice', 'randomWalk', 'randomPermutate', 'orderedCyclic', 'orderedCyclicRetrograde', 'orderedOscillate'} pi{auto-muteHiConga}ti{b1} :: tie command.py: raw args edit TI b1 which parameter? (i,t,b,r,p,f,o,a,n,x,s,d): r current rhythm: pulseTriple, (constant, 4), (basketGen, randomPermutate, (1,1,2,3)), (constant, 1), (constant, 0.75) new value: l, ((4,1,1),(4,1,1),(4,2,1),(4,3,1),(4,5,1),(4,3,1)), rw TI b1: parameter rhythm updated. pi{auto-muteHiConga}ti{b1} :: tev r compare parameters: rhythm {name,value,} a1 pulseTriple, (constant, 4), (basketGen, randomPermutate, (1,1,2,3)), (constant, 1), (constant, 0.75) b1 loop, ((4,1,+),(4,1,+),(4,2,+),(4,3,+),(4,5,+),(4,3,+)), randomWalk
Notice that, as with all ParameterObjects, abbreviations can be used for argument strings. The user need only enter the string "l" to select the "loop" RhythmObject, and "rw" to select the randomWalk selection method.
To edit Texture a1, the user must first make a1 the active texture with TIo. In the following example, the user applies a zero-order Markov chain to generate pulses. The user fist consults the documentation for ParameterObject markovPulse. For more information about Markov transition strings (Ariza 2006), enter "help markov". After selecting and editing the Texture, the Rhythms are compared with TEv:
Example 4-28. Editing Rhythm ParameterObjects with TIe
pi{auto-muteHiConga}ti{b1} :: tpv markovp Rhythm Generator ParameterObject {name,documentation} markovPulse markovPulse, transitionString, parameterObject Description: Produces Pulse sequences by means of a Markov transition string specification and a dynamic transition order generator. The Markov transition string must define symbols that specify valid Pulses. Markov transition order is specified by a ParameterObject that produces values between 0 and the maximum order available in the Markov transition string. If generated-orders are greater than those available, the largest available transition order will be used. Floating-point order values are treated as probabilistic weightings: for example, a transition of 1.5 offers equal probability of first or second order selection. Arguments: (1) name, (2) transitionString, (3) parameterObject {order value} pi{auto-muteHiConga}ti{b1} :: tio a1 TI a1 now active. pi{auto-muteHiConga}ti{a1} :: tie edit TI a1 which parameter? (i,t,b,r,p,f,o,a,n,x,s,d): r current rhythm: pulseTriple, (constant, 4), (basketGen, randomPermutate, (1,1,2,3)), (constant, 1), (constant, 0.75) new value: mp, a{8,1,1}b{4,3,1}c{4,2,1}d{4,5,1}:{a=1|b=3|c=4|d=7}, (c,0) TI a1: parameter rhythm updated. pi{auto-muteHiConga}ti{a1} :: tev r compare parameters: rhythm {name,value,} a1 markovPulse, a{8,1,1}b{4,3,1}c{4,2,1}d{4,5,1}:{a=1|b=3|c=4|d=7}, (constant, 0) b1 loop, ((4,1,+),(4,1,+),(4,2,+),(4,3,+),(4,5,+),(4,3,+)), randomWalk
In the previous example, the user supplies four Pulses; each pulses is weighted such that the shortest, (8,1,1), is the least frequent (weight of 1), and the longest, (4,5,1), is the most frequent (weight of 7).
Using ELn, the current collection of Textures can be used to create an EventList, and ELh may be used to audition the results. (For more information on using ELn, see Section 2.5.) Each time an EventList is created, different sequences of rhythms will be generated: for Texture a1, these rhythms will be the result of a zero-order Markov chain; for Texture b1, these rhythms will be the result of a random walk on an ordered list of Pulses.
A final alternation can be made to the metric performance of these Textures. Using the TEe command, both Texture's bpm attribute can be altered to cause a gradual accelerando from 120 BPM to 300 BPM. In the following example, the user applies a wavePowerUp ParameterObject to the bpm attribute of both Textures by using the TEe command with complete command-line arguments: