Strudelify
KeyA minorTempo120 bpm
0:00/0:00
// Sherry — The Four Seasons
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 79 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · fretless bass · "FrtlsBas"
const bass = note(`<
  ~ A B A C A B A C A B A C A B A C A B A C A B D E F G H I J K L M A B A C A B A C A C A B A C A B D E F G H I J K L M
  A B A C A B A C A B A C A B A C A C N E
>`.pickRestart({
  A: "c3 ~ c3 ~ a2 ~ a2 ~", B: "d3@3 ~ d3@2 ~@2 g2 ~ g2 ~ a2 ~ b2 ~", C: "d3@2 ~@2 d3@2 ~@2 g2 ~ g2 ~ a2 ~ b2 ~",
  D: "c3@3 ~ c3@3 ~ d#3@3 ~ f3@3 ~", E: "c3 ~@7", F: "e3 ~ e3@2 g#3@2 b3 ~ g#3 ~ e3@2 c#3@2 b2@2",
  G: "e3 ~ e3@2 g#3@2 b3@2 e3 ~ e3@2 c#3@2 b2 ~", H: "a2 ~ a2@2 c#3 ~ c#3 ~ e3 ~ e3@2 c#3@2 a2 ~",
  I: "a2 ~ a2@2 c#3 ~ c#3@2 e3 ~ e3 ~ c#3@2 a2 ~", J: "d3 ~ d3@2 f#3 ~ f#3 ~ a3 ~ a3@2 f#3 ~ d3 ~",
  K: "d3 ~ d3 ~ c3 ~ c3 ~ b2 ~ b2 ~ a2 ~ a2 ~", L: "g2 ~@7", M: "[g3,a#3] ~ g3@2 f3 ~ f3@2 e3 ~ e3@2 d3 ~ d3 ~",
  N: "c3@3 ~ c3@3 ~ d#3@4 f3@3 ~",
})).s("gm_fretless_bass").gain(0.41)

// chords · electric guitar jazz · "ElGitJaz"
const electric_guitar_jazz = note(`<
  ~ A B C D A B C D E F G H E F G H E F G H E F I J K@2 L M N O P ~ E F G H E F G H G H E F G H E F I J K@2 L M N O P ~
  E F G H E F G H G H G H G H G H G H I J
>`.pickRestart({
  A: "e3 ~@5 e3 ~ c3 ~@5 c3@2", B: "f3 ~@5 f3@2 d3 ~ g3!3 ~ f3 ~", C: "e3 ~@5 e3 ~ c3 ~@5 c3 ~",
  D: "f3 ~@5 f3 ~ d3 ~ g3!3 ~ f3 ~",
  E: "[e3,g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5]@2 e3 ~ [c3,a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5]@2 c3@2", // C Am
  F: "[f3,a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5]@2 f3@2 [d3,b4,d5,f5] ~ [g3,b4,d5,f5] g3 [g3,b4,d5,f5]@2 f3 ~", // Dm Bdim G7
  G: "[e3,g4,c5,e5] ~ [g4,c5,e5] ~ [g4,c5,e5]@2 e3 ~ [c3,a4,c5,e5] ~ [a4,c5,e5] ~ [a4,c5,e5]@2 c3 ~", // C Am
  H: "[f3,a4,d5,f5] ~ [a4,d5,f5] ~ [a4,d5,f5]@2 f3 ~ [d3,b4,d5,f5] ~ [g3,b4,d5,f5] g3 [g3,b4,d5,f5]@2 f3 ~", // Dm Bdim G7
  I: "[c3,g3,c4,e4] ~@3 [c4,e4,g4]@2 [c4,e4,g4]@2 [g3,a#3,d#4]@2 ~@2 [f3,c4,f4,a4,c5]@2 ~@2, ~@2 g4 ~, ~@8 d#3 ~@7", // C D# F
  J: "[c3,g3,c4,e4,g4] ~@15", // C
  K: "[b4,d5,g#5] ~ [b4,d5,g#5] ~ [b4,d5,g#5] ~ [b4,d5,g#5] ~ [b4,d5,g#5] ~ [b4,d5,g#5] ~ [b4,d5,g#5] ~ [b4,d5,g#5] ~", // G#dim
  L: "[c#5,a5,c#6] ~ [c#5,a5,c#6] ~ [c#5,a5,c#6] ~ [c#5,a5,c#6] ~ [c#5,a5,c#6] ~ [d5,a5,c#6]@2 [d#5,a5,c#6] ~ [e5,a5,c#6] ~", // F#m Dmaj7 D#m7b5 A
  M: "[e5,a5,c#6]@2 [e5,a5,c#6]@2 [d#5,a5,c#6] ~ [d5,a5,c#6]@2 [c#5,a5,c#6] ~ [c#5,a5,c#6] ~ [c#5,a5,c#6] ~ [c#5,a5,c#6] ~", // A D#m7b5 Dmaj7 F#m
  N: "[d5,a5,c#6,d6] ~ [d5,a5,d6] ~ [d5,a5,d6] ~ [d5,a5,d6] ~ [d5,a5,d6] ~ [d5,a5,d6] ~ [d5,a5,d6]@2 [d5,a5,d6] ~", // Dmaj7 D5
  O: "[d5,a5,d6]@2 [d5,a5,d6] ~ [d5,a5,d6] ~ [d5,a5,d6]@2 [d5,a5,d6] ~ [d5,a5,d6]@2 [d5,a5,d6]@2 [d5,a5,d6]@2", // D5
  P: "[d5,g5,b5] ~@15", // G
})).s("gm_electric_guitar_jazz").gain(0.41)

// chords · piano · "BrAcPno"
const piano = note(`<
  ~ A B C D A B C D A B C D A B C D A B C D A B E F G H I J K L M N A B C D A B C D C D A B C D A B E F G H I J K L M N
  A B C D A B C D C D C D C D C D C D E F
>`.pickRestart({
  A: "[c3,e3] ~@5 [c3,e3] ~ [a2,c3] ~@5 [a2,c3]@2", B: "[d3,f3] ~@5 f3@2 [b2,d3] ~ g3!3 ~ f3 ~, ~@6 d3 ~@9",
  C: "[c3,e3] ~@5 c3@2 [a2,c3] ~@5 a2@2, ~@6 e3 ~@7 c3 ~", D: "[d3,f3] ~@5 d3@2 [b2,d3] ~ g3!3 ~ f3 ~, ~@6 f3 ~@9",
  E: "[c3,e3] ~@3 [c3,e3] ~ [c3,e3] ~ [d#3,g3]@4 [f3,a3]@3 ~", F: "[c3,e3] ~@7",
  G: "[e2,b2] ~ [e2,b2]@2 [e2,c#3]@2 [e2,b2] ~ [e2,b2] ~ [e2,b2]@2 [e2,c#3]@2 [e2,b2] ~", // E5 C#m E5 C#m E5
  H: "[e2,b2] ~ [e2,b2] ~ [e2,c#3]@2 [e2,b2] ~ [e2,b2] ~ [e2,b2] ~ c#3@2 [e2,b2] ~, ~@12 e2 ~@3", // E5 C#m E5
  I: "[a2,e3] ~ [a2,e3] ~ [a2,f#3]@2 [a2,e3] ~ [a2,e3] ~ [a2,e3]@2 f#3@2 [a2,e3] ~, ~@12 a2 ~@3", // A5 D A5
  J: "[a2,e3] ~ [a2,e3] ~ [a2,f#3]@2 e3 ~ [a2,e3] ~ [a2,e3] ~ f#3@2 [a2,e3] ~, ~@12 a2 ~@3", // A5 D A5
  K: "[d3,a3] ~ [d3,a3] ~ b3@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ b3@2 [d3,a3] ~, ~@4 d3 ~@7 d3 ~@3", // D5
  L: "[d3,a3] ~ [d3,a3] ~ b3@2 [d3,a3] ~ [d3,a3] ~ [d3,a3] ~ [d3,b3] ~ [d3,a3] ~, ~@4 d3 ~@11", M: "[g2,a#2,d3] ~@15",
  N: "~@8 [g2,d3] ~ [g2,d3] ~ [g2,d3] ~ [g2,d3] ~", // G5
})).s("gm_piano").gain(0.46)

// chords · brass section · "BrsSec"
const brass_section = note(`<
  ~@5 A B C B D E ~ F G H I J D E ~ F G H K L M@2 N@2 O@2 P ~ D E ~ F G H I J I J D E ~ F G H K L M@2 N@2 O@2 P ~ D E ~
  F G H I J I J I J I J I J I J K L
>`.pickRestart({
  A: "[e4,g4]@3 [e4,g4,d5] [e4,a4,c5]@4, c5 ~", B: "~@4 [f4,a4,d5]@2 [f4,a4,d5]@2 [g4,b4,e5]@4 [f4,a4,d5]@3 ~",
  C: "[e4,g4]@6 [e4,g4,d5]@2 [e4,a4,c5]@7 ~, c5 ~", D: "[c4,e4,g4] [c4,e4,a4]",
  E: "[d4,f4,a4]@4 [d4,f4,a4]@2 [d4,f4,a4]@2 [e4,g4,b4]@4 [d4,f4,a4]@3 ~", // Dm Em Dm
  F: "~@2 [d4,f4,a4]!2 [e4,g4,b4]@2 [d4,f4,a4] ~", G: "[c4,e4,g4]@8 [c4,e4,a4]@7 ~", H: "[d4,f4,a4]@8 [e4,g4,b4] ~@7",
  I: "~@2 [g4,c5,e5] ~ [e4,g4,c5] ~@3", J: "[f4,a4,c5] ~ [f4,a4,c5]@3 ~ [f4,a4,c5]@2 [g4,b4,d5]@4 [f4,a4,c5]@3 ~",
  K: "[c3,g3,c4,e4] ~@3 [c4,e4,g4]@2 [c4,e4,g4]@2 [g3,a#3,d#4]@2 ~@2 [f3,c4,f4,a4,c5]@2 ~@2, ~@2 g4 ~, ~@8 d#3 ~@7", // C D# F
  L: "[c3,g3,c4,e4,g4] ~@15", M: "[[b3,d4,g#4] ~ [b3,d4,g#4]@29 ~]/2", N: "[[c#4,e4,a4] ~ [c#4,e4,a4]@30]/2",
  O: "[[a3,d4,f#4] ~ [a3,d4,f#4]@26 ~@4]/2", P: "[b3,d4,g4] ~@7",
})).s("gm_brass_section").gain(0.41)

// drums · kick
const kick = s("bd").struct("<A B@23 C D E D E D E C ~ B@17 C D E D E D E C ~ B@19 C>".pickRestart({
  A: "~@7 x", B: "x!4", C: "x", D: "x ~@5 x!3 ~ x ~@3 x ~", E: "x ~@3 x!2 ~ x",
})).gain(0.51)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A ~@25 B ~ B ~ B ~ C ~@9 D ~@9 B ~ B ~ B ~ C ~@13 D ~ D ~ D E ~>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@11 x ~@4", C: "~@8 x ~@3 x!2 ~@2", D: "~@4 x!2 ~@2", E: "~@8 x!4 ~@4",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~ A@23 ~ A@6 ~@2 A@17 ~ A@6 ~@2 A@19 ~>".pickRestart({
  A: "~ x ~ x",
})).gain(0.51)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@4 A ~@3 A ~@7 A ~@6 B C ~@6 C D ~@7 A ~ E ~@6 B C ~@6 C D ~@7 A ~ A ~ A ~ E ~ E ~ E B C
>`.pickRestart({
  A: "~@7 x", B: "~@3 x", C: "x", D: "~@4 x ~ x ~@7 x!2", E: "~@6 x!2",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<A@24 B A@6 B C A@17 B A@6 B C A@19 ~>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.51)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@23 ~ A@6 ~@2 A@17 ~ A@6 ~@2 A@19 ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x",
})).gain(0.15)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@4 A ~@3 A ~@7 A ~@6 B ~@8 C ~@7 A ~ D ~@6 B ~@8 C ~@7 A ~ A ~ A ~ D ~ D ~ D B ~
>`.pickRestart({
  A: "~@3 x", B: "~ x", C: "~@2 x!2 ~@6 x ~ x!2 ~@2", D: "~@4 x!2 ~@2",
})).gain(0.51)

// drums · high tom
const high_tom = s("ht").struct("<A ~@3 B ~@3 B ~@7 B ~@23 B ~@25 B ~ B ~ B ~@8>".pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~@10 x!2 ~@4",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@25 [x!4]!6 ~@20 [x!4]!6 ~@22>").gain(0.51)

// drums · tambourine
const tambourine = s("tb").struct("<~@25 [~ x ~ x]!6 ~@20 [~ x ~ x]!6 ~@22>").gain(0.51)

// drums · congas
const congas = s("conga:13").struct("<~@25 A B A B A B ~@20 A B A B A B ~@22>".pickRestart({
  A: "~@2 x!3 ~@5 x!2 ~@4", B: "~@3 x!2 ~@5 x!2 ~@4",
})).gain(1.64)

// drums · congas
const congas_2 = s("conga:33").struct("<~@25 [~@6 x!2]!6 ~@20 [~@6 x!2]!6 ~@22>").gain(1.64)

stack(
  bass, electric_guitar_jazz, piano, brass_section, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft, mid_tom,
  high_tom, ride, tambourine, congas, congas_2
)

More by The Four Seasons