Strudelify
Be My Lover cover art

1996 · All Mixed Up

Be My Lover

La Bouche

KeyC♯ minorTempo136 bpm
0:00/0:00
// Be My Lover — La Bouche
// 136 bpm, 4/4, key C# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 9 "HARP" orchestral harp (copy of ch 8 "SHAMISEN" shamisen)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(136/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.

// bass · synth bass 1 · "SYN BASS"
const bass = note(`<
  ~@9 A B A B A ~ A B A B A B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A B A@4 B A B A B A B ~ A B A
  B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "c#2@2 c#3!2 c#2@2 c#3!2 c#2@2 c#3!2 c#2@2 c#3!2", B: "a1@2 a2!2 a1@2 a2!2 b1@2 b2!2 b1@2 b2!2",
  C: "a1 a2 a1 a2 b1 b2 b1 b2",
})).s("gm_synth_bass_1").gain(0.4)

// other · synth brass 1 · "SYNBRASS"
const synth_brass_1 = note(`<
  ~@29 A B A B A B A B A B A B A B A B ~@8 A B A ~@17 A B A B A B A B ~@8 A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "c#3 g#3 c#3 g#3 c#3 g#3 c#3 g#3", B: "a2 e3 a2 e3 b2 f#3 b2 f#3",
})).s("gm_synth_brass_1").gain(0.4)

// chords · rock organ · "ORGAN 3"
const rock_organ = note(`<
  ~@19 A B A B A B A B A ~@17 A B A B A B A B ~@7 A B A ~@5 B A B A B ~@8 A B A B A B A B ~@15
>`.pickRestart({
  A: "[e5,g#5,c#6] ~ [e5,g#5,c#6]!3 ~@2 [e5,g#5,c#6] ~ [e5,g#5,c#6]!2 ~ [e5,g#5,c#6] ~ [e5,g#5,c#6] ~", // C#m
  B: "[a4,c#5,f#5]@2 ~@2 [a4,c#5,f#5]@2 ~ [a4,c#5,f#5]@2 [b4,d#5,g#5]!2 ~ [b4,d#5,g#5]@2 [b4,d#5,g#5] ~", // F#m G#m
})).s("gm_rock_organ").gain(0.33)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@19 A B A B A B A B A ~@17 A B A B A B A B C@3 ~@4 A B A ~@5 B A B A B ~@8 A B A B A B A B ~@15
>`.pickRestart({
  A: "[e4,g#4,c#5] ~ [e4,g#4,c#5]!3 ~@2 [e4,g#4,c#5] ~ [e4,g#4,c#5]!4 ~ [e4,g#4,c#5]!2", // C#m
  B: "[f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [f#4,a4,c#5] ~ [f#4,a4,c#5]!2 ~ [g#4,b4,d#5]!4 ~ [g#4,b4,d#5]!2", C: "e4/3",
})).s("gm_lead_2_sawtooth").gain(0.38)

// bass · synth bass 1 · "SYN BASS"
const bass_2 = note("<~@8 A B A ~@18 C D C D C D C D C D C D C D C E ~@28 C D C D C D C E ~@23>".pickRestart({
  A: "a3 ~ a4 ~ a3 ~ a4 ~ b3 ~ f#4 ~ b3 ~ f#4 ~", B: "c#4 ~ g#4 ~ c#4 ~ g#4 ~ c#4 ~ g#4 ~ c#4 ~ g#4 ~",
  C: "g#3 c#4 g#3 c#4 g#3 c#4 g#3 c#4", D: "e3 a3 e3 a3 f#3 b3 f#3 b3",
  E: "e3@2 a3@2 e3@2 a3 f#3 ~ f#3 b3@2 f#3@2 b3@2",
})).s("gm_synth_bass_1").gain(0.4)

// chords · synth strings 1 · "SYN STR 1"
const synth_strings_1 = note(`<
  ~ A B A C A B A C ~@2 D E D F ~@14 D E D F D E D F D E D F D E D F ~@28 D E D F D E D F ~@8 D E D F ~@7 F A B A
>`.pickRestart({
  A: "[c#3,g#3,c#4,e4]", B: "[a2,a3,c#4,e4] [b2,b3,d#4,f#4]", C: "[a2,e3,a3,c#4] [b2,f#3,b3,d#4]", D: "[g#3,c#4,e4]",
  E: "[a3,c#4,e4] [b3,d#4,f#4]", F: "[e3,a3,c#4] [f#3,b3,d#4]",
})).s("gm_synth_strings_1").gain(0.25)

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

// drums · clap
const clap = s("cp").struct(`<
  ~@5 A B A B A B A B A B A B A B A B A B A B A B A ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A@2 B A B A B
  A B ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~@2 x",
})).gain(0.54)

// drums · snare
const snare = s("sd").struct("<~@52 A ~@2 A ~@6 B C ~@24 A ~@15>".pickRestart({
  A: "~ x!15", B: "~@9 x!7", C: "x!16",
})).gain(0.36)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@52 A ~@2 A ~@6 B ~@25 A ~@15>".pickRestart({
  A: "x", B: "x!9 ~@7",
})).gain(0.18)

// drums · hihat
const hihat = s("hh").struct("<~@5 A@3 B C@43 D C@11 ~ C@23 D C@12 ~@3>".pickRestart({
  A: "~@3 x ~@3 x ~@3 x ~@3 x", B: "~@3 x ~@3 x ~@3 x ~@4", C: "x!4", D: "x",
})).gain(0.42)

// drums · open hat
const open_hat = s("oh").struct("<~@5 A@3 B C@43 ~ C@11 ~ C@23 ~ C@12 ~@3>".pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@4", C: "~ x ~ x ~ x ~ x",
})).gain(0.42)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@9 A@43 ~ A@11 ~ A@7 ~ A@15 ~ A@12 ~@3>".pickRestart({
  A: "x!16",
})).gain(0.18)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@9 A B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A ~ A B A@2 B A@3 B A@2 ~ A B A@3 B A@3 B A@3 B
  A@3 B A@3 B A ~ A B A@3 B A@3 B A@2 ~@3
>`.pickRestart({
  A: "~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2", B: "~@2 x!2 ~@2 x!2 ~@3 x ~@2 x!2",
})).gain(0.3)

stack(
  bass, synth_brass_1, rock_organ, lead_2_sawtooth, bass_2, synth_strings_1, kick, clap, snare, snare_soft, hihat,
  open_hat, crash, tambourine, shaker
)

More by La Bouche