Strudelify
La Isla Bonita cover art

1986 · True Blue

La Isla Bonita

Madonna

KeyE majorTempo211 bpm
0:00/0:00
// La Isla Bonita — Madonna
// 211 bpm, 2/2, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 202 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(211/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 · acoustic guitar steel · "Guitar"
const acoustic_guitar_steel = note(`<
  ~@12 A B C ~ A B C ~@17 D E F G H I J K D E F G H I J K L M@2 N O@3 ~@17 D E F G H I J K D E F G H I J K P Q@2 R@4 S T
  U V W X U V@2 X U V W X U V Y Z AA A B C ~ AB AC AD AE ~@4 AB AC AD AF D E F G H I J K D E F G H I J K AG D E F G H I
  J K D E F G H I J AH AI D E F G H I J K D E F G H I J K AG D E F G H I J K D E F G H I J K AG
>`.pickRestart({
  A: "[c#4,e4,g#4]@6 ~@6 [c#4,e4,g#4]@3 ~", B: "[c#4,e4,g#4]@2 [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@5 ~ [b3,d#4,f#4]@2",
  C: "[c#4,e4,g#4]@3 ~@5", D: "[g#3,c#4,e4]@10 ~@2 [g#3,c#4,e4]@3 ~",
  E: "[g#3,b3,e4]@5 ~ [f#3,b3,d#4]@5 ~ [f#3,b3,d#4]@3 ~", F: "[a3,c#4,f#4]@10 ~@2 [a3,c#4,f#4]@3 ~",
  G: "[g#3,b3,f#4]@5 ~ [g#3,b3,e4]@5 ~ [g#3,b3,e4]@3 ~", H: "[f#3,b3,e4]@5 ~ [f#3,b3,d#4]@5 ~ [f#3,b3,d#4]@3 ~",
  I: "[f#3,b3,d#4]@5 ~ [f#3,a3,c#4]@5 ~ [f#3,a3,c#4]@3 ~", J: "[f#3,a3,c#4]@5 ~ [f#3,a3,c#4]@5 ~ [f#3,b3,d#4]@3 ~",
  K: "[g#3,c#4,e4]@5 ~ [g#3,c#4,e4]@8 ~@2", L: "~@12 e4@3 ~",
  M: "[e4@2 d#4@3 ~ d#4@4 e4@3 ~ g#4@8 ~@10, ~@14 f#4 ~@17]/2", N: "~@4 a4@2 b4@4 a4@2 g#4@3 ~",
  O: "[f#4@3 ~ g#4@2 e4@5 ~ f#4@2 d#4@5 ~ e4@2 b3@5 ~ b3@2 c#4@8 ~@10]/3", P: "~@6 c#5!2 c#5@2 ~ b4@2 b4@2 ~",
  Q: "[b4@2 ~ a4@2 g#4@2 ~ f#4@3 ~ g#4 a4 g#4@8 ~@10]/2",
  R: "[~@4 c4@2 c#4@2 d#4@4 e4@2 f#4@5 ~ e4@3 ~ d#4@3 ~ e4@2 g#4@6 f#4@2 e4@5 ~ d#4@2 d#4@6 e4 d#4 c#4@8 ~@2]/4",
  S: "~ c#4 d#4 e4 f#4 g#4 a4 b4", T: "a4@3 ~ [f#3,a3,c#4]@3 ~", U: "~@4 [f#3,a3,d4]@3 ~", V: "~@4 [g#3,b3,e4]@3 ~",
  W: "~@4 [b3,c#4,f#4]@3 ~", X: "~@4 [f#3,a3,c#4]@3 ~", Y: "~@6 d#4 e4", Z: "f#4@3 ~ e4@3 ~", AA: "[g#3,c4,d#4]@13 ~@3",
  AB: "~@4 [c#4,e4,a4]@3 ~", AC: "~@4 [c#4,e4,g#4]@3 ~", AD: "~@4 [b3,e4,g#4]@3 ~", AE: "~@4 [b3,d#4,f#4]@3 ~",
  AF: "~@4 [c4,d#4,g#4]@3 ~", AG: "[e3,a3,c#4]@3 ~ [f#3,b3,d#4]@3 ~", AH: "[g#3,c#4,e4]@5 ~ [g#3,c#4,e4]@6 c#4@2 d#4@2",
  AI: "[a3,c#4,e4]@3 ~ f#4@2 [b3,d#4,g#4]@4 e4@5 ~, ~@10 d#4 ~@5", // A G#m
})).s("gm_acoustic_guitar_steel").gain(0.59)

// chords · pad new age · "Pad 1"
const pad_new_age = note(`<
  ~@4 A B A ~ A B A ~ A B A ~ A B A ~ A B A ~ C D E F A B A ~ C D E G H I J K L M N O H I J K L M N O A B A ~ A B A ~ A
  B A ~ C D E F A B A ~ C D E P H I J K L M N O H I J K L M N O A B A ~ A B A ~ Q R S T Q R U V Q R S T Q R W@3 X A B A
  ~ C D E F A B A ~ C D E P H I J K L M N O H I J K L M N O Y H I J K L M N O H I J K L M N O Y H I J K L M N O H I J K
  L M N O Y H I J K L M N O H I J K L M N O Y
>`.pickRestart({
  A: "[g#4,c#5,e5]@3 ~@5", B: "~@4 [f#4,b4,d#5]@3 ~", C: "[c#5,e5,a5]@13 ~@3", D: "[c#5,e5,g#5]@13 ~@3",
  E: "[b4,e5,g#5]@13 ~@3", F: "[b4,d#5,f#5]@13 ~@3", G: "[b4,d#5,f#5]@7 ~ [c5,d#5,g#5]@6 ~@2",
  H: "[g#4,c#5,e5]@10 ~@2 [g#4,c#5,e5]@3 ~", I: "[g#4,b4,e5]@5 ~ [f#4,b4,d#5]@5 ~ [f#4,b4,d#5]@3 ~",
  J: "[a4,c#5,f#5]@10 ~@2 [a4,c#5,f#5]@3 ~", K: "[g#4,b4,f#5]@5 ~ [g#4,b4,e5]@5 ~ [g#4,b4,e5]@3 ~",
  L: "[f#4,b4,e5]@5 ~ [f#4,b4,d#5]@5 ~ [f#4,b4,d#5]@3 ~", M: "[f#4,b4,d#5]@5 ~ [f#4,a4,c#5]@5 ~ [f#4,a4,c#5]@3 ~",
  N: "[f#4,a4,c#5]@5 ~ [f#4,a4,c#5]@5 ~ [f#4,b4,d#5]@3 ~", O: "[g#4,c#5,e5]@5 ~ [g#4,c#5,e5]@8 ~@2",
  P: "[b4,d#5,f#5]@5 ~ [c5,d#5,g#5]@8 ~@2", Q: "[c#4,a4]@5 ~ [c#4,g#4]@5 ~ [c#4,f#4]@3 ~",
  R: "[d4,f#4]@5 ~ [d4,g#4]@5 ~ [d4,a4]@3 ~", S: "[b3,g#4]@5 ~ [b3,f#4]@5 ~ [b3,e4]@3 ~",
  T: "[c#4,f#4]@3 ~@3 [c#4,f#4] [c#4,g#4]", U: "[b3,g#4]@5 ~ [b3,f#4]@5 ~ [c#4,a4]@3 ~", V: "[b3,g#4]@13 ~@3",
  W: "[[b3,g#4]@15 ~]/3", X: "[c4,d#4,g#4]@13 ~@3", Y: "[e4,a4,c#5]@3 ~ [f#4,b4,d#5]@3 ~",
})).s("gm_pad_new_age").gain(0.25)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@4 A B A@3 B A@3 B A@3 B A@3 B A@2 C A D E A B A@2 C A D F G H I J K L M N G H I J K L M N A B A@3 B A@3 B A@2 C A D
  E A B A@2 C A D F G H I J K L M N G H I J K L M N A B A@3 B A@2 I O P K I O P J I O P Q I O P J P R A B A@2 C A D E A
  B A@2 C A D F G H I J K L M N G H I J K L M N S G H I J K L M N G H I J K L M N S G H I J K L M N G H I J K L M N S G
  H I J K L M N G H I J K L M N S
>`.pickRestart({
  A: "c#2@3 ~@3 e2@5 ~ g#2@3 ~", B: "b1@3 ~@3 d#2@5 ~ f#2@3 ~", C: "c#2@3 ~@3 a2@5 ~ c#2@3 ~",
  D: "e2@3 ~@3 b2@5 ~ e2@3 ~", E: "b1@3 ~@3 d#2@5 ~ b2@3 ~", F: "b1@3 ~@3 c2@5 ~ g#2@3 ~", G: "c#2@5 ~ g#2@5 ~ c#2@3 ~",
  H: "g#2@5 ~ g#2@2 d#3@3 ~ g#2@3 ~", I: "f#2@5 ~ c#3@5 ~ f#2@3 ~", J: "e2@5 ~ e2@2 b2@3 ~ e2@3 ~",
  K: "b1@5 ~ f#2@5 ~ b2@2 f#2@2", L: "f#2@5 ~ f#2@2 c#3@3 ~ f#2@3 ~", M: "f#2@3 ~ f#2@2 f#2@4 f#2@2 b2@2 c#3@2",
  N: "c#2@5 ~ c#2@2 c#3@3 ~ c#2@3 ~", O: "d2@5 ~ a2@5 ~ d2@3 ~", P: "e2@5 ~ b2@5 ~ e2@3 ~",
  Q: "b1@5 ~ b1@2 f#2@3 ~ b1@3 ~", R: "c2@5 ~ g#2@5 ~ c2@3 ~", S: "a1@3 ~ b1@3 ~",
})).s("gm_fretless_bass").gain(0.7)

// chords · marimba
const marimba = note(`<
  ~@4 A B A C A B A C A B A C A B A C A B A C D A E F A B A C D A E G H I J K L M N H@2 I J K L M N H A B A C A B A C A
  B A C D A E F A B A C D A E G H I J K L M N H@2 I J K L M N H A B A C A B A C O P Q O@2 P Q@2 O P Q R O S T@3 U A B A
  C D A E V A B A C D A E G H I J K L M N H@2 I J K L M N H W H I J K L M N H@2 I J K L M N H W H I J K L M N H@2 I J K
  L M N H W H I J K L M N H@2 I J K L M N H W
>`.pickRestart({
  A: "e5 ~ c#5 ~ e5 ~ g#5 ~ f#5 ~ e5 ~ c#5@2 ~@2", B: "f#4 ~ b4 ~ d#5 ~ f#5 ~ e5 ~ d#5 ~ b4@2 ~@2",
  C: "e4 ~ c#5 ~ e5 ~ g#5 ~ f#5 ~ e5 ~ c#5@2 ~@2", D: "e5 ~ c#5 ~ e5 ~ a5 ~ g#5 ~ e5 ~ c#5@2 ~@2",
  E: "e5 ~ b4 ~ e5 ~ g#5 ~ f#5 ~ e5 ~ b4@2 ~@2", F: "d#5 ~ b4 ~ d#5 ~ f#5 ~ e5 ~ d#5 ~ b4@2 ~@2",
  G: "d#5 ~ b4 ~ d#5 ~ g#5 ~ f#5 ~ d#5 ~ c5@2 ~@2",
  H: "[c#5,e5]@2 [c#5,e5]@3 ~ [c#5,e5]@2 ~@2 [c#5,e5]@2 [c#5,e5]@2 [c#5,e5]@2", // C#m
  I: "[c#5,e5]@2 [b4,d#5]@3 ~ [b4,d#5]@2 ~@2 [b4,d#5]@2 [b4,d#5]@2 [b4,d#5]@2", // C#m B
  J: "[a4,c#5]@2 [c#5,f#5]@3 ~ [c#5,f#5]@2 ~@2 [c#5,f#5]@2 [c#5,f#5]@2 [c#5,f#5]@2", // A F#5
  K: "[c#5,f#5]@2 [b4,f#5]@3 ~ [b4,e5]@2 ~@2 [b4,e5]@2 [b4,e5]@2 [b4,e5]@2", // F#5 B5 E5
  L: "[b4,e5]@2 [b4,e5]@3 ~ [b4,d#5]@2 ~@2 [b4,d#5]@2 [b4,d#5]@2 [b4,d#5]@2", // E5 B
  M: "[b4,d#5]@2 [b4,d#5]@3 ~ [a4,c#5]@2 ~@2 [a4,c#5]@2 [a4,c#5]@2 [a4,c#5]@2", // B A
  N: "[a4,c#5]@2 [a4,c#5]@3 ~ [a4,c#5]@2 ~@2 [d#5,f#5]@2 [d#5,f#5]@2 [d#5,f#5]@2", // A D#m
  O: "[c#5,f#5]@2 [c#5,f#5]@3 ~ [c#5,f#5]@2 ~@2 [c#5,f#5]@2 [c#5,f#5]@2 [c#5,f#5]@2", // F#5
  P: "[d5,f#5]@2 [d5,f#5]@3 ~ [d5,f#5]@2 ~@2 [d5,f#5]@2 [d5,f#5]@2 [d5,f#5]@2", // D
  Q: "[b4,e5]@2 [b4,e5]@3 ~ [b4,e5]@2 ~@2 [b4,e5]@2 [b4,e5]@2 [b4,e5]@2", // E5
  R: "[c#5,f#5]@2 [c#5,f#5]@3 ~ [c#5,f#5]@2 ~@2 [c#5,f#5]@2 [c#5,f#5]@2 [c#5,g#5]@2", // F#5 C#5
  S: "[d5,f#5]@2 [f#5,a5]@3 ~ [f#5,a5]@2 ~@2 [f#5,a5]@2 [f#5,a5]@2 [f#5,a5]@2", // D F#m
  T: "[e5,g#5]@2 [e5,g#5]@3 ~ [e5,g#5]@2 ~@2 [e5,g#5]@2 [e5,g#5]@2 [e5,g#5]@2", // E
  U: "[d#5,g#5]@2 [d#5,g#5]@3 ~ [d#5,g#5]@2 ~@2 [d#5,g#5]@2 [d#5,g#5]@2 [d#5,g#5]@2", // G#5
  V: "d#5 ~ b4 ~ d#5 ~ [f#4,d#5,f#5] ~ [f#4,d#5,f#5]@2 [e4,c#5,e5]@2 [d#4,b4,d#5]@2 ~@2", // D#m C#m G#m
  W: "[c#5,e5]@2 [c#5,e5]@3 ~ [c#5,e5]@2 [d#5,f#5]@2 [d#5,f#5]@3 ~ [d#5,f#5]@2", // C#m D#m
})).s("gm_marimba").gain(0.24)

// chords · synth brass 1 · "Brass"
const synth_brass_1 = note("<~@51 A ~@39 B ~@37 C ~@19 A ~@16 A ~@16 A ~@16 A ~>".pickRestart({
  A: "~ [e4,g#4,c#5,c#6] ~@2 [e4,g#4,c#5,c#6] ~@3", B: "~ [e4,g#4,c#5] ~@2 [e4,g#4,c#5] ~@3",
  C: "~@4 [e4,g#4,c#5,c#6] ~@3", // C#m
})).s("gm_synth_brass_1").gain(0.7)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@16 A B C@2 ~@40 D E F@2 G@4 D E F@2 H@4 ~@24 I J K L I J M@2 I J K L I J N@3 O A B C@2 P Q R S D E F@2 H@4 ~@68
>`.pickRestart({
  A: "g#3@3 c#4", B: "b3@3 f#3", C: "[g#3@11 ~@5]/2", D: "[c#4,e4]", E: "[b3,d#4]", F: "[c#4,e4]/2",
  G: "[c#4@2 ~ d#4, e4@3 ~, ~ b3]/4", H: "[c#4@16 ~@12 c4@3 ~, e4@24 d#4@7 ~, ~@4 b3@3 ~]/4", I: "[f#3,a3,c#4]",
  J: "[f#3,a3,d4]", K: "[e3,g#3,b3]", L: "[f#3,b3,c#4]", M: "[e3,g#3,b3]/2", N: "[[e3,g#3,b3]@15 ~]/3",
  O: "[d#3,g#3,c4]@13 ~@3", P: "a3@3 c#4", Q: "b3@7 ~ g#3@7 ~", R: "b3@10 ~@2 e4@3 ~",
  S: "d#4@2 c#4@3 ~ [d#4,f#4]@4 [c#4,e4]@2 [b3,d#4]@3 ~", // D#m C#m B
})).s("gm_string_ensemble_1").gain(0.49)

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

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

// drums · clap
const clap = s("cp").struct("<~@91 [~ x] ~@25 [~ x] ~@84>").gain(0.7)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B
  A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@5 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B A@3 B@2 A@3 B A@3 B
  A@3 B A@3 B@2 A@3 B A@3 B A@3 B A@3 B@2 A@3 B A@3 B A@3 B A@3 B@2
>`.pickRestart({
  A: "x!4", B: "x!3 ~",
})).gain(0.7)

// drums · mid tom
const mid_tom = s("mt").struct("<~@19 [~@2 x!2] ~@39 [~@2 x!2] ~@142>").gain(0.7)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A@2 ~@3 A ~@3 A ~@3 A
  ~@3 A@2 ~@3 A ~@3 A ~@3 A ~@3 A@2 ~@3 A ~@3 A ~@3 A ~@3 A@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.7)

// drums · high tom
const high_tom = s("ht").struct("<~@19 [~@3 x ~@4] ~@39 [~@3 x ~@4] ~@142>").gain(0.7)

// drums · bongos
const bongos = s("bongo:4").struct(`<
  ~@4 A@7 B A@7 B A@23 B A@7 B A@7 B A@23 B A@7 B A@7 B A@7 B A@7 B C B A@7 B A@7 B A@7 B A@7 B@2 A@7 B A@7 B@2 A@7 B
  A@7 B@2 A@7 B A@7 B@2
>`.pickRestart({
  A: "~ x", B: "~@2 x ~@5 x!2 ~@2 x ~ x ~", C: "~ x ~@2 x ~@3",
})).gain(1.85)

// drums · bongos
const bongos_2 = s("bongo:18").struct(`<
  [~ x]
  [x ~@2 x!2 ~@3]
  [~@2 x!2 ~@2 x ~ x ~@7]
  [~ x ~ x!2 ~@3]
  [~@3 x ~ x ~@2]!198
>`).gain(1.85)

// drums · congas
const congas = s("conga:13").struct(`<
  ~@4 A@7 B A@7 B A@23 B A@7 B A@7 B A@23 B A@7 B A@7 B A@7 B A@7 B A B A@7 B A@7 B A@7 B A@7 B@2 A@7 B A@7 B@2 A@7 B
  A@7 B@2 A@7 B A@7 B@2
>`.pickRestart({
  A: "x!2 ~ x", B: "x!2 ~@2",
})).gain(2.25)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  A@4 B@7 ~ B@7 ~ B@23 ~ B@7 ~ B@7 ~ B@23 ~ B@7 ~ B@7 ~ B@7 ~ B@7 ~ C ~ B@7 ~ B@7 ~ B@7 ~ B@7 ~@2 B@7 ~ B@7 ~@2 B@7 ~
  B@7 ~@2 B@7 ~ B@7 ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~@5 x", C: "~@7 x",
})).gain(2.25)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@4 A@20 B@4 A@4 B@4 A@28 B@4 A@4 B@4 A@47 B A B A@4 B@4 A@68>".pickRestart({
  A: "x!2 ~ x ~@4", B: "x!2 ~@6",
})).gain(3.56)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@52 A B A B A B A B ~@32 A B A B A B A B ~@3 C ~@14 A B A B A B A B ~@42 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 ~
>`.pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "x", C: "~@10 x!3 ~@3",
})).gain(3.44)

// … 13 more lines

More by Madonna