Strudelify

Let my people go

Trad. gospel

KeyG majorTempo120 bpm
0:00/0:00
// Let my people go — Trad. gospel
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5874251; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 31 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · flute · "Flûte"
const flute = note("<A B C@2 A B D E F G H I J@2 D ~ A B C@2 A B D E F G H I J@2 D>".pickRestart({
  A: "f5!2 e5!2", B: "f5@3 ~ f5@6 d5@14", C: "[a5@6 a5@6 c#6@3 ~ c#6@6 d6@14 ~@12]/2",
  D: "a5@6 a5@6 c#6@3 ~ c#6@6 d6@2", E: "~@6 d6@3 ~ a5@2 d6@3 ~ d6@2 ~@6", F: "d5@3 ~ d5@8 ~@12", G: "g5@3 ~ g5@8 ~@12",
  H: "a5@3 ~@3 a5@3 ~@2 g5", I: "a5@6 g5@6 f5@3 ~ d5@8", J: "f5@3 ~ d5@8 ~@12",
})).s("gm_flute").gain(0.3)

// other · trumpet · "Trompette en Si♭"
const trumpet = note("<A B C@2 A B D ~ E F G H I@2 D ~ A B C@2 A B D ~ E F G H I@2 D>".pickRestart({
  A: "d4!2 c#4!2", B: "d4@2 d4@3 a#3@7", C: "[d4@3 d4@3 e4@2 e4@3 f4@7 ~@6]/2", D: "d4@3 d4@3 e4@2 e4@3 f4",
  E: "~@3 f4 f4@2", F: "~@3 d4 d4@2", G: "~ d4 ~ d4", H: "d4@3 d4@3 d4@2 a3@4", I: "a3 a3@2 ~@3",
})).s("gm_trumpet").gain(0.3)

// other · alto sax · "Saxophone Alto"
const alto_sax = note("<A B C@2 A B D ~ E F G H I@2 D ~ A B C@2 A B D ~ E F G H I@2 D>".pickRestart({
  A: "a3!2 g3!2", B: "a3@2 a3@3 f3@7", C: "[f3@3 f3@3 g3@2 g3@3 a3@7 ~@6]/2", D: "f3@3 f3@3 g3@2 g3@3 a3",
  E: "~@3 a4 a4@2", F: "~@3 a#4 a#4@2", G: "~ f4 ~ f4", H: "f4@3 f4@3 f4@2 f4@4", I: "a4 f4@2 ~@3",
})).s("gm_alto_sax").gain(0.3)

// other · baritone sax · "Saxophone Baryton"
const baritone_sax = note("<A B C D A B C D E F C D G H I J A B C D A B C D E F C D G H I>".pickRestart({
  A: "d3 f3 e3 a2", B: "d3@3 a3@3 g3@2 g3 d3@3", C: "d3 a2 e3 a2", D: "d3@2 d3 c3@3 a#2@3 a2@3",
  E: "d3@2 d3@4 a2@3 d3@2 f#3", F: "g3@2 g3@4 d3@3 g3@2 c#3", G: "d3@2 d3@4 d2@3 d3@2 c#3",
  H: "d3@2 d3@4 g2@3 g3@2 c#3", I: "d3@3 d3@3 a2@2 a2@3 d3", J: "~@2 a#2 c#3@2 e3 a3@2 g#3 g3@2 c#3",
})).s("gm_baritone_sax").gain(0.41)

stack(flute, trumpet, alto_sax, baritone_sax)