Strudelify

When the Saints Go Marchin' In

Fats Domino

KeyE majorTempo172 bpm
0:00/0:00
// When the Saints Go Marchin' In — Domino Fats
// 172 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(172/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.

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B@2 C D@2 E F@3 G H I J K@2 L M N O D@2 E F@3 G H I J K@2 L M N O D@2 E F@3 G H I J K@2 L M N O D@2 E F@3 G H I J
  K@2 L M N O D@2 E F@3 G H I J K@2 L M N O D@2 E F@3 G H I J K@2 L M P Q
>`.pickRestart({
  A: "[e3,g#3,b3]@3 ~@3 e3 ~ [e3,g#3,c#4]@3 ~ c#4@2 b3@2, ~@3 [e3,g#3]", // E C#m E
  B: "~@6 e3 ~ [e3,g#3,c#4]@3 ~ [e3,g#3,c#4]@2 [e3,g#3,b3]@2", C: "~@2 [e3,a3,c#4,e4]@9 ~ [e3,a3,c#4,e4]@3 ~",
  D: "[[e3,g#3]@3 ~@3 e3 ~ [e3,g#3,c#4]@3 ~ [e3,g#3,c#4]@2 [e3,g#3,b3]@4 ~@4 e3 ~ [e3,g#3,c#4]@3 ~ c#4@2 b3@2, b3@5 ~@23 [e3,g#3]@4]/2", // E C#m E C#m E
  E: "~@6 e3 ~ [e3,g#3,c#4]@3 ~ [g#3,c#4] ~ [e3,g#3,b3]@2, ~@6 e3 ~", // C#m C#5 E
  F: "[~@6 e3 ~ [e3,g#3,c#4]@3 ~ c#4@2 [g#3,b3]@5 ~@3 [e3,g#3,b3] ~ [e3,g#3,c#4]@3 ~ c#4@2 b3@9 ~ [e3,g#3,c#4]@3 ~ [e3,g#3,b3]@3 ~, ~@12 e3@7 ~@9 [e3,g#3]@11 ~@9, ~@12 g#3 ~@35]/3", // C#m G#m E C#m E
  G: "[f#3,a3,c#4]@7 ~ [f#3,a3,c#4,e4]@6 [f#3,a3,c#4,e4] ~", H: "~@2 [f#3,a3,c#4,e4]@9 ~ [f#3,a3,c#4,e4]@3 ~",
  I: "[g#3,b3]@6 e3 ~ [e3,g#3,c#4]@3 ~ [e3,g#3,c#4]@4, e3 ~@3", J: "[d3,g#3,b3]@7 ~ [g#3,b3,d4]@4 [g#3,b3,d4]@3 ~",
  K: "[[e3,g#3,c#4,e4]@7 ~ [e3,g#3,c#4,e4]@6 [a3,c#4,e4]@8 f#3 ~ [f#3,a3,c#4,e4]@3 ~ [f#3,a3,c#4,e4]@3 ~, ~@14 f#3@7 ~@11]/2", // C#m A F#m7
  L: "[e3,g#3,b3]@8 [g#3,c#4,e4]@7 ~", M: "[a3,c#4,e4]@7 ~ [e3,a3,c#4,e4]@7 ~",
  N: "[g#3,b3]@6 e3 ~ [e3,a3,c#4]@3 ~ [e3,a3,c#4]@2 [e3,g#3,b3]@2, e3@5 ~@11", // G#m A E
  O: "~@4 [e3,a3,c#4,e4]@6 ~@2 [e3,a3,c#4,e4]@3 ~", // A
  P: "[e3,g#3,b3]@7 ~ [e3,a3,c#4,e4]@2 ~@2 [e3,c#4,e4]@2 [e3,g#3,b3,e4]@2, ~@12 a3 ~@3", Q: "~@2 [e3,g#3,c#4,e4]@7 ~@7",
})).s("gm_piano").gain(0.33).pan(0.3)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A@3 B C@6 D E F G H@2 I J K@2 C@6 D E F G H@2 I J K@2 C@6 D E F G H@2 I J K@2 C@6 D E F G H@2 I J K@2 C@6 D E F G H@2
  I J K@2 C@6 D E F G H@2 I J L M
>`.pickRestart({
  A: "[e1@5 ~@3 c#2@3 ~ b1@2 e1@5 ~@5 c#2@4 b1@2 e1@5 ~@5 c#2@4 b1@2 e1@2]/3", B: "~@2 b1@13 ~",
  C: "[e1@5 ~@3 c#2@4 b1@2 e1@5 ~@5 c#2@4 b1@2 e1@6 ~@4 c#2@4 b1@2 e1@5 ~@5 c#2@4 b1@2 e1@5 ~@5 c#2@3 ~ b1@2 e1@9 ~ b1@7 ~]/6",
  D: "f#1@7 ~ f#1@3 ~ f#1@2 b1@2", E: "~ b0@5 b1@2", F: "e1@5 ~@3 c#2@3 ~ b1@2 e1@2", G: "g#1@7 ~ g#1@8",
  H: "[a1@7 ~ a1@6 f#1@9 ~ f#1@7 ~]/2", I: "e1@7 ~ c#2@8", J: "a1@7 ~ b1@8",
  K: "[e1@6 ~@2 a1@3 ~ a1@2 e1@5 ~ b1@7 ~ b1@3 ~]/2", L: "e1@3 ~ b1 ~ b1 e1", M: "~ e1@5 ~@2",
})).s("gm_acoustic_bass").gain(0.22)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B C D E F G H B I J K L M N O P Q R S E F G H B I J K L M N O P Q R S E F G H B I J K L M N O P Q R S E F G H B I J
  K L M N O P Q R S E F G H B I J K L M N O P Q R S E F G H B I J K L M N O P Q T ~
>`.pickRestart({
  A: "e3 ~@5 e3 ~@3 e3 ~@5", B: "e3 ~@3 c#3 ~ e3 ~@3 e3 ~@5", C: "e3 ~@5 e3 ~@3 e3 ~ c#3 ~@3", D: "~ b2@5 ~@2",
  E: "e3@2 ~@4 e3 ~@3 e3 ~@5", F: "e3 ~@3 c#3 ~ e3 ~@3 e3 ~@3 c#3 ~", G: "~@2 e3 ~@3 e3 ~@5 e3 ~@3",
  H: "~@2 e3 ~@3 e3 ~@3 c#3 ~ e3@2 ~@2", I: "e3 ~ c#3 ~@3 e3 ~@3 e3 ~@3 c#3 ~", J: "f#3 ~@3 f#3 ~@3 e3 ~ f#3 ~@3 f#3 ~",
  K: "~@2 c#3 ~@3 f#3 ~@3 f#3 ~@5", L: "e3 ~@3 e3 ~@5 e3 ~@5", M: "~@2 e3 ~@3 d3 ~ e3 ~@3 e3 ~@3",
  N: "~@2 e3 ~@3 e3 ~@3 c#3 ~ e3 ~ f#3 ~", O: "~@2 f#3 ~@3 f#3 ~@5 f#3 ~@3", P: "e3 ~@3 c#3 ~ e3 ~@3 e3 ~@2 c#3 ~@2",
  Q: "e3 ~@3 c#3 ~ e3 ~@3 f#3 ~@3 f#3 ~", R: "~@4 e3 ~@3 e3 ~@3 c#3 ~ e3 ~", S: "~@4 b2@9 ~@3",
  T: "~@4 e3 ~ b2 ~ c#3 ~ e3 ~@3 e3 ~",
})).s("gm_electric_guitar_muted").gain(0.33).pan(0.7)

// other · electric guitar muted · "MUTED GTR" · soft notes
const electric_guitar_muted_2 = note(`<
  A B C ~ A D E F ~@2 G H I J F K ~@4 A D E F ~@2 G H I J F K ~@4 A D E F ~@2 G H I J F K ~@4 A D E F ~@2 G H I J F K
  ~@4 A D E F ~@2 G H I J F K ~@4 A D E F ~@2 G H I J F K ~@4
>`.pickRestart({
  A: "~@4 c#3 ~@11", B: "~@2 b2 ~@13", C: "~@2 c#3 ~@13", D: "~@12 b2 ~@3", E: "~@8 b2 ~ c#3 ~@5", F: "~@8 b2 ~@7",
  G: "~@6 c#3 ~@9", H: "~@12 c#3 ~@3", I: "~@8 c#3 ~@7", J: "~@4 b2 ~@11", K: "~@8 e3 ~ c#3 ~@5",
})).s("gm_electric_guitar_muted").gain(0.16).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!98 [~ x!3] [~ x ~@6]>").gain(0.49)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  A ~@3 B C@2 ~@3 C ~@6 A ~@2 B C@2 ~@3 C ~@6 A ~@2 B C@2 ~@3 C ~@6 A ~@2 B C@2 ~@3 C ~@6 A ~@2 B C@2 ~@3 C ~@6 A ~@2 B
  C@2 ~@3 C ~@6 A@2 ~
>`.pickRestart({
  A: "~ x ~@6", B: "~ x ~ x ~@3 x", C: "~@3 x ~@4",
})).gain(0.22)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@15 A ~@15 A ~@15 A ~@15 A ~@15 A ~@14 B C>".pickRestart({
  A: "~ x ~@4 x ~", B: "~@4 x ~ x!2", C: "~ x ~@6",
})).gain(0.44)

// drums · congas
const congas = s("conga:13").struct(`<
  A B C D E C@7 A C@3 A C@2 D E C@7 A C@3 A C@2 D E C@7 A C@3 A C@2 D E C@7 A C@3 A C@2 D E C@7 A C@3 A C@2 D E C@7 A
  C@3 A C F G
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~@3 x ~ x ~@2", C: "~@2 x!2 ~ x ~@2", D: "~@3 x ~@4", E: "x ~@2 x ~ x ~@2", F: "~ x!2 ~",
  G: "~ x ~@6",
})).gain(1.22)

// drums · congas
const congas_2 = s("conga:18").struct("<A@3 B A@14 C B A@14 C B A@14 C B A@14 C B A@14 C B A@14 D ~>".pickRestart({
  A: "~@6 x!2", B: "~@4 x!2 ~@2", C: "~@7 x", D: "~@5 x!3",
})).gain(1.22)

stack(
  piano, bass, electric_guitar_muted, electric_guitar_muted_2, kick, snare, hihat, hihat_soft, open_hat, congas,
  congas_2
)

More by Fats Domino