TS-Tonnetz is a library of transformations, graphs, and cycles from Mathematical Music Theory, enabling the creation, manipulation, and analysis of musical structures across various Tonnetz spaces.
Currently Integrated in Topos
TS-Tonnetz is now integrated into the Topos live coding environment, where you can try it out and explore its features directly.
It emerged as a development branch in late 2023 to contribute to Miika Alonen's phenomenal ZifferJS project.
Backed by two doctoral theses and additional research articles, TS-Tonnetz offers a powerful set of tools for exploring musical operations within various Tonnetz spaces. Its focus is on the application of these tools for algorithmic composition and live coding, rather than musicological analysis.
npm i ts-tonnetz
Transformations follow the edge flip between triangles and their geometries (so far), maintaining two common notes (not necessarily considering voice-leading). In other words, different Tonnetz spaces adhere to the voice-leading space geometry of the conventional Tonnetz.
- PRL functions and compositions of any length
- Film music transformations:
f(), n(), s(), h(), t6()
- Cardinal transformations
- Cube Dance
- OctaTowers
- Power Towers
- Weitzmann Regions, Boretz Regions
- HexaCycles, OctaCycles, EnneaCycles
- Hamiltonian Cycles
Mathematical inspiration (Trajectoires
) in the Doctoral thesis written by Louis Bigo:
Représentations symboliques musicales et calcul spatial (2013).
We have implemented all the Neo-Riemannian functions developed in the Doctoral thesis written by Sonia Cannas:
Geometric Representation and Algebraic Formalization of Musical Structures (2018).
Each of these new transformations from the generalized transformational theory for seventh chords is enabled for the Tonnetz you want to explore.
-
p12, p14, p23, p35
-
r12, r23, r42, r35, r53
-
l13, l15, l42
-
q43, q15, rr35, qq51, n51
Includes more types of seventh chords and their transformations between them.
-
p18, p19, p26, p39, p47, p64, p87, p98
-
r63, r76, r86, l71, l89, q62, q76
-
rr19, rr39, rr98, qq38, qq98
Transformations with augmented and diminished triads.
-
p, r, l, p32, p41, lt13, l41, l14, rt23, rt42, q13, q42, n42
Transformations between triad chords and different types of seventh chords. The groups PLRQ
and PLR*
must be included.
-
p1M, l1d, p2m, r2M, p3d, r3m, p4M, l4m, p5d, r5d, rr5d, z5d
Mathematical inspiration in the paper:
A Generalized Dual of the Tonnetz for Seventh Chords:
Mathematical, Computational and Compositional Aspects
(Sonia Cannas and Moreno Andreatta, 2018).
Generalized implementation on any Tonnetz of the harmonic groups of axis system ideaded by Ernő Lendvai: Tonic (8 chords), Subdominant (8 chords), and Dominant (8 chords). The parameters specify two directions, sought emotion (based on the ideas of Mauro de Maria), cross or diagonal movement. Major-minor and minor-major alternation available for cross path.
The manipulation can be done using a single function:
genCardinalPoints()
Groups with chord roots separated by major thirds (which we will call triangular) are also added.
genTriangularPoints()
We added six new graphs generalized inspired by the idea of cardinal points (extension of the axial system) for film music by Mauro de Maria. These graphs link the groups of cardinal points with the groups of three chords.
Each graph can be manipulated from a single function:
genCardinalTriangularGraph()
- New features (
feat: <...>
) - Fix errors and bugs (
fix: <...>
) - Refactor (
refactor: <...>
) - Testing (
test: <...>
) - Documentation (
docs: <...>
)