Strudelify

go tell it on the mountain

Traditional Spiritual

KeyG majorTempo108 bpm
0:00/0:00
// go tell it on the mountain — Traditional Spiritual
// 108 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3029341; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 32 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(108/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/2 spreads a riff over 2 bars.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · trumpet · "B♭ Trumpet"
const trumpet = note("<A@2 B C D E F G H I J K L I M N A@2 B C D E F G H I J K L I M N>".pickRestart({
  A: "c4@4 c4!2 c4@2", B: "e4 e4@2 f4 g4@2 f4@2", C: "f4@4 g4 f4@3", D: "c4@2 d4!2 d4@2 d4@2", E: "c4 d4",
  F: "f4@2 f4@2 f4@4 e4@3 f4 e4@4", G: "c4@3 ~", H: "f4 c5 f4 d5", I: "f4 f4@2 f4", J: "e4@4 d4@2 d4!2", K: "f4@3 f4",
  L: "f4!2 c5!2 f4!2 d5!2", M: "[c4,e4] a#3", N: "c4!2",
})).s("gm_trumpet").gain(0.3)

// other · trombone · "Tenor Trombone"
const trombone = note("<A B C D A B E F G@2 H I J@2 K L A B C D A B E F G@2 H I J@2 K L>".pickRestart({
  A: "a3 a#3", B: "a3!2", C: "a#3!2", D: "c4@4 a#3 a3@3", E: "c4 a#3", F: "a3@3 ~", G: "a3!2 a3@6", H: "a#3!2 a#3@6",
  I: "c4@3 ~", J: "a3/2", K: "g3 f3", L: "e3 g3",
})).s("gm_trombone").gain(0.25)

// bass · tuba
const bass = note("<A B C D E F C G ~ H I J B@2 K L A B C D E F C G ~ H I J B@2 K L>".pickRestart({
  A: "f2!2", B: "f2", C: "c3!2", D: "f2@4 a#2 f2@3", E: "f2!4 f2@4", F: "f2 d2", G: "f2@3 ~", H: "~@3 f2 f2@3 f2 f2@8",
  I: "c3 c2", J: "[f2,f3]@3 ~", K: "[g2,g3]@3 ~", L: "c3 e3",
})).s("gm_tuba").gain(0.25)

// bass · tuba · soft notes
const bass_soft = note("<~@8 [f2@3 f2 f2@3 f2 f2@8] [f2@3 ~@13] ~@14 [f2@3 f2 f2@3 f2 f2@8] [f2@3 ~@13] ~@6>")
  .s("gm_tuba").gain(0.15)

stack(trumpet, trombone, bass, bass_soft)