Strudelify

Simple Gifts

Joseph Brackett

KeyF majorTempo96 bpm
0:00/0:00
// Simple Gifts — Joseph Brackett
// 96 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (2/2 at bar 1, 4/2 at bar 2, 2/2 at bar 7, 4/4 at bar 8) are rendered on a constant 4/4 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/136386; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 16 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(96/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 · "Bb Trumpet"
const trumpet = note("<A B C@2 D@2 E F G H I H J K L@2>".pickRestart({
  A: "bb4@13 eb5@13 eb5@6", B: "d5@6 c5@13 c5@13", C: "[bb4@13 bb4@13 bb4@12 ab4@6 ~ c5@6 f4@13]/2",
  D: "[bb4@13 c5@13 f4@12 bb4@26]/2", E: "g4 bb4", F: "eb5@2 eb5 d5", G: "c5@2 c5 d5", H: "bb4!2", I: "bb4@2 ab4 c5",
  J: "c5 d5", K: "eb5 ab4", L: "eb5",
})).s("gm_trumpet").gain(0.4)

// other · french horn · "F Mellophone"
const french_horn = note("<A B C@2 D@2 E F G H I J@2 K L@2>".pickRestart({
  A: "bb4@13 eb4@13 g4@6", B: "f4@6 eb4@6 ~ f4@6 g4@6 ~ ab4@6", C: "[bb4@13 bb4@6 ab4@6 ~ g4@12 f4@6 ~ eb4@6 f4@13]/2",
  D: "[bb3@13 c5@13 f4@12 g4@26]/2", E: "g4 f4", F: "g4@2 g4 f4", G: "eb4 d4 g4 ab4", H: "bb4@2 bb4 ab4",
  I: "g4@2 f4 eb4", J: "f4 bb3", K: "c5 [bb4,eb5]", L: "[bb4,eb5]",
})).s("gm_french_horn").gain(0.4)

// other · french horn · "F Mellophone"
const french_horn_2 = note("<A B C@2 D@2 E F G H I J K L M@2>".pickRestart({
  A: "bb4@13 eb4@13 g4@6", B: "f4@6 eb4@6 ~ d4@6 c4@6 ~ d4@6", C: "[eb4@13 eb4@6 f4@6 ~ g4@12 f4@6 ~ eb4@6 f4@13]/2",
  D: "[bb3@13 f4@13 bb3@12 d4@26]/2", E: "eb4 d4", F: "eb4@2 eb4 d4", G: "c4 d4 eb4 f4", H: "eb4@2 eb4 f4",
  I: "g4@2 f4 eb4", J: "f4!2", K: "d4!2", L: "ab4!2", M: "g4",
})).s("gm_french_horn").gain(0.4)

// chords · french horn · "Baritone Horn"
const french_horn_3 = note("<A B C@2 D@2 E F G H I J K L M@2>".pickRestart({
  A: "~@13 [eb3,bb3]@13 bb3@6", B: "d4@6 g3@13 eb3@13",
  C: "[[eb3,bb3]@13 eb3@6 f3@6 ~ [eb3,bb3]@12 bb2@6 ~ g3@6 d3@13]/2", // Eb5
  D: "[bb2@13 g3@13 eb3@12 f3@6 ~ g3@6 f3@6 ~ d3@6]/2", E: "bb2 ab3", F: "[eb3,eb4]", G: "[d3,d4]", H: "[c3,c4]",
  I: "[bb2,bb3]", J: "[eb3,ab3]!2", K: "[d3,eb4] [d3,bb3] [eb3,c4] [f3,d4]", L: "[eb3,eb4] [f3,bb3]", M: "[eb3,g3]",
})).s("gm_french_horn").gain(0.4)

// bass · tuba · "C Tuba"
const bass = note("<A@2 B@4 C D E F G H I J K@2>".pickRestart({
  A: "[~@13 [eb2,eb3]@25 [c2,c3]@26]/2", B: "[[ab1,ab2]@26 [bb1,bb2]@25 [c2,c3]@26 [bb1,bb2]@13 [ab1,ab2]@12 g2@26]/4",
  C: "[bb1,bb2]!2", D: "eb2", E: "d2", F: "[c2,c3]", G: "[bb1,bb2]", H: "ab2", I: "g2", J: "ab2 f2", K: "eb2/2",
})).s("gm_tuba").gain(0.3)

stack(trumpet, french_horn, french_horn_2, french_horn_3, bass)