Strudelify

Love Potion Number Nine

Searchers

KeyA minorTempo120 bpm
0:00/0:00
// Love Potion Number Nine — Searchers
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 vibraphone (copy of ch 6 "Melody" vibraphone, 0.125 beats late); ch 5 clavinet (copy of ch 6 "Melody" clavinet, 0.125 beats late); ch 5 orchestral harp (copy of ch 6 "Melody" orchestral harp, 0.125 beats late); ch 5 trumpet (copy of ch 6 "Melody" trumpet, 0.125 beats late); ch 5 acoustic guitar nylon (copy of ch 6 "Melody" acoustic guitar nylon, 0.125 beats late)
// note: Full arrangement: all 64 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 · [...]/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.

// chords · synth strings 1 · "Choir Ahhs"
const synth_strings_1 = note("<~@11 A B A B C@2 B D E@2 ~@43>".pickRestart({
  A: "[a3,c4,e4,a4]", B: "[a3,c4,d4,f#4]", C: "[g3,c4,e4,g4]/2", D: "[g#3,b3,e4,g#4] ~@3", E: "[a3,c4,e4,a4]/2",
})).s("gm_synth_strings_1").gain(0.29).pan(0.4)

// bass · acoustic bass · "Acous Bass"
const bass = note(`<
  A B C B D E@2 F G H@2 B C B D E@2 F G I@2 ~@8 I J K L E@2 F G I@2 ~@8 I J K L E@2 F G I M I M I M I M I
>`.pickRestart({
  A: "~@7 g1", B: "a1@7 c2", C: "d2@7 g1", D: "d2", E: "c2@3 e2 g2@2 a2@2", F: "d2@3 f#2 a2@2 b2@2", G: "e2 ~@3",
  H: "a1@3 c2 c2@2 e2@2", I: "a1@2 c2 e2", J: "d2@4 f#2@2 f#2 g2", K: "a2@2 e2 c2", L: "d2@2 f#2 g2", M: "e2@2 e2!2",
})).s("gm_acoustic_bass").gain(0.4).pan(0.3)

// bass · lead 8 bass lead · "Acous Bass"
const bass_2 = note(`<
  ~@21
  [d1@3 b1@2 a1 f#1 e1]!2
  [b0@3 b1@2 f#1 d1 c#1]!2
  [d1@3 b1@2 a1 f#1 e1]
  [d1@3 b1@2 a1 f#1 d1]
  [e1@2 ~@5 e1]
  [e1@2 ~@3 e1 b0 g#0]
  ~@35
>`).s("gm_lead_8_bass_lead").gain(0.4).pan(0.3)

// bass · synth bass 1 · "Acous Bass"
const bass_3 = note(`<
  ~@39
  [d1@3 b1@2 a1 f#1 e1]!2
  [b0@3 b1@2 f#1 d1 c#1]!2
  [d1@3 b1@2 a1 f#1 e1]
  [d1@3 b1@2 a1 f#1 d1]
  [e1@2 ~@5 e1]
  [e1@2 ~@3 e1 b0 g#0]
  ~@17
>`).s("gm_synth_bass_1").gain(0.4).pan(0.3)

// drums · kick
const kick = s("bd").struct("<A@8 B C A C A C A C A C D A@8 B D C A C A C A C B A@8 B D A@7 B A@9>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x ~@2 x ~@2 x ~", C: "x ~@2 x!2 ~@2 x", D: "x!3 ~",
})).gain(0.36).pan(0.3)

// drums · snare
const snare = s("sd").struct("<~@8 A ~@18 A ~@8 A ~@8 A ~@8 A ~@9>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~",
})).gain(0.32).pan(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@9 A ~ A ~ A ~ A ~ A ~@11 A ~ A ~ A ~ A ~@28>".pickRestart({
  A: "~ x",
})).gain(0.4).pan(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<A@8 B A@9 C A@8 B C A@7 B A@8 B C A@7 B A@9>".pickRestart({
  A: "~ x ~ x", B: "x ~ x!2 ~ x ~@2", C: "~@3 x",
})).gain(0.2).pan(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@9 B ~@8 A B ~@7 A ~@8 A B ~@7 A ~@9>".pickRestart({
  A: "~@3 x", B: "~ x ~@2",
})).gain(0.36).pan(0.3)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@9 A ~@8 A@2 ~@7 A ~@8 A@2 ~@7 A ~@8>".pickRestart({
  A: "x",
})).gain(0.32).pan(0.3)

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

// drums · cowbell
const cowbell = s("cb").struct("<A@8 B A@18 B A@8 B A@8 B A@8 B A@9>".pickRestart({
  A: "x!4", B: "x ~ x!2 ~ x!2 ~",
})).gain(0.32).pan(0.3)

// drums · congas
const congas = s("conga:13").struct(`<
  A B A B A B A B C A B A B A B A B A D A B A B A B A B C D A B A B A B A C A B A B A B A B C D A B A B A B A C A@2 B A
  B A B A B
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~@2 x!2 ~@2 x ~", C: "x ~@4 x ~ x!3 ~ x!2 ~@3", D: "~@4 x!2 ~ x!2 ~ x!2 ~ x ~@2",
})).gain(1.03).pan(0.3)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct("<~@8 A ~@9 B ~@8 A B ~@7 A ~@8 A B ~@7 A ~@9>".pickRestart({
  A: "~ x ~ x!2 ~@11", B: "~ x ~ x ~@12",
})).gain(0.39).pan(0.3)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A B A B A B A B C A B A B A B A B A@3 B A B A B A B C A@2 B A B A B A C A B A B A B A B C A@2 B A B A B A C A@2 B A B
  A B A B
>`.pickRestart({
  A: "~@3 x", B: "~@5 x ~@2", C: "~@9 x!3 ~@4",
})).gain(1.03).pan(0.3)

// drums · congas · soft notes
const congas_soft_2 = s("conga:18").struct("<~@8 A ~@18 A ~@8 A ~@8 A ~@8 A ~@9>".pickRestart({
  A: "~ x!3 ~ x!3 ~@8",
})).gain(0.39).pan(0.3)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  A B A B A B A B ~ A B A B A B A B A@3 B A B A B A B ~ A@2 B A B A B A ~ A B A B A B A B ~ A@2 B A B A B A ~ A@2 B A B
  A B A B
>`.pickRestart({
  A: "x ~@2 x ~@3 x", B: "~ x ~@2 x ~@3",
})).gain(1.03).pan(0.3)

// drums · ht
const ht = s("ht").struct("<~@8 A ~@9 B ~@8 A B ~@7 A ~@8 A B ~@7 A ~@9>".pickRestart({
  A: "~@5 x!2 ~", B: "~ x ~@2 x!2 ~ x!2 ~@2 x ~ x ~@2",
})).gain(0.28).pan(0.3)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@18 [~@3 x ~@12] ~@9 [~@3 x ~@12] ~@17 [~@3 x ~@12] ~@17>").gain(0.16).pan(0.3)

// drums · mt
const mt = s("mt").struct("<~@8 A ~@18 A ~@8 A ~@8 A ~@8 A ~@9>".pickRestart({
  A: "x ~ x!2 ~@4",
})).gain(0.36).pan(0.3)

// drums · agogo bells
const agogo_bells = s("agogo:4").struct("<~@9 A B A B A B A B A ~@11 A B A B A B A ~@28>".pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "x ~@2 x ~ x!2 ~",
})).gain(1.03).pan(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<A@8 ~ A@18 ~ A@8 ~ A@8 ~ A@8 ~ A@9>".pickRestart({
  A: "~@2 x!2 ~@2 x!2",
})).gain(1.22).pan(0.3)

// drums · guiro
const guiro = s("guiro:0").struct("<~@10 A ~ A ~ A ~ A ~@13 A ~ A ~ A ~@29>".pickRestart({
  A: "~@7 x",
})).gain(2.55).pan(0.3)

stack(
  synth_strings_1, bass, bass_2, bass_3, kick, snare, low_tom, pedal_hat, open_hat, crash, ride, cowbell, congas,
  congas_soft, congas_2, congas_soft_2, congas_3, ht, ht_soft, mt, agogo_bells, cabasa, guiro
)

More by Searchers