Music compositional tools inspired by the techniques of [Claude Vivier].
"Agni" is a character from Vivier's opera Kopernikus:
The main character is Agni; mystical beings borrowed from stories (represented by the other six singers) gravitate around her: Lewis Carroll, Merlin, a witch, the Queen of the Night, a blind prophet, an old monk, Tristan and Isolde, Mozart, the Master of the Waters, Copernicus and his mother. These characters could be Agni’s dreams that follow her during her initiation and finally into her dematerialization.
- Claude Vivier
To install the app, run:
./install-dependencies \
&& just install --app
Then run the app with:
agni
The concept of a "Combination-Tone Matrix" comes from Bryan Christian's article, "Combination-Tone Class Sets and Redefining the Role of les Couleurs in Claude Vivier’s Bouchara".
Generate a single matrix for a bass frequency of 98 Hz and melody of 440 Hz:
> agni matrix 98 440
Combination-Tone Matrix (Hertz)
0 x melody 1 x melody 2 x melody 3 x melody
0 x bass 440.0 880.0 1,320.0
1 x bass 98.0 538.0 978.0 1,418.0
2 x bass 196.0 636.0 1,076.0 1,516.0
3 x bass 294.0 734.0 1,174.0 1,614.0
By default, numeric input is assumed to be in Hertz, and the output will be displayed in the same format as the input. Specify the "pitch type" explicitly to change the output format to something dfferent:
> agni matrix 98 440 --pitch-type lilypond
Combination-Tone Matrix (Lilypond)
0 x melody 1 x melody 2 x melody 3 x melody
0 x bass a' a'' e'''
1 x bass g, cqs'' b'' f'''
2 x bass g eqf'' cqs''' gqf'''
3 x bass d' fs'' d''' gqs'''
The output can also be shown in various forms. For example, you can display the pitches as a "list," which makes it easy to copy the output into a LilyPond document:
> agni matrix g, "a'" --display-format list
g, g d' a' cqs'' eqf'' fs'' a'' b'' cqs''' d''' e''' f''' gqf''' gqs'''
You can also display pitches stacked as a "chord." Here is the same matrix, using midi number input, shown stacked as a chord:
> agni matrix 43 69 --midi-input --display-format chord
Combination-Tone Matrix (Midi)
(3 x bass) + (3 x melody) = 91.5
(2 x bass) + (3 x melody) = 90.5
(1 x bass) + (3 x melody) = 89.5
(0 x bass) + (3 x melody) = 88.0
(3 x bass) + (2 x melody) = 86.0
(2 x bass) + (2 x melody) = 84.5
(1 x bass) + (2 x melody) = 83.0
(0 x bass) + (2 x melody) = 81.0
(3 x bass) + (1 x melody) = 78.0
(2 x bass) + (1 x melody) = 75.5
(1 x bass) + (1 x melody) = 72.5
(0 x bass) + (1 x melody) = 69.0
(3 x bass) + (0 x melody) = 62.0
(2 x bass) + (0 x melody) = 55.0
(1 x bass) + (0 x melody) = 43.0
You can also control the tuning quantization and number of multiples. Here is the same matrix quantized to equal temperament, calculated up to only 3 multiples:
> agni matrix 98 440 --tuning equal-tempered --multiples 3
Combination-Tone Matrix (Hertz)
0 x melody 1 x melody 2 x melody
0 x bass 440 880
1 x bass 98 538 978
2 x bass 196 636 1,076
An entire passage can be processed and matrices or harmonized scores can be output to PDF via LilyPond.
Abjad's LilyPondParser does not support all of LilyPond's syntax. Please see Abjad's documentation for supported syntax that can be used in input files.
Vivier's Lonely Child is provided as an example.
To compile the input score, generate matrices and harmonized score, and open PDFs:
# ./install-dependencies && \
just example # --help
Justfile commands are provided for convenience. To see all available commands, run:
# ./install-dependencies && \
just