From 4ec0c664847ffd9f063824d565834261730690f4 Mon Sep 17 00:00:00 2001 From: Miika Alonen Date: Sat, 30 Dec 2023 14:31:30 +0200 Subject: [PATCH] More tonnetz transformation and documentation --- .../patterns/ziffers/ziffers_tonnetz.ts | 64 +++++++++++-------- 1 file changed, 38 insertions(+), 26 deletions(-) diff --git a/src/documentation/patterns/ziffers/ziffers_tonnetz.ts b/src/documentation/patterns/ziffers/ziffers_tonnetz.ts index ebc7a15..8318b7f 100644 --- a/src/documentation/patterns/ziffers/ziffers_tonnetz.ts +++ b/src/documentation/patterns/ziffers/ziffers_tonnetz.ts @@ -205,13 +205,11 @@ z1("1.0 047{10}") ## Cyclic methods -In addition to the transformations, Ziffers implements cyclic methods that can be used to cycle through the tonnetz space. Cyclic methods turns individual pitch classes to chords using the tonnetz. The cyclic methods are: +In addition to the traditional tonnetz transformations, Ziffers implements cyclic methods that can be used to cycle through the tonnetz space. Cyclic methods turns individual pitch classes to chords using the tonnetz. The cyclic methods are: * hexaCycle(tonnetz: number[], repeats: number = 3): Cycles through chords in the hexa cycle * octaCycle(tonnetz: number[], repeats: number = 4): Cycles through chords in the octa cycle * enneaCycle(tonnetz: number[], repeats: number = 3): Cycles through chords in the ennea cycle -* powerTowers(tonnetz: number[], repeats: number = 3): Cycles through chords using the Power Towers -* cubeDance(tonnetz: number[], repeats: number = 3): Cycles through chords in a Cube Dance **HexaCycles** are sequences of major and minor triads generated by the p and l transformations . Let's take the following example starting with a C chord: C -> Cm -> Ab -> Abm -> E -> Em. You can start on the chord of your choice. @@ -219,12 +217,6 @@ In addition to the transformations, Ziffers implements cyclic methods that can b Unlike HexaCycles and OctaCycles, **EnneaCycles** are four-note chord sequences. Considering the functions implemented for tetrachords in Ziffers, we can interpret these sequences as generated by p12, p23, and l13 transformations repeatedly: C7 -> Cm7 -> Cm7b5 -> Ab7 -> Abm7 -> Abm7b5 -> E7 -> Em7 -> Em7b5. -**Power Towers** use four-note chords (halfdim7, m7 and 7 ). The assembly chords are of type dim7. One of the many paths for succession has been chosen. - -**Cube Dance** is another graph that is built primarily with HexaCycles, except that it adds augmented triads as assemblers. As with Power Towers, one possible path has been selected. - -Both Cube Dance and Power Towers have many chords, so sometimes it will be convenient to slice up fragments of the cycles. Ziffers has some **Generative functions** (e.g., between(start, end)) that may be useful to you. - ### Examples: ${makeExample( @@ -253,20 +245,6 @@ z1("s 0 3 2 1") true, )} -${makeExample( - "Cube Dance swing", - ` - z1("0").cubeDance([3,4,5]).sound("sine").out()`, - true, - )} - -${makeExample( - "Power Towers with pulse", - ` - z1("2").powerTowers([2,3,7]).between(5,11).sound("sine").out()`, - true, - )} - ## Cycles with vitamins and repetitions Finally, cyclic methods in Ziffers can also be vitaminized with doses of different Tonnetz. However, this opens the way to different behavior with cycles. @@ -298,9 +276,9 @@ By default hexaCycles and enneaCycles have 3 repetitions, while octaCyc * Remark E: These cycles in Tonnetz [3, 4, 5] are implemented based on the work of [Douthett & Steinbach (1998, pp. 245-247, 253-256)](https://www.jstor.org/stable/843877) -## Traversing methods +## More traversing methods -In addition to the cyclic traversing methods, Ziffers implements methods based on different theories that traverse the chords in the Tonnetz in different ways. These methods are: +In addition to the cyclical traversing methods, Ziffers implements traversing methods that traverse the Tonnetz in different ways. These methods are: * powerTowers(tonnetz: number[], repeats: number = 3): Cycles trough chords using the power towers * cubeDance(tonnetz: number[], repeats: number = 3): Cycles trough chords in a cube dance @@ -308,7 +286,28 @@ In addition to the cyclic traversing methods, Ziffers implements methods based o * weitzmannRegions(tonnetz: number[]): Cycles trough chords in a Weitzmann region * boretzRegions(tonnetz: number[]): Cycles trough chords in a Boretz region -We encourage you to explore these methods and their different parameters. The tonnetz traversing methods can be used in combination with the Ziffers generative methods to sequence, arpeggiate and to randomize the chords in different ways. +**Power Towers** use four-note chords (halfdim7, m7 and 7 ). The assembly chords are of type dim7. One of the many paths for succession has been chosen. + +**Cube Dance** is another graph that is built primarily with HexaCycles, except that it adds augmented triads as assemblers. As with Power Towers, one possible path has been selected. + +**Octa Towers** TBD. + +**Weitzmann Regions** TBD. + +**Boretz Regions** TBD. + +Both Cube Dance and Power Towers have many chords, so sometimes it will be convenient to slice up fragments of the cycles. We encourage you to explore these methods and their different parameters. The tonnetz traversing methods can be used in combination with the Ziffers generative methods to sequence, arpeggiate and to randomize the chords in different ways. + +${makeExample( + "Cube Dance swing", + ` + z1("0").cubeDance([3,4,5]) + .sound("sine") + .ad(r(0.1,0.5),0.1) + .out() + `, + true, +)} ${makeExample( "Selecting subset of chords from the cube dance", @@ -324,6 +323,19 @@ ${makeExample( true )} +${makeExample( + "Power Towers with pulse", + ` + z1("1/4 2").powerTowers([2,3,7]) + .between(5,11) + .arpeggio("e 0 3 1 2") + .sound("sine") + .adsr(0.01,0.1,0.1,0.9) + .out() + `, + true, +)} + ${makeExample( "Selecting chords from the weitzmann region", `