Merge pull request #119 from edelveart/tonnetz-docs
docs(tonnetz): adds specification on graph components
This commit is contained in:
@ -221,11 +221,13 @@ z1("1.0 047{10}")
|
||||
|
||||
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:
|
||||
|
||||
* <ic>hexaCycle(tonnetz: number[], repeats: number = 3)</ic>: Cycles through chords in the hexa cycle
|
||||
* <ic>octaCycle(tonnetz: number[], repeats: number = 4)</ic>: Cycles through chords in the octa cycle
|
||||
* <ic>enneaCycle(tonnetz: number[], repeats: number = 3)</ic>: Cycles through chords in the ennea cycle
|
||||
* <ic>hexaCycle(tonnetz: number[], repeats: number = 3, components: number = 1)</ic>: Cycles through chords via hexatonic cycles
|
||||
* <ic>octaCycle(tonnetz: number[], repeats: number = 4, components: number = 1)</ic>: Cycles through chords via octatonic cycles
|
||||
* <ic>enneaCycle(tonnetz: number[], repeats: number = 3, components: number = 1)</ic>: Cycles through chords via enneatonic cycles
|
||||
|
||||
**HexaCycles** are sequences of major and minor triads generated by the <ic>p</ic> and <ic>l</ic> transformations . Let's take the following example starting with a <ic>C</ic> chord: <ic>C -> Cm -> Ab -> Abm -> E -> Em</ic>. You can start on the chord of your choice.
|
||||
:warning: By default, the number of graph <ic>components</ic> is set to <ic>1</ic>. Therefore, these methods produce a single hexatonic, octatonic, and enneatonic cycle, respectively. OctaTowers were implemented in the same way, so it generates a single octatonic tower. Try increasing the number of components to obtain different graphs.
|
||||
|
||||
**HexaCycles** are sequences of major and minor triads generated by the <ic>p</ic> and <ic>l</ic> transformations. Let's take the following example starting with a <ic>C</ic> chord: <ic>C -> Cm -> Ab -> Abm -> E -> Em</ic>. You can start on the chord of your choice.
|
||||
|
||||
**OctaCycles** are sequences of major and minor triads generated using <ic>p</ic> and <ic>r</ic> transformations. Starting at <ic>C</ic>, we have the following sequence: <ic>C -> Cm -> Eb -> Ebm -> F# -> F#m -> A -> Am</ic>.
|
||||
|
||||
@ -234,7 +236,7 @@ Unlike HexaCycles and OctaCycles, **EnneaCycles** are four-note chord sequences.
|
||||
### Examples:
|
||||
|
||||
${makeExample(
|
||||
"Arpeggio with ennea cycle",
|
||||
"Arpeggio with ennea cycle",
|
||||
`
|
||||
z1("0 2 -1 3")
|
||||
.enneaCycle()
|
||||
@ -248,7 +250,7 @@ z1("0 2 -1 3")
|
||||
)}
|
||||
|
||||
${makeExample(
|
||||
"Variating arpeggios",
|
||||
"Variating arpeggios",
|
||||
`
|
||||
z1("s 0 3 2 1")
|
||||
.octaCycle()
|
||||
@ -276,15 +278,15 @@ As you can verify it manually, you will see that this is not the case. Upon reac
|
||||
To play the chords without jumps in our hexaCycle (although the prefix "hexa" would no longer have a precise meaning), we add a number of repetitions.
|
||||
|
||||
${makeExample(
|
||||
"HexaCycles with vitamins",
|
||||
`
|
||||
"HexaCycles with vitamins",
|
||||
`
|
||||
z1("0")
|
||||
.scale("chromatic")
|
||||
.hexaCycle([2,3,7],4)
|
||||
.sound("sine").out()
|
||||
`,
|
||||
true
|
||||
)}
|
||||
true
|
||||
)}
|
||||
|
||||
By default hexaCycles and enneaCycles have <ic>3</ic> repetitions, while octaCycles has <ic>4</ic> repetitions. We have specified a **chromatic scale** although this is the **default scale**. Try changing the **repeats and scales** when playing with different Tonnetz.
|
||||
|
||||
@ -296,7 +298,7 @@ In addition to the cyclical traversing methods, Ziffers implements traversing me
|
||||
|
||||
* <ic>weitzmannRegions(tonnetz: number[])</ic>: Cycles through chords in a Weitzmann region
|
||||
* <ic>boretzRegions(tonnetz: number[])</ic>: Cycles through chords in a Boretz region
|
||||
* <ic>octaTowers(tonnetz: number[], repeats: number = 3)</ic>: Cycles through chords using the octaTowers
|
||||
* <ic>octaTowers(tonnetz: number[], repeats: number = 3, components: number = 1)</ic>: Cycles through chords using the octaTowers
|
||||
* <ic>cubeDance(tonnetz: number[], repeats: number = 3)</ic>: Cycles through chords in a Cube Dance
|
||||
* <ic>powerTowers(tonnetz: number[], repeats: number = 3)</ic>: Cycles through chords using the Power Towers
|
||||
|
||||
@ -304,28 +306,28 @@ In addition to the cyclical traversing methods, Ziffers implements traversing me
|
||||
|
||||
**Boretz Regions** is the four-note analogue of the Weitzmann regions. Richard Cohn draws them in **Boretz Spiders**, a graph consisting of 8 feet between 7th and half-diminished 7th chords. The body (prosoma-opisthosoma) is a <ic>dim7</ic> chord, related to the others by a semitonal movement.
|
||||
|
||||
**OctaTowers** is a graph composed of **12** chords, whose types are <ic>halfdim7, m7 and 7</ic>. A reading from left to right in an ascending diagonal has been chosen.
|
||||
**OctaTowers** generates a graph composed of **12** chords, whose types are <ic>halfdim7, m7 and 7</ic>. A reading from left to right in an ascending diagonal has been chosen. Note that changing the number of components to <ic>3</ic> will obtain the complete graph (**36** chords).
|
||||
|
||||
**Cube Dance** is another graph of **28** chords that is built primarily with HexaCycles, except that it adds <ic>augmented</ic> triads as assemblers. As with Power Towers, one possible path has been selected.
|
||||
**Cube Dance** is another graph of **28** chords that is built primarily with HexaCycles (4 hexatonic cycles), except that it adds <ic>augmented</ic> triads as assemblers. As with Power Towers, one possible path has been selected.
|
||||
|
||||
**Power Towers** use **39** four-note chords (<ic>halfdim7, m7 and 7</ic>). As you can notice, it is composed of 3 OctaTowers assembled by <ic>dim7</ic> type chords. One of the many paths for succession has been chosen.
|
||||
**Power Towers** use **39** four-note chords (<ic>halfdim7, m7 and 7</ic>). As you can notice, it is composed of OctaTowers (3 octatonic towers) assembled by <ic>dim7</ic> type chords. One of the many paths for succession has been chosen.
|
||||
|
||||
As you have noticed, all these graphs usually 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",
|
||||
`
|
||||
"Cube Dance swing",
|
||||
`
|
||||
z1("0").cubeDance([3,4,5])
|
||||
.sound("sine")
|
||||
.ad(r(0.1,0.5),0.1)
|
||||
.out()
|
||||
`,
|
||||
true,
|
||||
)}
|
||||
true,
|
||||
)}
|
||||
|
||||
${makeExample(
|
||||
"Selecting subset of chords from the cube dance",
|
||||
`
|
||||
"Selecting subset of chords from the cube dance",
|
||||
`
|
||||
z1("1/2 0")
|
||||
.cubeDance([3,4,5],4)
|
||||
.at(0,8,2,rI(9,14))
|
||||
@ -334,12 +336,12 @@ z1("1/2 0")
|
||||
.delay(2)
|
||||
.out()
|
||||
`,
|
||||
true
|
||||
)}
|
||||
true
|
||||
)}
|
||||
|
||||
${makeExample(
|
||||
"Power Towers with pulse",
|
||||
`
|
||||
"Power Towers with pulse",
|
||||
`
|
||||
z1("1/4 2").powerTowers([2,3,7])
|
||||
.between(5,11)
|
||||
.arpeggio("e 0 3 1 2")
|
||||
@ -347,26 +349,26 @@ z1("1/4 2").powerTowers([2,3,7])
|
||||
.adsr(0.01,0.1,0.1,0.9)
|
||||
.out()
|
||||
`,
|
||||
true,
|
||||
)}
|
||||
true,
|
||||
)}
|
||||
|
||||
${makeExample(
|
||||
"Between an OctaTower",
|
||||
`
|
||||
"Between an OctaTower",
|
||||
`
|
||||
z1("s. 0")
|
||||
.octaTowers()
|
||||
.octaTower()
|
||||
.between(2,8)
|
||||
.arpeggio(3,2,1,rI(1,5))
|
||||
.sound("sawtooth")
|
||||
.adsr(0.1,0.15,0,0.1)
|
||||
.out()
|
||||
`,
|
||||
true
|
||||
)}
|
||||
true
|
||||
)}
|
||||
|
||||
${makeExample(
|
||||
"Selecting chords from the weitzmann region",
|
||||
`
|
||||
"Selecting chords from the weitzmann region",
|
||||
`
|
||||
z1("1/8 0")
|
||||
.weitzmannRegions()
|
||||
.at(1,rI(0,7),4,6)
|
||||
@ -375,12 +377,12 @@ z1("1/8 0")
|
||||
.ad(0.15,0.15)
|
||||
.out()
|
||||
`,
|
||||
true
|
||||
)}
|
||||
true
|
||||
)}
|
||||
|
||||
${makeExample(
|
||||
"Boretz Spider",
|
||||
`
|
||||
"Boretz Spider",
|
||||
`
|
||||
z1("1/16 0")
|
||||
.boretzRegions([1,4,7])
|
||||
.at(2,rI(3,7),4,6)
|
||||
@ -389,8 +391,8 @@ z1("1/16 0")
|
||||
.adsr(0.1,0.1,0.1,0.2)
|
||||
.out()
|
||||
`,
|
||||
true
|
||||
)}
|
||||
true
|
||||
)}
|
||||
|
||||
* Remark F: You can find more details about Weitzmann and Boretz regions in chapters 4 and 7 of Richard Cohn's book [Audacious Euphony: Chromatic Harmony and the Triad's Second Nature (2012)](https://books.google.com.pe/books?id=rZxZCMRiO9EC&pg=PA59&hl=es&source=gbs_toc_r&cad=2#v=onepage&q&f=false).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user