Tonnetz documentation

This commit is contained in:
2023-12-10 18:34:37 +02:00
parent 625b1acfb2
commit 8d30c34ef7

View File

@ -5,16 +5,203 @@ export const ziffers_tonnetz = (application: Editor): string => {
const makeExample = makeExampleFactory(application); const makeExample = makeExampleFactory(application);
return ` return `
# Tonnetz # Tonnetz
The Riemannian Tonnetz is a geometric representation of tonal relationships for applying mathematical operations to analyze harmonic and melodic relationships in tonal music. Ziffers includes an implementation of live coding tonnetz developed together with <a href="https://github.com/edelveart/TypeScriptTonnetz" target="_blank">Edgar Delgado Vega</a>. Live coding tonnetz implementation combines all transformations to new explorative notation that includes all of the traditional triad transformations (PLR functions), film music transformations and seventh transformations (PLRQ, PLR*, ST, etc.).
Tonnetz can be visualized as an <a href="https://numeric-tonnetz-ziffers-6f7c9299bb4e1292f6891b9aceba16d81409236.gitlab.io/" target="_blank">numeric lattice</a> that represents the twelve pitch classes of the chromatic scale. The numeric visualization is a fork of <a href="https://hal.science/hal-03250334/" target="_blank">Web tonnetz</a> by Corentin Guichaou et. al. The lattice can be arranged into multiple tonal pitch spaces which are all supported in Ziffers implementation.
TBD: Write summary about: HexaCycles, OctaCycles, EnneaCycles
* TBD ## Explorative notation
Ziffers implements explorative live coding notation that indexes all of the transformations for triad and seventh chords. For more detailed transformations see Triad and Tetra chapters.
Transformations are applied by grouping operations into a parameter string which applies the transformations to the chord. The parameter string is a sequence of transformations separated by whitespace, for example <ic>plr rl2 p3lr</ic>. The numbers after the characters defines the index for the operation, as there can be multiple operations of the same type.
Indexed transformations <ic>[plrfsntq][1-9]*</ic>:
* p: Parallel
* l: Leading
* r: Relative
* f: Film transformation
* n: Film transformation
* s: Film transformation
* h: Film transformation
* t: Film transformation
* q: PLR* transformation ?
### Examples:
${makeExample( ${makeExample(
"Triad transformations", "Explorative transformations with roman chords",
` `
z1('i').tonnetz("p l r").sound('wt_stereo') z1('i i7').tonnetz("p1 p2 plr2")
.adsr(0, .1, 0, 0).out()`, .sound('wt_stereo')
.adsr(0, .1, 0, 0)
.out()`,
true, true,
)} )}
${makeExample(
"Arpeggiated explorative transformations",
`
z1("i7")
.tonnetz("p l2 r3 rp4l")
.arpeggio("e _ 0 1 s ^ 0 2 1 3 h _ 012 s ^ 2 1")
.sound("sine")
.out()`,
true,
)}
${makeExample(
"Arpeggios and note lengths with parameters",
`
z1("024")
.tonnetz("p lr rp lrp")
.arpeggio(0,2,1,2)
.noteLength(1/16,1/8)
.sound("sine")
.out()`,
true,
)}
## Triad transformations
Triad transofrmations can be defined explicitly using the <ic>triadTonnetz(transformation: string, tonnetzSpace: number[])</ic> method. This method will only apply spesific transformations to triad chords.
* p
* l
* r
* f
* n
* s
* h
* t6
* p32
* p41
* lt13
* l41
* lt13
* l41
* rt23
* rt42
* q13
* q42
* n42
### Examples:
## Tetra transformations
Tetra transformations can be applied using the <ic>tetraTonnetz(transformation: string, tonnetzSpace: number[])</ic> method. This method will apply spesific transformations to certain type of chords. If the chord is not the correct type, the transformation will not be applied.
### 7: 7th chords
* p: p12, p14, p18, p19
* l: l13, l15, l71
* r: r12, rr19
* q: q15, qq51
* n: n51
### m7: minor 7th chords
* p: p12, p23, p26
* l: l42
* r: r12, r23, r42
* q: q62
### hdim7: Half diminished 7th chords
* p: p23, p35, p39
* l: l13
* r: r23, r35, r53, r63, rr35, rr39
* q: q43, qq38
### maj7: Major 7th chords
* p: p14, p47, p64
* l: l42
* r: r42
* q: q43
### dim7: Diminished 7th chords
* p: p35
* l: l15
* r: r35, r53
* q: q15, qq51
* n: n51
### minMaj7: Minor major 7th chords
* p: p26, p64
* r: r63, r76, r86
* q: q62, q76
### maj7aug5: Major 7th augmented 5th chords
* p: p47, p87
* l: l71
* r: r76
* q: q76
### dom7aug5: Dominant 7th augmented 5th chords
* p: p18, p87, p98
* l: l89
* r: r86, rr98
* q: qq38, qq98
### dom7b5: Dominant 7th flat 5th chords
* p: p19, p39, p98
* l: l89
* r: rr19, rr39, rr98
* q: qq98
### Examples:
## Cyclic methods
### Hexacycle
### Octacycle
### Enneacycle
* Examples:
${makeExample(
"Arpeggio with ennea cycle",
`
z1("0 2 -1 3")
.enneaCycle()
.arpeggio(0,2,1)
.scale("modimic")
.noteLength(0.15,0.05,0.05,0.25)
.sound("sine")
.adsr(0.1,0.15,0.25,0.1)
.out()`,
true,
)}
${makeExample(
"Variating arpeggios",
`
z1("s 0 3 2 1")
.enneaCycle()
.arpeggio([0,[0,2],[1,0],[0,1,2]].beat(0.15))
.sound("triangle")
.adsr(0.1,0.1,0.13,0.15)
.out()`,
true,
)}
## Regions
TBD: Implement and write about Weitzmann Regions, Boretz Regions, OctaTowers
`; `;
}; };