STRUCTURE AND INTERPRETATION OF MUSIC CONCEPTS ============================================== CHAPTER-3 -- TEMPORAL STRUCTURES, TEMPORAL PROCESSES, RHYTHM CONCEPTS ======================================================================== Homework no. 3 Due: Jan 1, 03 Please demonstrate every procedure that you construct. 1. The temporal structure constructors already implemented in chapter Piece-process-3 use "lazy constructors". That is, the constructors just combine the component temporal-structures and their associated time-intervals into a new composite value. Alternatively, we could implement "eager constructors": constructors that optimize the constructed value and compute its properties. For example: * The composite TS constructor (cts) could sort the components either by the scheduling time-intervals (the ti-s), or by the ti + duration(ts). * The constructor can shift all time-intervals so that at least one time-interval is (time 0) (there is no "vacuum" between the (time 0) of the composite temporal-structure and the time point where the first temporal-structure is scheduled). * Moreover, a constructed TS could compute once and for all its duration and its process. Implement eager constructors for the Composite-TS and the Relative-TS temporal structures. Use these constructors for optimized implementations for the simultaneous and the sequential temporal structures. Demonstrate the advantages of the optimized implementation. 2. The Process implementation in chapter Piece-process-3 imitates the hierarchical construction of temporal structures. That is, the process associated with a composite temporal structure of some kind is constructed from the processes of its components. Instead, we could have only a single kind of "flat" process: A time procedure with multiple scheduled play-notes: (lambda(tp)() For that purpose we need a procedure flatten-cts (flatten-rel-cts) that flattens a composite-temporal-structure (or rel-cts) into a cts (or rel-cts) whose components are atomic (play-note can be applied to them, either directly or following a ->note transformation. Discuss: Is there a need for hierarchical processes? 3. Use the Composite-TS (or Rel-TS) constructors for an n-depth round temporal-structure. That is: depth 0: ts depth 1: cts(ts ti ts) depth 2: cts( cts(ts ti ts) 2ti cts(ts ti ts)) depth 3: cts( cts( cts(ts ti ts) 2ti cts(ts ti ts)) 4ti cts( cts(ts ti ts) 2ti cts(ts ti ts))) ... depth n: cts( 2^(n-1)*ti ) 4. RHYTHM (section 3.3). A Rhythm is a temporal pattern associated with a rhythm tree, whose front is admitted by the temporal pattern. A METERED-RHYTHM is a rhythm associated with a meter (a relative-time-interval). The depth-1 nodes in the tree are labeled by the meter (each depth-1 node stands for a measure). The meter imposes a beat periodic structure on the rhythm. Standard meters have known beat patterns, with a scale of beat emphasis. There are strong beats, weak beats, weakest beats. They are described in the notes given by Dalia. a. The combination of: * A metered-rhythm. * A metronom. * A sequence of temporal-structures. can yield a new temporal-structure: 1. The metered-rhythm + metronom yields a sequence of (real) time-intervals. The sequence should be associated with measure-beat-based access tools: * Find the time-point occurring on beat i in measure j. * Find the sequence-element occurring on beat i in measure j (if any). * Find the measure-beat of a sequence element. 2. The Relative-TS type can be provided with another constructor, that takes a sequence of time-intervals and a sequence of temporal-structures as parameters. Note: The time-interval sequence that results from the metered-rhythm does not include the (time 0) onset of the first temporal-structure in the sequence. Construct the metered-rhythm->rel-cts constructor, and the associated tools. b. A metered-rhythm is classified as stable/unstable if time-intervals that fall on strong beats are longer than others. Construct a metered-rhythm constructor that takes a stable/unstable characterization and constructs an appropriate rhythm. c. A metered-rhythm can be annotated with the intended speed characterization: fast (vivace), slow (andante), very-slow (largo), etc. The speed characterization implies certain metronom values that must be used in turning the rhythm into a (real) temporal structure. Extend the metered-rhythm->rel-cts constructor from (a) to take an 'attributed-metered-rhythm' as a parameter. If the metered-rhythm has a speed attribute, every realization of the rhythm into a time structures restricts the metronom according to the speed characterization.