Strudelify

Build It With Love

Londonbeat

KeyA minorTempo124 bpm
0:00/0:00
// Build It With Love — Londonbeat
// 124 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 finger · "FINGERDBAS"
const bass = note(`<
  ~@7 A B C D E B C D E F G F G F G F H I J I J I J K L B C D E B C D E M N M O F G F G F G F H I J I J I J K L B C D E
  B C D E B C D E ~@3 P Q C D E B C D R
>`.pickRestart({
  A: "~@7 d1 f#1 d1 f#1@2 g1@2 g#1 ~", B: "a1@2 ~@2 a1@2 ~ g1 e1@2 g1@2 a1@2 c2@2",
  C: "~@2 c2 ~ c2@3 a1 c2 ~ c2@2 g1@2 c2@2", D: "d2@2 ~@2 d2 ~ a1!2 c2!2 b1 ~ a1@2 f#1@2",
  E: "~@2 f#1 ~ f#1@3 d1 f#1 f#2 f#1@2 g1 ~ g1 ~", F: "a1@2 ~@2 a1@3 e1 a1 ~ a1@2 e1@2 a1@2",
  G: "~@2 a1 ~ a1@3 e1 a1 ~ a1@2 e1@2 a1 ~", H: "~@2 a1 ~ a1 ~ a1!2 c2 f#1 g1@2 g#1@2 a1 ~",
  I: "d2@2 ~@2 d2@2 ~ a1 c2@2 b1@2 a1@2 e1@2", J: "~@2 e1 ~ e1@2 ~ e1!2 ~ e1@2 g1@2 a1@2",
  K: "f1@2 ~@2 f1@2 ~@2 f1@3 ~ f1 ~ g1@2", L: "~@2 g1 ~ g1@2 ~@2 g#1@2 ~@2 g#1@2 ~@2",
  M: "a1@2 ~@2 a1@3 e1 a1 ~ a1@2 e1@2 c2@2", N: "~@2 c2 ~ c2@2 g1@2 d2@2 ~@2 d2@2 ~@2",
  O: "~@2 c2 ~ c2@2 ~ d2!3 f#1 f#2 g1 g2 g#1 g#2", P: "~@13 g2 g1 g2", Q: "a1@2 ~@2 a1@2 ~ g1 e1@2 g1@2 a1@2 c2 ~",
  R: "~@2 f#1 ~ f#1@3 d1 f#1 f#2 ~@6",
})).s("gm_electric_bass_finger").gain(0.33)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  A B C D A B C D E F G H E F G H I@8 J K J K J K L M E F G H E F G H N O P Q I@8 J K J K J K L M E F G H R S T U R S T
  U V W X Y Z F G H E F G AA
>`.pickRestart({
  A: "[a1,a2,g3,b3,c4,e4]@2 ~@2 [a1,a2,g3,b3,c4,e4]@2 ~ [a2,g3,b3,c4,e4] a1@2 [a2,g3,b3,c4,e4]@2 a1 ~ [c2,c3,g3,c4,e4]@2", // Am7 C
  B: "~@2 [c2,c3,g3,c4,e4] ~ [c2,c3,g3,c4,e4]@2 ~ [c3,g3,c4,e4] c2@2 [c3,g3,c4,e4]@2 c2@2 [c3,g3,c4,e4] ~", // C
  C: "[d2,d3,a3,d4,f#4]@2 ~@2 [d2,d3,a3,d4,f#4]@2 ~ [d3,a3,d4,f#4] d2@2 [a3,d4,f#4]@2 d2 ~ [f#2,f#3,a3,d4,f#4]@2, ~@10 d3 ~@5", // D
  D: "~@2 [f#2,f#3,a3,d4,f#4] ~ [f#2,f#3,a3,d4,f#4]@2 ~ [f#3,a3,d4,f#4] f#2@2 [f#3,a3,d4,f#4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~", // D G
  E: "[g3,b3,c4,e4]@2 ~@2 [g3,b3,c4,e4]@2 ~ [g3,b3,c4,e4] ~@2 [g3,b3,c4,e4]@3 ~ [g3,c4,e4]@2", // Cmaj7 C
  F: "~@2 [g3,c4,e4] ~ [g3,c4,e4]@2 ~ [g3,c4,e4] ~@2 [g3,c4,e4]@2 ~@2 [g3,c4,e4] ~", // C
  G: "[a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4]@3 ~ [a3,d4,f#4]@2", // D
  H: "~@2 [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4] ~ [g2,g3,b3,d4] ~ [g2,g3,b3,d4] ~", // D G
  I: "[[f3,a3,c4,e4]@9 ~ [f3,a3,c4,e4] ~@3 [g3,a3,c4,e4]@11 ~ [g3,a3,c4]@3 ~ [f#3,a3,d4]@15 ~ [f#3,a3,d4]@10 [f#3,a3,d4]@3 ~ [g3,a3,d4]@3 ~, ~@26 e4 ~@37]/4", // Fmaj7 Am7 D Gsus2
  J: "[f3,a3,c4,e4]@2 ~@2 [f3,a3,c4,e4]@3 f3 [f3,a3,c4,e4] ~ [f3,a3,c4,e4]@3 ~ [e3,g3,b3,d4]@2", // Fmaj7 Em7
  K: "~@2 [e3,g3,b3,d4] ~ [e3,g3,b3,d4]@2 ~ [e3,g3,b3,d4] ~@2 [e3,g3,b3,d4]@4 e3 ~", // Em7
  L: "[f3,a3,c4,e4] ~@3 [f3,a3,c4,e4]@2 ~ f3 [f3,a3,c4,e4] ~ [f3,a3,c4,e4]@3 ~ [g3,b3,d4]@2", // Fmaj7 G
  M: "~@2 [g3,b3,d4] ~ [g3,b3,d4]@3 g3 [e3,g#3,b3,d4] ~ [e3,g#3,b3,d4]@3 ~ [e3,g#3,b3,d4] ~", // G E7
  N: "[g3,a3,c4] ~@3 [g3,a3,c4]@2 e3 ~ [g3,a3]@2 e3 ~@3 [e3,g3,c4] ~, ~@8 [b3,c4] ~@7", // Am7 Gsus2 C Cmaj7
  O: "~@2 [e3,g3,c4] ~ [g3,c4]@2 e3 ~ [f#3,a3,d4] ~ [a3,d4]@4 f#3 ~, ~@4 e3 ~@5 f#3@2 ~@4", // C C5 D D5
  P: "[g3,a3,c4] ~@3 [a3,c4]@2 e3 ~ [g3,a3,c4]@2 e3 ~@3 [e3,g3,c4] ~, ~@4 g3 ~@3 b3 ~@7", // Am7 Am Am7 C
  Q: "~@2 [e3,g3,c4] ~ [g3,c4]@2 e3 ~ [f#3,a3,d4] ~ [f#3,a3,d4]@4 f#3 ~, ~@4 e3 ~@11", // C C5 D
  R: "[g3,a3,c4] ~@3 [g3,a3,c4]@2 ~ [g3,a3,c4] ~@2 [g3,a3,c4]@2 ~@2 [c4,e4,g4]@2", // Am7 C
  S: "~@2 [c4,e4,g4] ~ [c4,e4,g4]@2 ~ [c4,e4,g4] ~@2 [c4,e4,g4]@4 c4 ~", // C
  T: "[a3,d4,g4]@2 ~@2 [a3,d4,g4]@2 ~ [a3,d4,g4] ~@2 [a3,d4,g4]@3 ~ [a3,d4,f#4]@2", // Dsus4 D
  U: "~@2 [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@2 [a3,d4,f#4] ~ [d4,f#4]@2 a3 ~, ~@12 a3 ~@3", // D
  V: "[a1,a2]@2 [g3,a3,c4] [a1,a2] [g3,a3,c4]@3 [a1,e2,a2] [g3,a3,c4] [g3,a3,d4] ~ [g3,a3]@2 [e3,g3,a3] [a1,a2] [e3,g3,a3], ~@11 c4 ~@4", // A Am7 A Am7 A5 Am7 Gsus2 A7 …
  W: "[c2,c3]@2 [g3,a3,c4] [c2,c3] [g3,a3,c4]@3 [c2,c3] [g3,a3,c4] [g3,a3,d4] ~ [g3,a3,c4]@2 e3 [c2,c3] ~", // C Am7 C Am7 C Am7 Gsus2 Am7 …
  X: "d2@2 [g3,a3,d4] ~ [a3,d4]@2 [d2,d3] [g3,a3,d4] ~ [d2,d3,g3,a3] [g3,a3,d4]@2 [d2,d3]@2 [g3,a3,d4] ~, d3 ~@3 g3 ~@11", // Gsus2 D5 D Gsus2 Dsus4 Gsus2 D Gsus2
  Y: "[d2,d3]@2 [f#3,a3,d4] ~ [f#3,a3,d4] ~ [d2,d3,f#3,a3] [f#3,a3,d4] ~ [d2,d3,f#3,a3] ~@2 [d2,d3]@2 f#3 a3, ~@5 [f#3,a3,d4]@2 ~", // D
  Z: "[g3,b3,c4,e4]@2 ~@2 [g3,b3,c4,e4]@2 ~ [g3,b3,c4,e4] ~@2 [g3,b3,c4,e4]@3 ~ [g3,c4,e4] ~", // Cmaj7 C
  AA: "~@2 [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~ [a3,d4,f#4] ~@8", // D
})).s("gm_piano").gain(0.26)

// chords · harmonica
const harmonica = note("<A@2 B@2 A@2 C D ~@31 E@3 F G ~@19 H I J K L M@2 N@2 O ~@3 P Q R S T Q R U>".pickRestart({
  A: "e5/2", B: "[e5@31 ~]/2", C: "e5", D: "~@2 [d4,a4]!4 ~ [d4,a4] ~ [d4,a4]!4 c5@3",
  E: "[~@6 e5@32 [a4,b4,c5,d5] [e4,f4,g4] e5@2 ~@2 e5@2 [b4,c5,d5] [f4,g4,a4], ~@40 d4 ~@7]/3", // D7 Em Bm F
  F: "c5@4 d5 ~@2 c5@3 [d5,g5] ~ c5@3 [d5,g5], e4 ~@15", // G5
  G: "[a4,b4,c5] [e4,f4,g4] [d4,e4] g4 a4 g4 a4 ~ a4 c5 a4 g4 a4 g4 e4 ~", H: "~@15 a5", I: "b5@15 ~",
  J: "b5 ~@2 b5 ~ b5 a5 [e5,g5] a5 ~ a5 ~@2 a5 [f5,g5] [b4,c5,d5,e5]", // Em Fsus2 Cmaj7
  K: "[d5,f#5]@3 [f4,g4,a4,b4] [b3,c4,d4,e4] ~ [c5,e5]@5 ~ [d5,e5,f#5] [a4,b4,c5,d5] [d4,e4,f4,g4] ~", // D G7 Cmaj7 C D D7 Em7
  L: "[a4,e5] ~ [a4,e5]@2 d5 [g4,a4,b4,c5] f4 ~ [a4,e5] ~ [a4,e5]@2 c5 g4 ~@2", // A5 Cmaj7 A5
  M: "[e5@2 g5 e5@2 g5 e5@2 g5 e5@2 g5 e5@2 g5 e5@2 g5 e5@2 g5 e5@2 g5 e5 g5 e5 g5 e5 [a4,b4,c5,d5] [b3,c4,d4,e4,f4,g4] [f3,g3,a3,b3]]/2", // D7 Cmaj7 G7
  N: "[~ g5 [b4,c5,d5,e5,f5] a4 ~ f5 [b4,e5] [e4,f4,g4,a4] [f#4,c5]@3 f#5@2 ~ e5@5 g5!2 e5 [e5,g5] e5 ~ [e5,g5]!2 e5 g5!2 [c5,d5] [f4,g4,a4,b4,d5], [e5,a5]@2 ~@2 [d5,f#5]@3 ~@4 c5 ~@20]/2", // Bdim E5 Fmaj7 F#dim Em Csus2 G7 A5 …
  O: "[d4,e4] ~@15", P: "[e4,a4] ~ [e4,a4]!2 ~ [e4,a4]!2 ~ e4 [e4,a4] a4 [e4,g4] [e4,a4] [e4,c5] e4 ~",
  Q: "[e4,a4]!2 a4 [e4,a4] a4 [e4,a4]!4 c5 a4 g4 a4 g4 e4 g4", // A5
  R: "[d4,a4]!4 a4 [d4,a4] a4 [d4,a4]!2 c5 a4 g4 a4 g4 e4 g4", // D5
  S: "[d4,a4]!2 a4 [d4,a4] a4 [d4,a4] a4 [d4,a4]!2 c5 a4 g4 a4 g4 e4 [f4,g4]", // D5 Fsus2
  T: "[e4,a4]!2 a4 [e4,a4] ~ [e4,a4] a4 [e4,a4]!2 c5 a4 g4 a4 g4 e4 g4", // A5
  U: "[d4,a4]!2 a4 [d4,a4] a4 [d4,a4] a4 [d4,a4]!2 ~@7", // D5
})).s("gm_harmonica").gain(0.29)

// chords · harmonica · soft notes
const harmonica_soft = note("<~@65 A B C ~@2 D E F ~@4 G ~@3 G ~@2>".pickRestart({
  A: "~@15 a4", B: "~@2 c5 ~@13", C: "~@6 [e4,a4] ~@5 d5 [f4,a4,b4] e4 ~", D: "~@6 c5 ~@9", E: "~@7 g5@2 ~@3 e5!2 ~@2",
  F: "[c4,f4] ~@15", G: "~@2 e4 ~ e4 ~@11",
})).s("gm_harmonica").gain(0.14)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note("<~@32 A@8 B C D E ~@16 A@4 ~@12 A@7 F>".pickRestart({
  A: "a3!4 ~ a3!2 ~ a3!3 ~ a3 g3 e3 ~", B: "g3 a3 ~ a3 ~ g3 a3 ~ g3 a3 ~ g3 a3 g3 a3 ~",
  C: "g3 a3 ~ a3 ~ g3 a3 ~ g3 a3 ~ g3 c4 a3 d4 ~", D: "g3 a3 ~ a3 ~ g3 a3@2 g3 a3 ~ g3 a3 g3 a3 ~",
  E: "g3 a3 ~ a3@2 g3 a3 g3 a3 e4 d4 c4 d4 c4 a3 ~", F: "a3!4 ~ a3!2 ~ a3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.29).pan(0.1)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note(`<
  ~@32 A B A C A B A C D@4 ~@7 E F@2 G@2 H@2 I J A B A C ~@12 A B A C A B A K
>`.pickRestart({
  A: "a4 ~@3 a4 ~@3 a4 ~@3 a4@2 g4 ~", B: "a4 ~@3 a4 ~@3 a4 ~@3 a4 g4 e4 ~", C: "a4 ~@3 a4 ~@3 a4 g4 e4 ~ g4@2 e4 ~",
  D: "[c4@3 d4]/2", E: "~@9 g4 a4 b4 c5 b4 a4 g4", F: "[a4@11 ~ c5@2 b4@18]/2", G: "[c5@11 ~ e5@2 d5@18]/2",
  H: "[e5@11 ~ a5@2 g5@10 ~ g5 a5 b5 c6 b5 a5 g5]/2", I: "a5@15 ~", J: "d6@2 ~@2 c6 ~@3 a5 ~@3 g5 ~@3",
  K: "a4 ~@3 a4 ~@3 a4 ~@7",
})).s("gm_string_ensemble_1").gain(0.49).pan(0.8)

// chords · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@8 A@2 B@2 A@2 B@2 ~@8 C@6 D@2 A@2 B@2 A@2 B@2 E@4 ~@8 C@6 D@2 A@2 F@2 A@2 B@2 A@2 B@2 G@2 H ~ I@2 B@2 A@2 J@2
>`.pickRestart({
  A: "[g3@7 g4@9, [c4,e4]]/2", B: "[a3,d4,f#4]/2", C: "[[d3,f3,a3,c4]@7 [e3,g3,b3,d4]@9]/2",
  D: "[[f3,a3,c4,e4]@7 [b3,d4,g4]@5 [b3,e4,g#4]@4]/2", // Fmaj7 G E
  E: "[a3@7 g3@5 [f#3,d4]@4 ~@7 g3@5 [f#3,a3,d4]@4, [e3,c4]@12 a3@11 ~@9, ~@4 [e3,c4]@3 ~]/4", // D C
  F: "[[a3,d4,f#4]@31 ~]/2", G: "[a5,a6]/2", H: "[a5,a6] ~@15", I: "[~@7 g4@8 ~, [g3,c4,e4]@31 ~]/2",
  J: "[[a3,d4,f#4]@7 ~]/2", // D
})).s("gm_string_ensemble_2").gain(0.14)

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note("<~@44 A B C@2 A B C@2 D E D E D E A F ~@24>".pickRestart({
  A: "~@4 [f4,a4,c5,e5]@2 ~ [f4,a4,c5,e5] ~@2 [f4,a4,c5,e5] ~@3 [f4,a4,c5,e5] ~", // Fmaj7
  B: "~@4 [g4,a4,c5,e5]@2 ~ [g4,a4,b4,c5,e5] ~@2 [g4,a4,c5,e5] ~@3 [g4,a4,c5,e5] ~", // Am7 Cmaj7 Am7
  C: "~@4 [f#4,a4,d5]@2 ~ [f#4,a4,d5] ~@2 [f#4,a4,d5] ~@3 [f#4,a4,d5] ~", // D
  D: "~@4 [d4,f4,a4,c5]@2 ~ [d4,f4,a4,c5] ~@2 [d4,f4,a4,c5] ~@3 [d4,f4,a4,c5] ~", // Dm7
  E: "~@4 [e4,g4,b4,d5]@2 ~ [e4,g4,b4,d5] ~@2 [e4,g4,b4,d5] ~@3 [e4,g4,b4,d5] ~", // Em7
  F: "~@4 [g4,b4,d5]@2 ~ [g4,b4,d5] ~@2 [g#4,b4,e5] ~@3 [g#4,b4,e5] ~", // G E
})).s("gm_percussive_organ").gain(0.15)

// chords · percussive organ · "ORGAN 2" · Fmaj7 Cmaj7 D Fmaj7 Cmaj7 D
const percussive_organ_2 = note(`<
  ~@44
  [~@9 [f4,a4,c5,e5] ~@6]
  [~@9 [g4,a4,b4,c5,e5] ~@6]
  [~@9 [f#4,a4,d5] ~@6]!2
  [~@9 [f4,a4,c5,e5] ~@6]
  [~@9 [g4,a4,b4,c5,e5] ~@6]
  [~@9 [f#4,a4,d5] ~@6]!2
  ~@32
>`).s("gm_percussive_organ").gain(0.02).pan(1)

// chords · percussive organ · "ORGAN 2" · Fmaj7 Am7 D Fmaj7 Am7 D
const percussive_organ_3 = note(`<
  ~@44
  [~@12 [f4,a4,c5,e5] ~@3]
  [~@12 [g4,a4,c5,e5] ~@3]
  [~@12 [f#4,a4,d5] ~@3]!2
  [~@12 [f4,a4,c5,e5] ~@3]
  [~@12 [g4,a4,c5,e5] ~@3]
  [~@12 [f#4,a4,d5] ~@3]!2
  ~@32
>`).s("gm_percussive_organ").gain(0.04).pan(0)

// drums · kick
const kick = s("bd").struct(`<
  ~@8 A B 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 B A C A B A B A B A B A B A B A
  B A B A B A B D ~@2 E A B A B A B A F
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x ~@3 x ~@3 x ~@2 x!4 ~", D: "x", E: "~@6 x!2", F: "x!3 ~",
})).gain(0.55)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@16 [~@7 x ~@2 x ~@5]!8 ~@20 [~@7 x ~@2 x ~@5]!8 ~@32>").gain(0.27)

// drums · clap
const clap = s("cp").struct("<[~ x ~ x]!16 ~@8 [~ x ~ x]!20 ~@8 [~ x ~ x]!31 [~ x ~@2]>").gain(0.44)

// drums · snare
const snare = s("sd").struct(`<
  ~@7 A B@3 C B@3 C D@3 E D@3 E D@3 E D@3 F B@3 C B@3 C B@3 C D@3 E D@3 E D@3 E D@3 F B@3 C B@3 C B@3 C ~@3 G B@3 C B@3
  H
>`.pickRestart({
  A: "~@7 x!9", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~@4 x ~ x!2", D: "~ x ~ x", E: "~@4 x ~@7 x ~ x!2",
  F: "~@4 x ~@2 x!9", G: "~@13 x!3", H: "~@4 x ~@2 x ~@8",
})).gain(0.44)

// drums · hihat
const hihat = s("hh").struct("<[x!4]!83 [x!3 ~]>").gain(0.27)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x]!39 [~ x ~ x ~ x ~@2] [~ x ~ x ~ x ~ x]!43 [~ x ~ x ~ x ~@2]>")
  .gain(0.27)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 [x!16]!8 ~@8 [x!16]!20 ~@8 [x!16]!31 [x!11 ~@5]>").gain(0.16)

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

// drums · congas
const congas = s("conga:13").struct("~ x ~@3 x ~@2").gain(1.22)

// drums · congas · soft notes
const congas_soft = s("conga:13").struct("~@9 x ~@6").gain(0.7)

// drums · congas
const congas_2 = s("conga:18").struct("<[~@6 x!2 ~@6 x ~]!83 [~@6 x!2 ~@8]>").gain(1.22)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 [x!16]!79 [x!11 ~@5]>").gain(0.55)

stack(
// … 4 more lines

More by Londonbeat