Strudelify
Higher Ground cover art

UB40 Present The Fathers Of Reggae

Higher Ground

UB40

KeyD majorTempo101 bpm
0:00/0:00
// Higher Ground — UB40
// 101 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: ch 5 "Vibe" named as a mallet, played on vibraphone (its pan flute patch is not one)
// note: Full arrangement: all 110 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(101/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// chords · piano
const piano = note(`<
  A B C D C E F G H B I J I J I@2 J I J I@2 J I K@2 L@2 K I J I J I@2 J I J I@2 J I K@2 L@2 K I J I K@2 I J I K@2 I J I
  K@2 L M N I J I J I@2 J I J I@2 J I K@2 L@2 K I J I J I ~@5 I J I K@2 L@2 K I J I J I ~@5
>`.pickRestart({
  A: "[e4,g4,c5] ~@5 [d4,g4,b4] ~@5 [e4,g4,c5] ~@3", B: "[d4,g4,b4] ~@5 [b3,d4,g4] ~@5 [g3,b3,d4] ~@3",
  C: "[a3,d4,f#4] ~@5 [a3,d4,g4] ~@5 [a3,d4,a4] ~@3", D: "[a3,c#4,e4] ~@5 [a3,d4,f#4] ~@9",
  E: "[g3,a3,c4,e4] ~@5 [g3,b3,d4] ~@9", F: "[b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [b3,d4,g4] ~@3",
  G: "[g3,c4,e4] ~@5 [c4,e4,g4] ~@5 [e4,g4,c5] ~@3", H: "[e4,g4,c5] ~@5 [d4,e4,g4,b4] ~@5 [e4,g4,c5] ~@3",
  I: "~@2 [d3,f#3,a3] ~@3 [d3,f#3,a3] ~@3 [d3,f#3,a3] ~@3 [d3,f#3,a3] ~", // D
  J: "~@2 [c#3,e3,a3] ~@3 [c#3,e3,a3] ~@3 [d3,f#3,a3] ~@3 [d3,f#3,a3] ~", // A D
  K: "~@2 [d3,g3,b3] ~@3 [d3,g3,b3] ~@3 [d3,g3,b3] ~@3 [d3,g3,b3] ~", // G
  L: "~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~", // C
  M: "[g3,c4,e4] ~@5 [g3,b3,d4,e4] ~@5 [g3,c4,e4] ~@3", N: "[g3,b3,d4] ~@5 [g3,b3,d4] ~@5 [d3,g3,b3] ~@3",
})).s("gm_piano").gain(0.48)

// bass · synth bass 1 · "Synth Bas"
const bass = note(`<
  ~@6 A B C D E F E F E@2 F E F E@2 G E H I J K H E F E F E@2 F E F E@2 G E H I J K H E G E H I E G E H I E G E H I J C
  D E F E F E@2 F E F E@2 G E H I J K H E F E F E@2 F E L ~ E G E H I J K H M N M N M E F E F E
>`.pickRestart({
  A: "g1 ~@5 g1 ~@5 g1 ~@3", B: "c2 ~@5 c2 ~@5 c2 ~@3", C: "c3 ~@5 b2 ~@5 c3 ~@3", D: "b2 ~@5 g2 ~@5 d2 ~@3",
  E: "d2 ~@2 a2 d2!2 ~ d2!2 ~ a1 ~ d2 ~ a1 ~", F: "a2 ~@2 b2 a2!2 ~ a2 d3 ~ a2 ~ f#2 ~ a2 ~",
  G: "a2 ~@2 b2 a2!2 ~@2 d3!2 b2!2 a2!2 f#2 ~", H: "g2 ~@2 g2!3 ~ g2!2 ~ d2 ~ g2 ~ d2 ~",
  I: "g2 ~@2 g2!3 ~ g2!3 d2 ~ g2 ~ d2 ~", J: "c3 ~@2 c3!3 ~ c3!3 g2 ~ c3 ~ g2 ~",
  K: "c3!2 ~ c3!3 ~@2 c3!2 g2 ~ c3 ~ g2 ~", L: "a2 ~@2 b2 a2!2 ~ d3 ~@8", M: "d2 ~@7 d2 ~@7", N: "a2 ~@7 d2 ~@7",
})).s("gm_synth_bass_1").gain(0.35)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~ A B ~@2 C D E F G ~@10 H I H J K L M N O ~@9 H I H J K L M N O ~@9 B ~@2 C D E F G O ~@9 H I H J K L M N O ~@9 B ~@2
  C D E P G O ~@9
>`.pickRestart({
  A: "[d5,g5,b5] ~@5 [b4,d5,g5] ~@5 [g4,b4,d5] ~@3", B: "[a4,a5] ~@15", C: "[b4,b5] ~@15", D: "[g4,g5] ~@15",
  E: "[c5,c6] ~@15", F: "[c5,c6,c7] ~@5 [b4,b5,b6] ~@5 [c5,c6,c7] ~@3",
  G: "[d4,g4,b4,b5,b6] ~@5 [b3,d4,g4,g6] ~@4 [g3,b3] [d4,d6] ~@3", H: "[a3,d4,f#4] ~@5 [a3,d4,g4] ~@5 [a3,d4,a4] ~@3",
  I: "[a3,c#4,e4] ~@5 [a3,d4,f#4] ~@9", J: "[g3,a3,c4,e4] ~@5 [g3,b3,d4] ~@9",
  K: "[b3,d4,g4] ~@5 [b3,d4,g4] ~@5 [b3,d4,g4] ~@3", L: "[g3,c4,e4] ~@5 [c4,e4,g4] ~@5 [e4,g4,c5] ~@3",
  M: "[e4,g4,c5] ~@5 [d4,e4,g4,b4] ~@5 [e4,g4,c5] ~@3", N: "[d4,g4,b4] ~@5 [b3,d4,g4] ~@5 [g3,b3,d4] ~@3",
  O: "[d4,f#4,a4] ~@15", P: "[g4,c5,e5,c6,c7] ~@5 [g4,b4,d5,e5,b5,b6] ~@5 [g4,c5,e5,c6,c7] ~@3",
})).s("gm_string_ensemble_1").gain(0.32).pan(0.6)

// chords · electric guitar jazz · "Jazz Guit"
const electric_guitar_jazz = note(`<
  ~@2 A B C D E F G H I J K L M I J K L M A N C O E P Q R I J K L M I J K L M A N C O E P Q R ~@10 A N C O E P Q R I J K
  L M I J K L M A N C O E P Q R I J K L M I J K L M A N C O E P Q R ~@10
>`.pickRestart({
  A: "~@2 a4 f#4 ~ e4 ~ d4 ~ a4 ~ f#4 ~ e4 d4 ~", B: "e4 ~@2 f#4 ~@2 f#4 ~@9",
  C: "f#4 a4 ~ f#4 ~ e4 d4 ~ a4 ~ f#4 e4 ~ d4 ~@2", D: "a4 ~@2 b4 ~@2 b4 ~@2 a4 g4 ~@5",
  E: "g4 ~ d5 ~ b4 a4 ~ g4 ~ d5 ~ b4 ~ a4 g4 ~", F: "d5 ~ e5 ~@3 e5 ~@2 d5 c5 ~@5",
  G: "~@4 e5 ~ e5 ~ d5 ~@2 d5 ~ a4 g4 ~", H: "g4 ~ g4 a4 b4 ~ b4 ~@9", I: "~@3 f#4!3 ~ a4 ~@2 f#4 ~ e4 f#4 ~ f#4",
  J: "~@4 e4 ~ f#4 ~ e4 ~ d4 ~ f#4 ~ e4 ~", K: "d4 ~@3 f#4!3 ~ a4 ~ f#4 ~ e4 f#4 ~ f#4",
  L: "~@4 e4!2 ~ f#4 e4 ~ d4 ~ f#4 ~ e4 ~", M: "d4 ~@15",
  N: "[c#3,g3,c#4,e4] ~@2 [d3,a3,d4,f#4] ~@2 [d3,a3,d4,f#4] ~@9", // C#dim D
  O: "[e3,g3,a3,c4,a4] ~@2 [d3,g3,b3,d4,b4] ~@2 [g3,b3,d4,b4] ~@2 [e3,a3,c#4,a4] [d3,g3,b3,g4] ~@5", // Am7 G A G
  P: "[g3,c4,e4,d5] ~ [g3,c4,e4,e5] ~@3 [g3,c4,e4,e5] ~@2 [f#3,a3,d4,d5] [e3,g3,c4,c5] ~@5", // C D C
  Q: "~@4 [g3,c4,g4,e5] ~ [g3,c4,g4,e5] ~ [g3,b3,g4,d5] ~@2 [g3,b3,g4,d5] ~ [c3,a3,e4,a4] [b2,g3,d4,g4] ~", // C G Am G
  R: "[c3,g3,d4,g4] ~ [e3,g4] [d3,f#3,d4,a4] [g3,b4] ~ [d3,g3,d4,b4] ~@9", // Csus2 Em D G
})).s("gm_electric_guitar_jazz").gain(0.35)

// chords · vibraphone · "Vibe"
const vibraphone = note("<A B C D C E F G H B ~@46 C D C E F G ~@30 C D C E F G ~@12>".pickRestart({
  A: "[e5,g5,c6] ~@5 [d5,g5,b5] ~@5 [e5,g5,c6] ~@3", B: "[d5,g5,b5] ~@5 [b4,d5,g5] ~@5 [g4,b4,d5] ~@3",
  C: "[a4,d5,f#5] ~@5 [a4,d5,g5] ~@5 [a4,d5,a5] ~@3", D: "[a4,c#5,e5] ~@5 [a4,d5,f#5] ~@9",
  E: "[g4,a4,c5,e5] ~@5 [g4,b4,d5] ~@9", F: "[b4,d5,g5] ~@5 [b4,d5,g5] ~@5 [b4,d5,g5] ~@3",
  G: "[g4,c5,e5] ~@5 [c5,e5,g5] ~@5 [e5,g5,c6] ~@3", H: "[e5,g5,c6] ~@5 [d5,e5,g5,b5] ~@5 [e5,g5,c6] ~@3",
})).s("gm_vibraphone").gain(0.19).pan(0.4)

// chords · alto sax
const alto_sax = note(`<
  ~@27 A B ~@16 A C D E F@2 E G H I@2 J ~@6 A B ~@12 K@2 L M A B ~@12 K@2 L M A B ~@9
>`.pickRestart({
  A: "[c4,c5] ~@5 [b3,b4] ~@5 [c4,g4] ~@3", B: "[d4,a4] ~@15", C: "[d4,f#4,a4] ~@5 g4 ~@5 a4 ~@3", D: "e4 ~@5 f#4 ~@9",
  E: "f#4 ~@5 g4 ~@5 a4 ~@3", F: "c5 ~@5 b4 ~@5 g4 ~@3", G: "[c#4,e4] ~@5 [d4,f#4] ~@9",
  H: "[d4,f#4] ~@5 [e4,g4] ~@5 [f#4,a4] ~@3", I: "[a4,c5] ~@5 [g4,b4] ~@5 [d4,g4] ~@3", J: "[d4,f#4] ~@15",
  K: "e4 ~@5 d4 ~@5 e4 ~@3", L: "e4 ~@15", M: "[e4,g4] ~@5 d4 ~@5 e4 ~@3",
})).s("gm_alto_sax").gain(0.48).pan(0.4)

// chords · trumpet · A D5 E5 Cdim A5 G5 Bm A5 …
const trumpet = note(`<
  ~@52
  [[a4,c#5] ~@5 [a4,d5] ~@9]
  [[a4,d5] ~@5 [b4,e5] ~@5 [c5,f#5] ~@3]
  [[e5,a5] ~@5 [d5,g5] ~@5 [b4,d5] ~@3]
  [[e5,a5] ~@5 [d5,g5] ~@3 c#5 c5 [b4,d5] ~@3]
  [[a4,d5] ~@15]
  ~@53
>`).s("gm_trumpet").gain(0.48).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@10 [x!2]!52 [x ~@2 x ~@2 x ~] [x ~@2 x ~@4] [x!2]!27 x [x!2]!18>").gain(0.56)

// drums · snare
const snare = s("sd").struct("<~@10 [~ x ~ x]!52 ~@2 [~ x ~ x]!27 [~ x ~@2] [~ x ~ x]!18>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@10 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 A B A B A B A B A B ~@2 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
>`.pickRestart({
  A: "x!3 ~@2 x!2 ~ x!4 ~ x!2 ~", B: "x!3 ~@2 x!2 ~ x!3 ~@2 x!2 ~", C: "x!3 ~@2 x!2 ~@9",
})).gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@10 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 A B A B A B A B A B ~@2 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
>`.pickRestart({
  A: "~@3 x ~@3 x ~@7 x", B: "~@3 x ~@3 x ~@3 x ~@3 x", C: "~@3 x ~@3 x ~@8",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct("<~@62 [x ~@2 x ~@2 x ~] [x ~@2 x ~@4] ~@46>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@10 [~ x ~ x]!52 ~@2 [~ x ~ x]!27 [~ x ~@2] [~ x ~ x]!18>").gain(0.4)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct("<~@10 [x!2]!52 ~@2 [x!2]!27 x [x!2]!18>").gain(0.58)

// drums · lt
const lt = s("lt").struct(`<
  ~@10 A@9 B A C A@5 C A@4 B A B A@4 C A@5 C A C A@4 C A@4 C A@3 C ~ D A@4 B A B A@4 C A@5 C A@4 B A B A@2 E A C A@5 C
  A@4 B A@4 B
>`.pickRestart({
  A: "~@3 x!2 ~ x ~@4 x!2 ~ x ~", B: "~@3 x!4 ~@4 x!2 ~ x ~", C: "~@3 x!2 ~ x ~@4 x!4 ~", D: "~@11 x!2 ~ x ~",
  E: "~@3 x!2 ~ x ~@9",
})).gain(0.56)

stack(
  piano, bass, string_ensemble_1, electric_guitar_jazz, vibraphone, alto_sax, trumpet, kick, snare, hihat, hihat_soft,
  crash, tambourine, woodblocks, lt
)

More by UB40