Strudelify

What's In A Word

The Christians

KeyF majorTempo102 bpm
0:00/0:00
// What's In A Word — The Christians
// 102 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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.

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  ~@6 A B C D E B F D E B C D G B C D E B C D E H I J K J L M N B C D E B C D E B C D E B F D E B C D F H I J K J L M O
  H I J K J L M N B C D G P Q P Q P Q R S T U V W X Y ~@2 H I J K J L M O Z I J AA J L M AB H I J K J L M N B C D E B C
  D E AC@2
>`.pickRestart({
  A: "~@12 [f3,g3,ab3] [bb2,c3,db3,eb3] ab2 ~", B: "d1@3 ~ d2@2 ~ d2 ~ d2 d2@2 c2 a1 f1@2",
  C: "g1@3 ~ g1@2 ~ a1@2 a1 a1@2 ~ a1 c2 ~", D: "d1@3 ~ d2@2 ~ d2 ~@2 d2@2 c2 a1 f1 ~",
  E: "g1@3 ~ g1@2 ~ a1 ~ a1 a1@2 ~ a1 c2@2", F: "g1@3 ~ g1@2 ~ a1@2 a1 a1@2 ~ a1 c2@2",
  G: "g1@3 ~ g1@3 a1 ~ a1 a1@2 ~ a1 c2@2", H: "bb1@4 bb2@3 bb1 ~ bb1 bb1@4 c2@2", I: "f2@3 ~@4 f2 ~ f2 f2@2 ~@4",
  J: "bb1@4 bb2@3 bb1@2 ~ bb1@4 c2@2", K: "f2@3 ~ f2@3 ~@2 f2!2 ~ a1@4", L: "a1@4 a1@3 d2@2 ~ d2@2 c2@4",
  M: "bb1@4 bb2@3 bb1@2 ~ bb1@3 ~@3", N: "c2@3 ~@4 c2!2 ~@7", O: "c2@4 ~@4 c2 ~ c2@2 ~@4", P: "g1", Q: "c2 d2",
  R: "g1@13 ~@3", S: "[e3,f3,g3,a3] [f2,g2,a2,b2,c3,d3] [b1,c2,d2,e2] [e1,f1,g1,a1] [a0,b0,c1,d1] ~@9 c2 db2",
  T: "d2 ~ d2 ~@2 d2 ~@2 d1@3 ~@3 c2 db2", U: "d2!3 ~@2 d2 ~@2 d2 ~@5 c2 db2", V: "d2 ~ d2 ~@2 d2 ~@2 d1@2 ~@4 c2 db2",
  W: "d2 ~@6 c2", X: "d2 ~ d2 ~@2 d2 ~ d2 d1@2 ~@4 c2 db2", Y: "d2!3 ~@2 d2 ~ d2!2 ~@5 d2 ~",
  Z: "bb1@4 bb2@3 bb1@2 bb1 bb1@4 c2@2", AA: "f2@3 ~ f2@3 ~@2 f2 f2@2 a1@4", AB: "c2@3 ~@6 c2!2 ~@5",
  AC: "[d2@11 ~@5]/2",
})).s("gm_electric_bass_finger").gain(0.4)

// bass · electric bass finger · "FINGERDBAS" · soft notes
const bass_soft = note(`<
  ~@6 A ~@2 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2 C D E F ~ G H ~@2 B ~@3 B ~@3 B ~@3 B ~@3 B ~@2 C D E F ~ G I ~ C D E F ~ G H
  ~@2 B ~@8 J ~ K ~@7 C D E F ~ G I ~ C D E F ~ G L ~ C D E F ~ G H ~@2 B ~@3 B ~@3
>`.pickRestart({
  A: "~@14 [db2,eb2,f2,g2] [f1,g1,ab1,bb1,c2]", B: "~@9 d2 ~@6", C: "~@2 f2 ~@3 c2@2", D: "~@9 bb1 ~@6",
  E: "~@7 f2 ~@8", F: "~@2 bb2 ~@6 bb1 ~@6", G: "~@7 bb1", H: "~@6 c2 ~@9", I: "~@7 c2 ~@8",
  J: "~@9 b1 [c2,d2,e2,f2,g2,a2,b2,c3] d3 [a1,b1,c2,d2,e2,f2,g2,a2,b2,c3,d3] [e2,f2,g2,a2,b2,c3] ~@2", // Cmaj7 Am7 Cmaj7
  K: "~@7 d2 ~@6 db2 ~", L: "~@7 c2@2 ~@7",
})).s("gm_electric_bass_finger").gain(0.2)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  A B C D E F G ~@4 H I H I J@2 K I H I H I J@2 K L M N O P M N Q R S T S T ~@4 U V@2 W H I H I J@2 K I M X O P M N Q Y
  M Z O P M AA@2 R AB AC@2 AD AE AF@2 AG AH@2 AI@2 ~@8 M X O P M N Q Y M Z O P M N Q Y M N O P M N Q R S T S T S T S T
  AJ ~
>`.pickRestart({
  A: "[g3,e4]@3 [a3,f4]@3 [a2,g3,e4]@2, c4, f2@3 ~", B: "[bb2,f3,bb3,d4]@15 ~",
  C: "[f3,a3,c4]@3 [f3,a3]@3 [a2,f3,a3,c4]@2, f2@13 ~@3", D: "[bb2,bb3,d4], f3@7 ~",
  E: "[a2,g3,e4]@3 [d3,a3,f4]@3 [c3,g3,e4]@2, c4", F: "[bb2,f3,bb3,d4]", G: "[c3,g3,c4,e4]@3 ~", H: "[f3,a3,c4]",
  I: "[g3,b3] [c3,a3], e3@15 ~", J: "[[f3,c4]@2 [g3,b3] [c3,a3], d4@25 ~@7, a3@8 ~@8 e3@15 ~]/2",
  K: "d4 e4, [f3,a3,c4]", L: "[g3,b3]@8 [c3,a3]@7 ~, e3@15 ~", M: "[bb3,d4], f3@7 ~",
  N: "[g3,e4]@3 [a3,f4]@3 [g3,e4]@2, c4", O: "[f3,bb3,d4]@15 ~", P: "[f3,a3,c4]@3 [f3,a3]@3 [f3,a3,c4]@2",
  Q: "[f3,bb3,d4]", R: "[g3,c4,e4]@9 ~@7", S: "[a4,d5,f5]", T: "[b4,e5,g5] [a4,d5,f5]", U: "[d2,f3,a3,c4,d4]",
  V: "[[g3,b3] [d3,c4] [c4,d4] e4, e3@7 ~ [f3,a3]@24, ~ d2]/2", W: "[e3,g3,b3]@8 [d3,f3,a3]@7 ~",
  X: "[g3,e4,g5,c6,e6]@3 [a3,f4,a5,c6,f6]@3 [g3,e4,g5,c6,e6]@2, c4", Y: "[g3,c4,e4]@15 ~",
  Z: "[f3,a3,e4,g5,c6,e6]@3 [a3,f4,a5,c6,f6]@3 [g3,e4,g5,c6,e6]@2, c4", // Fmaj7 F C
  AA: "[[g3,e4]@3 a3@2 ~@3 [f3,bb3,d4]@8, c4 ~, ~@6 g4@3 ~ f4@4 e4@4 ~@14, ~@3 g3 ~@4]/2", AB: "[d2,f4,a4], c4@7 ~",
  AC: "[[g2,d4,g4,b4] a2 d2@2, ~ [c4,f4,a4]@3]/2", AD: "[g2,d4,g4,b4]@8 [a2,c4,f4,a4]@7 ~", AE: "[g2,g3,bb3,d4]",
  AF: "[[c3,g3,c4,e4] [d3,a3,f4] ~ f4, ~ d4@3, ~ [g2,g3,bb3]]/2", AG: "[c3,g3,c4,e4] [d3,a3,d4,f4]",
  AH: "[d4 ~ [c3,g3,c4,e4] [d3,a3,d4,f4], [g2,g3,bb3] ~, ~@8 g4@23 ~]/2", // C Dm Gm
  AI: "[~@8 f4@7 ~@17, g4@9 ~@7, [g2,g3,bb3,d4] ~]/2", AJ: "[d2,f3,a3,c4]@15 ~, [a4,c5,d5,f5] ~",
})).s("gm_string_ensemble_1").gain(0.15)

// chords · piano · "AC/EL.PNO"
const piano = note(`<
  A B C B D B E F G H I J ~@15 B K B L M N B O ~@20 B P B L M N B O B Q B L M N B R S@2 T@2 U V W@2 X Y Z ~@9 B P B L M
  N B O B AA B L M N B O B AB B L M N B O ~@10
>`.pickRestart({
  A: "[g3,c4,e4]@5 ~ [a3,c4,f4]@5 ~ [a1,a2,g3,c4,e4]@4, [f1,f2]@11 ~@5", B: "[bb1,bb2,f3,bb3,d4]@15 ~",
  C: "[f3,a3,c4]@5 ~ [f3,a3]@5 ~ [a1,a2,f3,a3,c4]@3 ~, [f1,f2]@5 ~@3", // F
  D: "[a2,g3,c4,e4]@6 [d2,d3,a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@3 ~, a1 ~@3", E: "[c2,c3,g3,c4,e4]@15 ~", F: "~@6 a5 f5",
  G: "g5@7 ~ a5@5 ~ c6@2", H: "d5@9 ~@3 a5 ~ f5 ~", I: "g5@7 ~ f5 e5 d5@4 c5@2", J: "d5 ~",
  K: "[g3,c4,e4]@5 ~ [a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@3 ~, [f1,f2]@11 ~@5", // C F C F
  L: "[f3,a3,c4]@5 ~@3 g3@2 a3@5 ~, [f1,f2]@5 ~@3, ~@8 c4@7 ~", M: "[f3,bb3,d4]@15 ~",
  N: "[a2,g3,c4,e4]@6 [d2,d3,a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@4, a1 ~@3", O: "[c2,c3,g3,c4,e4]@9 ~@7",
  P: "[g3,c4,e4]@5 ~ [a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@4, [f1,f2]@5 ~@3", // C F C F
  Q: "[f3,c4,e4]@5 ~ [a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@4, [f1,f2]@11 ~@5", R: "[c2,c3,g3,c4,e4]@9 ~@3 g5@2 e5@2",
  S: "[[c4,f4,a4]@8 [d4,g4,b4]@4 ~@2 g5 e5, f5@19 ~@5 [c4,f4,a4]@7 ~]/2", // F G F
  T: "[f5@3 d5@3 a4 ~ [d4,g4,b4]@4 [c4,f4,a4]@4, [c4,f4]@15 ~@17, a4@6 ~ d5@5 ~@4]/2", // G F F5
  U: "~@6 [bb3,bb4,bb5] ~ [bb3,bb4,bb5]@3 [a3,a4,a5]@3 [g3,g4,g5]@2", // Bb A G
  V: "[f3,f4,f5]@3 [e3,e4,e5]@3 [f3,f5]@2 [g3,g4,g5]@2 ~ [f3,f4,f5]@3 [d4,d5] ~, ~@6 f4 ~@7 d3@2", // F E F G F D
  W: "[[d4,d5]@25 ~@7, d3 ~]/2", X: "~@6 [bb3,bb4,bb5] ~ [bb3,bb4,bb5]@3 [a3,a4,a5]@3 [g4,g5] ~, ~@7 g3",
  Y: "[f4,f5]@2 ~ [e3,e4,e5]@3 [f4,f5] ~ [g3,g4,g5]@3 [f3,f4,f5]@3 [d4,d5] ~, ~@3 f3 ~@3 d3", Z: "[d4,d5]",
  AA: "[f3,c4,e4]@5 ~ [a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@3 ~, [f1,f2]@5 ~@3", // Fmaj7 F C F
  AB: "[g3,c4,e4]@5 ~ [a3,c4,f4]@5 ~ [c2,c3,g3,c4,e4]@4, [f1,f2]@11 ~@5", // C F C F
})).s("gm_piano").gain(0.56)

// chords · epiano2 · "AC/EL.PNO"
const epiano2 = note("<~@35 A B C@2 D E D F D E G@2 A E D H@4 I ~@31 J K L@2 ~@25 A B C@2 D B C@2 ~@2>".pickRestart({
  A: "[c4,f4,a4]", B: "[d4,g4,b4]@4 ~@2 g5 e5, ~@8 [c4,f4,a4]@7 ~",
  C: "[f5@3 d5@3 a4 ~ [d4,g4,b4]@4 [c4,f4,a4]@4, [c4,f4]@15 ~@17, a4@6 ~ d5@5 ~@4]/2", D: "[c4,f4,a4]@15 ~",
  E: "[d4,g4,b4]@8 [c4,f4,a4]@7 ~", F: "[d4,g4,b4] [c4,f4,a4]",
  G: "[~@12 f5@11 ~ [c4,f4,a4]@7 ~, ~@9 f4@14 ~@9, ~@5 [g4,a4,c5]@7 ~@4, ~@11 d5@12 ~@9]/2", // F Am7
  H: "[[d4,g4,b4]@8 ~@8 [b4,b5]@2 [c5,c6]@2 f5@2 [e4,e5]@8 [c5,c6]@2 [d5,d6]@2 [f4,f5]@2 [g4,g5]@2 [e5,e6]@2 [f5,f6]@2 [g4,g5]@2 [a4,a5]@2 [f5,f6]@8 [d5,d6]@4 [a4,a5]@3 [c5,c6]@3, ~@8 [c4,a4]@25 ~@31, ~@2 f4@3 f4@3 ~@8]/4", // G B C E C D F G …
  I: "[b4,b5]@6 [g4,g5]@2 [a4,a5]@5 ~@3", // B G A
  J: "~@2 [d4,g4,b4] ~ [d4,g4,a4,b4] [d4,g4,b4] ~ [c4,f4,a4] ~ [c4,f4,a4] ~ d3 [f4,a4]@2 [d4,g4,b4] ~, ~@12 c4 ~@3", // G F G
  K: "~@4 [c4,f4,a4] ~@7 [c4,f4,a4] ~@3", // F
  L: "[~@4 [d4,g4,a4,b4] [d4,g4,b4] ~ [c4,f4,a4] ~@4 [c4,f4,a4] ~ [c4,f4,a4]@13 ~@5]/2", // G F
})).s("gm_epiano2").gain(0.56)

// drums · kick
const kick = s("bd").struct("<~@7 A@20 B@7 C A@20 B@15 C A@4 D@2 E F D@2 E G A@6 ~@2 B@23 C A@8 G ~>".pickRestart({
  A: "x ~@5 x!2 ~ x!2 ~@3 x ~", B: "x ~@6 x ~@2 x ~@3 x ~", C: "x ~@5 x!3 ~@7", D: "x ~ x!2 ~@2 x!2 ~ x!2 ~@3 x ~",
  E: "x ~ x ~@3 x!2 ~ x!2 ~@3 x ~", F: "x ~ x!2 ~@3 x ~ x!2 ~@3 x!2", G: "x",
})).gain(0.64)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@7 A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B A B A B ~@16 A B A B ~@2 C D ~@2 C ~ A
  B A B A B ~@26 A B A B A B A B ~@2
>`.pickRestart({
  A: "~ x ~@6", B: "~@2 x ~@10 x ~@2", C: "~@3 x ~@12", D: "~@3 x ~@4",
})).gain(0.36)

// drums · snare
const snare = s("sd").struct("<~@6 A B@27 C B@35 C B@11 D B@6 ~ E B@23 C B@8 ~@2>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~ x", C: "~ x ~@2", D: "~@4 x!2 ~ x ~ x!2 ~ x ~ x!2", E: "~@12 x!2 ~@2",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@3 A@31 B A@35 B A@11 ~ A@6 ~@2 A@23 B A@8 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@6 [~@7 x] ~@63 [~ x] ~@54>").gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@7 A B A B C@16 D@7 E A B A B C@16 D@15 E A B A B C@7 F A B A B A B G H D@23 E A B A B A B A B ~@2
>`.pickRestart({
  A: "x!3 ~ x ~ x!5 ~ x ~ x!2", B: "x!3 ~ x ~ x!5 ~ x ~@3", C: "x!16", D: "x!5 ~ x!3 ~ x ~ x ~ x!2", E: "x!5 ~@3 x ~@7",
  F: "x", G: "x!2 ~@2", H: "x ~@2 x",
})).gain(0.5)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@7 A@4 ~@24 A@4 ~@32 A@4 ~@8 A@6 B C ~@24 A@8 ~@2>".pickRestart({
  A: "~@3 x ~ x ~@5 x ~ x ~@2", B: "~@2 x!2", C: "~ x!2 ~",
})).gain(0.29)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 [~@13 x ~@2] ~@83 [~@7 x] ~@34>").gain(0.71)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~ A ~@23 B ~ A ~ A ~@31 B ~ A ~ A ~@9 A ~ A ~ A ~@25 B ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4",
})).gain(0.71)

// drums · ride
const ride = s("rd").struct("<~@7 A ~@27 A ~@35 A ~@11 A ~@31 A ~@3 A ~@5>".pickRestart({
  A: "x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 A@4 ~@20 A@7 B ~@20 A@15 B ~@20 A@23 B ~@10>".pickRestart({
  A: "x!16", B: "x!9 ~@7",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@11 A ~@7 A ~@7 A ~@11 A ~@7 A ~@7 A ~@3 A ~@3 A ~@11 A ~@15 A ~@3 A ~@3 A ~@7 A ~@17
>`.pickRestart({
  A: "x",
})).gain(0.71)

// drums · bongos
const bongos = s("bongo:4").struct("<~@19 A@8 ~@20 A@35 ~ A@6 ~@2 A@8 ~@26>".pickRestart({
  A: "~ x ~ x",
})).gain(1.69)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@19 A@3 B@4 C ~@20 A@3 B@4 C A@3 B@4 C A@3 B@4 C A@3 B A@3 B@4 ~ A@3 B A@2 ~@2 A@3 B@4 C ~@26
>`.pickRestart({
  A: "~@2 x ~@4 x ~ x ~ x ~@2 x ~", B: "~@2 x ~@4 x ~ x!3 ~@2 x ~", C: "~@2 x ~ x ~@2 x ~ x!3 ~@2 x ~",
})).gain(1.83)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct(`<
  ~@19 A@3 ~@25 A@3 ~@5 A@3 ~@5 A@3 ~@5 A@3 ~ A@3 ~@5 A@3 ~ A@2 ~@2 A@3 ~@31
>`.pickRestart({
  A: "~@5 x ~@2",
})).gain(1.14)

// drums · ht
const ht = s("ht").struct("<~@75 [x ~ x!3 ~@9 x!2]!7 x ~@42>").gain(0.36)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@7 [~ x ~ x ~ x ~ x]!20 ~@12 [~ x ~ x ~ x ~ x]!16 ~@70>").gain(3.26)

// drums · triangle
const triangle = s("triangles:35").struct(`<
  ~@11 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8 B ~@4 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@8 B ~@7 B ~@12 A ~ A ~ A ~ A ~@8 B ~@7 B
  ~@7 B ~@8 C ~
>`.pickRestart({
  A: "~ x ~@2", B: "~ x", C: "x ~@6 x",
})).gain(3.11)

// drums · triangle · soft notes
// … 10 more lines