Strudelify
KeyF majorTempo120 bpm
0:00/0:00
// Hometown — Twenty-One Pilots
// 120 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/3635271; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 114 bars on a 16-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 · [c3,e3] is a chord · "a, b" plays two voices at once · [...]/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
const flute = note(`<
  A@2 B@2 C@4 ~@4 D E D E F G H G I@8 J ~ K@2 J ~@3 A@2 B@2 C@4 L M L N O P O Q I@8 J ~ K@2 J ~@11 A@2 B@2 C@4 ~@16 R@8
  J ~@5
>`.pickRestart({
  A: "[~ [c5,c6] [a5,a6] [g5,g6] [f5,f6] [g5,g6]@2 [g5,g6]@3 [f5,f6] [a5,a6] [g5,g6] [f5,f6] [d5,d6]@2]/2", // C A G F G F A G …
  B: "[~@2 [a5,a6] [g5,g6] [f5,f6] [g5,g6]@2 [g5,g6]@3 [f5,f6] [a5,a6] [g5,g6] [f5,f6] [d5,d6]@2]/2", // A G F G F A G F …
  C: "[~@2 [a5,a6] [g5,g6] [f5,f6] [g5,g6]@2 g6 g6@2 [f5,f6] [a5,a6] [c6,c7] [c6,c7]@3, ~@7 g5@3 ~@6]/2", // A G F G F A C
  D: "~@6 c6!2 c6@2 d6!2 d6@2 ~ c6", E: "c6@2 d6@2 d6@2 c6@2 c6@2 a5@2 a5@2 a5 g5", F: "~@3 c6!2 d6!2 ~",
  G: "c6@2 d6 d6@2 c6 c6@2 c6@2 a5 a5@2 g5 g5@2", H: "~@6 c6@2 c6@2 d6@2 d6@2 ~ c6",
  I: "[~@6 c6 c6@2 bb5@4 ~ c6 c6@2 bb5@4 ~ bb5 bb5@2 a5@2 a5@2 f5@2 f5@2 e5@4 ~ c6 c6@2 bb5@4 ~ d6 c6@2 bb5@4 ~ bb5 bb5@2 a5@2 a5@2 f5@2 f5]/8",
  J: "g5 ~", K: "[~@6 bb5 bb5@2 a5@2 a5@2 f5@2 f5]/2", L: "~@6 c6!2 c6@2 d6!2 d6@2 ~@2",
  M: "c6@2 d6 d6@3 c6@2 c6@2 a5 a5@2 g5!2 ~", N: "c6@2 d6 d6@2 c6@2 c6 c6@2 a5 a5@2 g5!2 ~",
  O: "~@6 e6!2 e6@2 f6!2 f6@2 ~@2", P: "f6@2 d6 f6@2 f6@2 d6 f6@2 d6 f6@2 d6 f6@2",
  Q: "f6@2 d6 f6@2 ~@2 d6 f6@2 d6 f6@2 d6 f6@2",
  R: "[~@6 [c6,e6] [c6,e6]@2 [bb5,d6]@4 ~ [c6,e6] [c6,e6]@2 [bb5,d6]@4 ~ [bb5,d6] [bb5,d6]@2 [a5,c6]@2 [a5,c6]@2 [f5,a5]@2 [f5,a5]@2 [e5,g5]@4 ~ [c6,e6] [c6,e6]@2 [bb5,d6]@4 ~ [d6,f6] [c6,e6]@2 [bb5,d6]@4 ~ [bb5,d6] [bb5,d6]@2 [a5,c6]@2 [a5,c6]@2 [f5,a5]@2 f5]/8", // C Bb C Bb Am F Em C …
})).s("gm_flute").gain(0.4)

// chords · harpsichord
const harpsichord = note(`<
  A B C D A B C D ~@12 A B C D A B C D E F G H E F G H I J K L I J K L ~@8 A B C D A B C D E F G H E F G H ~@24 E F G H
  E F G H E F G H E F G H ~@6
>`.pickRestart({
  A: "[c4,e4,g4,c5]", B: "[g3,bb3,d4,g4]", C: "[bb3,d4,f4,bb4]", D: "[d4,f4,a4,d5]",
  E: "[c4,e4,g4,c5]@3 [c4,e4,g4,c5]@3 [c4,e4,g4,c5]@2", F: "[g3,bb3,d4,g4]@3 [g3,bb3,d4,g4]@3 [g3,bb3,d4,g4]@2",
  G: "[bb3,d4,f4,bb4]@3 [bb3,d4,f4,bb4]@3 [bb3,d4,f4,bb4]@2", H: "[d4,f4,a4,d5]@3 [d4,f4,a4,d5]@3 [d4,f4,a4,d5]@2",
  I: "[c4,e4,g4,c5]@3 [c4,e4,g4,c5]@4 ~", J: "[g3,bb3,d4,g4]@3 [g3,bb3,d4,g4]@4 ~",
  K: "[bb3,d4,f4,bb4]@3 [bb3,d4,f4,bb4]@4 ~", L: "[d4,f4,a4,d5]@3 [d4,f4,a4,d5]@4 ~",
})).s("gm_harpsichord").gain(0.3)

// chords · piano
const piano = note("<~@68 A B C D A B C D A B C E A B C E ~@4 F G H ~@17 I J K L M@2>".pickRestart({
  A: "~@2 f5 e5, [c3,e3,g3,c4]@15 ~", B: "~@2 f5 e5, [g2,bb2,d3,g3]@15 ~", C: "~@2 f5 e5, [bb2,d3,f3,bb3]@15 ~",
  D: "~@2 f5 g5, [d3,f3,a3,d4]@15 ~", E: "~@2 f5 g5, [d2,f2,a2,d3]@15 ~", F: "~ [g5,c6]@7 ~@8, e5 ~",
  G: "~ [d5,g5]@7 ~@8, bb4 ~", H: "~ [f5,bb5]@7 ~@8, d5 ~",
  I: "~@2 f5 e5, c3@15 ~, ~@2 e3@13 ~, ~@4 g3@11 ~, ~@6 c4@9 ~",
  J: "~@2 f5 e5, g2@15 ~, ~@2 bb2@13 ~, ~@4 d3@11 ~, ~@6 g3@9 ~",
  K: "~@2 f5 e5, bb2@15 ~, ~@2 d3@13 ~, ~@4 f3@11 ~, ~@6 bb3@9 ~",
  L: "~@2 f5 g5, d3@15 ~, ~@2 f3@13 ~, ~@4 a3@11 ~, ~@6 d4@9 ~", M: "[[c3,e3,g3,c4,e4,g4,c5]@15 ~]/2",
})).s("gm_piano").gain(0.25)

// other · violin
const violin = note("<~@68 A@3 B A@3 B A@3 B A@3 B ~@24 A@3 B ~@2>".pickRestart({
  A: "~@2 f5 e5", B: "~@2 f5 g5",
})).s("gm_violin").gain(0.25)

// chords · electric guitar clean · "Electric Guitar"
const electric_guitar_clean = note(`<
  ~@8 A B C D A B C D A B C D ~@8 E F G H E F G H ~@8 A B C D A B C D ~@8 E F G H E F G H ~@24 E F G H E F G H E F G H E
  F G H ~@6
>`.pickRestart({
  A: "[c3,g3,c4,e4,g4,c5]@3 [c3,g3,c4,e4,g4,c5] ~@2 [c3,g3,c4,e4,g4,c5] ~ [c3,g3,c4,e4,g4,c5]@3 [c3,g3,c4,e4,g4,c5] ~@2 [c3,g3,c4,e4,g4,c5] ~", // C
  B: "[g2,d3,g3,bb3,d4,g4]@3 [g2,d3,g3,bb3,d4,g4] ~@2 [g2,d3,g3,bb3,d4,g4] ~ [g2,d3,g3,bb3,d4,g4]@3 [g2,d3,g3,bb3,d4,g4] ~@2 [g2,d3,g3,bb3,d4,g4] ~", // Gm
  C: "[bb2,f3,bb3,d4,f4,bb4]@3 [bb2,f3,bb3,d4,f4,bb4] ~@2 [bb2,f3,bb3,d4,f4,bb4] ~ [bb2,f3,bb3,d4,f4,bb4]@3 [bb2,f3,bb3,d4,f4,bb4] ~@2 [bb2,f3,bb3,d4,f4,bb4] ~", // Bb
  D: "[d3,a3,d4,f4,a4,d5]@3 [d3,a3,d4,f4,a4,d5] ~@2 [d3,a3,d4,f4,a4,d5] ~ [d3,a3,d4,f4,a4,d5]@3 [d3,a3,d4,f4,a4,d5] ~@2 [d3,a3,d4,f4,a4,d5] ~", // Dm
  E: "[c3,g3,c4,e4,g4,c5]@3 [c3,g3,c4,e4,g4,c5]@3 [c3,g3,c4,e4,g4,c5]@2", // C
  F: "[g2,d3,g3,bb3,d4,g4]@3 [g2,d3,g3,bb3,d4,g4]@3 [g2,d3,g3,bb3,d4,g4]@2", // Gm
  G: "[bb2,f3,bb3,d4,f4,bb4]@3 [bb2,f3,bb3,d4,f4,bb4]@3 [bb2,f3,bb3,d4,f4,bb4]@2", // Bb
  H: "[d3,a3,d4,f4,a4,d5]@3 [d3,a3,d4,f4,a4,d5]@3 [d3,a3,d4,f4,a4,d5]@2", // Dm
})).s("gm_electric_guitar_clean").gain(0.25)

// bass · electric bass pick · "Bass Guitar"
const bass = note(`<
  ~@8 A B C D A B C D A B C D E F G H E F G H I J K L I J K L A B C D A B C D A B C D A B C D E F G H E F G H I J K L I
  J K L E F G H E F G H ~@8 I J K L I J K ~ I J K L I J K L I J K L I J K L E F G H M@2
>`.pickRestart({
  A: "c2@4 c2@4 ~@2 c2@3 c2@3", B: "g1@4 g1@4 ~@2 g1@3 g1@3", C: "bb1@4 bb1@4 ~@2 bb1@3 bb1@3",
  D: "d1@4 d1@4 ~@2 d1@3 d1@3", E: "c2", F: "g1", G: "bb1", H: "d1", I: "c2 c3@2 c2 c3@2 c2 d2",
  J: "g1 g2@2 g1 g2@2 bb1 c2", K: "bb1 bb2@2 bb1 bb2@2 c2 d2", L: "d2 d3@2 d2 d3@2 f2 e2", M: "c2/2",
})).s("gm_electric_bass_pick").gain(0.4)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B A B A B A B A B A B ~@8 C@7 D A B A B A B A B A B A B A B A B ~@3 E F ~@3 G@8 ~@8 H@8 ~@8 G@16 ~@6
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "x ~@9 x ~@2 x ~@2", C: "x ~@2 x!2 ~@3", D: "x ~@2 x!3 ~@2", E: "~@10 x ~@2 x ~@2", F: "x",
  G: "x!2", H: "x!4",
})).gain(0.45)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B A B A B A B A B A B A@7 ~ A@7 C A B A B A B A B A B A B A B A B A@7 ~ A@7 C ~@8 D@3 E D E D E ~@7 F A@7 C A@7
  C ~@6
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x", C: "~@4 x ~@7 x!3 ~", D: "~ x", E: "~@8 x ~@5 x!2", F: "x!2 ~@7 x ~@2 x ~@3",
})).gain(0.45)

// drums · hihat
const hihat = s("hh").struct("<~@20 A@7 ~@25 A@7 ~ B@7 C ~@24 B@7 C B@7 C ~@6>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~ x ~@2",
})).gain(0.45)

// drums · mid tom
const mid_tom = s("mt").struct("<~@76 [~@6 x!3 ~@7]!8 ~@7 [~@6 x!2 ~@3 x ~@2 x!2] ~@22>").gain(0.45)

// drums · high tom
const high_tom = s("ht").struct("<~@76 A B A B A B A B ~@7 C ~@22>".pickRestart({
  A: "~@2 x!4 ~@8 x!2", B: "x", C: "~@3 x!2 ~@5 x ~ x!2 ~@2",
})).gain(0.45)

// drums · crash
const crash = s("cr").struct("<~@84 x ~@29>").gain(0.45)

stack(flute, harpsichord, piano, violin, electric_guitar_clean, bass, kick, snare, hihat, mid_tom, high_tom, crash)

More by Twenty One Pilots