Strudelify

Amish Paradise

"Weird Al" Yankovic

KeyC minorTempo81 bpm
0:00/0:00
// Amish Paradise — "Weird Al" Yankovic
// 80.8 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 81 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(80.8/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · "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 · string ensemble 1 · "string 1"
const string_ensemble_1 = note(`<
  A B C D A B C D A B C D A B C D E F G H G I G J ~@4 K L M N K L M N K L M N O P Q@2 R@2 S T K L M N K L M N O P Q@2
  R@2 S T O P Q@2 R@2 S T R@2 S T ~@5
>`.pickRestart({
  A: "c6 ~@2 c5 c6 ~@3 c6 ~@2 c5 c6 ~@3", B: "b5 ~@2 b4 b5 ~@2 c5 c6 ~@3 g5 ~@3",
  C: "c6@3 ~@9 c6@4 ~@8 c6@4 ~@5 c5@3 c6@3 ~@9", D: "b5@3 ~@9 b5@3 ~@9 c6@3 ~@9 g5@2 ~@10",
  E: "c6@3 c5 c6@3 c5 c6@3 c5 c6@4", F: "b5@9 b4@3 b5@9 ~@3 c6@9 ~@3 g5@11 ~, ~@21 c5@5 ~@7 g4@5 ~@10",
  G: "c6@3 c5 c6@3 c5 c6@3 c5 c6@3 b4", H: "b5@9 b4@3 b5@9 c5@3 c6@9 g4@3 g5@7 ~@5",
  I: "b5@9 b4@3 b5@9 c5@3 c6@9 g4@3 g5@11 ~", J: "b5@9 b4@3 b5@9 c5@3 c6@9 g4@3 g5@8 ~@4",
  K: "~ c6@3 ~@6 c5@3 c6@3 ~@9 c6@3 ~@6 c5@3 c6@3 ~@8", L: "~ b5@3 ~@6 b4@3 b5@3 ~@6 c5@3 c6@3 ~@9 g5@3 ~@8",
  M: "~ c6@3 ~@9 c6@4 ~@8 c6@4 ~@5 c5@3 c6@3 ~@8", N: "~ b5@3 ~@9 b5@3 ~@9 c6@3 ~@9 g5@2 ~@9",
  O: "~ c6@9 c5@3 c6@9 c5@3 c6@9 c5@3 c6@11", P: "~ b5@9 b4@3 b5@9 ~@3 c6@9 ~@3 g5@11, ~@22 c5@5 ~@7 g4@5 ~@9",
  Q: "[~ c6@9 c5@3 c6@9 c5@3 c6@9 c5@3 c6@9 b4@3 b5@9 b4@3 b5@9 c5@3 c6@9 g4@3 g5@7 ~@4]/2",
  R: "[~ c6@9 c5@3 c6@9 c5@3 c6@9 c5@3 c6@9 b4@3 b5@9 b4@3 b5@9 c5@3 c6@9 g4@3 g5@11]/2",
  S: "~ c6@9 c5@3 c6@9 c5@3 c6@9 c5@3 c6@9 b4@2", T: "~ b5@9 b4@3 b5@9 c5@3 c6@9 g4@3 g5@8 ~@3",
})).s("gm_string_ensemble_1").gain(0.32)

// other · string ensemble 1 · "string 1" · soft notes
const string_ensemble_1_soft = note(`<
  A B C D A B C D A B C D A B C D ~@12 E F@3 E F@3 E F@3 ~@8 E F@3 E F@3 ~@25
>`.pickRestart({
  A: "~@7 c5 ~@7 b4", B: "~@33 g4@4 ~@8 c5@3", C: "~@9 c5@4 ~@8 c5@4 ~@20 b4@3", D: "~@9 b4@4 ~@8 c5@4 ~@8 g4@4 ~@11",
  E: "~@22 c5@3 ~@21 b4@2", F: "[~@17 g4@2 ~@4 c5@2 ~@4 c5@2 ~@4 c5@2 ~@10 b4@2 ~@4 b4@2 ~@4 c5@2 ~@4 g4@2 ~@5]/3",
})).s("gm_string_ensemble_1").gain(0.24)

// bass · fretless bass · "fretless"
const bass = note(`<
  A B A C D E D F A B G C H B G C D E D F D E D F H I H ~ H I J K H I L K J I L M N O N O N O N O J P L Q L P L Q N O N
  O N O N O N O N O N O N O N O N O ~@5
>`.pickRestart({
  A: "ab2@11 g2 f2@12", B: "g2@11 f2 c2@12", C: "g2@22 f2@2 c2@23 ~", D: "ab2@5 eb2 ab2 c3 bb2@4 ab2@4",
  E: "g2@5 c2 g2 c3 eb3@4 d3@2 c3@2", F: "g2@15 c2@3 g2@3 c3@3 eb3@12 d3@6 c3@5 ~", G: "ab2@22 g2@3 f2@23",
  H: "~ ab2@21 g2@2 f2@24", I: "g2@22 f2@3 c2@23", J: "~ ab2@21 g2@3 f2@23", K: "~ g2@21 f2@2 c2@23 ~",
  L: "~ ab2@22 g2@2 f2@23", M: "~ g2@22 ~ c2@23 ~, ~@23 f2@3 ~@22", N: "~ ab2@15 eb2@3 ab2@3 c3@3 bb2@12 ab2@11",
  O: "~ g2@15 c2@3 g2@3 c3@3 eb3@12 d3@6 c3@5", P: "~ g2@21 f2@3 c2@23", Q: "~ g2@22 f2@2 c2@23",
})).s("gm_fretless_bass").gain(0.56)

// other · string ensemble 1 · "string 1"
const string_ensemble_1_2 = note(`<
  A B C D E F G H E F G H E F G H I J K L K M K N ~@4 O P Q R O P Q R O P Q R S T U@2 V@2 W X O P Q R O P Q R S T U@2
  V@2 W X S T U@2 V@2 W X V@2 W X ~@5
>`.pickRestart({
  A: "c6@3 ~@6 c5@3 c6@3 ~@7 g2@2 c6@3 ~@6 c5@3 c6@3 ~@9, ab2@11 ~ f2@12",
  B: "b5@3 ~@6 b4@3 b5@3 ~@7 f2@2 c6@3 ~@9 g5@3 ~@9, g2@7 c5 c2@8",
  C: "c6@3 ~@9 c6@4 ~@6 g2@2 c6@4 ~@5 c5@3 c6@3 ~@9, ab2@11 ~ f2@12",
  D: "b5@3 ~@9 b5@3 ~@7 f2@2 c6@3 ~@9 g5@2 ~@10, g2@22 ~@2 c2@23 ~", E: "c5 ~@2 c4 c5 ~@3 c5 ~@2 c4 c5 ~@3",
  F: "b4 ~@2 b3 b4 ~@2 c4 c5 ~@3 g4 ~@3", G: "c5@3 ~@9 c5@4 ~@8 c5@4 ~@5 c4@3 c5@3 ~@9",
  H: "b4@3 ~@9 b4@3 ~@9 c5@3 ~@9 g4@2 ~@10", I: "c5@3 c4 c5@3 c4 c5@3 c4 c5@4",
  J: "b4@9 b3@3 b4@9 ~@3 c5@9 ~@3 g4@11 ~, ~@21 c4@5 ~@7 g3@5 ~@10", K: "c5@3 c4 c5@3 c4 c5@3 c4 c5@3 b3",
  L: "b4@9 b3@3 b4@9 c4@3 c5@9 g3@3 g4@7 ~@5", M: "b4@9 b3@3 b4@9 c4@3 c5@9 g3@3 g4@11 ~",
  N: "b4@9 b3@3 b4@9 c4@3 c5@9 g3@3 g4@8 ~@4", O: "~ c5@3 ~@6 c4@3 c5@3 ~@9 c5@3 ~@6 c4@3 c5@3 ~@8",
  P: "~ b4@3 ~@6 b3@3 b4@3 ~@6 c4@3 c5@3 ~@9 g4@3 ~@8", Q: "~ c5@3 ~@9 c5@4 ~@8 c5@4 ~@5 c4@3 c5@3 ~@8",
  R: "~ b4@3 ~@9 b4@3 ~@9 c5@3 ~@9 g4@2 ~@9", S: "~ c5@9 c4@3 c5@9 c4@3 c5@9 c4@3 c5@11",
  T: "~ b4@9 b3@3 b4@9 ~@3 c5@9 ~@3 g4@11, ~@22 c4@5 ~@7 g3@5 ~@9",
  U: "[~ c5@9 c4@3 c5@9 c4@3 c5@9 c4@3 c5@9 b3@3 b4@9 b3@3 b4@9 c4@3 c5@9 g3@3 g4@7 ~@4]/2",
  V: "[~ c5@9 c4@3 c5@9 c4@3 c5@9 c4@3 c5@9 b3@3 b4@9 b3@3 b4@9 c4@3 c5@9 g3@3 g4@11]/2",
  W: "~ c5@9 c4@3 c5@9 c4@3 c5@9 c4@3 c5@9 b3@2", X: "~ b4@9 b3@3 b4@9 c4@3 c5@9 g3@3 g4@8 ~@3",
})).s("gm_string_ensemble_1").gain(0.2)

// other · string ensemble 1 · "string 1" · soft notes
const string_ensemble_1_soft_2 = note(`<
  A B C D E F G H E F G H E F G H ~@12 I J@3 I J@3 I J@3 ~@8 I J@3 I J@3 ~@25
>`.pickRestart({
  A: "~@7 c5 ~@7 b4", B: "~@33 g4@4 ~@8 c5@3", C: "~@9 c5@4 ~@8 c5@4 ~@20 b4@3", D: "~@9 b4@4 ~@8 c5@4 ~@8 g4@4 ~@11",
  E: "~@7 c4 ~@7 b3", F: "~@33 g3@4 ~@8 c4@3", G: "~@9 c4@4 ~@8 c4@4 ~@20 b3@3", H: "~@9 b3@4 ~@8 c4@4 ~@8 g3@4 ~@11",
  I: "~@22 c4@3 ~@21 b3@2", J: "[~@17 g3@2 ~@4 c4@2 ~@4 c4@2 ~@4 c4@2 ~@10 b3@2 ~@4 b3@2 ~@4 c4@2 ~@4 g3@2 ~@5]/3",
})).s("gm_string_ensemble_1").gain(0.15)

// bass · fretless bass · "fretless"
const bass_2 = note(`<
  A B A C D E D F A B G C H B G C D E D F D E D F H I H ~ H I J K H I L K J I L M N O N O N O N O J P L Q L P L Q N O N
  O N O N O N O N O N O N O N O N O ~@5
>`.pickRestart({
  A: "ab1@11 g1 f1@12", B: "g1@11 f1 c1@12", C: "g1@22 f1@2 c1@23 ~", D: "ab1@5 eb1 ab1 c2 bb1@4 ab1@4",
  E: "g1@5 c1 g1 c2 eb2@4 d2@2 c2@2", F: "g1@15 c1@3 g1@3 c2@3 eb2@12 d2@6 c2@5 ~", G: "ab1@22 g1@3 f1@23",
  H: "~ ab1@21 g1@2 f1@24", I: "g1@22 f1@3 c1@23", J: "~ ab1@21 g1@3 f1@23", K: "~ g1@21 f1@2 c1@23 ~",
  L: "~ ab1@22 g1@2 f1@23", M: "~ g1@22 ~ c1@23 ~, ~@23 f1@3 ~@22", N: "~ ab1@15 eb1@3 ab1@3 c2@3 bb1@12 ab1@11",
  O: "~ g1@15 c1@3 g1@3 c2@3 eb2@12 d2@6 c2@5", P: "~ g1@21 f1@3 c1@23", Q: "~ g1@22 f1@2 c1@23",
})).s("gm_fretless_bass").gain(0.64)

// drums · kick
const kick = s("bd").struct(`<
  A@4 B@3 C B C B C B C B C B@9 C B D E F E F E F E F G E G@2 E@9 F E F E F E F E@20 ~@5
>`.pickRestart({
  A: "x", B: "x ~@3 x!2 ~@2", C: "x ~@4 x ~@2", D: "x ~@30 x ~@16", E: "~ x ~@23 x ~@5 x ~@16", F: "~ x ~@29 x ~@16",
  G: "~ x ~@46",
})).gain(0.72)

// drums · rim
const rim = s("rim").struct("<[x!4]!4 ~@77>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@3 A B@3 A B@7 A B@11 C@8 D ~@3 D C@11 D C@3 D C@20 ~@5>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@13 x ~@23 x ~@10", D: "~@37 x ~@10",
})).gain(0.56)

// drums · clap
const clap = s("cp").struct("<~@3 A B@3 A B@7 A B@11 C@8 D ~@3 D C@11 D C@3 D C@20 ~@5>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@13 x ~@23 x ~@10", D: "~@37 x ~@10",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@3 A ~@3 A ~@7 A ~@19 B ~@3 B ~@11 B ~@3 B ~@15 C ~@3 C ~@5>".pickRestart({
  A: "~@5 x ~@2", B: "~@31 x ~@16", C: "~@11 x",
})).gain(0.48)

// drums · shaker
const shaker = s("sh").struct(`<
  [x!8]!27
  [x ~@6 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4]
  [~ x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@5 x ~@4]!48
  ~@5
>`).gain(0.64)

stack(
  string_ensemble_1, string_ensemble_1_soft, bass, string_ensemble_1_2, string_ensemble_1_soft_2, bass_2, kick, rim,
  snare, clap, open_hat, shaker
)

More by "Weird Al" Yankovic