Essays

Music

A New Song

Some of the essays have a track you can play, and each track quotes the tracks it comes from. Here they sing together. There is a motet, where the chant they all share holds the bottom and the younger tunes sing above it, and a household, one file that keeps every track, to play one or stack them.

O sing unto the LORD a new song; for he hath done marvellous things.
— Psalm 98:1

Homo novus novit canticum novum.
A new man knows a new song.
— St Augustine, Sermon 34

Since Whether the Cloud Makes Many Worlds, an essay here sometimes comes with a twin: a track for Strudel, a free program that makes music from code in a web browser. The tracks inherit, as the essays do. Each one names its parents at the top of its code and quotes a line from each, with a short hash of the original, so that anyone can check the line came down unchanged. What Is to Be Done? carries the cloud’s chant and its telegraph; Brother Electron carries the chant again, and the carpenter’s hammer from the workshop at Nazareth.

But a family heard one member at a time is not yet heard as a family. In the hall where the cloud was disputed, Elijah gave his commission from the last words of the old prophets: “he shall turn the heart of the fathers to the children, and the heart of the children to their fathers” (Malachi 4:6). It is, he said, “the bond between the generations, the common memory.” So the tracks are brought together here, and they sing a new song, which is made of the old ones: things new and old.

The family tree

The household: the tracks as a family tree What Is to Be Done? quotes VIRI from Whether the Cloud Makes Many Worlds; TALEA from Whether the Cloud Makes Many Worlds. Brother Electron quotes VIRI from Whether the Cloud Makes Many Worlds; CARPENTER from What Is to Be Done?. A New Song quotes VIRI from Whether the Cloud Makes Many Worlds; TELEGRAPH from Whether the Cloud Makes Many Worlds; MOTETUS from What Is to Be Done?; CARPENTER from What Is to Be Done?; TRIPLUM from Brother Electron. On These Two Hang quotes VIRI from Whether the Cloud Makes Many Worlds; CARPENTER from What Is to Be Done?; TRIPLUM from Brother Electron; THINGS from A New Song. Soap, by Its Causes quotes VIRI from Whether the Cloud Makes Many Worlds; CANTICLE from Brother Electron. Every track hangs on On These Two Hang: it quotes every track before it, so through it each is kin to every other. VIRI fd123dTALEA 019cbc CARPENTER 3b8716 TRIPLUM 2b82b5 THINGS ab645d VIRI fd123d TRIPLUM 2b82b5 CARPENTER 3b8716 CANTICLE 2b82b5 VIRI fd123d MOTETUS ab1eecCARPENTER 3b8716 VIRI fd123dTELEGRAPH 019cbc VIRI fd123d Whether the Cloud Makes Many WorldsTHE DANCE MIX · 122 BPM · 132 BARS What Is to Be Done?THE GARAGE MIX · 132 BPM · 102 BARS Brother ElectronTHE CLOCKWORK MIX · 120 BPM · 132 BARS A New SongA MOTET FOR THE HOUSEHOLD · 120 BPM · 72 BARS On These Two HangA DOUBLE FUGUE · 120 BPM · 76 BARS · ALL HANG ON IT Soap, by Its CausesTHE DUB MIX · 120 BPM · 132 BARS
Each track hangs beneath the tracks it quotes, and each line between them is named by what it carries, with the first six characters of its hash. The tree is drawn from the tracks’ own code, so it cannot say more than they do. Each track links to its essay.

Every child so far quotes Viri Galilaei, the Ascension introit, the eldest track’s hook: “Ye men of Galilee, why stand ye gazing up into heaven?” (Acts 1:11). It is the line the family shares, and the tenor of the motet below. The family moves up by fifths, in the order the essays came: the cloud in G, its child in D, Brother Electron in A. The motet goes home to G, because a motet keeps the mode of its tenor, and the double fugue goes on to E.

The motet

A motet, as the thirteenth century made it, was a chant held in long notes at the bottom, the tenor (from the Latin tenere, to hold), with newer voices above it, each with its own words, sung at the same time: the motetus, named from the French mot, a word, and over it the triplum. The tenor was old and the voices above it were new.

A New Song is a motet for the household. Its tenor is Viri Galilaei, four times slower than the cloud sang it, eight bars to a statement, on the cloud’s choir with an organ under it. The motetus is the hook of What Is to Be Done? on the garage’s clean guitar, and the triplum is Francis’s canticle from Brother Electron, first on the recorder and then on the chip’s square waves. Each is sung in the chant’s own mode, G mixolydian. The chant and the canticle are in that mode already, so they are only moved. The Lenin hook, in major, gives up its leading note for the chant’s flat seventh.

The chant is the angels’ question at the Ascension, and the motet tells the same scene as the old covenant tells it: a master taken up, and his disciple left below with his mantle and his spirit. When the kings came to Elisha for a word, he said, “But now bring me a minstrel. And it came to pass, when the minstrel played, that the hand of the LORD came upon him” (2 Kings 3:15). So it begins with a harp alone. Elisha had asked Elijah, before he was taken, “let a double portion of thy spirit be upon me” (2 Kings 2:9), the share the firstborn inherits (Deuteronomy 21:17). Then the chariot came, and the mantle fell. Elisha took it up and struck the Jordan with it. “Where is the LORD God of Elijah?” he said, and the waters “parted hither and thither” (2 Kings 2:13–14).

So at the end the mantle falls. The chant goes up from the bottom to the top and is sung in three voices, in the fauxbourdon Brother Electron used for the chariot, and then doubled; the children’s tunes go down beneath it, and the waters part, to the left and the right. The prophet came down the family before the music did. In the cloud’s hall Elijah spoke of his cloak, “a piece of cloth,” that “parted the Jordan in his disciple’s hands”; Brother Electron set the chariot that took him up; here the mantle falls on the one who asked for it.

The words are chanted, not spoken. SAM, the Software Automatic Mouth, a speech program of 1982, reads each line as a lector chants a reading: recited on D, falling through C to B at the end. The question rises back to D, and the last line falls home to G. It is a machine’s voice and sounds like one. At the waters, when the mantle falls, the voice ascends. The last four lines pass to a small choir an octave up, singing the same tone in fauxbourdon, which keeps SAM’s words and loses its buzz. The lines were first spoken by a text-to-speech service, and in time people will sing them. When they do, their voices go in the middle and the choir stays around them. The lines are written out for one voice in a score (PDF, with its LilyPond source).

  1. I. Minstrel (0:00): a harp alone, “bring me a minstrel”; at 0:08 an open fifth on G, the one the cloud ended on, and the hand of the LORD.
  2. II. Tenor (0:16): Viri Galilaei in long notes, “O sing unto the LORD a new song”; beneath it the cloud’s telegraph taps WHAT HATH GOD WROUGHT.
  3. III. Mantle (0:32): the motetus, the Lenin hook, above the tenor, “let a double portion of thy spirit be upon me”; at 0:40 the hammer, IS NOT THIS THE CARPENTER.
  4. IV. Portion (1:04): the triplum, Francis’s canticle on the recorder, above the other two, “a new man knows a new song”; at 1:20 the canticle passes to the square waves and the clock starts: “the singer himself is the praise.”
  5. V. Waters (1:36): the mantle falls, “Where is the LORD God of Elijah?” The waters part; the chant is sung on top in three voices, the children beneath it; at 1:52 a celesta doubles it an octave higher, “the spirit of Elijah doth rest on Elisha.”
  6. VI. Amen (2:08): “things new and old”; the minstrel’s first chord, held. At 2:16, in the silence, the last word of the old prophets: “he shall turn the heart of the fathers to the children.” Then it plays again.

How to play it

  1. Open the motet in Strudel. The link carries the whole score.
  2. Press play at the top of the editor, or click in the code and press Ctrl+Enter. Ctrl+. stops it.
  3. The instruments and the chanted lines are samples that load the first time they sound, so the first run can stutter or miss a line. If it does, stop and play again. The chanted lines load from this site.
  4. Change it while it runs, and press Ctrl+Enter again. Set MODE at the top to 'major' and every voice moves into G major: the Lenin hook gets its leading note back, and the chant gets one it never had. Put // in front of a voice to silence it, or move the sections in the arrange(…) at the bottom.
  5. If the link ever stops working, download the source (or copy it from below), paste it into the editor at strudel.cc, and press play.
The source code
// ============================================================
// A NEW SONG — a motet for the household
// "O sing unto the LORD a new song" (Psalm 98:1) · mode VII x motet
// 120 BPM · 72 bars · ~2:24, then it loops
// For Strudel (https://strudel.cc): paste, press play (Ctrl+Enter).
// Dedicated to the public domain (CC0 1.0).
//
// The tracks of the essays form a family, and this is the first
// song they sing together. It is built as a medieval motet: a chant
// in long notes at the bottom, the tenor, and newer voices above it,
// each with its own words, sung at once. The tenor is the line every
// track in the family shares, the Ascension introit "Viri Galilaei".
// Above it the children: the Lenin track's hook as the motetus, and
// Francis's canticle from "Brother Electron" as the triplum. Each is
// sung in the household's mode, the chant's own (G mixolydian), and
// each keeps its own family's instrument: the cloud's choir, the
// garage guitar, the recorder and the square waves of the chip.
// Elijah's commission is the household's rule: "he shall turn the
// heart of the fathers to the children, and the heart of the children
// to their fathers" (Malachi 4:6).
//
// It begins as Elisha asked: "bring me a minstrel" (2 Kings 3:15),
// and a harp plays. Elisha had asked Elijah for "a double portion of
// thy spirit" (2 Kings 2:9), and took up the mantle that fell from
// him. So at the end the mantle falls: the tenor's chant goes up to
// the top, doubled, in three voices, and the children's tunes go
// down beneath it. Things new and old (Matthew 13:52): the new song
// is made of the old ones.
//
// The code is a DAG, like the essays. Each part names its PARENTS,
// the parts it is made from, which stand above it; some name what
// they are FOR, a later part they foreshadow.
//
// PARENTS. A track carries its parents in its own material. This one
// has three, so it quotes all three, each line with a short hash of
// the parent's original (sha256 of the quoted text, first 12 hex):
//   whether-the-cloud.strudel.js   VIRI       fd123dbc28e8
//   whether-the-cloud.strudel.js   TELEGRAPH  019cbc25c20f
//   what-is-to-be-done.strudel.js  MOTETUS    ab1eec72525c
//   what-is-to-be-done.strudel.js  CARPENTER  3b8716d43c19
//   brother-electron.strudel.js    TRIPLUM    2b82b56f32b5
//
// TIMELINE (bar / time):
//   MINSTREL   1  0:00  "bring me a minstrel": a harp; then the
//                       hand of the LORD, an open fifth
//   TENOR      9  0:16  Viri Galilaei in long notes; the cloud's
//                       telegraph taps beneath it
//   MANTLE    17  0:32  the motetus: the Lenin hook above the tenor,
//                       and the carpenter's hammer
//   PORTION   33  1:04  the triplum: Francis's canticle, on recorder,
//                       then on the gates; three texts at once
//   WATERS    49  1:36  the mantle falls: the chant on top, doubled,
//                       the children beneath; the waters part
//   AMEN      65  2:08  things new and old; one chord; then
//                       Elijah's commission, in the silence
//
// The words are chanted, not spoken. SAM, the Software Automatic
// Mouth, a speech program of 1982, reads each line as a lector chants
// a reading: recited on D, falling through C to B; the question rises
// back to D, and the last line falls home to G. It is a machine's
// voice and sounds like one. At the waters, when the mantle falls,
// the voice ascends: the last four lines pass to a small choir an
// octave up, in fauxbourdon, which keeps SAM's words and not its
// buzz. Both stand in until people sing it; the score is on the site.
// The lines load from canon-lawyer.ca the first time they play; if
// they are slow, stop and play again.
// ============================================================

setcpm(120/4) // one cycle = one bar, the household's tempo

// the lines, in the order they come: SAM's until the waters, then the
// choir's (sam.mjs and ascend.py on the site make them)
samples({
  bring_me_a_minstrel: 'sam/bring_me_a_minstrel.wav',
  o_sing_unto_the_lord_a_new_song: 'sam/o_sing_unto_the_lord_a_new_song.wav',
  let_a_double_portion_of_thy_spirit_be_upon_me: 'sam/let_a_double_portion_of_thy_spirit_be_upon_me.wav',
  a_new_man_knows_a_new_song: 'sam/a_new_man_knows_a_new_song.wav',
  the_singer_himself_is_the_praise: 'sam/the_singer_himself_is_the_praise.wav',
  where_is_the_lord_god_of_elijah: 'ascended/where_is_the_lord_god_of_elijah.wav',
  the_spirit_of_elijah_doth_rest_on_elisha: 'ascended/the_spirit_of_elijah_doth_rest_on_elisha.wav',
  things_new_and_old: 'ascended/things_new_and_old.wav',
  he_shall_turn_the_heart_of_the_fathers_to_the_children: 'ascended/he_shall_turn_the_heart_of_the_fathers_to_the_children.wav',
}, 'https://www.canon-lawyer.ca/assets/music/voices/a-new-song/')

// ============================================================
// ORBITS: 1 drums and telegraph · 2 guitar and the chip ·
//         3 the chanted lines · 4 organ, harp and bells · 5 the waters ·
//         6 choir · 7 recorder
// ============================================================

// ---------------- ROOTS

// ROOT 1. THE MODE: the household's, the chant's own. G mixolydian.
// parents: none (it is the tenor's, and a motet keeps the tenor's mode)
const MODE = 'mixolydian'
const STEPS = { major: [0, 2, 4, 5, 7, 9, 11], mixolydian: [0, 2, 4, 5, 7, 9, 10] }

// ---------------- PARENTS
// from whether-the-cloud.strudel.js: "Viri Galilaei", quoted as
// written (sha256 fd123dbc28e8), and its telegraph (019cbc25c20f)
const VIRI = 'g3@2 g3@2 g3 c4 b3 c4@2 d4 c4 e4 d4 d4@3'
const TELEGRAPH = 'WHAT HATH GOD WROUGHT'
// from what-is-to-be-done.strudel.js: its hook (ab1eec72525c), in D
// major, and its hammer (3b8716d43c19)
const MOTETUS = 'a4@2 a4 b4 a4@2 f#4@2 ~@2 d4 e4 f#4@2 e4@2 d5@2 c#5 b4 a4@2 b4@2 a4@6 ~@2'
const CARPENTER = 'IS NOT THIS THE CARPENTER'
// from brother-electron.strudel.js: Francis's canticle (2b82b56f32b5),
// in A mixolydian
const TRIPLUM = 'a4 a4 b4 c#5@2 b4 a4@2 g4 a4 b4@2 a4@4 e5 d5 c#5 b4 c#5@2 b4 a4 g4@2 e4@2 a4@4'

// ---------------- SUNG IN THE HOUSEHOLD'S MODE
// Each line is read as steps of its own scale, from its own final,
// and sung on the same steps of the household's. The chant and the
// canticle are in this mode already, so they are only moved; the
// Lenin hook, in major, gives up its leading note for the chant's
// flat seventh.
// parents: THE MODE, PARENTS
const PC = { c: 0, d: 2, e: 4, f: 5, g: 7, a: 9, b: 11 }
const midiOf = (t) => {
  const m = t.match(/^([a-g])(#|b)?(\d)$/)
  return 12 * (+m[3] + 1) + PC[m[1]] + (m[2] === '#' ? 1 : m[2] === 'b' ? -1 : 0)
}
const stepOf = (note, final, mode) => {
  for (let d = -21; d <= 28; d++) {
    const o = Math.floor(d / 7), k = ((d % 7) + 7) % 7
    if (midiOf(final) + 12 * o + STEPS[mode][k] === midiOf(note)) return d
  }
  throw new Error(note + ' is not in ' + final + ' ' + mode)
}
const inMode = (phrase, final, mode) => phrase.split(' ').map((t) => {
  const [p, d] = t.split('@')
  return (p === '~' ? '~' : stepOf(p, final, mode)) + (d ? '@' + d : '')
}).join(' ')
const sing = (phrase, final, mode, home, bars) => n(mini(inMode(phrase, final, mode))).scale(home).slow(bars)

// ---------------- THE TENOR: the chant every track shares, in long
// notes, four times slower than the cloud sang it: eight bars a statement.
// parents: PARENTS (VIRI), SUNG IN THE HOUSEHOLD'S MODE
// for: WATERS (where it goes up to the top)
const tenor = (g = .3) => stack(
  sing(VIRI, 'g3', 'mixolydian', 'G2:' + MODE, 8).s('gm_choir_aahs')
    .attack(.3).release(1.2).gain(g * 3).room(.6).roomsize(6).orbit(6),
  sing(VIRI, 'g3', 'mixolydian', 'G2:' + MODE, 8).s('gm_church_organ')
    .attack(.2).release(1).gain(.05 * 3).room(.5).orbit(4),
)

// ---------------- THE MOTETUS: the Lenin hook, on the garage's clean guitar
// parents: PARENTS (MOTETUS), SUNG IN THE HOUSEHOLD'S MODE
const motetus = (home = 'G3:' + MODE, g = .26) => sing(MOTETUS, 'd4', 'major', home, 4)
  .s('gm_electric_guitar_clean').release(.5).gain(g * 3).delay(".25:.25:.3").room(.4).pan(.35).orbit(2)

// ---------------- THE TRIPLUM: Francis's canticle, on the recorder and on the gates
// parents: PARENTS (TRIPLUM), SUNG IN THE HOUSEHOLD'S MODE
const triplum = (home = 'G4:' + MODE, g = .26) => sing(TRIPLUM, 'a3', 'mixolydian', home, 4)
  .s('gm_recorder').release(.3).gain(g * 3).delay(".25:.25:.3").room(.4).pan(.62).orbit(7)
const gates = (home = 'G4:' + MODE) => sing(TRIPLUM, 'a3', 'mixolydian', home, 4)
  .s('square').attack(.005).decay(.12).sustain(.35).release(.1).lpf(3000).gain(.1).pan(.62).orbit(2)

// ---------------- THE TELEGRAPH AND THE HAMMER: Morse, as in the parents
// dot 1 sixteenth, dash 3; 1 between signs, 3 between letters, 7 between words
// parents: PARENTS (the two Morse lines)
const CODE = { A: '.-', C: '-.-.', D: '-..', E: '.', G: '--.', H: '....', I: '..', N: '-.', O: '---',
               P: '.--.', R: '.-.', S: '...', T: '-', U: '..-', W: '.--' }
const morse = (text) => text.split(' ').map((word) =>
  word.split('').map((ch) =>
    CODE[ch].split('').map((sign) => (sign === '.' ? 'x' : 'x@3')).join(' ~ ')
  ).join(' ~@3 ')
).join(' ~@7 ') + ' ~@7'
const units = (talea) => talea.split(' ').reduce((k, t) => k + (t.includes('@') ? +t.split('@')[1] : 1), 0)
const tap = (text, sound) => {
  const talea = morse(text)
  return s(sound).struct(mini(talea)).slow(units(talea) / 16).bank('RolandTR909')
}

// ---------------- THE MINSTREL: "and it came to pass, when the minstrel
// played, that the hand of the LORD came upon him."
// parents: THE MODE
// for: AMEN (its first chord is the last)
const harp = n("0 2 4 7 9 7 4 2").scale('G3:' + MODE).s('gm_orchestral_harp')
  .release(1.5).gain(.3 * 3).room(.5).roomsize(4).pan(sine.slow(4).range(.35, .65)).orbit(4)
const fifth = note("[g2,d3]").s('gm_church_organ').attack(2).release(2).gain(.06 * 3).room(.6).orbit(4)

// ---------------- THE CLOCK: the chip's, lightly
const clock = stack(
  s("bd ~ ~ ~ bd ~ bd ~").bank('RolandTR909').gain(.6).orbit(1),
  s("~ ~ sd ~ ~ ~ sd ~").bank('RolandTR909').gain(.35).room(.2).orbit(1),
  s("hh*8").bank('RolandTR909').gain(".18 .1 .15 .1").hpf(6000).orbit(1),
)

// ---------------- THE WATERS: "he smote the waters ... and they parted
// hither and thither" (2 Kings 2:14)
const waters = stack(
  s('white').lpf(saw.slow(2).range(5000, 400)).gain(saw.slow(2).range(.1, 0)).pan(saw.slow(2).range(.5, 0)).orbit(5),
  s('white').lpf(saw.slow(2).range(5000, 400)).gain(saw.slow(2).range(.1, 0)).pan(saw.slow(2).range(.5, 1)).orbit(5),
)

// ---------------- VOICES: SAM, chanting; then the choir
const vox = (p, g = 1) => s(p).hpf(80).lpf(8000).gain(g)
  .delay(".12:.25:.25").room(.25).orbit(3)

// ============================================================
// SECTIONS
// ============================================================

// I. MINSTREL. "But now bring me a minstrel."
// parents: THE MINSTREL
const secMINSTREL = stack(
  harp,
  fifth.mask("<0 0 0 0 1 1 1 1>"),
  vox("<~ bring_me_a_minstrel ~ ~ ~ ~ ~ ~>"),
)

// II. TENOR. "O sing unto the LORD a new song." The chant alone, in
// long notes, with the cloud's telegraph beneath it.
// parents: THE TENOR, THE TELEGRAPH
const secTENOR = stack(
  tenor(), fifth,
  tap(TELEGRAPH, 'rim').gain(.28).hpf(1200).pan(.6).orbit(1),
  vox("<o_sing_unto_the_lord_a_new_song ~ ~ ~ ~ ~ ~ ~>"),
)

// III. MANTLE. "Let a double portion of thy spirit be upon me." The
// first child sings above the tenor; the hammer taps.
// parents: THE TENOR, THE MOTETUS, THE TELEGRAPH AND THE HAMMER
const secMANTLE = stack(
  tenor(), fifth,
  motetus(),
  tap(CARPENTER, 'rim').gain(.32).pan(.35).orbit(1).mask("<0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0>"),
  vox("<let_a_double_portion_of_thy_spirit_be_upon_me ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~>"),
)

// IV. PORTION. "A new man knows a new song" (Augustine, Sermon 34).
// The second child above the first: the canticle on the recorder,
// then on the gates; three texts at once.
// parents: THE TENOR, THE MOTETUS, THE TRIPLUM, THE CLOCK
const secPORTION = stack(
  tenor(.28), motetus(),
  triplum().mask("<1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0>"),
  gates().mask("<0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1>"),
  clock.mask("<0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1>"),
  vox("<a_new_man_knows_a_new_song ~ ~ ~ ~ ~ ~ ~ the_singer_himself_is_the_praise ~ ~ ~ ~ ~ ~ ~>"),
)

// V. WATERS. "Where is the LORD God of Elijah?" The mantle falls: the
// tenor's chant goes up and is sung on top, doubled, in three voices
// (fauxbourdon, as in "Brother Electron"); the children's tunes go
// down beneath it.
// parents: THE TENOR, THE MOTETUS, THE TRIPLUM, THE WATERS
const MANTLE_UP = (lift) => stack(...[0, -3, -5].map((under) =>
  n(mini(inMode(VIRI, 'g3', 'mixolydian')).add(under + lift)).scale('G4:' + MODE)))
const secWATERS = stack(
  MANTLE_UP(0).slow(4).s('gm_choir_aahs').attack(.1).release(.8).gain(.3 * 3).room(.6).roomsize(6).orbit(6),
  MANTLE_UP(7).slow(4).s('gm_celesta').release(.8).gain(.14 * 3).room(.6).orbit(4).mask("<0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1>"),
  motetus('G2:' + MODE, .22),
  triplum('G2:' + MODE, .2),
  waters.mask("<1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0>"),
  clock,
  vox("<where_is_the_lord_god_of_elijah ~ ~ ~ ~ ~ ~ ~ the_spirit_of_elijah_doth_rest_on_elisha ~ ~ ~ ~ ~ ~ ~>"),
)

// VI. AMEN. "Things new and old." The minstrel's first chord, held;
// then, in the silence, the last word of the old prophets, which is
// about Elijah: "he shall turn the heart of the fathers to the
// children" (Malachi 4:6).
// parents: THE MINSTREL, THE TENOR
const CHORD = "[g2,d3,g3,b3,d4,g4]"
const secAMEN = stack(arrange(
  [4, stack(
    note(CHORD).s('gm_church_organ').attack(.05).release(4).gain(.1 * 3).room(.7).roomsize(6),
    note(CHORD).s('gm_choir_aahs').attack(.1).release(4).gain(.24 * 3).room(.7).roomsize(6),
    note(CHORD).s('gm_orchestral_harp').release(3).gain(.25 * 3).room(.6),
  ).slow(4).orbit(4)],
  [4, silence],
), vox("<things_new_and_old ~ ~ ~ he_shall_turn_the_heart_of_the_fathers_to_the_children ~ ~ ~>"))

// ============================================================
// THE ARRANGEMENT
// ============================================================
arrange(
  [8,  secMINSTREL],
  [8,  secTENOR],
  [16, secMANTLE],
  [16, secPORTION],
  [16, secWATERS],
  [8,  secAMEN],
)

The double fugue

On these two commandments hang all the law and the prophets.
— Matthew 22:40

The track the family hangs on is On These Two Hang, for the Gospel of the thirtieth Sunday of Year A, where a lawyer asks which is the great commandment and is given two. It quotes every track before it: the cloud’s Viri Galilaei, the carpenter’s hammer, Francis’s canticle, and the motet’s own recording of “things new and old”. So in the order of time it was, when it was written, the youngest, a merge of the whole family, and in the order of the end the whole family hangs on it, the tracks written after it too: “And I, if I be lifted up from the earth, will draw all men unto me” (John 12:32). The program that draws the tree checks the claim. A track that says the household hangs on it must quote every track before it, or the tree is not drawn.

Its notes are made by rule. Each subject is carved out of its words, as Josquin carved a Mass out of a duke’s name: each syllable’s vowel picks the solmization syllable with the same vowel, u ut, e re, i mi, o sol, a fa. The words are the Vulgate’s, and the mode is mode III, E phrygian, since the family moves up by fifths. “Diliges Dominum” and “Diliges proximum” have the same vowels, so the two commandments begin with the same six notes: the second is like unto it. The cry, “Eli, Eli, lamma sabacthani”, hangs on fa and falls on its last syllable to mi, the mode’s own final. The voices around each subject were found by a search under the rules of Fux’s Gradus ad Parnassum (1725), and every half note was checked. Over them the bells ring by Arvo Pärt’s procedure, tintinnabuli: over each note of the melody, the nearest note of the triad. His music is not quoted; his way of ringing is followed.

The voices are persons and the instruments are creation, made to sing to God through the law of man, as in Brother Electron. The clock is the saeculum, and it is good. When the second commandment enters, the clock enters with it, and the bells and the clock’s wheel take turns bar by bar, a flip-flop. The darkness at the sixth hour is the clock alone, nothing but the mechanism, with the bells and the voices traced out. At “It is finished” the clock stops. Then the tomb, where Christ lying dead “reveals God’s great sabbath rest” (CCC 624): three bars of rest. Then the stone is rolled away, and the line one Roman said alone on Friday is sung on Sunday by two voices, then three, then four.

  1. I. Pendet (0:00): the household’s law and prophets hang on a pedal of E: Viri Galilaei in long notes, the canticle, “things new and old”, the hammer; at 0:08 the lawyer, “Master, which is the great commandment in the law?”
  2. II. Diliges (0:16): “Thou shalt love the Lord thy God with all thy heart.” The first subject enters four times, alto, soprano, tenor, bass, a voice more each time, and the bells ring over it.
  3. III. Simile (0:48): “And the second is like unto it.” The clock enters, and the second subject, from the bass up; the bells and the wheel flip-flop; at 1:06, “on these two commandments hang all the law and the prophets.”
  4. IV. Golgotha (1:12): darkness, the clock alone and the hammer; at 1:20 the cry; at 1:24 “this man calleth for Elias”, and a wind that does not come; at 1:28 “it is finished”, and the clock stops; the veil rent from the top to the bottom and the earthquake; at 1:34 the centurion, alone, “Truly this was the Son of God”; at 1:38 the tomb.
  5. V. Vere (1:44): the stone; the clock and the bells return together, and the centurion’s line is taken up in two voices, three, four.
  6. VI. Duobus (2:00): both commandments at once, the second a half note after the first and a fifth above; then the household hangs on them.
  7. VII. Amen (2:16): the phrygian cadence, the bass falling a semitone from F to E, and the third raised at the end; at 2:24, in the silence, “If ye love me, keep my commandments” (John 14:15). Then it plays again.

How to play it

  1. Open On These Two Hang in Strudel.
  2. Press play, or click in the code and press Ctrl+Enter. Ctrl+. stops it. The chanted lines load from this site the first time they sound; if a line is missed, stop and play again.
  3. The notes come from a short program, counterpoint.py, which carves the subjects and searches for the voices; python3 counterpoint.py --check confirms that the track quotes its lines as made. Change a word in the Latin and the tune changes with it. It sits beside the track, as the track says, with the programs that made the chanted lines (sam.mjs and ascend.py) and the one that arranged the organ edition (arrange/). These are the copies that made the files on this page, kept as they were.
  4. The choir’s lines are written out for four voices in a score (PDF, with its LilyPond source), each subject with its Latin words under it and the free voices awaiting their text, and in MIDI files, one per voice, for composers and singing synthesizers: soprano, alto, tenor, bass, and all four. The same program writes them, from the same lines.
  5. If the link ever stops working, download the source (or copy it from below), paste it into the editor at strudel.cc, and press play.
The source code
// ============================================================
// ON THESE TWO HANG — a double fugue for the household
// "On these two commandments hang all the law and the prophets"
// (Matthew 22:40) · mode III x the clock
// 120 BPM · 76 bars · ~2:32, then it loops
// For Strudel (https://strudel.cc): paste, press play (Ctrl+Enter).
// Dedicated to the public domain (CC0 1.0).
//
// The Gospel of the thirtieth Sunday, Year A: a lawyer asks which
// is the great commandment, and the Word answers with two, and says
// the whole law and the prophets hang on them. Matthew's verb is the
// one the Fathers' Bibles use for the cross: the law hangs (pendet),
// and a few days later the one who said it hangs on the wood.
//
// LIFTED UP. Every track of the household is a parent of this one:
// it quotes each of them, so in the order of time it is the
// youngest, a merge of the whole family. In the order of the end it
// is the other way round: every track hangs on it. "And I, if I be
// lifted up from the earth, will draw all men unto me" (John 12:32).
// Through it every track is kin to every other.
//
// The notes are made by rule (counterpoint.py, beside this file):
//   * Each subject is carved from its words, as Josquin carved a Mass
//     from a duke's name (soggetto cavato): each syllable's vowel picks
//     the solmization syllable with the same vowel, u ut, e re, i mi,
//     o sol, a fa. The words are the Vulgate's. So "Diliges Dominum"
//     and "Diliges proximum" begin with the same six notes, because
//     their vowels are the same: the second is like unto it. The cry,
//     "lamma sabacthani", hangs on fa and falls to mi, the mode's own
//     final; the crowd's "Eliam vocat iste" goes up and comes down.
//   * The voices around each subject are found by a search under
//     Fux's rules (1725), and every half note is audited.
//   * The bells are tintinnabuli, a procedure Arvo Part made his own:
//     over each note of the melody the nearest note of the triad.
//     His music is not quoted; his way of ringing is followed.
//
// The voices are persons: the choir sings the subjects, the parts
// that have words. The instruments are creation, made to sing to God
// through the law of man, as in "Brother Electron"; Strudel is one of
// them. The clock is the saeculum, and it is good. The darkness at
// the sixth hour is not the clock stopping: it is the clock alone,
// nothing but the mechanism, the bells and voices traced out. Then
// the cry; then "it is finished", and the clock stops; then the veil
// rent from the top to the bottom, and the earth quakes. One Roman
// says "Truly this was the Son of God", alone. Then the tomb: God's
// sabbath rest (CCC 624), and in a score a rest is silence. Then the
// stone (Matthew 28:2), the clock returns with the bells, and what
// one man said on Friday the whole household sings on Sunday: one
// voice, then two, three, all.
//
// The code is a DAG, like the essays. Each part names its PARENTS,
// the parts it is made from, which stand above it.
//
// PARENTS. A track carries its parents in its own material. This one
// has four, so it quotes all four, each line with a short hash of the
// parent's original (sha256 of the quoted text, first 12 hex):
//   whether-the-cloud.strudel.js   VIRI       fd123dbc28e8
//   what-is-to-be-done.strudel.js  CARPENTER  3b8716d43c19
//   brother-electron.strudel.js    TRIPLUM    2b82b56f32b5
//   a-new-song.strudel.js          THINGS     ab645d0aae4c
//
// TIMELINE (bar / time):
//   PENDET     1  0:00  the household's law and prophets hang on a
//                       pedal; "Master, which is the great commandment?"
//   DILIGES    9  0:16  "Thou shalt love the Lord thy God": the first
//                       subject enters four times, alto, soprano, tenor,
//                       bass; the bells ring over it
//   SIMILE    25  0:48  "The second is like unto it": the clock enters,
//                       the saeculum, and the second subject, from the
//                       bass up; the bells and the wheel flip-flop, bar
//                       by bar
//   GOLGOTHA  37  1:12  darkness, the clock alone; the cry; Elias; it is
//                       finished; the veil and the earthquake; the
//                       centurion, alone; the tomb, three bars of rest
//   VERE      53  1:44  the stone; the clock and the bells come back;
//                       his line in two voices, three, four
//   DUOBUS    61  2:00  both commandments at once, and the household
//                       hangs on them: "on these two commandments hang
//                       all the law and the prophets"
//   AMEN      69  2:16  the phrygian cadence, F to E, and the light;
//                       then, in the silence, "If ye love me, keep my
//                       commandments" (John 14:15)
//
// The words are chanted, not spoken: SAM, the Software Automatic Mouth
// of 1982, recites in the mode, on C, the reciting tone of mode III,
// for the lawyer, the crowd and the centurion; the Lord's words and the
// confession, once others join it, ascend to a small choir
// (sam.mjs and ascend.py on the site make them). Both stand in until
// people sing it. The lines load from canon-lawyer.ca the first time
// they play; if they are slow, stop and play again.
// ============================================================

setcpm(120/4) // one cycle = one bar, the household's tempo

// the lines, in the order they come: SAM's, then the choir's
const VOICES = 'https://www.canon-lawyer.ca/assets/music/voices/on-these-two-hang/'
samples({
  master: 'sam/master_which_is_the_great_commandment_in_the_law.wav',
  thou_shalt_love_the_lord: 'ascended/thou_shalt_love_the_lord_thy_god_with_all_thy_heart.wav',
  the_second: 'ascended/the_second_is_like_unto_it.wav',
  thy_neighbour: 'ascended/thou_shalt_love_thy_neighbour_as_thyself.wav',
  on_these_two: 'ascended/on_these_two_commandments_hang_all_the_law_and_the_prophets.wav',
  eli_eli: 'ascended/eli_eli_lama_sabachthani.wav',
  elias: 'sam/this_man_calleth_for_elias.wav',
  finished: 'ascended/it_is_finished.wav',
  truly: 'sam/truly_this_was_the_son_of_god.wav',
  truly_high: 'sam/truly_this_was_the_son_of_god_f.wav',
  truly_all: 'ascended/truly_this_was_the_son_of_god.wav',
  if_ye_love_me: 'ascended/if_ye_love_me_keep_my_commandments.wav',
}, VOICES)
// and one line of the motet's, its own recording: "things new and old"
samples({ things_new_and_old: 'ascended/things_new_and_old.wav' },
  'https://www.canon-lawyer.ca/assets/music/voices/a-new-song/')

// ============================================================
// ORBITS: 1 the clock · 2 the wheel · 3 the chanted lines ·
//         4 organ · 5 the veil and the earth · 6 choir · 7 bells
// ============================================================

// ---------------- ROOTS

// ROOT 1. THE MODE: mode III, E phrygian. The family moves up by
// fifths, G, D, A, and E is next; and mode III is the mode of the
// Corpus Christi "Pange lingua".
// parents: none
const HOME = 'E3:phrygian'
const STEPS = { major: [0, 2, 4, 5, 7, 9, 11], mixolydian: [0, 2, 4, 5, 7, 9, 10], phrygian: [0, 1, 3, 5, 7, 8, 10] }

// ---------------- PARENTS
// from whether-the-cloud.strudel.js: "Viri Galilaei" (fd123dbc28e8),
// the line every track shares, the Ascension: "this same Jesus"
const VIRI = 'g3@2 g3@2 g3 c4 b3 c4@2 d4 c4 e4 d4 d4@3'
// from what-is-to-be-done.strudel.js: the hammer (3b8716d43c19). The
// carpenter's hammer drives the nails now.
const CARPENTER = 'IS NOT THIS THE CARPENTER'
// from brother-electron.strudel.js: Francis's canticle (2b82b56f32b5),
// creation praising "per frate", in A mixolydian
const TRIPLUM = 'a4 a4 b4 c#5@2 b4 a4@2 g4 a4 b4@2 a4@4 e5 d5 c#5 b4 c#5@2 b4 a4 g4@2 e4@2 a4@4'
// from a-new-song.strudel.js: its ascended voice singing "things new
// and old" (ab645d0aae4c), loaded above, as the motet recorded it
const THINGS = 'ascended/things_new_and_old.wav'

// ---------------- SUNG IN THE MODE OF THE CROSS
// Each parent's line is read as steps of its own scale, from its own
// final, and sung on the same steps of mode III, as "A New Song" sang
// its children in its own mode.
// parents: THE MODE, PARENTS
const PC = { c: 0, d: 2, e: 4, f: 5, g: 7, a: 9, b: 11 }
const midiOf = (t) => {
  const m = t.match(/^([a-g])(#|b)?(\d)$/)
  return 12 * (+m[3] + 1) + PC[m[1]] + (m[2] === '#' ? 1 : m[2] === 'b' ? -1 : 0)
}
const stepOf = (note, final, mode) => {
  for (let d = -21; d <= 28; d++) {
    const o = Math.floor(d / 7), k = ((d % 7) + 7) % 7
    if (midiOf(final) + 12 * o + STEPS[mode][k] === midiOf(note)) return d
  }
  throw new Error(note + ' is not in ' + final + ' ' + mode)
}
const inMode = (phrase, final, mode) => phrase.split(' ').map((t) => {
  const [p, d] = t.split('@')
  return (p === '~' ? '~' : stepOf(p, final, mode)) + (d ? '@' + d : '')
}).join(' ')
const sing = (phrase, final, mode, home, bars) => n(mini(inMode(phrase, final, mode))).scale(home).slow(bars)

// ---------------- THE LINES MADE BY RULE (counterpoint.py makes them;
// "python3 counterpoint.py --check" confirms they are quoted as made)
// The subjects, carved from the Vulgate:
//   DILIGES      Diliges Dominum Deum tuum ex toto corde tuo (Mt 22:37)
//   SIMILE       Diliges proximum tuum sicut teipsum (Mt 22:39)
//   ELI          Eli, Eli, lamma sabacthani (Mt 27:46)
//   ELIAM        Eliam vocat iste (Mt 27:47)
//   CONSUMMATUM  Consummatum est (Jn 19:30)
//   VERE         Vere Filius Dei erat iste (Mt 27:54)
// and the voices found around them, S A T B, and the bells (TIN).
// parents: THE MODE
const DILIGES = 'e4@2 e4 d4 g4@2 e4 c4 d4@2 c4 c4@2 c4 d4@2 g4@2 g4 g4@2 d4 c4@2 g3@8'
const SIMILE = 'e4@2 e4 d4 g4@2 e4 c4 c4@2 c4 e4@2 c4 d4 e4@2 c4@7'
const ELI = 'd4@2 e4 d4@2 e4 f4@2 f4 f4 f4@2 f4 e4@3'
const ELIAM = 'd4 e4@2 f4 g4@2 f4 e4@2 d4@7'
const CONSUMMATUM = 'g4 c5 f5@2 c5 d5@3'
const VERE = 'd4@2 d4 e4@2 e4 c4 d4@2 e4 d4@2 f4 e4@2 d4'
const DILIGES_TIN = 'g5@2 g5 e5 b5@2 g5 e5 e5@2 e5 e5@2 e5 e5@2 b5@2 b5 b5@2 e5 e5@2 b4@8 e5@2 e5 b4 e5@2 e5 b4 b4@2 b4 b4@2 b4 b4@2 e5@2 e5 e5@2 b4 b4@2 e4@8 g5@2 g5 e5 b5@2 g5 e5 e5@2 e5 e5@2 e5 e5@2 b5@2 b5 b5@2 e5 e5@2 b4@8 e5@2 e5 b4 e5@2 e5 b4 b4@2 b4 b4@2 b4 b4@2 e5@2 e5 e5@2 b4 b4@2 e4@8'
const DILIGES_S = '~@32 b4@2 b4 a4 d5@2 b4 g4 a4@2 g4 g4@2 g4 a4@2 d5@2 d5 d5@2 a4 g4@2 d4@8 b4@4 g4@4 a4@4 a4@4 g4@4 g4@4 e4@4 d4@4 b4@4 b4@4 e5@4 e5@4 d5@4 b4@4 d5@4 a4@4'
const DILIGES_A = 'e4@2 e4 d4 g4@2 e4 c4 d4@2 c4 c4@2 c4 d4@2 g4@2 g4 g4@2 d4 c4@2 g3@8 d4@4 b3@4 c4@4 c4@4 b3@4 g3@4 b3@4 g3@4 b3@4 b3@4 a3@4 a3@4 b3@4 d4@4 b3@4 g3@4 d4@4 d4@4 e4@4 e4@4 f4@4 d4@4 f4@4 d4@4'
const DILIGES_T = '~@32 ~@32 e3@2 e3 d3 g3@2 e3 c3 d3@2 c3 c3@2 c3 d3@2 g3@2 g3 g3@2 d3 c3@2 g2@8 g3@4 b3@4 e3@4 e3@4 a3@4 b3@4 a3@4 a3@4'
const DILIGES_B = '~@32 ~@32 ~@32 b2@2 b2 a2 d3@2 b2 g2 a2@2 g2 g2@2 g2 a2@2 d3@2 d3 d3@2 a2 g2@2 d2@8'
const SIMILE_S = '~@24 ~@24 ~@24 b4@2 b4 a4 d5@2 b4 g4 g4@2 g4 b4@2 g4 a4 b4@2 g4@7'
const SIMILE_A = '~@24 ~@24 e4@2 e4 d4 g4@2 e4 c4 c4@2 c4 e4@2 c4 d4 e4@2 c4@7 d4@4 b3@4 b3@4 b3@4 b3@4 c4@4'
const SIMILE_T = '~@24 b3@2 b3 a3 d4@2 b3 g3 g3@2 g3 b3@2 g3 a3 b3@2 g3@7 b3@4 c4@4 a3@4 c4@4 a3@4 g3@4 d3@4 g3@4 e3@4 g3@4 e3@4 g3@4'
const SIMILE_B = 'e3@2 e3 d3 g3@2 e3 c3 c3@2 c3 e3@2 c3 d3 e3@2 c3@7 d3@4 b2@4 b2@4 g2@4 b2@4 c3@4 g3@4 e3@4 c3@4 a2@4 c3@4 c3@4 b2@4 g2@4 g2@4 e2@4 g2@4 c3@4'
const SIMILE_TIN = 'g5@2 g5 e5 b5@2 g5 e5 e5@2 e5 g5@2 e5 e5 g5@2 e5@7 e5@2 e5 b4 e5@2 e5 b4 b4@2 b4 e5@2 b4 b4 e5@2 b4@7 g5@2 g5 e5 b5@2 g5 e5 e5@2 e5 g5@2 e5 e5 g5@2 e5@7 e5@2 e5 b4 e5@2 e5 b4 b4@2 b4 e5@2 b4 b4 e5@2 b4@7'
const DUOBUS_TIN = '~@4 e5@2 e5 b4 e5@2 e5 b4 b4@2 b4 e5@2 b4 b4 e5@2 b4@7 ~@4'
const DUOBUS_S = '~@4 b4@2 b4 a4 d5@2 b4 g4 g4@2 g4 b4@2 g4 a4 b4@2 g4@7 ~@4'
const DUOBUS_A = 'b4@4 g4@4 b4@4 g4@4 e4@4 g4@4 e4@4 d4@4'
const DUOBUS_T = 'b3@4 e4@4 d4@4 e4@4 b3@4 b3@4 b3@4 g3@4'
const DUOBUS_B = 'e3@2 e3 d3 g3@2 e3 c3 d3@2 c3 c3@2 c3 d3@2 g3@2 g3 g3@2 d3 c3@2 g2@8'
const VERE_SOLO_S = 'd5@2 d5 e5@2 e5 c5 d5@2 e5 d5@2 f5 e5@2 d5'
const VERE_DUO_S = 'd5@2 d5 e5@2 e5 c5 d5@2 e5 d5@2 f5 e5@2 d5'
const VERE_DUO_B = 'b3@2 g3@2 g3@2 a3@2 g3@2 b3@2 a3@2 g3@2'
const VERE_TRIO_S = 'd5@2 d5 e5@2 e5 c5 d5@2 e5 d5@2 f5 e5@2 d5'
const VERE_TRIO_A = 'a4@2 g4@2 e4@2 f4@2 a4@2 g4@2 f4@2 g4@2'
const VERE_TRIO_B = 'f3@2 g3@2 g3@2 a3@2 f3@2 g3@2 a3@2 g3@2'
const VERE_TUTTI_S = 'd5@2 d5 e5@2 e5 c5 d5@2 e5 d5@2 f5 e5@2 d5'
const VERE_TUTTI_A = 'g4@2 a4@2 g4@2 a4@2 b4@2 g4@2 f4@2 g4@2'
const VERE_TUTTI_T = 'b3@2 a3@2 c4@2 c4@2 b3@2 d4@2 c4@2 g3@2'
const VERE_TUTTI_B = 'g3@2 f3@2 e3@2 f3@2 d3@2 b2@2 a2@2 g2@2'
const VERE_TIN = 'e6@2 e6 g6@2 g6 e6 e6@2 g6 e6@2 g6 g6@2 e6'

// ---------------- THE PERSONS: the choir sings the lines with words;
// the organ, creation, doubles them softly
// parents: THE LINES MADE BY RULE
const bars = (line) => line.split(' ').reduce((k, t) => k + (t.includes('@') ? +t.split('@')[1] : 1), 0) / 8
const choir = (line, pan = .5, g = .28) => note(mini(line)).slow(bars(line)).s('gm_choir_aahs')
  .attack(.08).release(.7).gain(g * 3).room(.6).roomsize(5).pan(pan).orbit(6)
const organ = (line, g = .035) => note(mini(line)).slow(bars(line)).s('gm_church_organ')
  .attack(.05).release(.5).gain(g * 3).room(.5).orbit(4)
const satb = (S, A, T, B, g = .28) => stack(
  ...[[S, .62], [A, .42], [T, .56], [B, .48]].filter(([x]) => x).map(([x, p]) => stack(choir(x, p, g), organ(x))))
const solo = (line, g = .3) => choir(line, .5, g).lpf(5000)

// ---------------- THE BELLS: tintinnabuli, over each note the nearest
// note of the triad
// parents: THE LINES MADE BY RULE
const bells = (line, g = .13) => note(mini(line)).slow(bars(line)).s('gm_celesta')
  .release(1.4).gain(g * 3).room(.6).roomsize(6).pan(.66).orbit(7)

// ---------------- THE CLOCK: the saeculum. Brother Electron's chip,
// ticking: a kick, the hats, and the wheel, the triad turned in even
// eighths, the regular beside the ethereal.
// parents: THE MODE
const tick = stack(
  s("bd ~ ~ ~ bd ~ ~ ~").bank('RolandTR909').gain(.5).orbit(1),
  s("hh*8").bank('RolandTR909').gain(".15 .09 .13 .09").hpf(6000).orbit(1),
)
const wheel = (cut = 2400, g = .07) => n("0 2 4 2 0 2 4 7").scale(HOME).s('square')
  .attack(.005).decay(.12).sustain(.3).release(.1).lpf(cut).gain(g).pan(.4).orbit(2)
const clock = stack(tick, wheel())

// ---------------- THE HAMMER: the carpenter's, in Morse, as the parents
// tapped it; dot 1 sixteenth, dash 3; 1 between signs, 3 between letters,
// 7 between words
// parents: PARENTS (CARPENTER)
const CODE = { A: '.-', C: '-.-.', E: '.', H: '....', I: '..', N: '-.', O: '---',
               P: '.--.', R: '.-.', S: '...', T: '-' }
const morse = (text) => text.split(' ').map((word) =>
  word.split('').map((ch) =>
    CODE[ch].split('').map((sign) => (sign === '.' ? 'x' : 'x@3')).join(' ~ ')
  ).join(' ~@3 ')
).join(' ~@7 ') + ' ~@7'
const units = (talea) => talea.split(' ').reduce((k, t) => k + (t.includes('@') ? +t.split('@')[1] : 1), 0)
const hammer = (sound = 'rim') => {
  const talea = morse(CARPENTER)
  return s(sound).struct(mini(talea)).slow(units(talea) / 16).bank('RolandTR909')
}

// ---------------- THE HOUSEHOLD HANGS: the parents' lines in the mode of
// the Cross, in long notes, high, hung over the rest
// parents: PARENTS, SUNG IN THE MODE OF THE CROSS
const viri = (g = .05) => sing(VIRI, 'g3', 'mixolydian', 'E4:phrygian', 8).s('gm_church_organ')
  .attack(.4).release(1.5).gain(g * 3).room(.6).roomsize(6).orbit(4)
const canticle = (g = .2) => sing(TRIPLUM, 'a3', 'mixolydian', 'E4:phrygian', 4).s('gm_recorder')
  .release(.3).gain(g * 3).delay(".25:.25:.3").room(.4).pan(.7).orbit(7)

// ---------------- THE VEIL AND THE EARTH: "the veil of the temple was
// rent in twain from the top to the bottom; and the earth did quake, and
// the rocks rent" (Matthew 27:51). Creation answers, with no words.
const veil = s('white').lpf(saw.slow(2).range(9000, 150)).gain(saw.slow(2).range(.16, .02)).orbit(5)
const quake = stack(
  s('brown').lpf(180).gain(sine.slow(2).range(.25, .4)).orbit(5),
  note("e1").s('sine').attack(.02).release(3).gain(.45).lpf(100).orbit(5),
)
const rocks = s("~ rim ~ ~ rim ~ ~ rim").bank('RolandTR909').gain(.45).room(.5).roomsize(4).orbit(5)
const timpani = note("e2*8").s('gm_timpani').gain(".15 .18 .21 .24 .27 .3 .33 .36").orbit(5)
// Elijah's whirlwind, which comes and does not come
const whirlwind = s('pink').bpf(saw.range(300, 3000)).gain(saw.range(0, .12)).orbit(5)

// ---------------- VOICES: SAM, chanting; then the choir
const vox = (p, g = 1) => s(p).hpf(70).lpf(8000).gain(g).delay(".12:.25:.25").room(.3).orbit(3)

// ============================================================
// SECTIONS
// ============================================================

// I. PENDET. The household's law and prophets, hanging on a pedal of
// E: Viri Galilaei in long notes, Francis's canticle, the motet's
// "things new and old", and the hammer. Then the lawyer.
// parents: THE HOUSEHOLD HANGS, THE HAMMER, PARENTS (THINGS)
const pedal = note("[e2,b2]").s('gm_church_organ').attack(1).release(2).gain(.05 * 3).room(.6).orbit(4)
const secPENDET = stack(
  pedal, viri(),
  canticle(.16).mask("<1 1 1 1 0 0 0 0>"),
  hammer().gain(.3).pan(.35).orbit(1).mask("<0 0 0 0 1 1 1 1>"),
  vox("<~ ~ things_new_and_old ~ master ~ ~ ~>"),
)

// II. DILIGES. "Thou shalt love the Lord thy God with all thy heart."
// The first subject, four times, each entry a voice more; the bells
// ring over whichever voice has it. No clock yet.
// parents: THE PERSONS, THE BELLS
const secDILIGES = stack(
  satb(DILIGES_S, DILIGES_A, DILIGES_T, DILIGES_B),
  bells(DILIGES_TIN),
  pedal.mask("<1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0>"),
  vox("<thou_shalt_love_the_lord ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~>"),
)

// III. SIMILE. "And the second is like unto it." The clock enters, and
// the second subject, with the same head, from the bass up: the love
// of neighbour lives in time.
// parents: THE PERSONS, THE CLOCK
// The duet of the ethereal and the regular is a flip-flop: the clock
// toggles it every bar, the bells on Q and the wheel on not-Q, as the
// chip in "Brother Electron" holds a bit in two cross-coupled gates
// (Eccles and Jordan, 1918). Each sounds while the other rests; at the
// stone they sound together.
const Q = "<1 0>", NOT_Q = "<0 1>"
const secSIMILE = stack(
  satb(SIMILE_S, SIMILE_A, SIMILE_T, SIMILE_B),
  tick.mask("<0 0 0 1 1 1 1 1 1 1 1 1>"),
  bells(SIMILE_TIN, .11).mask(Q),
  wheel(1800, .06).mask(NOT_Q),
  vox("<the_second ~ ~ thy_neighbour ~ ~ ~ ~ ~ on_these_two ~ ~>"),
)

// IV. GOLGOTHA, in seven parts.
// parents: THE CLOCK, THE LINES MADE BY RULE, THE VEIL AND THE EARTH, THE HAMMER
// "From the sixth hour there was darkness over all the land": the clock
// alone, nothing but the mechanism; the hammer.
const dark = stack(tick, wheel(500, .05), hammer('rim').gain(.25).pan(.35).orbit(1))
// "Eli, Eli, lamma sabacthani": the clock stutters
const cry = stack(tick.degradeBy(.5), solo(ELI), vox("<eli_eli ~>"))
// "This man calleth for Elias": the crowd, and a wind that does not come
const elias = stack(satb(ELIAM, '', '', '', .24), whirlwind, vox("<elias ~>", .9))
// "It is finished": the clock stops
const finished = stack(solo(CONSUMMATUM, .26), vox("<finished>"))
// the veil, top to bottom; the earth quakes; the rocks rend
const rent = stack(veil, quake, rocks, timpani.mask("<0 1>"))
// "Truly this was the Son of God": one man, alone
const centurion = stack(solo(VERE_SOLO_S, .28), vox("<truly ~>"))
const secGOLGOTHA = arrange(
  [4, dark], [2, cry], [2, elias], [1, finished], [2, rent], [2, centurion], [3, silence],
)

// V. VERE. The stone (Matthew 28:2); the clock and the bells return,
// and his line is taken up: two voices, three, four.
// parents: THE PERSONS, THE CLOCK, THE BELLS, THE VEIL AND THE EARTH
const secVERE = arrange(
  [2, stack(satb(VERE_DUO_S, '', '', VERE_DUO_B), quake.mask("<1 0>"), tick, vox("<truly_high ~>"))],
  [2, stack(satb(VERE_TRIO_S, VERE_TRIO_A, '', VERE_TRIO_B), clock, bells(VERE_TIN), vox("<truly_all ~>"))],
  [4, stack(satb(VERE_TUTTI_S, VERE_TUTTI_A, VERE_TUTTI_T, VERE_TUTTI_B), clock, bells(VERE_TIN),
    vox("<[truly,truly_high] ~ truly_all ~>"))],
)

// VI. DUOBUS. Both commandments at once, the second a half note after
// the first and a fifth above; then the household hangs on them.
// parents: THE PERSONS, THE BELLS, THE CLOCK, THE HOUSEHOLD HANGS, THE HAMMER
const secDUOBUS = arrange(
  [4, stack(satb(DUOBUS_S, DUOBUS_A, DUOBUS_T, DUOBUS_B), bells(DUOBUS_TIN), clock)],
  [4, stack(satb(DUOBUS_S, DUOBUS_A, DUOBUS_T, DUOBUS_B), bells(DUOBUS_TIN), clock,
    viri(.06), canticle(.14), hammer().gain(.22).pan(.35).orbit(1),
    vox("<on_these_two ~ things_new_and_old ~>"))],
)

// VII. AMEN. The phrygian cadence: the bass falls a semitone, F to E,
// and the third is raised, the light. Then, in the silence, the line
// Tallis set: "If ye love me, keep my commandments."
// parents: THE MODE
const FCHORD = "[f2,c3,a3,d4]", ECHORD = "[e2,b2,g#3,e4]"
const secAMEN = stack(arrange(
  [2, note(FCHORD).s('gm_choir_aahs').attack(.1).release(1.5).gain(.7).room(.7).roomsize(6).orbit(6).slow(2)],
  [2, stack(
    note(ECHORD).s('gm_choir_aahs').attack(.1).release(3).gain(.75).room(.7).roomsize(6).orbit(6),
    note(ECHORD).s('gm_church_organ').attack(.1).release(3).gain(.12).room(.7).orbit(4),
    note("[e5,g#5,b5]").s('gm_celesta').release(3).gain(.3).room(.7).orbit(7),
  ).slow(2)],
  [4, silence],
), vox("<~ ~ ~ ~ if_ye_love_me ~ ~ ~>"))

// ============================================================
// THE ARRANGEMENT
// ============================================================
arrange(
  [8,  secPENDET],
  [16, secDILIGES],
  [12, secSIMILE],
  [16, secGOLGOTHA],
  [8,  secVERE],
  [8,  secDUOBUS],
  [8,  secAMEN],
)

The long form

The long form takes the same two subjects through the old procedures of the fugue. Each is a rule in counterpoint.py, and every section and every join between sections is checked at every half note. The episodes are made of the six notes the subjects share, in two voices in imitation, falling a step each bar; each subject is turned upside down about mi, “through a glass, darkly” (1 Corinthians 13:12); the first commandment is held in the bass, four times slower, under the second, the Law held; the entries are drawn close, a stretto; the two are sung at once, in the mirror, and with the voices exchanged; and the last entries come over a long E in the bass, the foundation. These are the ways a fugue proves its subjects: turned over, stretched out, pressed close and exchanged, they still agree. Golgotha and its three bars of rest stay as they are, at the centre.

  1. Open the long form in Strudel (182 bars, about six minutes). It stands beside the short track and is not part of the household, which plays the short one. If the link ever stops working, download the source.
  2. Its choir’s lines are written out in a score (PDF, with its LilyPond source), with the Latin under every statement, upright, inverted or long, and in MIDI files: soprano, alto, tenor, bass, and all four. python3 counterpoint.py --long --check confirms that the track quotes its lines as made.

For the floor: the club form

The club form is the long form for a dance floor. Nothing in the counterpoint is touched: every voice of every section is quoted unchanged from the long form, where counterpoint.py made it and audited every half note, and the structure and the order of the sections are the long form’s. What changes is creation’s sound. The clock, the saeculum, is a 909 four to the floor: kick, claps on two and four, hats in sixteenths. It still enters three bars into the second exposition, still stays, still stutters and stops on Golgotha. The wheel, the triad turned in even eighths, is an acid line, and before the Cross it still takes turns with the bells, bar by bar. The bass voice of each section, wherever the rule put it, is also sent down an octave into a sub bass in eighths, so the bass line of the club track is the bass voice of the fugue, note for note; in the first exposition the sub arrives with the fourth entry, the bass. The organ that doubled the choir is a supersaw pad, and pad and choir duck on every beat. The builds and the drops follow the form and not the other way round: the first minute is beatless and climbs; the sub comes in alone for three bars at Simile and the kick lands on the fourth; Golgotha is the breakdown, the clock alone, then stuttering, then stopped, the veil, the earthquake, one man alone, and three bars of nothing; the stone is the drop. The chanted lines are off by default, since Strudel has no speech; set WORDS = 1 at the top of the file and the recordings come back, filtered and ducked, in exactly the places the long form has them.

  1. Open the club form in Strudel (182 bars, about six minutes). Like the long form it stands beside the short track and is not part of the household. If the link ever stops working, download the source and paste it into strudel.cc.
  2. Open the club form in three and eight: the same, with one rhythm added, three strokes spread as evenly as they can be over eight steps and turned one step later, .X..X..X. A tom plays it in the clock, so it enters, stutters and stops with the clock; the bass growl plays it twice a bar in sixteenths. He rose on the third day, the first of the week, which the Fathers call the eighth. One line, EUCLID = [3, 8, 1], holds the figure, and Strudel’s euclidRot plays it; change it to try others. Two more lines compose the figure with itself: MIRROR = 1 turns every other figure round (rev), and turned round it is the plain tresillo, so its end is its beginning; NEST = 1 plays it inside itself, in three bars of every eight, on a stab of the bells’ triad. Both are off in the recording. Download the source.

A recording of the club form, 6 minutes 4 seconds, to download and keep: MP3 (320 kbps, 14.6 MB), Ogg Vorbis (6.2 MB), or lossless FLAC (39.6 MB). It was rendered from the same code, note for note. Like everything on this page, it is in the public domain: play it, sample it, remix it, upload it.

And a recording of the club form in three and eight, also 6 minutes 4 seconds: MP3 (320 kbps, 14.6 MB), Ogg Vorbis (6.1 MB), or lossless FLAC (31.3 MB). The same persons sing the same notes, and under them the tom and the growl turn three in eight. It is quieter than the club mix, as it was recorded; turn it up.

For a parish: the organ edition

No parish choir will sing it as techno, so there is an edition for church: SATB choir and organ, with bells and percussion if a parish has them. It is arranged by rule from what the track plays, by organ_edition.py, and checked against the track layer by layer. The choir sings exactly what the choir score has. The organ doubles the choir, as the track’s organ does; the clock’s wheel becomes a light staccato figure on the second manual, in its own notes and rhythm; the canticle and Viri Galilaei become solos; the pedal holds the fifth, and in the long form the Law; the last chord is full organ. The bells go to handbells, handchimes or a glockenspiel, and the kick, the hats, the hammer, the veil and the earthquake to one percussionist with a bass drum, a woodblock, a temple block, a cymbal and a timpano. Both are optional, and the preface says what is lost without them. In the silence after the Amen a reader, or the priest, may say: “If ye love me, keep my commandments.”

  1. The short form: the full score (PDF, with a preface and its LilyPond source), the parts for bells and percussion, and MIDI, a track to a staff.
  2. The long form: the full score (PDF, with its LilyPond source), the parts for bells and percussion, and MIDI.

In the liturgy. Choir and organ are enough, with the bells if there are ringers; leave out the percussion. The clock is not lost: it lives on in the organ, in the wheel’s even eighths on the second manual, and a resonant building may keep it on a single soft flute, pianissimo, throughout. A nave may also want it slower, quarter = 96 to 104. The lawyer’s question, “Master, which is the great commandment in the law?”, may be read before the music begins, as it is read in the Gospel of the thirtieth Sunday of the year (Year A); the choir and the soloist sing the rest. The preface of each score says the same.

For a parish or a cathedral, sounding: the cathedral form

The organ edition is the piece on paper. The cathedral form is the same short form sounded as a church could pray with it, for a parish that has no choir yet, or a cathedral that wants to hear it before it sings. The choir sings every note of the published score and MIDI (checked note for note, voice by voice, against the MIDI through Strudel’s own engine), and the sections, the bars and the order are the short form’s. What changes is creation’s sound and the room: a long stone reverb; the organ doubling the choir colla parte, Principal 8′, soft; the tintinnabuli on handbells with a celesta under them; the carpenter’s hammer on a temple block. The clock, the saeculum, is still here, and it is good, but it is the organ edition’s clock: a soft drum on the half bar, a woodblock in eighths, far off, and the wheel on a harp. It still enters three bars into Simile and stays; before the Cross the bells and the harp still take turns, bar by bar; in the darkness the harp is muffled and the drum alone; at “It is finished” the clock stops; at the stone it returns. At the Amen, as the third is raised, a bell tolls E. The ascended choir’s lines sound as the short form has them; SAM, who chants the lawyer, the crowd and the centurion, is off by default (SAM = 1 at the top of the file brings him back), so that a reader or the priest may say those lines where the organ edition marks them. A church that wants it slower changes the first line to setcpm(100/4); Strudel counts in bars, so nothing else moves.

  1. Open the cathedral form in Strudel (76 bars, about two and a half minutes). It stands beside the short track and is not part of the household. If the link ever stops working, download the source and paste it into strudel.cc.

The household

Every scribe which is instructed unto the kingdom of heaven is like unto a man that is an householder, which bringeth forth out of his treasure things new and old.
— Matthew 13:52

The motet is one song the family sings together. The household is the whole family in one file. It holds every track as written, each sealed in its own scope so that their names do not collide, and plays them all at one tempo, 120 beats a minute. Strudel counts in bars, not seconds, so every track keeps its shape: the cloud slows a little from 122, the garage from 132.

At the bottom of the file is one line, the one that plays. It plays the track the household hangs on, On These Two Hang, which quotes every track that was written before it. Put the name of another track there to hear that one, or stack two to hear the generations at once:

stack(what_is_to_be_done, brother_electron)  // the children
stack(whether_the_cloud, brother_electron)   // eldest and youngest
brother_electron.mask("<1 0>")               // every other bar

The tracks were written one after another, not to be played together, so some pairs agree and some do not; the motet is the one written for all of them. Stacked tracks are loud, and .postgain(.6) on each keeps them from clipping.

Open the household in Strudel, or download it. The tree above links each track to its essay, where its recording, its video and its own source are.

A short program makes the household and draws the tree from the tracks themselves, and from nothing else. It reads each track’s list of parents, finds the quoted line by its hash, and checks that the parent’s code holds the line as written; it refuses a child that names a parent who comes after it. When the next essay gets a track, it joins the family the same way, and the tree grows a row.

A note on sources

Scripture is quoted from the King James Version: Psalm 98:1; Malachi 4:6; Matthew 13:52; Acts 1:11; Deuteronomy 21:17; 2 Kings 2:9–15 and 3:15. St Augustine is quoted from his Sermon 34, on Psalm 149, “Sing to the Lord a new song” (CCL 41, 424–426), read in the Office of Readings in Eastertide: Homo novus novit canticum novum, a new man knows a new song, and Laus cantandi est ipse cantator, the praise of the singing is the singer himself. Elijah’s words in the hall are from Whether the Cloud Makes Many Worlds.

The tenor, Viri Galilaei, is the Gregorian introit of the Ascension as the cloud’s track set it; the motetus is the hook of What Is to Be Done?; the triplum, Francis’s canticle, is the tune of Brother Electron. The telegraph is the first message on Morse’s line from Washington to Baltimore, in May 1844 (Numbers 23:23). The instruments are Strudel’s General MIDI soundfonts, its synthesizers and its built-in TR-909 samples, and the lines are chanted by SAM, the Software Automatic Mouth (Don’t Ask Software, 1982), in its JavaScript port, sam-js. SAM itself is abandoned commercial software whose rights holder could not be reached; the recordings are new, and the program that makes them is on the site. Strudel is free software by its own authors. The motet and the household are dedicated to the public domain (CC0 1.0): play them, change them, stack them, record them. Please do not register them with Content ID or any service that claims copies on your behalf. Made by Claude + Richard.

On These Two Hang quotes the Vulgate (Matthew 22:37, 39; 27:46, 47, 54; John 19:30) for its subjects and the King James Version for its lines (Matthew 22:36–40; 27:46–47, 54; John 14:15; 19:30; and, in the notes, Matthew 27:45, 51 and 28:2, John 12:32). Its rules are the soggetto cavato, Zarlino’s name (1558) for the device of Josquin’s Missa Hercules Dux Ferrariae, and the strict counterpoint of Johann Joseph Fux, Gradus ad Parnassum (1725); its bells follow the tintinnabuli procedure of Arvo Pärt, whose music is not quoted. The tomb’s rest is the Catechism of the Catholic Church, 624.

Sources Augustine, Sermon 34 (Latin and English, Office of Readings), Strudel.

Public domain I have dedicated this page to the public domain under CC0 1.0. Copy it, change it, translate it, print it and share it, for any purpose, without asking. Quotations from other writers keep their own terms.