Strudelify

Sugar Sugar

The Archies

KeyD majorTempo125 bpm
0:00/0:00
// Sugar Sugar — The Archies
// 125 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 103 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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.

// other · marimba
const marimba = note(`<
  ~@5 A B A B ~@4 C B A B ~@12 A B A B ~@4 C B A B ~@12 A B A B ~@4 C B A B ~@4 A B A B ~@4 C B A B ~@4 A B A B ~@4 C B
  A B ~@6
>`.pickRestart({
  A: "~@6 a4 ~@2 a4@2 ~ d5@2 ~ a4@2 ~@4 b4@2 ~", B: "~@3 g4@2 ~@19", C: "~@6 a4 ~@2 a4 ~@2 d5@2 ~ a4@2 ~@4 b4@2 ~",
})).s("gm_marimba").gain(0.55).pan(0.8)

// other · tenor sax
const tenor_sax = note("<~@19 A B ~@22 A B ~@22 A B ~@14 A B ~@14 A B C ~>".pickRestart({
  A: "~@21 d4@2 ~", B: "~@4 d4@2 ~@3 b3@3 a3@6 b3@3 ~@3", C: "d3",
})).s("gm_tenor_sax").gain(0.49)

// other · epiano1
const epiano1 = note(`<
  ~ A ~ B ~ C D C E ~@4 C F G H ~@4 I J K@2 L M N@2 C D C E ~@4 C F G H ~@4 I J K@2 L M N@2 C D C E ~@4 C F G H ~@4 C D
  C E ~@4 C F G H ~@4 C D C E ~@4 C F G H ~@6
>`.pickRestart({
  A: "d2@2 ~ d2@2 ~@4 a1@3 d2@2 ~ d2@3 ~@6", B: "d2 ~@2 d2@2 ~@4 a1@3 d2@2 ~ d2@2 ~@7",
  C: "~@6 a2 ~@2 a2@2 ~ d3@2 ~ a2@2 ~@4 b2@2 ~", D: "~ g2@3 ~@4", E: "~ g2@5 ~@2", F: "~ g2@4 ~@3",
  G: "~@6 a2 ~@2 a2@2 ~ d3@2 ~ a2@2 ~@4 b2@3", H: "~@3 g2@14 ~@7", I: "f#5@2 ~ f#5@2 ~@19, d5 ~@2 d5 ~@20",
  J: "e5@2 ~ [c5,e5] ~@8 [d5,f#5] ~@2 [d5,f#5] ~@8, c5 ~@23", // C D
  K: "[[d5,f#5] ~@2 f#5@2 ~@7 [d5,g5] ~@2 [d5,g5] ~@5 f#5@11 ~@16, ~@3 d5 ~@17 d5@9 ~@18]/2", // D G5
  L: "[d5,f#5] ~@2 [d5,f#5] ~@20", M: "[c5,e5] ~@2 [c5,e5] ~@8 [d5,f#5] ~@2 [d5,f#5] ~@8",
  N: "[[d5,f#5]@4 ~@2 [d5,f#5]@3 ~@3 [d5,g5] ~@2 [d5,g5]@2 ~@4 [e5,a5]@14 ~@13]/2", // D G5 A5
})).s("gm_epiano1").gain(0.49).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  ~ A B A C D E F G H I J K D E F G H I D@2 L M N O P M Q R D E F G H I J K D E F G H I D@2 L M N O P M Q R D E F G H I
  J K D E F G H I D@3 E F G H I J K D E F G H I D@3 E F G H I J K D E F G H I D@2 S ~
>`.pickRestart({
  A: "d2 ~@2 d2@2 ~@4 a1@3 d2 ~@2 d2@2 ~@4 a1@3", B: "g2 ~@2 g2@2 ~@4 d2@3 g2 ~@2 g2 ~@5 a1@2 ~",
  C: "g2 ~@2 g2@2 ~@4 d2@3 g2 ~@2 g2@2 ~@4 a1@3", D: "d2 ~@2 d2@2 ~@4 a1@3 d2 ~@2 d2 ~@5 a1@3",
  E: "g2 ~@2 g2@2 ~@4 d2@2 ~ g2 ~@2 g2 ~@5 a1@3", F: "d2 ~@2 d2@2 ~@4 a1@2 ~ d2 ~@2 d2 ~@5 a1@3",
  G: "g2 ~@2 g2 ~@5 d2@2 ~ g2 ~@2 g2@2 ~@4 a1@3", H: "d2 ~@2 d2@2 ~@4 d2@3 g2 ~@2 g2 ~@5 g2@3",
  I: "a2@4 ~@2 a2 ~@2 a2@4 ~@2 a2@4 ~@2 a2@2 ~", J: "d2 ~@2 d2 ~@5 a1@3 d2 ~@2 d2@2 ~@4 a1@3",
  K: "g2 ~@2 g2 ~@5 d2@3 a2 ~@2 a2@2 ~@4 a2@2 ~", L: "d2 ~@2 d2 ~@5 a1@3 d2 ~@2 d2 ~@5 d2@3",
  M: "c2 ~@2 c2@3 g2@3 c2@3 d2 ~@2 d2 ~@5 c2@3", N: "d2 ~@2 d2 ~@5 d2@3 g2 ~@2 g2 ~@5 g2@3",
  O: "d2@3 ~@3 d2@3 ~@3 d2@2 c2 a1 ~@2 a1@3 c2@3", P: "d2 ~@2 d2 ~@5 c2@3 d2 ~@2 d2 ~@5 d2@3",
  Q: "d2 ~@2 d2 ~@5 d2@3 g1 ~@2 g1 ~@5 g1@3", R: "a1@4 ~@2 a1@4 ~@2 a2@3 a1@2 a2@3 ~ a2@3, ~@10 a1 ~", S: "d2 ~@23",
})).s("gm_electric_bass_finger").gain(0.55)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B A C A B A C D E A F A B A C D E A@3 G H A@2 I J K A B A C D E A F A B A C D E A@3 G H A@2 I J K A B A C D E A F
  A B A C D E A@3 B A C D E A F A B A C D E A@3 B A C D E A F A B A C D E A@2 L@2
>`.pickRestart({
  A: "~ a3@2 ~ f#4@2 ~ a3@2 ~ f#4@2 ~ a3@2 ~ f#4@2 ~ a3@2 ~ f#4@2, [d3,f#3] [a3,d4] [d3,f#3] [a3,d4] [d3,f#3] [a3,d4] [d3,f#3] [a3,d4]", // D D5 D D5 D D5 D D5
  B: "~ b3@2 [d4,g4]@3 ~ b3@2 ~ g4@2 ~ b3@2 ~ g4@2 ~ b3@2 ~ f#4@2, [d3,g3] ~ [d3,g3] [b3,d4] [d3,g3] [b3,d4] [d3,g3] [a3,d4]", // G5 Bm G5 Bm G5 D5
  C: "~ b3@2 ~ g4@2 ~ b3@2 ~ g4@2 ~ b3@2 ~ g4@2 [d3,g3]@3 ~ f#4@2, [d3,g3] [b3,d4] [d3,g3] [b3,d4] [d3,g3] [b3,d4] ~ [a3,d4]", // G5 Bm G5 Bm G5 Bm D5
  D: "~ a3@2 ~ f#4@2 [d3,f#3]@3 ~ f#4@2 ~ b3@2 ~ g4@2 ~ b3@2 ~ g4@2, [d3,f#3] [a3,d4] ~ [a3,d4] [d3,g3] [b3,d4] [d3,g3] [b3,d4]", // D D5 G5 Bm G5 Bm
  E: "~ a3@2 [c#4,e4]@3 ~ a3@2 ~ e4@2 ~ a3@2 ~ e4@2 ~ a3@2 ~ e4@2, [c#3,e3] ~ [c#3,e3] [a3,c#4] [c#3,e3] [a3,c#4] [c#3,e3] [a3,c#4]", // C#m A C#m A C#m A
  F: "~ b3@2 ~ g4@2 [d3,g3]@3 [d4,g4]@3 ~ a3@2 ~ e4@2 [c#3,e3]@3 [c#4,e4]@3, [d3,g3] [b3,d4] ~@2 [c#3,e3] [a3,c#4] ~@2", // G5 C#m G5 Bm C#m A
  G: "~ g3@2 ~ g4@2 ~ g3@2 ~ g4@2 ~ a3@2 ~ f#4@2 ~ a3@2 ~ f#4@2, [c3,e3] [c4,e4] [c3,e3] [c4,e4] [d3,f#3] [a3,d4] d3 [a3,d4]", // C D D5
  H: "~ a3@2 ~ f#4@2 ~ a3@2 ~ f#4@2 ~ b3@2 ~ g4@2 ~ b3@2 ~ g4@2, [d3,f#3] [a3,d4] [d3,f#3] [a3,d4] [d3,g3] [b3,d4] [d3,g3] [b3,d4]", // D D5 D D5 G5 Bm G5 Bm
  I: "~ g3@2 ~ g4@2 ~ g3@2 ~ g4@2 ~ a3@2 ~ f#4@2 [d3,a3]@3 ~ f#4@2, [c3,e3] [c4,e4] [c3,e3] [c4,e4] f#3@3 ~, ~@4 d3 [a3,d4] ~ [a3,d4]", // D5 C D5
  J: "~ a3@2 ~ f#4@2 ~ a3@2 ~ f#4@2 ~ b3@2 ~ g4@2 ~ b3@2 ~ g4@2, [d3,f#3] d4 [d3,f#3] [a3,d4] [d3,g3] [b3,d4] [d3,g3] [b3,d4]", // D D5 G5 Bm G5 Bm
  K: "~ a3@2 ~ e4@2 ~ a3@2 ~ e4@2 ~ a3@2 ~ e4@2 ~ a3@2 ~ e4@2, [c#3,e3] [a3,c#4] [c#3,e3] [a3,c#4] [c#3,e3] [a3,c#4] [c#3,e3] [a3,c#4]", // C#m A C#m A C#m A C#m A
  L: "[~ a3@27 ~@20, [d3,f#3]@9 ~@7]/2", // D
})).s("gm_acoustic_guitar_steel").gain(0.31).pan(0.6)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  ~@5 A B C B ~@4 D B E B ~@12 A B C B ~@4 D B E B ~@12 A B C B ~@4 D B E B ~@4 A B C B ~@4 D B E B ~@4 A B C B ~@4 D B
  E B ~@6
>`.pickRestart({
  A: "~@6 a3@2 ~ a3@3 d4@3 a3@3 ~@3 b3@3", B: "~ g3 ~@6", C: "~@6 a3@2 ~ a3@2 ~ d4@3 a3@3 ~@3 b3@2 ~",
  D: "~@6 a3@2 ~ a3@2 ~ d4@2 ~ a3@3 ~@3 b3@3", E: "~@6 a3@2 ~ a3@3 d4@3 a3@3 ~@3 b3@2 ~",
})).s("gm_electric_guitar_jazz").gain(0.28).pan(0.8)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@2 x]!100 x ~>").gain(0.59)

// drums · snare
const snare = s("sd").struct("<~ A@27 B A@23 B A@15 B A@15 B A@7 B A@7 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@6 x ~@5 x ~@4 x!2 ~@2 x ~@2",
})).gain(0.66)

// drums · clap
const clap = s("cp").struct("<~ [~ x ~ x]!100 ~@2>").gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<A ~@20 A B@3 A B@3 ~@16 A B@3 A B@3 ~@50>".pickRestart({
  A: "x!3 ~ x ~ x ~", B: "x!4",
})).gain(0.39)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A ~@20 A B@3 A B@3 ~@16 A B@3 A B@3 ~@50>".pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x",
})).gain(0.26)

// drums · crash
const crash = s("cr").struct("<~@101 x ~>").gain(0.59)

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

// drums · ride · soft notes
const ride_soft = s("rd").struct(`<
  ~ A B@3 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3 A B@3
  A B@3 A B@3 A B@3 ~@2
>`.pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x",
})).gain(0.26)

// drums · tambourine
const tambourine = s("tb").struct("<~@37 [~ x ~ x]!8 ~@8 [~ x ~ x]!48 ~@2>").gain(0.59)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  ~@13
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!8
  ~@8
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!16
  ~@8
  [x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x]!48
  ~@2
>`).gain(1.33)

stack(
  marimba, tenor_sax, epiano1, bass, acoustic_guitar_steel, electric_guitar_jazz, kick, snare, clap, hihat, hihat_soft,
  crash, ride, ride_soft, tambourine, cabasa
)