Strudelify

Along Comes Mary

The Association

KeyA majorTempo143 bpm
0:00/0:00
// Along Comes Mary — The Association
// 143 bpm, 4/4, key A 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. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27, guitar program 25.
setcpm(143/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 pick
const bass = note(`<
  A@4 B C D E@2 C D E@2 C D E@2 F@4 G H I@2 J C K L M N C D E@2 C D E@2 C D E@2 F@4 G H I@2 J C K L M N C D E@2 O@3 B C
  D E@2 C D E@2 P Q E@2 F@4 G H I@2 J C K L M N C R C S C S C T K
>`.pickRestart({
  A: "[~@8 e1@2 g1@2 g#1@2 a1@7 ~ d#2@2 e2@4 e1@2 a1@4 g#2@2 a2@4 a1@6 d2@8 g#2@2 a2@4 a1@2 d2@2]/4", B: "~ c#3 d3@5 ~",
  C: "a1@3 a1 a1@3 a1", D: "a1@2 d2 e2 g2 a2 d2 e2", E: "[a1@3 a1 a1@3 a1@2 ~ a2 g2 e2 d2 c2 b1]/2",
  F: "e2@2 e2!2 a1@2 a1!2", G: "e2@2 e2!2 ~@2 b1 c#2, ~@4 a1@3 ~", H: "~@2 e2 f#2 ~@2 a2 a#2, d2@3 ~ g2@3 ~",
  I: "[b2@2 b2 d#2 e2@2 e2 b2@2 b2@2 e2@2 e2 a2 a#2]/2", J: "b2@2 b2 d#2 ~@2 f#2 g#2, ~@4 e2@3 ~", K: "a1 ~@7",
  L: "d2@3 e2 ~@2 f2@2", M: "g2@2 a2@2 g2 f2 d2 c2", N: "d2@3 d2@5",
  O: "[a1@3 d#2 e2@2 e1 a1@2 g#2 a2@2 a1@3 d2@4 g#2 a2@2 a1 d2]/3", P: "d2@2 e2!2 e2@2 e2!2",
  Q: "a1!2 d2 e2 g2 a2 d2 e2", R: "a1@6 d2 e2 g2@3 d2@2 e2@3", S: "a1@2 ~ a2@2 g2@2 ~ e2@2 ~ d2@2 c2@2 ~",
  T: "a1@2 ~ a2@2 g2@2 ~ d2@2 c2@2 ~@2 b1@2",
})).s("gm_electric_bass_pick").gain(0.66)

// other · distortion guitar
const distortion_guitar = note("<A@5 B@12 ~@14 B@12 ~@14 B@4 C@4 B@12 ~@14 B@8 ~>".pickRestart({
  A: "[~@8 e2@2 g2@2 g#2@2 a2@7 ~ d#3@2 e3@4 e2@2 a2@4 g#3@2 a3@4 a2@2 c3@2 d3@2 d3@8 g#3@2 a3@4 ~@2 d3@4 c#4@2 d4@10 ~@2, ~@15 a2 ~@4]/5",
  B: "[a2@3 a2 a2@3 a2@8 ~]/2",
  C: "[a2@3 d#3 e3@2 e2 a2@2 g#3 a3@2 a2 c3 d3 d3@4 g#3 a3@2 ~ d3@2 c#4 d4@5 ~, ~@11 a2 ~@4]/4",
})).s("gm_distortion_guitar").gain(0.06).pan(0)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A@6 B C B C B C B C B C B ~@10 D ~@3 C B C B C B C B C B C B ~@10 D ~@3 C B C B E@5 B C B C B C B C B C B ~@10 D ~@3 C
  B F B C B F G ~
>`.pickRestart({
  A: "[~@8 e3@2 g3@2 g#3@2 a3@7 ~ d#4@2 e4@6 a3@4 g#4@2 a4@4 a3@2 c4@2 d4@2 d4@8 g#4@2 a4@4 ~@2 d4@4 c#5@2 d5@4 e3@2 g3@2 g#3@2 a3@8 ~@8 b4@2, ~@15 a3 ~@8]/6",
  B: "~ b4@6 ~", C: "~@7 b4", D: "~ [e4,g4]!2 g4@4 ~",
  E: "[a3@3 d#4 e4@3 a3@2 g#4 a4@2 a3 c4 d4 d4@4 g#4 a4@2 ~ d4@2 c#5 d5@2 e3 g3 g#3 a3@4 ~@4 b4, ~@11 a3 ~@8]/5",
  F: "g4@5 ~@3 g4@5 ~ b4@2", G: "~@8 e4 ~@3 e4 ~@3, ~ b4@6 ~",
})).s("gm_electric_guitar_clean").gain(0.25).pan(1)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~ A@4 ~@7 B C ~@15 D E ~@7 B C ~@15 D E ~@4 A@4 ~@7 B C ~@15 D E ~@9
>`.pickRestart({
  A: "~@4 [e4,a4] ~@7 [e4,a4] ~@3", B: "~@4 a4 g4 e4 d4", C: "c4 ~@3", D: "~ [f4,d5]!7", E: "[f4,d5]@3 [f#4,d5]@5",
})).s("gm_electric_guitar_clean").gain(0.25).pan(0)

// chords · harpsichord
const harpsichord = note("<~@28 A@2 B ~@23 A@2 B ~@31 A@2 B ~@9>".pickRestart({
  A: "[[d4,f4,a4]@3 [e4,g4,b4]@2 ~ [f4,a4,c5]@8 ~@2]/2", B: "[d3,a3,f4]@3 [d3,a3,f#4]@5",
})).s("gm_harpsichord").gain(0.05).pan(1)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@5 A B C B A B C B A B C B D E D E F G H@3 I J K@2 L M N O N A P C B A B C B D E D E F G H@3 I J K@2 L A B C B ~@4 A
  B C B A B C B A B C B D E D E F G H@3 I J K@2 L A Q A Q A Q A R ~
>`.pickRestart({
  A: "[e3,a3,c4]@5 ~ [e3,a3,c4]@2 [e3,a3,c4]@5 ~ [a3,d4,f#4]@2", B: "~ [a3,d4,f#4]@4 [a3,d4,f#4]!3",
  C: "[e3,a3,c4,g4]@5 ~ [e3,a3,c4,g4]@2 [e3,a3,c4,g4]@5 ~ [a3,d4,f#4]@2", // Am7 D
  D: "[g#3,b3,e4]@2 [g#3,b3,e4]!2 [a3,c#4,e4]@2 [a3,c#4,e4]!2", // E A
  E: "[b3,d4,e4]@2 [b3,d4,e4]!2 [a3,c#4,e4]@2 [a3,c#4,e4]!2", F: "[g#3,b3,e4]!4 [a3,c#4,e4]!4",
  G: "[f#3,a3,d4]!4 [g3,b3,d4]!4", H: "[b3,d#4,f#4]@2 [b3,d#4,f#4]!2 [b3,e4,g#4]@2 [b3,e4,g#4]!2",
  I: "[c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [d4,e4,a4]!8", J: "[c#4,e4,a4] ~@2 d#4@2 ~@3",
  K: "[[a3,d4,f4]@3 [b3,e4,g4]@2 ~ [c4,f4,a4]@8 ~@2]/2", L: "[d4,f4,a4]@3 [d4,f#4,a4]@5",
  M: "[e3,a3,c4]@5 ~ [e3,a3,c4]@2 [e3,a3,c4]@5 ~ [f#3,a3,d4]@2", N: "~ [f#3,a3,d4]@4 [a3,d4,f#4]!3",
  O: "[e3,a3,c4,g4]@5 ~ [e3,a3,c4,g4]@2 [e3,a3,c4,g4]@5 ~ [f#3,a3,d4]@2", P: "~ [f#3,a3,d4]@4 [f#3,a3,d4]!3",
  Q: "~@2 [a3,d4,f#4]@6 [a3,d4,f#4]@2 ~ [a3,d4,f#4]@2 [a3,d4,f#4]@2 ~", R: "~ [a3,d4,f#4]@3 [a3,d4,f#4]!3 [a3,c4,e4]",
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0)

// other · trumpet
const trumpet = note("<~@65 A B A B A B A B A B A B ~@14 A C A C A C A D ~>".pickRestart({
  A: "a4@6 a4 ~ a4@4 ~@2 a4@2", B: "~@2 a4 ~ a4@10 ~@2", C: "~@2 a4 ~ a4@3 ~ a4@2 ~ a4@2 a4@2 ~",
  D: "~@2 a4 ~ a4@3 ~ a4@2 a4@2 a4@2 a4@2",
})).s("gm_trumpet").gain(0.19).pan(1)

// other · trombone
const trombone = note(`<
  ~@17 A@2 ~@12 B C B C B C B C B C B C A@2 ~@12 B C B C ~@4 B C B C B C B C B C B C A@2 ~@12 D E D E D E D F ~
>`.pickRestart({
  A: "[~@5 [e3,c#4] ~ [g#3,d4,b4]@4 ~@5]/2", B: "a2@6 a2 ~ a2@4 ~@2 a2@2", C: "~@2 a2 ~ d3@2 e3@2 g3@2 a3@2 d3@2 e3@2",
  D: "a3@6 a3 ~ a3@4 ~@2 a3@2", E: "~@2 a3 ~ a3@3 ~ a3@2 ~ a3@2 a3@2 ~", F: "~@2 a3 ~ a3@3 ~ a3@2 a3@2 a3@2 a3@2",
})).s("gm_trombone").gain(0.4).pan(1)

// other · tenor sax
const tenor_sax = note(`<
  ~@31 A B A B A B A B A B A B ~@14 A B A B ~@4 A B A B A B A B A B A B ~@14 A C A C A C A D ~
>`.pickRestart({
  A: "a2@6 a2 ~ a2@4 ~@2 a2@2", B: "~@2 a2 ~ d3@2 e3@2 g3@2 a3@2 d3@2 e3@2", C: "~@2 a2 ~ a2@3 ~ a2@2 ~ a2@2 a2@2 ~",
  D: "~@2 a2 ~ a2@3 ~ a2@2 a2@2 a2@2 a2@2",
})).s("gm_tenor_sax").gain(0.32).pan(1)

// other · flute
const flute = note("<~@60 A B C D E F G H I ~@22 J K L K L K M N ~>".pickRestart({
  A: "~@14 e5 d6", B: "e6@7 ~ c6@7 ~", C: "a5@6 g5@2 g5@5 ~ a5@2", D: "e5@2 ~ e5@2 d5@2 ~ e5@2 e6@2 g6@2 e5@2",
  E: "e5@10 ~@4 e5 c6", F: "d6@6 b5@2 b5@6 g5 e5", G: "g5@6 e5@2 e5@5 ~ f#5 d5",
  H: "e5@2 ~ e5@2 d5@2 ~ e5@2 e6@2 g6 ~ e5@2", I: "e5@5 ~@3", J: "~@8 e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5]",
  K: "e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5]", // Em
  L: "~ [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5]", // Em
  M: "~ [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e6,g6]", // Em
  N: "g6 [e6,g6] e6 [e5,g6] g6 [e5,e6] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5] e5 [e5,g5] g5 [e5,g5]", // Em E Em
})).s("gm_flute").gain(0.18).pan(0.8)

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

// drums · clap
const clap = s("cp").struct("<~@5 [~ x ~ x]!56 ~@4 [~ x ~ x]!29 [~ x ~@2] [~ x ~ x]!3 [~ x ~@2] ~>").gain(0.7)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A B@7 C B@3 D B@9 E F G H I B@7 C B@3 D B@9 E J G H B@4 K ~@3 A B@7 C B@3 D B@9 E F G H I B L B M N O B P ~
>`.pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~ x ~ x", C: "~@4 x ~@5 x!5 ~", D: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", E: "x!16", F: "x ~@2 x",
  G: "~@3 x!2 ~@11", H: "~@2 x!7 ~ x ~ x ~ x ~", I: "~@3 x!2 ~@7 x ~@3", J: "x ~@2 x ~ x ~@2", K: "~@4 x ~@5 x!3 ~ x ~",
  L: "~ x ~ x!3 ~ x!2 ~@2 x ~ x ~@2", M: "~@4 x ~@3 x ~@2 x ~ x ~@2", N: "~@4 x ~@3 x!2 ~ x!3 ~ x",
  O: "x!2 ~ x!3 ~ x!2 ~@2 x ~ x ~@2", P: "~@2 x ~ x!4",
})).gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@53 [~@3 x] ~@46>").gain(0.7)

// drums · ride
const ride = s("rd").struct(`<
  ~@5 A@7 B A@14 ~ C ~ C A@7 B A@14 ~ C ~ C A@3 B ~@4 A@7 B A@14 ~ C ~ C A D A E@2 D A E ~
>`.pickRestart({
  A: "x!8", B: "x!5 ~@3", C: "x ~@2 x ~@2 x ~", D: "x", E: "x!4 ~@4",
})).gain(0.7)

// drums · tambourine
const tambourine = s("tb").struct("<~@17 A@10 ~@3 B ~@12 A@10 ~@3 B ~@20 A@10 ~@3 B ~ C ~ D E C ~ F G>".pickRestart({
  A: "x!4", B: "~ x ~ x", C: "~@4 x ~@3 x ~@2 x ~ x ~@2", D: "~@8 x ~@2 x ~ x ~@2", E: "~@2 x!2", F: "~@2 x!2 ~ x!3",
  G: "x",
})).gain(0.7)

// drums · cowbell
const cowbell = s("cb").struct("<~@17 A@10 ~@16 A@10 ~@24 A@10 ~@11 B ~>".pickRestart({
  A: "x!4", B: "~@4 x!4",
})).gain(0.7)

stack(
  bass, distortion_guitar, electric_guitar_clean, electric_guitar_clean_2, harpsichord, acoustic_guitar_steel, trumpet,
  trombone, tenor_sax, flute, kick, clap, snare, high_tom, ride, tambourine, cowbell
)

More by The Association