Strudelify
Could You Be Loved cover art

1980 · Uprising

Could You Be Loved

Bob Marley

KeyC minorTempo104 bpm
0:00/0:00
// Could You Be Loved — Bob Marley
// 104 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(104/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
const bass = note(`<
  ~@5 A B C D E F C D E F G H I J K H I J K L M N O P Q R C S T U C S T U V W X Y Z AA Z AB Z AA Z AC AD AE I AF AG AH I
  AF AG AI AJ AK AL AM AJ AN AO C S T U C S T U Z AA Z AB Z AA Z AP Z AA Z AB Z AA Z AQ Z AA Z AB Z AA Z AR
>`.pickRestart({
  A: "c2@2 ~ eb2@2 ~ g2 ~@3 eb2 ~ d2@2 ~@2", B: "c2@2 ~ eb2@2 ~ g2 ~ eb2 ~@7", C: "eb2!2 ~@5 d2 eb2!2 ~@5 bb1",
  D: "c2!2 ~@5 bb1 c2!2 ~@5 g2", E: "ab2!2 ~@5 g2 ab2!2 ~@5 d2", F: "eb2!2 ~ c2 ~ bb1 c2@2 eb2@2 ~@2 bb1@3 ~",
  G: "eb2 ~ f2@2 g2 ~ c2@8 ~ c2", H: "eb2 ~ f2 ~ g2@2 c2@8 ~ eb2", I: "f2!2 ~@5 eb2 f2!2 ~@5 eb2",
  J: "f2!2 ~@5 eb2 f2!2 ~@5 c2", K: "eb2@2 f2@2 g2 ~ c2@8 ~ c2", L: "eb2 ~ f2 ~ g2 ~ c2@8 ~ g2",
  M: "ab2!2 ~@2 eb3@3 ab2 g2!2 ~@2 d3@2 ~@2", N: "f2@2 ~@2 c2@2 ~@2 f2@3 ~@4 c2", O: "eb2@2 f2@2 g2 ~ c3@8 ~ c2",
  P: "eb2 ~ f2 ~ g2@2 c2@8 ~ g2", Q: "ab2!2 ~ ab2 eb3!2 ~ ab2 g2!2 ~ g2 d3!2 ~ bb2", R: "bb2!2 ~ f2!3 ~ bb2!3 ~@5 eb2",
  S: "c2!2 ~@5 bb1 c2!2 ~@5 g1", T: "ab1!2 ~@5 g1 ab1!2 ~@5 d2", U: "eb2!2 ~ c2 ~ bb1 c2@2 eb2 ~ eb2 ~ bb1@3 ~",
  V: "c2 ~ c2 ~@3 bb1 ~ c2 ~ c2 ~@2 g2 ~@2", W: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ c2 ~ g2 c2 ~@2",
  X: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ c2@2 ~ g2 ~@2", Y: "bb1@2 ~ c2@2 ~ bb1 ~ c2@2 ~ g2 c2@3 ~",
  Z: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ c2 ~@2 g2 ~@2", AA: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ c2 ~ g2!2 ~@2",
  AB: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ g2 ~ c3@3 ~", AC: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ g2 ~ c2@3 ~",
  AD: "c2@3 eb2@3 g2@2 ~@2 eb2 ~ d2@3 ~", AE: "c2@2 ~ eb2@2 ~ g2 ~@3 eb2 ~ d2 ~@2 eb2", AF: "f2!2 ~@5 eb2 f2!2 ~@5 bb1",
  AG: "c2@3 eb2@3 g2@2 ~@2 eb2 ~ d2@3 bb1", AH: "c2@2 ~ eb2@2 ~ g2 ~@3 eb2 ~ d2@2 ~ eb2",
  AI: "c2@2 ~ eb2@2 ~ g2 ~@3 eb2 ~ d2@2 ~ g2", AJ: "ab2!2 ~ ab2 eb3!2 ~ ab2 g2!2 ~ g2 d3!2 ~ g2",
  AK: "f2!2 ~ c2!3 ~ f2!3 ~@5 bb1", AL: "c2@3 ~ eb2@2 g2@4 eb2@2 d2@3 bb1", AM: "c2@3 ~ eb2@2 g2@4 eb2@2 d2@3 g2",
  AN: "bb2!2 ~ f3!3 ~ bb2!3 ~ bb2 f2@2 ~ bb2", AO: "bb2!2 ~ f3!3 ~ bb2!3 ~ bb2 f2@2 ~@2",
  AP: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ g2!2 c3@3 ~", AQ: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~@2 g2 c3@2 g2@2",
  AR: "bb1@2 ~ c2@2 ~ bb1 ~ c2 ~ g2 ~@5",
})).s("gm_electric_bass_finger").gain(0.64)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~ A@2 B C D@2 ~@3 E F ~@3 G H I J G K L J M@2 N O M@2 N P ~@3 E F ~@3 M Q M R M Q M R M Q M R S@2 T@2 S@2 T@2 S@2 N O
  M@2 N U V ~@3 E F ~@3 M Q M W M Q M W M Q M W M Q M W M Q M W M Q M R
>`.pickRestart({
  A: "c3 ~ c3!2 ~@2 c3!2 ~ c3 d3 bb2 eb3 bb2 d3 bb2", B: "c3 ~ bb2 c3 ~ bb2 c3 ~@2 c3 d3 bb2 eb3 bb2 d3 bb2",
  C: "c3 ~ bb2 c3 ~ bb2 c3 ~@3 c3 ~ c3!2 ~@2", D: "c3!2 bb2 c3 ~ bb2 c3 ~@2 c3 d3 bb2 eb3 bb2 d3 bb2",
  E: "eb3 ~ eb3!2 ~ eb3!5 f3 eb3 g3 eb3 f3 ~", F: "eb3 ~ eb3!2 ~ eb3!5 f3 eb3 g3 ~@3",
  G: "c3!4 ~ c3!5 d3 c3 eb3 c3 d3 ~", H: "c3!4 ~ c3!5 d3 c3 eb3 d3 c3 ~", I: "f3!4 ~ eb3 f3 ~@2 f3!4 eb3 f3 ~",
  J: "f3!4 ~ eb3 f3 ~@2 f3!4 eb3 c3 ~", K: "c3!4 ~ c3!5 d3 c3 eb3 c3 g3 ~",
  L: "f3!3 eb3 f3 ~ f3 ~@2 f3!2 eb3 f3 eb3 c3 ~", M: "c3!4 ~ c3!5 d3 c3 eb3 c3 d3 c3",
  N: "ab3!2 ~ eb3 ab3!2 ~ ab3 g3!2 ~ d3 g3!2 ~ g3", O: "f3!2 ~ eb3 f3!2 ~ eb3 f3!2 ~ eb3 f3 eb3 c3 bb2",
  P: "bb2!2 ~ bb2!3 ~ bb2!9", Q: "c3!4 ~ c3!6 bb2 g2 ~@3", R: "c3!4 ~ c3!4 bb2 g2 ~@5",
  S: "c3!4 ~ c3!3 ~ c3 d3 c3 eb3 c3 d3 c3", T: "bb2 c3 ~ f3 ~ eb3 c3 ~@2 f3!4 eb3 c3 ~",
  U: "bb2!2 ~ bb2!3 ~ bb2!3 ~ bb2!5", V: "bb2!2 ~ bb2!11 ~ bb2", W: "c3!4 ~ c3!4 bb2 g2 bb2 c3 bb2 g2 bb2",
})).s("gm_electric_guitar_muted").gain(0.64)

// chords · percussive organ
const percussive_organ = note("<~@2 A@3 B C ~@93>".pickRestart({
  A: "[[eb5,g5]@4 [f5,a5]@4 [eb5,g5]@4 [f5,a5]@4 [eb5,g5]@4 [f5,a5]@4 [eb5,g5]@4 [f5,a5]@4 [eb5,g5]@4 [f5,a5]@4 [eb5,g5]@4 [f5,a5]@3 g5, c5]/3", // Eb F Eb F Eb F Eb F …
  B: "bb5@3 c6 ~@11 g5", C: "bb5@3 c6 ~@12",
})).s("gm_percussive_organ").gain(0.32).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@5 A@2 ~@8 B@2 ~@2 B C ~@2 B@2 D E F G H I ~@8 J K J K J K J K J K J K B@2 ~@2 B@2 ~@2 B@2 L M F G H N O ~@8 J K J K
  J K J K J K J K J K J K J K J K J K J P
>`.pickRestart({
  A: "~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4] ~@3", B: "~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4]!2 ~@2",
  C: "~@4 [c4,eb4,g4] ~@7 [c4,eb4,g4]!2 ~@2, ~@13 bb4@3", D: "[c4,eb4,ab4]@4 [c4,eb4,ab4]@3 ~@5 [d4,g4,bb4]@3 ~",
  E: "[ab3,c4,f4]@4 [ab3,c4,f4]@3 ~@5 [ab3,c4,f4]!2 ~@2", F: "c3!16", G: "c3!15 ~",
  H: "[c4,eb4,ab4]@3 ~ [c4,eb4,ab4]@3 ~@5 [bb3,d4,g4]!2 ~@2", // Ab Gm
  I: "[d4,f4,bb4]@3 ~ [d4,f4,bb4]@3 ~ [d4,f4,bb4]!2 ~@2 [d4,f4,bb4]@4", // Bb
  J: "~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~@2", // Cm
  K: "~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] [c4,eb4,bb4] g4 ~@2", // Cm Cm7
  L: "[c4,eb4,ab4]@4 [c4,eb4,ab4]@3 ~@5 [bb3,d4,g4]!2 ~@2", // Ab Gm
  M: "[ab3,c4,f4]@4 [ab3,c4,f4]@3 ~@5 [ab3,c4,f4]!2 ~ [ab3,c4,f4]", // Fm
  N: "[d4,f4,bb4]@3 ~ [d4,f4,bb4]@3 ~@6 [d4,f4,bb4]!3", // Bb
  O: "[d4,f4,bb4]@2 ~ [d4,f4,bb4]!5 ~ [d4,f4,bb4] ~ [d4,f4,bb4] ~ [d4,f4,bb4]@2 [d4,f4,bb4]", // Bb
  P: "~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4] ~@6", // Cm
})).s("gm_electric_guitar_clean").gain(0.48).pan(0.3)

// other · synth brass 1
const synth_brass_1 = note(`<
  ~@7 A@2 B@2 A@2 B@2 C D ~@2 E F G@2 H I J@2 K L M N A@2 B@2 A@2 O@2 ~@8 P ~@3 C Q ~@2 R S ~@2 H T ~ U V W X Y Z A@2
  AA@2 A@2 O@2 AB AC ~ AD ~ AE AF AG AH AG AH AG@2 AI AJ@2 AH@8
>`.pickRestart({
  A: "[~@8 eb4@2 f4@2 g4@2 g4@15 ~@3]/2", B: "[~@10 eb4@2 g4@2 f4@4 eb4@13 ~]/2", C: "~@7 eb4",
  D: "f4@2 g4@2 ab4@2 g4 g4@7 ~@2", E: "~@7 g4 g4@2 eb4@2 f4@2 ab4@2", F: "ab4@2 g4!2 ~@12",
  G: "[~@5 ab4@2 f4@4 ~@5]/2", H: "~@5 eb4 f4 g4", I: "ab4@2 g4 g4@5 ~@2 eb4@2 f4@2 g4@2",
  J: "[ab4@2 ~@2 ab4 ~ ab4 ~ g4@2 g4@2 ab4@2 g4 eb4@3 f4@5 ~@9]/2", K: "~@6 g4@4 eb4@2 eb4@2 f4 g4",
  L: "ab4@2 g4@2 f4 g4@3 ~@2 eb4@2 f4@2 g4@2", M: "ab4@3 ~ ab4@2 ab4@2 g4@2 g4@2 ab4@2 g4@2", N: "g4@2 f4@5 ~@9",
  O: "[f4@2 eb4@4 ~@4 eb4@2 g4@2 f4@4 eb4@13 ~]/2", P: "g4 eb4@2 f4@3 g4@2 f4@2 eb4@3 ~@3",
  Q: "f4@2 g4@2 ab4@2 g4 g4@5 ~@4", R: "~@3 g4 eb4!2 f4 g4", S: "ab4@2 g4 g4@5 ~@8", T: "ab4@2 g4 g4@2 f4 g4@6 ~@4",
  U: "~@4 c4@2 eb4@4 f4@5 ~", V: "~@4 g4@2 f4@4 g4@5 ~", W: "~@2 g4 f4@2 eb4 f4 g4",
  X: "ab4 ~ ab4@2 bb4 ab4@2 g4@3 g4@2 ab4@2 g4@2", Y: "g4 f4@3 ~@4", Z: "g4@2 ab4 f4@5 ~@4 g4@3 ~",
  AA: "[~@5 eb4 g4 f4@2 eb4@6 ~]/2", AB: "~@10 f4@5 ~", AC: "~@10 g4@5 ~", AD: "~@5 g4 f4 eb4", AE: "~@12 bb4@2 eb4 ~",
  AF: "g4@3 f4@2 eb4@2 ~@9", AG: "eb4@3 d4@2 c4@2 ~@9", AH: "[eb4,g4]@3 [d4,f4]@2 [c4,eb4] ~@10",
  AI: "eb4@3 d4@2 c4@2 f4 ~ f4 ~ f4@2 eb4@2 ~", AJ: "[eb4,g4]@3 [d4,f4]@2 [c4,eb4] ~ f4 ~ f4 ~ f4@2 eb4@2 ~",
})).s("gm_synth_brass_1").gain(0.64).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  ~@5 A@2 B A C B@2 A C B A@2 D@2 A@2 D@2 A@2 E D A@2 E F B A C B@2 A C B A@14 D@2 A@2 D@2 A@2 E D A@2 E F@2 B A C B@2 A
  C B A@23 G
>`.pickRestart({
  A: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~", // Cm
  B: "~@2 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~@3 [bb3,eb4,g4] ~", // Eb
  C: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~", // Ab
  D: "~@2 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~@3 [c4,f4,ab4] ~", // Fm
  E: "~@2 [c4,eb4,ab4] ~@3 [c4,eb4,ab4] ~@3 [bb3,d4,g4] ~@3 [bb3,d4,g4] ~", // Ab Gm
  F: "~@2 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~@3 [bb3,d4,f4] ~", // Bb
  G: "~@2 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@3 [c4,eb4,g4] ~@5", // Cm
})).s("gm_electric_guitar_clean").gain(0.56).pan(0.8)

// other · clavinet
const clavinet = note(`<
  ~@7 A B C D A B C E ~@2 F G ~@2 H I ~@8 A B C D A B C E J ~ J ~ J ~ J ~ J ~ J ~@3 K@2 ~@2 K@2 ~@9 A B L D A B L E J ~
  J ~ J ~ J ~ J ~ J ~ J ~ J ~ J ~ J ~ J ~ J ~
>`.pickRestart({
  A: "c5@2 ~ bb4 ~ ab4 g4 ~@9", B: "[eb4,g4]@2 ~ f4 ~ eb4!2 ~@9", C: "ab2@2 ~ c3 ~ eb3 c3 ~@9",
  D: "[eb4,g4] ~ [eb4,g4] ~@2 f4!2 ~ [eb4,g4] ~@7", E: "[eb4,g4] ~ [eb4,g4] f4 ~ f4!2 ~ [eb4,g4] ~ [eb4,g4] ~@5",
  F: "~@2 f2!2 ~@2 f2!2 ~@2 f2!2 ~ f2!2 eb2", G: "~@2 f2!2 ~@2 f2!2 ~ f2!4 eb2 c2 ~",
  H: "f2!3 eb2 f2 ~ f2!2 ~ f2!5 eb2 ~", I: "f2!3 eb2 f2 ~ f2!2 ~ f2!4 eb2 c2 ~", J: "~@10 f3 g3@2 eb3 ~@2",
  K: "~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~@2 f2 ~", L: "ab2@2 ~ c3 ~ eb3 f3 ~@9",
})).s("gm_clavinet").gain(0.56).pan(0.2)

// other · electric guitar muted
const electric_guitar_muted_2 = note(`<
  ~@7 A B C A@2 B C A ~@16 A B C A@2 B C A ~@29 A B C A@2 B C A ~@24
>`.pickRestart({
  A: "eb3!4 ~ eb3!5 f3 eb3 g3 eb3 f3 ~", B: "c3!4 ~ c3!5 d3 c3 eb3 c3 d3 ~", C: "ab2!4 ~ ab2!7 c3 ab2 d3 ~",
})).s("gm_electric_guitar_muted").gain(0.48).pan(0.9)

// other · piano
const piano = note("<~@50 A B C ~ A B C ~ A B C ~ A D E ~@11 F@3 G ~@4 F@3 G ~@4 F@3 G ~@4>".pickRestart({
  A: "~@15 c6", B: "eb6@2 f6@6 ~@7 c6", C: "eb6@2 f6@4 c6@9 ~", D: "eb6@2 f6@2 c6 ~@10 c6", E: "eb6 f6@2 c6@3 ~@2",
  F: "bb5@3 c6 ~@12", G: "bb5@3 c6@2 ~@11",
})).s("gm_piano").gain(0.56)

// drums · kick
const kick = s("bd").struct("<~@5 [x!2]!95>").gain(0.64)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@99>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~@5 [~ x ~ x]!94 [~ x ~@2]>").gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@5 A B A@31 B A@28 B A@7 B A@23 C>".pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!6 ~@2",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@38 [~@7 x] ~@36 [~@7 x] ~@24>").gain(0.56)

// drums · mid tom
const mid_tom = s("mt").struct("<~@6 [~@7 x] ~@60 [~@7 x] ~@32>").gain(0.56)

// drums · ride
const ride = s("rd").struct("<~@2 [~@7 x] [x ~@2 x ~@7 x ~@2 x ~] [x ~@2 x ~@2 x ~ x ~@2 x ~@2 x ~] ~@95>").gain(0.32)

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

// drums · claves
const claves = s("clave:2").struct("<~@5 [~@14 x!2] [x ~@13 x!2]!93 x>").gain(2.35)

stack(
  bass, electric_guitar_muted, percussive_organ, electric_guitar_clean, synth_brass_1, electric_guitar_clean_2,
  clavinet, electric_guitar_muted_2, piano, kick, rim, snare, hihat, open_hat, mid_tom, ride, tambourine, claves
)

More by Bob Marley