Strudelify
KeyC majorTempo102 bpm
0:00/0:00
// Barbados — Typically Tropical
// 102 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 88 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.

// bass · fretless bass
const bass = note(`<
  ~@4 A B C D E F E F E F E F G H G I J K L M G H G I J K L M E F E F E F E F G H G I J K L M E F E F E F E F N O P Q N
  R S@2 E F E F E F E F E F E F E F E F E F E F E F E T
>`.pickRestart({
  A: "e1", B: "f1@15 ~", C: "g1, f1 ~@15", D: "a1@15 ~", E: "~@2 c2 ~ c2@4 ~@2 c2!2 d2@2 e2@2",
  F: "f2@2 f1@2 f1@3 ~ f2!5 e2 d2 ~", G: "c2@2 g1@2 c2 ~@4 g1 c2!2 e1@2 e1@2", H: "f1!2 ~@3 g1 a1 b1",
  I: "f1!2 ~@3 e1 f1 f#1", J: "g1@2 g1@2 g1 ~@5 g1@2 b1@2 d2@2", K: "e2@2 f#2@2 e2 ~@5 b1@2 e2@2 d#2@2",
  L: "d2@2 d2@2 d2 ~@5 d2@2 g2@2 a2@2", M: "g2@2 g#1@2 a1@2 b1 g1", N: "a1@2 a1 ~@3 a1@5 ~ a1 b1 c2 c#2",
  O: "d2 ~ d2 ~ f#2@2 ~@4 d2 ~@2 d2 c2 b1", P: "a1@2 a1 ~@7 a1 ~ a1 b1 c2 c#2",
  Q: "d2 ~ d2 ~ f#2@2 ~@4 d2 ~ f#2 d2 c2 b1", R: "d2 ~ d2 ~ f#2@2 ~@4 a1 ~ d2 c#2 c2 b1",
  S: "[a#1@2 a#1@2 ~@2 a#1@2 ~@2 a1@2 f1@2 g1@10 g1 a1 b1 ~ b1 c2 d2 ~]/2", T: "f2@2 f1@2 f1@3 ~ f2 ~@7",
})).s("gm_fretless_bass").gain(0.51)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@8 A B A B A B A B A B A B C D E C A B A B C D E C A B A B A B A B A B A B C D E C A B A B A B A B F G F G F G H I A
  B A B A B A B A B A B A B A B A B A B A B A J
>`.pickRestart({
  A: "~@2 [c3,c4,e4,g4]@3 ~ [c3,c4,e4,g4] ~@3 [c3,c4,e4,g4]@2 ~@2 [c3,c4,e4,g4] ~", // C
  B: "~@2 [f3,c4,f4,a4]@3 ~ [f3,c4,f4,a4] ~@3 [f3,c4,f4,a4]@2 ~@2 [f3,c4,f4,a4] ~", // F
  C: "~@2 [d3,b3,d4,g4]@3 ~ [d3,b3,d4,g4] ~@3 [d3,b3,d4,g4]@2 ~@2 [d3,b3,d4,g4] ~", // G
  D: "~@2 [e3,b3,e4,g4]@3 ~ [e3,b3,e4,g4] ~@3 [e3,b3,e4,g4]@2 ~@2 [e3,b3,e4,g4] ~", // Em
  E: "~@2 [d3,c4,d4,f4]@3 ~ [d3,c4,d4,f4] ~@3 [d3,c4,d4,f4]@2 ~@2 [d3,c4,d4,f4] ~", // Dm7
  F: "~@2 [a2,a3,c4,e4]@3 ~ [a2,a3,c4,e4] ~@3 [a2,a3,c4,e4]@2 ~@2 [a2,a3,c4,e4] ~", // Am
  G: "~@2 [a2,a3,d4,f#4]@3 ~ [a2,a3,d4,f#4] ~@3 [a2,a3,d4,f#4]@2 ~@2 [a2,a3,d4,f#4] ~", // D
  H: "~@2 [a#2,a#3,d4,f4]@3 ~ [a#2,a#3,d4,f4] ~@3 [a#2,a#3,d4,f4]@2 ~@2 [a#2,a#3,d4,f4] ~", // A#
  I: "~@2 [g2,b3,d4,g4]@3 ~ [g2,b3,d4,g4] ~@3 [g2,b3,d4,g4]@2 ~@2 [g2,b3,d4,g4] ~", // G
  J: "~@2 [f3,c4,f4,a4]@3 ~ [f3,c4,f4,a4] ~@9", // F
})).s("gm_acoustic_guitar_steel").gain(0.38).pan(0.3)

// other · pan flute
const pan_flute = note(`<
  ~@8 A B C D E F G@2 H I J K L M@2 N H I J K L M@2 N A B C D E F O@2 H I J K L M@2 N A B C D E F O@2 ~@8 A B C D E F
  O@2 A B C D E F O@2 A B C D E F O@2
>`.pickRestart({
  A: "g5@3 ~@3 d5@2 c5 ~ c5@2 d5 ~ d5@2", B: "d5 c5@2 ~@5", C: "g5@3 ~@9 c5!2 d5!2", D: "d5@2 c5@3 ~@11",
  E: "g5@2 ~@4 d5@2 c5@2 c5 d5@2 d5 d5@2", F: "~ c5@3 ~@12", G: "[g5@2 ~@4 d5!2 c5!3 ~ d5 ~ d5 c5@13 ~@3 g4]/2",
  H: "e5!3 d5!2 c5@2 ~", I: "d5 ~ c5 a4@4 ~@9", J: "e5 ~ e5 e5@3 d5@2 d5 ~ c5@2 c5@2 ~@2", K: "~@4 d5 ~ c5 a4@4 ~@5",
  L: "d5@2 d5 d5@3 ~@4 d5 ~ d5 e5 f5 ~", M: "[e5@4 b4@4 ~@4 e5@2 d5 c5@4 ~@7 a4@2 d5@2 e5 ~]/2", N: "d5@7 ~@9",
  O: "[g5@2 ~@4 d5!2 c5!3 ~ d5 ~ d5 c5@13 ~@4]/2",
})).s("gm_pan_flute").gain(0.48)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@8 A B A B A B A B C D C D E F G H C D C D E F G H A B A B A B A B C D C D E F G H A B A B A B A B I J K L I M N@2 A
  B A B A B A B A B A B A B A B A B A B A B A O
>`.pickRestart({
  A: "~@2 c3 ~ c3@4 ~@2 c3!2 d3@2 e3@2", B: "f3@2 f2@2 f2@3 ~ f3!5 e3 d3 ~", C: "~ [c4,e4]@11 g2@4, [e3,g3]@3 ~",
  D: "f2@5 ~@11", E: "~ [b3,d4]@11 b2@4, [d3,g3]@3 ~", F: "e2 ~@15", G: "~ [a3,d4]@11 g2@2 a2@2, [d3,f3]@3 ~",
  H: "g2@2 g#2@2 a2@2 b2 g2", I: "a2@2 a2 ~@3 a2@5 ~ a2 b2 c3 c#3", J: "d3 ~ d3 ~ f#3@2 ~@4 d3 ~@2 d3 c3 b2",
  K: "a2@2 a2 ~@7 a2 ~ a2 b2 c3 c#3", L: "d3 ~ d3 ~ f#3@2 ~@4 d3 ~ f#3 d3 c3 b2",
  M: "d3 ~ d3 ~ f#3@2 ~@4 a2 ~ d3 c#3 c3 b2", N: "[a#2@2 a#2@2 ~@2 a#2@2 ~@2 a2@2 f2@2 g2@10 g2 a2 b2 ~ b2 c3 d3 ~]/2",
  O: "f3@2 f2@2 f2@3 ~ f3 ~@7",
})).s("gm_electric_guitar_muted").gain(0.38).pan(0.7)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  ~@24 A B A C D E F G H I H I H I H J A B A C D E F G H I H I H I H J K L M N O P Q R H I H I H I H J H I H I H I H J H
  I H I H I H S
>`.pickRestart({
  A: "[g4,g5]@6 [e4,e5] [g4,g5]", B: "[a4,a5]@4 [c5,c6]@8 [e5,e6] [d5,d6] [c5,c6] [a4,a5]",
  C: "[a4,a5]@4 [c5,c6]@8 [f5,f6] [e5,e6] [d5,d6] [c5,c6]", D: "[b4,b5]@6 [a4,a5] [b4,b5]",
  E: "[g4,g5]@2 [e4,e5]@4 e4 [d#4,d#5], ~@12 e5 ~@3", F: "[d4,d5]@2 [e4,e5]@2 [f4,f5]@2 [g4,g5] [a4,a5]",
  G: "[g4,g5]@4 [a4,a5]@4 d5 e5 f5 g5 a5 [b4,b5] [a4,c6] [g4,d6], ~@8 g5@2 ~ d5@2 ~@3", H: "e6 c6 g5@4 e5 g5",
  I: "f5@5 ~ [f4,f5] [g4,g5] [a4,a5]!5 [g4,g5] [f4,f5] ~", J: "[f4,f5]@4 [a4,a5]@4 [c5,c6]@6 [f4,f5] [f#4,f#5]",
  K: "a5@2 g5@2 e5@2 d5 c5", L: "d5@2 a4 c5 d5@2 a4 c5 d5@2 a4 c5 d5 c5 a4 b4", M: "a4 b4 c5 d5 e5 f#5 g5 a5",
  N: "c6@6 b5@4 c6 b5 a5@2 ~@2", O: "d6@4 c6@4 b5@4 a5@2 c6 b5", P: "a5 b5 a5 g5 a5 c6 e5 g5 a5 c5 d5 e5 a4 b4 c5 e5",
  Q: "a#4@2 a#4@2 c5 a#4 f4 g4", R: "~ a4 b4 c5 d5 e5 f5 g5 a5 b5 c6 d6 e6 f6 g6 f6",
  S: "[f4,f5]@4 [a4,a5]@4 [c5,c6]@5 ~@3", // F A C
})).s("gm_string_ensemble_1").gain(0.32).pan(0.3)

// chords · rock organ
const rock_organ = note("<~@16 A B A C D@2 E F ~@39 G ~@24>".pickRestart({
  A: "g5@3 g5, c5", B: "f5@5 d6@2 c6, a4", C: "f5@9 ~ d6@4 c6@2, a4",
  D: "[~@2 d6@4 b5@4 g5@5 ~@7 [g5,b5,e6]@4 [g5,b5,e6]@2 ~@4, b4]/2", // Em
  E: "~@7 d6 ~@4 d5@2 ~@2, c5, ~@7 f5@4 a5@2 ~@3, ~@4 f6 c6@2 ~, ~@9 d6@5 ~@2", F: "[g4,d5,g5,b5]",
  G: "~ g5, [g3,g4,b4,d5]", // G
})).s("gm_rock_organ").gain(0.32).pan(0.7)

// chords · marimba
const marimba = note(`<
  ~@2 A B C D E F G H I J K L M ~@17 G H I J K L N ~@9 G H I J K L N ~ O P Q R S T ~@2 G H I J K L N ~ G H I J K L N ~ G
  H I J K L N ~
>`.pickRestart({
  A: "[c4,e4] ~@3 [c4,e4] ~ [c4,e4]@2 ~@4 [c4,e4] [d4,f4] [e4,g4] ~", // C Dm Em
  B: "[f4,a4] ~ [f4,a4]!2 ~ [f4,a4]!2 ~@5 [f4,a4] [e4,g4] [d4,f4] ~", // F Em Dm
  C: "[c4,e4] ~ [c4,e4]!2 ~ [c4,e4]!2 ~@5 [g3,e4] [a3,f4] [c4,g4] ~", // C Dm C5
  D: "[f3,a4] ~ [f3,a4]!2 ~ [f3,a4]!2 ~@5 [c4,f4] ~ [f4,a4] ~", // F F5 F
  E: "[e4,g4] ~ [e4,g4]!2 ~ [e4,g4]!2 ~@5 [g3,e4] ~ [c4,g4] ~", // Em C C5
  F: "[f3,a4] ~ [c4,a4] ~ [b3,a4] ~ [c4,a4] ~ [b3,a4] ~ [c4,a4] ~ [f4,a4] [e4,g4] [d4,f4] ~", // F B7 F B7 F Em Dm
  G: "[e4,g4]@8 ~@4 [c4,e4] [d4,f4] [e4,f4] ~", H: "[f4,a4] ~@2 [e4,g4] [f4,a4] ~@7 [d4,f4] [e4,g4] [f4,a4] ~",
  I: "[e4,g4]@3 ~@3 a3@2 g3@2 ~@2 [g3,e4] [a3,f4]!2 ~", J: "[c4,a4] ~ [c4,a4]@2 ~@2 [c4,g4] ~ [a3,f4] ~@7",
  K: "[e4,g4] ~", L: "~@12 [d4,f4] [e4,g4] [f4,a4] ~", M: "[e4,g4] ~@7", N: "[e4,g4]@3 ~@13",
  O: "a3 ~ a3 b3 c4 ~ [e3,a3]@2 ~@2 a3@2 [e3,b3]@2 c4 ~", // A5 E5
  P: "d4 ~ d4 e4 f#4 ~ [d3,a3]@2 ~@2 d4 ~ d3@2 f#4 ~, ~@12 e4 ~@3", // D5
  Q: "g4 ~ g4 f#4 g4 ~ [e3,a3]@2 ~@2 f#4 ~ g4 f#4 e4 d4, ~@6 e3 ~", R: "f#4 ~ f#4 e4 f#4 ~ [d3,a3]@2 ~@4 [d3,a3]@2 ~@2",
  S: "[c4,e4,a4]!3 ~@3 [c4,e4,a4] ~@5 [c4,e4,a4] [e4,a4] [c4,e4,a4] ~", T: "[a3,d4,f#4]!3 ~@3 [a3,d4,f#4] ~@9",
})).s("gm_marimba").gain(0.42).pan(0.6)

// chords · whistle
const whistle = note("<A B A C A B A C ~@80>".pickRestart({
  A: "~ [e5,g5] ~ [e5,g5] ~ [e5,g5] ~ [e5,g5], c4@2 e4 g4", B: "~ [f5,a5] ~ [f5,a5] ~ [f5,a5] ~ [f5,a5], f4@2 a4 c5",
  C: "~@2 [f5,a5]@2 ~@2 [f5,a5]@2 ~@2 [f5,a5]@2 ~@2 [f5,a5] ~, f4@2 a4 c5", // F
})).s("gm_whistle").gain(0.23).pan(0.3)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  ~@4 A B A C D E F G ~@20 D E F G ~@12 D E F G ~@12 D E F G ~@4 D E F G ~@4 D E F G ~@4
>`.pickRestart({
  A: "c5@15 ~", B: "~@6 b5 c6", C: "c7@11 ~@5, b6 ~@15", D: "g5@5 ~ e5 g5", E: "f5@8 e6 c6 e6 c6 e6 c6 e6 c6",
  F: "g5@11 ~ e5@2 g5@2, a5 ~@15", G: "f5@7 ~ e6 c6 e6 c6 e6 c6 e6 c6",
})).s("gm_lead_2_sawtooth").gain(0.32).pan(0.8)

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

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

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

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@3 B C@8 D E F D E@3 G D E F D E@3 G C@8 D E F D E@3 G C@8 H@6 ~@2 C@23 I
>`.pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "~ x ~ x", D: "x ~ x!6", E: "x!8", F: "x!7 ~", G: "x!4 ~@4", H: "x ~ x!3 ~ x!2",
  I: "~ x ~@2",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct("<~@15 A ~@23 A ~@15 A ~@7 B ~@7 A ~@7 A ~@8>".pickRestart({
  A: "~@14 x!2", B: "~@7 x",
})).gain(0.47)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A@7 B C ~@2 C ~@4 C ~@2 C ~@4 A@7 B C ~@2 C ~@4 A@7 B A@6 D C A@7 B A@7 B A@7 E
>`.pickRestart({
  A: "~ x ~@3 x ~@2", B: "~@2 x ~@4 x ~@2 x ~@5", C: "~ x ~@6", D: "~@3 x ~ x ~ x", E: "~@2 x ~@4 x ~@8",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@23 A ~@15 A ~@7 B ~@7 A ~@7 A ~@8>".pickRestart({
  A: "~@12 x!2 ~@2", B: "~@10 x ~ x!2 ~@2",
})).gain(0.47)

// drums · high tom
const high_tom = s("ht").struct("<~@15 A ~@23 A ~@15 A ~@7 B ~@7 A ~@7 A ~@8>".pickRestart({
  A: "~@10 x!2 ~@4", B: "~@8 x!2 ~@6",
})).gain(0.47)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@8
  [~@6 x!2 ~@8]!8
  ~@16
  [~@6 x!2 ~@8]!8
  ~@8
  [~@6 x!2 ~@8]!8
  ~@8
  [~@6 x!2 ~@8]!24
>`).gain(1.32)

// drums · congas
const congas_2 = s("conga:33").struct("<~@8 [~ x]!8 ~@16 [~ x]!8 ~@8 [~ x]!8 ~@8 [~ x]!24>").gain(1.32)

stack(
  bass, acoustic_guitar_steel, pan_flute, electric_guitar_muted, string_ensemble_1, rock_organ, marimba, whistle,
  lead_2_sawtooth, kick, rim, snare, hihat, low_tom, open_hat, mid_tom, high_tom, congas, congas_2
)