Strudelify

Uncle John From Jamaica

Vengaboys

KeyC majorTempo104 bpm
0:00/0:00
// Uncle John From Jamaica — Vengaboys
// 104 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 6 synth brass 1 (copy of ch 5 synth brass 1)
// note: Full arrangement: all 81 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A B A C A B A C ~@12 A B A B A B A B A B A C D E F G D E F H F I J K A B A B A B A B A B A B A B A C ~@4 A B A B A B
  A B A B A B ~@4
>`.pickRestart({
  A: "~@2 [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // F C
  B: "~@2 [b3,d4,g4]!2 ~@2 [b3,d4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // G C
  C: "~@2 [b3,d4,g4]!2 ~@2 [b3,d4,g4] ~@3 [c4,e4,g4] ~@5", // G C
  D: "~@2 [e4,g4,c5]!2 ~@2 [e4,g4,c5] ~@3 [e4,g4,c5] ~@3 [e4,g4,c5] ~", // C
  E: "~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // G
  F: "~@2 [e4,a4,c5]!2 ~@2 [e4,a4,c5] ~@3 [e4,a4,c5] ~@3 [e4,a4,c5] ~", // Am
  G: "~@2 [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~@3 [d4,g4,b4] ~@3 [d4,g4,b4] ~", // F G
  H: "~@2 [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~@3 [d4,g4,b4] ~@5", // F G
  I: "~@2 [c4,f4,a4]!2 ~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,f4,a4] ~", // F
  J: "~@2 [e4,a4,c5]!2 ~@2 [e4,a4,c5] ~@3 [f4,a4,c5] ~@3 [f4,a4,c5] ~", K: "~@2 [d4,g4,b4]!2 ~@2 [d4,g4,b4] ~@9",
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.9)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~ A B A B A B A B ~@12 A B A B A B A B A B A B C D E A C D E A E A E D A B A B A B A B A B A B A B A B ~@4 A B A B A B
  A B A B A B ~@4
>`.pickRestart({
  A: "~@5 [c4,f4,a4] ~@10", B: "~@5 [b3,d4,g4] ~@10", C: "~@5 [e4,g4,c5] ~@10", D: "~@5 [d4,g4,b4] ~@10",
  E: "~@5 [e4,a4,c5] ~@10", // Am
})).s("gm_electric_guitar_clean").gain(0.12).pan(0.9)

// chords · piano
const piano = note(`<
  ~@5 A B A C D E F G D E F H F I J K A B A B A B A C A B A C D E F G D E F H F I J K 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 ~@4
>`.pickRestart({
  A: "~@2 [c4,f4,a4] ~@3 [c4,f4,a4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // F C
  B: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // G C
  C: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [c4,e4,g4] ~@5", // G C
  D: "~@2 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~@3 [c4,e4,g4] ~", // C
  E: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // G
  F: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [c4,e4,a4] ~", // Am
  G: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g4] ~", // F G
  H: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [b3,d4,g4] ~@3 [b3,d4,g#4] ~", // F G G#dim
  I: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  J: "~@2 [c4,e4,a4] ~@3 [c4,e4,a4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", K: "~@2 [b3,d4,g4] ~@3 [b3,d4,g4] ~@9",
})).s("gm_piano").gain(0.29).pan(0.1)

// chords · steel drums
const steel_drums = note("<~@64 A B C B D B C E D B C E D ~@4>".pickRestart({
  A: "~@9 [c4,e4] ~ [c4,e4] [d4,f4] ~ [e4,g4] ~", // C Dm Em
  B: "[f4,a4]!3 f4 [g4,b4] ~ [a4,c5] [g4,c5] ~ [e4,g4]!3 [d4,f4] ~ [c4,e4] ~", // F G Am C5 Em Dm C
  C: "[d4,f4] ~ [c4,e4] ~ [d4,f4] ~ [c4,e4] [e4,g4] ~ [c4,e4] ~ [c4,e4] [d4,f4] ~ [e4,g4] ~", // Dm C Dm C Em C Dm Em
  D: "[d4,f4] ~ [c4,e4] ~ [d4,f4] ~ [c4,e4]!2 ~ [c4,e4] ~ [c4,e4] [d4,f4] ~ [e4,g4] ~", // Dm C Dm C Dm Em
  E: "[f4,a4]!3 f4 [g4,b4] [a4,c5] ~ [g4,c5] ~ [e4,g4]!3 [d4,f4] ~ [c4,e4] ~", // F G Am C5 Em Dm C
})).s("gm_steel_drums").gain(0.3)

// chords · synth brass 1
const synth_brass_1 = note(`<
  ~@20 A B C D E F C D G ~@15 A B C D H F C D G ~@8 G@4 ~@3 A B C D E F C D I B C D J
>`.pickRestart({
  A: "~@9 [c4,e4] ~ [c4,e4] [d4,f4] ~ [e4,g4] ~", // C Dm Em
  B: "[f4,a4]@3 ~ [g4,b4] ~ [a4,c5] [g4,c5] ~ [e4,g4]@3 [d4,f4] ~ [c4,e4] ~", // F G Am C5 Em Dm C
  C: "[d4,f4]@2 [c4,e4] ~ [d4,f4]@2 [c4,e4] [e4,g4] ~ [c4,e4]@3 [d4,f4] ~ [e4,g4] ~", // Dm C Dm C Em C Dm Em
  D: "[f4,a4]@3 ~ [g4,b4] [a4,c5] ~ [g4,c5] ~ [e4,g4]@2 ~ [d4,f4] ~ [c4,e4] ~", // F G Am C5 Em Dm C
  E: "[d4,f4]@2 [c4,e4] ~ [d4,f4]@2 [c4,e4]!2 ~ [c4,e4]@3 [d4,f4] ~ [e4,g4] ~", // Dm C Dm C Dm Em
  F: "[f4,a4]@3 ~ [g4,b4] ~ [a4,c5] [g4,c5] ~ [e4,g4]@2 ~ [d4,f4] ~ [c4,e4] ~", // F G Am C5 Em Dm C
  G: "[d4,f4]@2 [c4,e4] ~ [d4,f4]@2 [c4,e4] [c4,e4]@2 ~@7", // Dm C Dm C
  H: "[d4,f4]@2 [c4,e4] ~ [d4,f4]@2 [c4,e4]!2 ~ [c4,e4]@2 ~ [d4,f4] ~ [e4,g4] ~", // Dm C Dm C Dm Em
  I: "[d4,f4]@2 [c4,e4] ~ [d4,f4]@2 [c4,e4] [c4,e4]@2 [c4,e4] ~ [c4,e4] [d4,f4] ~ [e4,g4] ~", // Dm C Dm C Dm Em
  J: "[d4,f4]@2 [c4,e4] ~ [d4,f4]@2 [c4,e4]!2 ~@8", // Dm C Dm C
})).s("gm_synth_brass_1").gain(0.29).pan(0.1)

// bass · fretless bass
const bass = note(`<
  ~@5 A B C D E F G H E I G J G K L M A N A N A N A D A B C D E F G H E I G J G K L M A N A N A N A D A B C D ~@8 A N A
  M A N A N A N A D ~@4
>`.pickRestart({
  A: "f1@3 ~@7 c1!3 ~ c1 ~", B: "g1@4 ~@6 c1!2 d1 ~ e1 ~", C: "f1@4 ~@6 c1!3 ~ c1 ~", D: "g1@3 ~@7 c1!3 ~@3",
  E: "c1@3 ~@7 c1!3 ~ c1 ~", F: "g1@3 ~@7 g1!3 ~ d1 ~", G: "a1@3 ~@7 a1!3 ~ a1 ~", H: "f1@3 ~@7 g1!2 a1 ~ g1 ~",
  I: "g1@2 ~@8 g1!3 ~ d1 ~", J: "f1@3 ~@13", K: "f1@3 ~@7 f1!3 ~ f1 ~", L: "a1@3 ~@7 f1!3 ~ f1 ~", M: "g1@3 ~@13",
  N: "g1@3 ~@7 c1!2 d1 ~ e1 ~",
})).s("gm_fretless_bass").gain(0.4)

// bass · synth bass 1
const bass_2 = note(`<
  ~@5 A B A C D E F G D E F H F I J K L B L M L B L N A B A C D E F G D E F H F I J K L B L M L B L O A B A M ~@8 L B L
  B L B L B L B L B ~@4
>`.pickRestart({
  A: "~@2 f2 ~@3 f2 ~@3 c2 ~@3 c2 ~", B: "~@2 g2 ~@3 g2 ~@3 c2 ~ d2 ~ e2 ~", C: "~@2 g2 ~@3 g2 ~@3 c2 ~@5",
  D: "~@2 c2 ~@3 c2 ~@3 c2 ~ c2 ~ c2 ~", E: "~@2 g2 ~@3 g2 ~@3 g2 ~ g2 ~ d2 ~", F: "~@2 a2 ~@3 a2 ~@3 a2 ~ a2 ~ a2 ~",
  G: "~@2 f2 ~@3 f2 ~@3 g2 ~ a2 ~ g2 ~", H: "~@2 f2 ~@3 f2 ~@3 g2 ~@3 g#2 ~", I: "~@2 f2 ~@3 f2 ~@3 f2 ~ f2 ~ f2 ~",
  J: "~@2 a2 ~@3 a2 ~@3 f2 ~ f2 ~ f2 ~", K: "~@2 g2 ~@3 g2 ~@9", L: "~@2 f2 ~@3 f2 ~@3 c2 ~ c2 ~ c2 ~",
  M: "~@2 g2 ~@3 g2 ~@3 c2 ~@3 c2 ~", N: "~@2 g2 ~@3 g2 ~@3 c2 ~ c2 ~@3", O: "~@2 g2 ~@3 g2 ~@3 c2 ~ c2 ~ c2 ~",
})).s("gm_synth_bass_1").gain(0.4).pan(0.3)

// bass · synth bass 1
const bass_3 = note(`<
  ~@5 A B A C D E F G D E F H F I J K L B L M L B L N A B A C D E F G D E F H F I J K L B L M L B L O A B A M ~@8 L B L
  B L B L B L B L B ~@4
>`.pickRestart({
  A: "~@2 f3 ~@3 f3 ~@3 c3 ~@3 c3 ~", B: "~@2 g3 ~@3 g3 ~@3 c3 ~ d3 ~ e3 ~", C: "~@2 g3 ~@3 g3 ~@3 c3 ~@5",
  D: "~@2 c3 ~@3 c3 ~@3 c3 ~ c3 ~ c3 ~", E: "~@2 g3 ~@3 g3 ~@3 g3 ~ g3 ~ d3 ~", F: "~@2 a3 ~@3 a3 ~@3 a3 ~ a3 ~ a3 ~",
  G: "~@2 f3 ~@3 f3 ~@3 g3 ~ a3 ~ g3 ~", H: "~@2 f3 ~@3 f3 ~@3 g3 ~@3 g#3 ~", I: "~@2 f3 ~@3 f3 ~@3 f3 ~ f3 ~ f3 ~",
  J: "~@2 a3 ~@3 a3 ~@3 f3 ~ f3 ~ f3 ~", K: "~@2 g3 ~@3 g3 ~@9", L: "~@2 f3 ~@3 f3 ~@3 c3 ~ c3 ~ c3 ~",
  M: "~@2 g3 ~@3 g3 ~@3 c3 ~@3 c3 ~", N: "~@2 g3 ~@3 g3 ~@3 c3 ~ c3 ~@3", O: "~@2 g3 ~@3 g3 ~@3 c3 ~ c3 ~ c3 ~",
})).s("gm_synth_bass_1").gain(0.4).pan(0.7)

// chords · rock organ
const rock_organ = note("<~@17 A@3 B ~@20 A@3 B ~@36>".pickRestart({
  A: "[[e5,a5]@2 [a4,f5]@2 [e5,a5] [a4,f5], c5]/3", B: "[b4,d5,g5] ~",
})).s("gm_rock_organ").gain(0.19).pan(0.1)

// other · string ensemble 1
const string_ensemble_1 = note("<~@41 a5 f5 [a5 c6] [d6 ~] ~@36>").s("gm_string_ensemble_1").gain(0.09).pan(0.9)

// other · woodblock
const woodblock = note("<[d#6 ~ a#5 ~ d#6 ~ a#5 ~ d#6 ~ a#5 ~ d#6 ~ a#5 ~]!4 ~@77>").s("gm_woodblock").gain(0.36)

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

// drums · snare
const snare = s("sd").struct("<~@4 A B@15 C B@23 C B@16 ~@3 A B@12 ~@4>".pickRestart({
  A: "~@7 x!3 ~ x!2 ~@3", B: "~ x ~ x", C: "~ x ~@2",
})).gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@5 A@15 B A@23 B A@16 ~@4 A@12 ~@4>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.57)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@20 [~@5 x ~@2] ~@15 [~@3 x] ~@7 [~@5 x ~@2] ~@36>").gain(0.07)

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

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@2 B A ~@3 A ~@7 A ~@3 A ~@2 B A ~@2 C A ~@2 B A ~@2 B A ~@2 B A ~@2 D A ~@2 B A ~@2 B A ~@2 B A E ~ B A ~@2 B A
  ~@2 B A ~@2 B A ~@2 B A ~@3
>`.pickRestart({
  A: "x", B: "~@3 x", C: "~@11 x ~@4", D: "~ x", E: "~@15 x",
})).gain(0.57)

// drums · ht
const ht = s("ht").struct("<~@8 A ~@7 B ~@15 A ~@7 A ~@7 B ~@3 A ~@5 C ~ D ~@7 E ~@3 A ~@3 F ~@4>".pickRestart({
  A: "~@11 x!2 ~@3", B: "~@7 x ~@3 x!2 ~@3", C: "~ x ~@7 x ~@6", D: "~ x ~@5 x ~@3 x!2 ~@3", E: "~@11 x ~@4",
  F: "~ x ~@7 x ~ x!2 ~@3",
})).gain(0.43)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@3 A ~ B@3 C B@7 C B@3 D B@11 C B@3 E B@3 C B@3 D B@3 C B@12 ~@2 A F B@12 ~@4
>`.pickRestart({
  A: "x!16", B: "x!3 ~ x!3 ~ x!3 ~ x!3 ~", C: "x!3 ~ x!3 ~ x!3 ~@5", D: "x!3 ~ x!3 ~@9", E: "x!3 ~ x!3 ~ x!3 ~ x!2 ~@2",
  F: "x!8 ~@8",
})).gain(0.21)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@5 A@3 B A@7 B A@3 C A@11 B A@7 B A@3 C A@3 B A@12 ~@4 A@12 ~@4>".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: "~@2 x!2 ~@2 x!2 ~@8",
})).gain(0.14)

stack(
  electric_guitar_clean, electric_guitar_clean_2, piano, steel_drums, synth_brass_1, bass, bass_2, bass_3, rock_organ,
  string_ensemble_1, woodblock, kick, snare, clap, hihat, hihat_soft, open_hat, crash, ht, shaker, shaker_soft
)

More by Vengaboys