Strudelify
Put a Little Love in Your Heart cover art

1988 · Put a Little Love in Your Heart

Put a Little Love in Your Heart

Annie Lennox

KeyB♭ minorTempo102 bpm
0:00/0:00
// Put a Little Love in Your Heart — Annie Lennox
// 102 bpm, 4/4, key A# minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 72 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(102/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.

// chords · percussive organ · "ORGAN 2"
const percussive_organ = note(`<
  ~ A B C B A B D E A F G H B I J I K L K@2 A B D E A F G H B I J I K L K@2 M@2 N O P Q N R S T O U V U W X W Y Z@2 AA@2
  AB@6 AC@6 ~
>`.pickRestart({
  A: "[f5,a5]@9 ~ [f5,bb5]@3 [f5,bb5]@2 ~", B: "[f5,a5]@15 ~", C: "[f5,a5]@10 [f5,bb5]@3 [f5,bb5]@3",
  D: "[f5,bb5]@10 [f5,bb5]@3 [f5,bb5]@2 ~", E: "[f5,a5]@10 [f5,g5]@3 [f5,g5]@3", F: "[f5,a5]@9 ~ a5@2 g5 f5 d5 ~",
  G: "[f5,bb5]@9 ~ [f5,bb5]@3 [f5,bb5]@2 ~", H: "[f5,a5]@9 ~ [f5,g5]@3 [f5,g5]@2 ~", I: "f5@6 e5@9 ~, g5@15 ~",
  J: "[f5,a5]", K: "[f5,g5]", L: "[f5,g5]@15 ~", M: "[[db5,ab5]@31 ~]/2", N: "[gb5,bb5]@9 ~ [gb5,b5]@3 [gb5,b5]@2 ~",
  O: "[gb5,bb5]@15 ~", P: "[gb5,b5]@10 [gb5,b5]@3 [gb5,b5]@2 ~", Q: "[gb5,bb5]@10 [gb5,ab5]@3 [gb5,ab5]@3",
  R: "[gb5,bb5]@9 ~ bb5@2 ab5 gb5 eb5 ~", S: "[gb5,b5]@9 ~ [gb5,b5]@3 [gb5,b5]@2 ~",
  T: "[gb5,bb5]@9 ~ [gb5,ab5]@3 [gb5,ab5]@2 ~", U: "gb5@6 f5@9 ~, ab5@15 ~", V: "[gb5,bb5]", W: "[ab4,gb5]",
  X: "[ab4,gb5]@15 ~", Y: "[gb5,ab5]", Z: "[~@16 [gb4,bb4]@15 ~, [eb4,b4] ~, ~@10 db5@21 ~]/2",
  AA: "[~@16 [gb4,bb4]@15 ~, [eb4,b4]@15 ~@17, ~@5 db5@11]/2", // Gb Abm
  AB: "[~@16 [gb4,bb4]@15 ~, [eb4,b4]@15 ~@17, ~@10 db5@21 ~]/2", AC: "[~ [gb4,bb4], [eb4,b4]@15 ~@17, ~@5 db5@11]/2",
})).s("gm_percussive_organ").gain(0.33).pan(0.6)

// bass · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A@4 B C D A B C D B E F E G H@2 I J B K D B@2 C D B E F L G H@3 M N@2 O P Q O@2 R Q O S T U V N@3 W X Y Z AA AB AC
  AB AC AD AA AE AA AB AF AB AF AG
>`.pickRestart({
  A: "f1@3 f1@5", B: "f1@3 f1@4 c2", C: "f1@3 f1@4 a1", D: "bb1@3 bb1@4 c2", E: "f1@3 f1@4 f1", F: "g1@3 c2@4 c2",
  G: "g1@3 c2@4 g1", H: "c2@3 c2@4 g1", I: "c2@5 ~ c2@8 g1@2", J: "c2@3 c2@5", K: "f1@5 ~ f1@8 a1@2",
  L: "f1@5 ~ f1@7 ~ f1@2", M: "c2@3 c2@4 c2", N: "db2@3 db2@4 ab1", O: "gb1@3 gb1@4 db2", P: "gb1@5 ~ gb1@8 bb1@2",
  Q: "b1@3 b1@4 db2", R: "gb1@3 gb1@4 bb1", S: "gb1@3 gb1@4 gb1", T: "ab1@3 db2@4 db2", U: "gb1@5 ~ gb1@7 ~ gb1@2",
  V: "ab1@3 db2@4 ab1", W: "db2@3 db2@4 db2", X: "b1@3 b1@5", Y: "gb1@6 gb1@7 ~ gb1@2", Z: "b1@5 ~ b1@10",
  AA: "gb1@3 gb1@5", AB: "b1@3 b1@4 b1", AC: "gb1@5 ~ gb1@10", AD: "b1@5 ~ b1@8 b1@2", AE: "b1@6 b1@7 ~ b1@2",
  AF: "gb1@6 gb1@9 ~", AG: "gb1@6 gb1 ~@9",
})).s("gm_fretless_bass").gain(0.38)

// other · pad warm · "WARM PAD"
const pad_warm = note("<~ A@2 B@10 ~@8 C@2 D E B@2 E@2 ~@10 F@2 G H I@2 H@2 ~@8 J K J K@3 J K J K@7 ~>".pickRestart({
  A: "[~ f4@30 ~]/2", B: "[f4@31 ~]/2", C: "f4/2", D: "f4@15 ~", E: "f4", F: "gb4/2", G: "gb4@15 ~", H: "gb4",
  I: "[gb4@31 ~]/2", J: "gb3", K: "gb3@15 ~",
})).s("gm_pad_warm").gain(0.44)

// other · pad poly · "POLYSYNTH"
const pad_poly = note(`<
  ~@13 A B A C D@2 E F ~@8 G H G I@2 H@3 J K ~@8 L K L M@2 K@3 N L N L N L N L N L N L N L N O P
>`.pickRestart({
  A: "[c3,f3,a3]", B: "[d3,f3]@3 [c3,e3]@5, g3", C: "[d3,f3,g3]@3 [c3,e3,g3]@5", D: "[c3,g3]/2", E: "[c3,g3]",
  F: "[c3,g3]@15 ~", G: "a3", H: "g3", I: "[g3@31 ~]/2", J: "ab3@15 ~", K: "ab3", L: "bb3", M: "[ab3@31 ~]/2", N: "b3",
  O: "bb3@15 ~", P: "bb3 ~",
})).s("gm_pad_poly").gain(0.22)

// other · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note("<~@21 A@2 B@2 A@2 C@2 D E D E F@4 G@2 H@2 I@2 H@2 J@2 K L K L G@4 ~@17>".pickRestart({
  A: "[a3@6 bb3 c4]/2", B: "[f3@3 g3]/2", C: "[f3@31 ~]/2", D: "a3@3 f3@5", E: "g3@3 c3@5", F: "g3@3 c4@5",
  G: "ab3@3 db4@5", H: "[bb3@6 b3 db4]/2", I: "[gb3@3 ab3]/2", J: "[gb3@31 ~]/2", K: "bb3@3 gb3@5", L: "ab3@3 db3@5",
})).s("gm_synth_brass_2").gain(0.32)

// other · pad new age · "FANTASIA"
const pad_new_age = note("<~ A@2 B C D ~@27 E@4 F G ~@12 F@4 H I H J H I H I H J H I H I H K L>".pickRestart({
  A: "[a5 bb5 c6 c6@7 ~@4 f5 g5]/2", B: "a5@2 bb5@2 c6 ~ f6@9 ~",
  C: "~@10 c7 a6 f6 d6 c6 bb5, ~@4 f7 ~@3, ~@9 d7@2 ~@5", D: "a5@5 ~@3",
  E: "d6 c6 g5 d6 c6 g5 d6 c6 g5 d6 c6 g5 d6 c6 g5 d6",
  F: "eb6 db6 ab5 eb6 db6 ab5 eb6 db6 ab5 eb6 db6 ab5 eb6 db6 ab5 eb6",
  G: "eb6 db6 ab5 eb6 db6 ab5 eb6 db6 ab5 eb6 db6 ab5 eb6 db6 ab5 ~",
  H: "eb5 gb5 ab5 gb5 b5 ab5 gb5 db5 eb5 gb5 ab5 gb5 b5 ab5 gb5 eb5",
  I: "db5 gb5 ab5 gb5 bb5 gb5 db5 gb5 db5 gb5 ab5 gb5 bb5 ab5 gb5 db5",
  J: "db5 gb5 ab5 gb5 bb5 ab5 gb5 db5!2 gb5 ab5 gb5 bb5 ab5 gb5 db5",
  K: "db5 gb5 ab5 gb5 bb5 ab5 gb5 db5!2 gb5 [ab5,db7] [gb5,bb6] [bb5,gb6] [ab5,eb6] [gb5,db6] [db5,bb5], ~@4 gb7 ~@3, ~@9 eb7@2 ~@5", // Db5 Gb Ebm Ab5 Gb5 Gb
  L: "gb5 ~@15",
})).s("gm_pad_new_age").gain(0.33).pan(0.4)

// other · synth bass 1 · "SYN BASS 1"
const synth_bass_1 = note("<~@17 A B@4 A@7 ~@4 A C@3 D E D@8 ~@4 D F@3 D@15 G ~>".pickRestart({
  A: "~@2 c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4",
  B: "[[g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 ~ [g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 ~ [g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 ~ [g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4, ~@15 f4@2 ~@14 f4@2 ~@14 f4@2 ~@15]/4", // Gsus2
  C: "[[g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 ~ [g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 ~ [g4,a4] ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4 ~ c4 f4, ~@15 f4@2 ~@14 f4@2 ~@15]/3", // Gsus2
  D: "~@2 db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4",
  E: "[ab4,bb4] ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4", // Absus2
  F: "[[ab4,bb4] ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 ~ [ab4,bb4] ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 ~ [ab4,bb4] ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4 ~ db4 gb4, ~@15 gb4@2 ~@14 gb4@2 ~@15]/3", // Absus2
  G: "~@2 db4 gb4 ~ db4 gb4 ~@9",
})).s("gm_synth_bass_1").gain(0.1).pan(0.6)

// other · pan flute
const pan_flute = note("<~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 B C D E ~@12 B F G E H I ~@12 H J K L ~@17>".pickRestart({
  A: "[f4,f5]!2 ~ [f4,f5] ~@12", B: "~ c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 [f4,f5,g5]",
  C: "a5 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 [f4,f5]", D: "[g5,a5] f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5",
  E: "[g5,a5] c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 ~", // Gsus2
  F: "~ c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 [f4,f5], a5 ~@7", // F
  G: "g5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5 f4 c5 f5, a5 ~@7",
  H: "~ db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 [gb4,gb5,ab5]", // Gbsus2
  I: "~ db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4, bb5 ~@7",
  J: "~ db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 [gb4,gb5], bb5 ~@7", // Gb
  K: "ab5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5, bb5 ~@7",
  L: "[ab5,bb5] db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 gb4 db5 gb5 ~", // Absus2
})).s("gm_pan_flute").gain(0.2).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  A B@3 C B@5 D B E B@6 F G B@2 H E B@2 H D B@3 D B@2 I J K L B@9 M N M N O F P B@8 M B@2 M B H B H ~
>`.pickRestart({
  A: "~@5 x ~@2", B: "x ~@2 x ~@3 x", C: "x ~@2 x ~ x ~@2", D: "x ~@5 x ~@7 x!2", E: "x ~@2 x ~ x ~ x",
  F: "x ~@2 x!2 ~@2 x", G: "x ~@2 x ~@2 x ~@5 x ~@3", H: "x ~@2 x ~@4", I: "x ~@6 x!2 ~@5 x ~", J: "x ~ x!2",
  K: "x ~@5 x ~ x ~ x!2 ~@2 x ~", L: "x ~@2 x ~@2 x ~ x ~@5 x ~", M: "x ~@5 x ~@8 x", N: "x ~@5 x ~@6 x!2 ~",
  O: "x ~@2 x ~@2 x ~@7 x ~", P: "x ~@2 x ~@2 x ~@7 x!2",
})).gain(0.49)

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

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!70 ~>").gain(0.22)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@3 x]!70 ~>").gain(0.38)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x ~@3 x ~@2]!70 ~>").gain(1.22)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~@2 A@8 ~@2 A@2 ~ A@8 ~ A ~ A ~ A@3 ~ A@8 ~@2 A@2 ~ A@8 ~ A ~ A ~ A@3 ~ A@9 ~
>`.pickRestart({
  A: "~@12 x!2 ~@2",
})).gain(1.22)

// drums · congas
const congas_3 = s("conga:33").struct("<~ A B@8 C D B@13 D B@5 A B@8 C D B@13 D B@5 A B@9 ~>".pickRestart({
  A: "~@6 x!3 ~@5 x!2", B: "x ~@5 x!3 ~@5 x!2", C: "x ~@5 x!3 ~@7", D: "x ~@5 x!3 ~@3 x!4",
})).gain(1.22)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!70 ~>").gain(0.83)

stack(
  percussive_organ, bass, pad_warm, pad_poly, synth_brass_2, pad_new_age, synth_bass_1, pan_flute, kick, snare, hihat,
  tambourine, congas, congas_2, congas_3, cabasa
)

More by Annie Lennox