Strudelify

Incense & Peppermints

Strawberry Alarm Clock

KeyE majorTempo134 bpm
0:00/0:00
// Incense & Peppermints — Strawberry Alarm Clock
// 134 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 79, 4/4 at bar 80) are rendered on a constant 4/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(134/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 B A C D E F G F G F G F G F G F G H I H I F G F G J@2 K L J@2 K M N F G F G F G F G H I H I J@2 K L J@2 K M O F G
  F G F G F G H I H P A C D E H I H I H Q ~@15
>`.pickRestart({
  A: "e2@2 ~ e2 e2@2 ~ e2", B: "e2@2 ~ e2 d2 b1 d2@2", C: "e2@2 ~ e2!3 d2@2", D: "a2@4 ~@2 a2 ~ a2@4 ~@2 a2 ~",
  E: "a2@4 ~@2 a2 ~ a2@2 a2@2 ~@2 d2@2", F: "e2@4 b2 ~ a2@6 ~@2 d2@2", G: "e2@2 b1 c2@3 ~ d2",
  H: "e2@4 e2 ~ d#2@6 ~@2 d#2@2", I: "d2@2 d2 a1@3 ~ a1", J: "d2 f#2 a2 g2@2 ~@2 d2", K: "f#2@2 ~ f2@4 ~",
  L: "e2@2 ~ d#2@4 ~", M: "a2@2 ~ a2@4 ~", N: "a1 ~ a1@2 b1@2 c#2@2", O: "a1 ~@7", P: "d2@4 d2@2 a1@6 ~@2 a1!2",
  Q: "d2@2 d2 ~@5",
})).s("gm_electric_bass_pick").gain(0.4)

// bass · acoustic bass
const bass_2 = note("<~@79 A B@2 C@2 D@2 E@2 F@2 G@2 H ~>".pickRestart({
  A: "~@4 e2 ~@2 e2", B: "[e2@2 ~ e2 e2@2 ~ e2@2 ~ e2!2 f#2@2 ~ f#2]/2",
  C: "[f#2@2 ~ f#2 f#2@2 ~ f#2@2 ~ f#2!2 g#2@2 ~ g#2]/2", D: "[g#2@2 ~ g#2 g#2@2 ~ g#2@2 ~ e2 g#2 a2@2 ~ a2]/2",
  E: "[a2@2 ~ a2 a2@2 ~ a2@2 ~ a2!2 b2@2 ~ b2]/2", F: "[b2@2 ~ b2 b2@2 ~ b2@2 ~ e2@2 d2@2 ~ d2]/2",
  G: "[d2@2 ~ d2 d2@2 ~ d2@2 ~ d2!2 e2@2 ~ e2]/2", H: "e2@2 ~ e2 ~@4",
})).s("gm_acoustic_bass").gain(0.4)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~ A@2 B C D E F G F G H I H J H J H J K L K L H J H J M@2 N@2 M@2 O@2 ~ H J H J H J H J K L K L M@2 N@2 M@2 O@2 ~ H J
  H J H J H J K L K L B C D E K L K L K P@3 Q@8 R@5
>`.pickRestart({
  A: "e5/2", B: "e5@2 g5 e5 a5@2 g5 e5", C: "~ e5 g5 e5 a5@2 g5 e5", D: "d5@2 f#5 d5 g5@2 f#5 d5",
  E: "~ d5 f#5 d5 g5@2 f#5 d5", F: "[e5,g5,b5]@2 ~ [c#5,e5,a5]@4 ~", G: "[e5,g5,b5]@2 ~ [c5,e5,g5]@4 ~",
  H: "~ e4 ~ e4 c#6 d6 c#6 e4, [e5,g5] [c#5,e5,a5], b5!2 ~@2", I: "~ e4 b5 [e5,g5,c6]@4 ~, [e5,g5,b5] ~@3",
  J: "~ e4 g5 [e5,g5,c6]@4 ~, [e5,g5,b5]@5 ~@11", K: "[g5,b5,e6]@4 ~@2 [f#5,a#5,d#6]@3 ~ [f#5,a#5,d#6]@4 ~@2",
  L: "[f5,a5,d6]@2 ~ [e5,a5,c#6]@4 ~", M: "[d5,f#5,a5]@2 [d5,f#5,a5] [d5,g5,b5]@4 ~",
  N: "[f#5@4 ~@2 f5@6 ~@4 e5@5 ~ d#5@4 ~@6, [a5,c#6]]/2", O: "[f#5@2 ~ f5@3 ~@2 [a4,c#5,e5]@8, [a5,c#6]]/2",
  P: "[[f5,a5,d6]@2 ~ b5@9 ~@2 d#6@2 d#6@2 c#6 d#6@2 d#6@2 c#6, ~@3 [g#4,e5]@10 ~@11, ~ [e4,g#5], ~@4 b5 ~@3]/3", // Dm C#m E
  Q: "[d#6 c#6 b5 ~@3 c#6@3 b5@2 c#6 c#6@3 b5 c#6 b5 ~ b5 ~@2 d#6@2 d#6@2 c#6 d#6@2 d#6@2 c#6 d#6 c#6 ~@4 c#6@3 b5@2 c#6 c#6@3 b5 c#6 b5 ~ b5 ~@2 d#6@2 d#6@2 c#6 d#6@2 d#6@2 c#6, ~@3 c#6@3 ~@14 b5@14 b5@2 a5@14 a5@2 ~@12, ~ [d4,f#5]@4 [e4,g#5]@4 [d4,f#5]@4 [e4,g#5,b5]@3, ~@4 a5@14 a5@2 ~@15 c#6@3 ~@26]/8", // D E D E
  R: "[d#6 c#6 ~@4 c#6@3 b5@2 c#6 c#6@3 b5 c#6 b5 ~ b5 ~@2 d#6@2 d#6@2 c#6 d#6@2 ~@11, ~ b5 [d4,f#5]@8 [e4,g#5,b5]@8 ~@2, ~@3 c#6@3 ~@34, ~@2 a5@7 a5 ~@10]/5", // D E
})).s("gm_drawbar_organ").gain(0.14).pan(0.6)

// other · harpsichord
const harpsichord = note("<~ A@2 B C D E ~@62 B C D E ~@21>".pickRestart({
  A: "e4/2", B: "e4@2 g4 e4 a4@2 g4 e4", C: "~ e4 g4 e4 a4@2 g4 e4", D: "d4@2 f#4 d4 g4@2 f#4 d4",
  E: "~ d4 f#4 d4 g4@2 f#4 d4",
})).s("gm_harpsichord").gain(0).pan(0.6)

// chords · electric guitar clean · Em
const electric_guitar_clean = note("<~ [[e3,g3,b3]] ~@67 [[g3,b3,e4]] ~@24>")
  .s("gm_electric_guitar_clean").gain(0.4).pan(0.4)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@3 A@2 B@2 ~@12 C D E F ~@4 G@2 H I G@2 H ~ J ~@8 C D E F K L M@2 K L N@2 O ~@8 C D E F P@2 Q@2 C D E F R S@2 ~@14
>`.pickRestart({
  A: "[g4@5 ~ g4 a4]/2", B: "[f#4@10 ~ g4@3 f#4@2]/2", C: "e4@2 ~ d#5@4 ~", D: "d4@3 c#4@4 ~",
  E: "g4@2 ~ f#4@2 f#4@2 ~", F: "f4@3 e4@4 ~", G: "f#4 g4 a4 g4@4 ~", H: "f#4@2 ~ f4@4 ~", I: "e4@2 e4 d#4@4 ~",
  J: "~ c#4 d4 e4", K: "g4@2 f4 d4@2 d4 a3 ~", L: "g3@2 f3 d3@2 d3!2 ~",
  M: "[a3@2 b3 b3@2 ~ b3 c#4@3 d#4 d#4@3 c#4@2]/2", N: "[a3@2 b3 b3@2 ~ b3 c#4@3 d4 e4@2 d4@2 e4]/2", O: "a4 ~",
  P: "[e4@31 e4]/2", Q: "[d4@12 c#4 d4@2 ~, a3@5 ~@3]/2", R: "e4@2 ~ d#4@4 ~", S: "[d4@3 g#4@10 ~@3]/2",
})).s("gm_distortion_guitar").gain(0.52).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~ [x!4]!34 x [x!4]!20 x [x!4]!21 [x!2 ~@2] ~@15>").gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@80 A ~ A ~ A ~ A ~ A ~ A ~ B ~>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@3 x ~@4",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@7 [~ x ~ x]!28 ~ [~ x ~ x]!20 ~ [~ x ~ x]!21 [~ x ~@2] ~@15>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ A@26 B@2 A@2 B@2 A@2 ~ A@12 B@2 A@2 B@2 A@2 C A@21 D ~@15>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!3 ~@7 x ~@3", C: "~@3 x!2 ~ x ~@9", D: "~ x ~@2",
})).gain(0.4)

// drums · hihat
const hihat = s("hh").struct("<~@56 A ~@8 B@4 ~@10 C D@12 E ~>".pickRestart({
  A: "~@5 x ~ x", B: "x!4", C: "~@4 x!4", D: "x!3 ~ x!4", E: "x!3 ~@5",
})).gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@56 [~@2 x!2] ~@8 [~ x ~@6]!4 ~@11 [~@3 x ~@4]!13 ~>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<[~@12 x!4] ~@3 [~@3 x] ~@65 [~@3 x] ~@23>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<A ~ B ~ A ~@63 C ~ A ~@23>".pickRestart({
  A: "~@5 x ~@2", B: "~@6 x!2", C: "~@15 x",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~ [x!4]!6 ~@62 [x!4]!4 ~@21>").gain(0.4)

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

// drums · cowbell
const cowbell = s("cb").struct("<~@7 A@28 B A@20 ~ A@12 ~@4 A@5 C ~@15>".pickRestart({
  A: "x!4", B: "~@2 x!2", C: "x!2 ~@2",
})).gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<~@7 A@28 B A@20 ~ A@12 ~@4 A@5 C ~@15>".pickRestart({
  A: "x!8", B: "x", C: "x!4 ~@4",
})).gain(0.4)

stack(
  bass, bass_2, drawbar_organ, harpsichord, electric_guitar_clean, distortion_guitar, kick, rim, clap, snare, hihat,
  open_hat, mid_tom, high_tom, ride, tambourine, cowbell, shaker
)