Strudelify

Buenos Aires

Madonna

KeyC majorTempo120 bpm
0:00/0:00
// Buenos Aires — Madonna
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 2 "Distortion Guitar" named as a guitar, played on distortion guitar (its piano patch is not one)
// note: Full arrangement: all 104 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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 · distortion guitar
const distortion_guitar = note(`<
  A B A B C D ~ A E F G ~@2 H I J I J K L M N F O P Q R@2 I J I J K L M N F O P S T@2 ~@40 I J I J K U V W F X Y Z AA AB
  AC AD AE AF AG AH@3
>`.pickRestart({
  A: "~@3 [e4,g4] d4@2 [c4,g4]@2 ~ g3 a3 ~ [e3,c4]@2 g3@2", B: "~@4 [e4,g4] [d4,g4]@2 [c4,g4] ~ g3 a3 ~ [e3,c4]@2 a3@2",
  C: "~@3 [e4,g4] d4@2 [c4,g4]@2 ~@2 a4@2 a4@2 [e4,g4]@2", D: "e4 ~@15",
  E: "[c2,c5]@2 [e2,c4]@2 ~@3 [c4,g4] ~ g3 [e3,a3,c4]@2 [c3,e3,c4,c5]@2 [g2,a3,c4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] [c3,c4] ~@3, ~@5 [d4,g4]@2 ~@9", // C C5 Am C Am7 C C5 C …
  F: "[c2,c5]@2 ~ [e4,g4] [g2,c4,d4]@2 [g2,c4,g4,c5]@2 ~ g3 [e3,a3,c4]@2 [c3,e3,c4,c5]@2 [g2,g3,c4]@2, ~ [e2,c4] ~@2 [c3,c4] ~@3", // C Em Gsus4 C5 Am C C5 C
  G: "[c2,c5]@2 [e2,c4]@2 ~@3 [c4,g4] [c3,c4]@2 [e3,c4,a4]@2 [c3,a4,c5]@2 [g2,c4,e4,g4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] ~@4, ~@5 [d4,g4]@2 ~@9", // C C5 C Am F C C5 G5
  H: "~@4 [e4,g4] [d4,g4]@2 [c4,g4] ~ g3 a3 ~ [e3,c4]@2 g#4!2", // Em G5 C5 C
  I: "[b3,d#4,g#4,b4]@2 ~ g#4 [b3,b4]@2 ~ g#4 [b3,g#4,b4]@2 ~ g#4 [b3,b4]@2 [b3,b4,d#5] [b3,b4], ~ [g#4,d#5] ~ [d#4,g#4] ~ [g#4,d#5] ~@2", // G#m B E B G#5
  J: "[f4,c5,f5] f4 a4 [f4,a4,c5] a4!2 d#4!2", // F5 F
  K: "[b3,d#4,g#4,b4]@2 ~@2 [d#4,g#4,b4]@2 [d#4,g#4,b4]@2 [d#4,g#4,b4]@2 [d#4,g#4,b4]@2 [d#4,g#4,b4]@2 ~ b3, ~ [d#4,g#4,b4] ~@6, ~@3 [a#3,a#4]@3 g#3@4 ~@4 [b3,d#4,g#4,b4]@2", // G#m A# G#m
  L: "g#4 b4 g#4 e4 g#4 b4 g#4 e4", M: "[b3,f#4]!4 [b3,g4]!4", N: "[b3,g4]!4 [b3,e4,g#4]!4",
  O: "[c2,c5]@2 [e2,c4]@2 ~@3 [c4,g4] ~ g3 [e3,a3,c4]@2 [c3,e3,c4,c5]@2 [g2,a3,c4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] [c3,c4] ~@3, ~@5 d4@2 ~@9", // C C5 Am C Am7 C C5 C
  P: "[c2,c5]@2 ~ [e4,g4] [g2,c4,d4]@2 [g2,c4,g4,c5]@2 [c3,c4]@2 [e3,c4,a4]@2 ~ g4 [g2,c4,e4]@2, ~ [e2,c4] ~@4 [c3,a4,c5] ~", // C Em Gsus4 C5 C Am C F
  Q: "f4@2 e4@2 f4@2 f4@2 f#4 g4@2 c5@3 a#4@2",
  R: "[g4@4 f4@4 d#4@12 [e4,g4] d4@2 [c4,g4] ~ g3 a3 ~ [e3,c4]@2 g#4!2]/2", // Em C5 C
  S: "f4 e4 f4 e4 f4 f#4@2 g4@3 [c5,e5]@4 [a#4,d5]@2", // C A#
  T: "[[g4,b4]@2 [f4,a4]@2 [d#4,g4]@2 [c4,e4]@2 [a#3,d4]@2 [g3,b3]@2 [f3,a3]@2 [e3,g3]@4 ~@2 [e4,g4] [d4,g4]@2 [c4,g4] ~ g3 a3 ~ [e3,c4]@2 ~@2]/2", // G F D# C A# G F Em …
  U: "[b3,g#4] [c#4,b4] ~@2 g#4 b4 g#4 e4, ~@2 [c#4,g#4] e4 ~@4, ~@5 b3@2 c#4@4 ~@5", // E C#7 C#5
  V: "[b3,f#4] [b3,c#4,f#4]!2 [b3,f#4] [b3,d4,g4] [b3,c#4,g4] [b3,g4] [g3,b3,g4]", // B5 Bsus2 B5 G C#m7b5 Em G
  W: "[b3,g4]!4 [b3,e4,g#4]!4, ~ g#3@2 ~@5", // Em E
  X: "[c2,c5]@2 [e2,c4]@2 ~@4 [c3,c4]@2 ~ a3 [c3,e3,c4,c5]@2 [g2,a3,c4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] ~@4, ~@5 [d4,g4]@2 [c4,g4]@2 ~ [e3,g3,c4]@2 ~@4", // C Am7 C C5 G5 C5 C
  Y: "[c2,c5]@2 [e2,c4]@2 ~@3 [c4,g4] [c3,c4]@2 ~ a4 [c3,a4,c5]@2 [g2,c4,g4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] ~ [e3,c4,a4] ~@2, ~@5 [d4,g4]@2 ~@9", // C C5 C F C5 C C5 Am …
  Z: "e4 f4!4 f#4 g4@2", AA: "c5 a#4 g4 f4", AB: "d#4@4 [e4,g4] [d4,g4]@2 c4@3 e4@2 g4@2 a4@2, ~@7 g4 ~@8",
  AC: "[c2,e4,g4,c5]@2 [e2,c4,e4,g4,c5]@2 ~@3 [c4,g4] ~ g3 [e3,a3,c4]@2 [c3,e3,c4,c5]@2 [g2,a3,c4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] [c3,c4] ~@3, ~@5 [d4,g4]@2 ~@9", // C C5 Am C Am7 C C5 C …
  AD: "[c2,c5]@2 ~ [e4,g4] [g2,c4,d4,g4]@2 [g2,c4,g4,c5]@2 ~ g3 [e3,a3,c4]@2 [c3,e3,c4,c5]@2 [g2,g3,c4]@2, ~ [e2,c4] ~@2 [c3,c4] ~@3", // C Em Gsus4 C5 Am C C5 C
  AE: "[c2,e4,g4,c5]@2 [e2,c4,e4,g4,c5]@2 ~@3 [c4,g4] [c3,c4]@2 [e3,c4,a4]@2 [c3,a4,c5]@2 [g2,c4,e4,g4]@2, ~@2 [g2,c4,e4,g4] [g2,c5] ~@4, ~@5 [d4,g4]@2 ~@9", // C C5 C Am F C C5 G5
  AF: "a4 g#4 a4 g#4 a4 a#4@2 b4@3 [c5,e5]@4 [a#4,d5]@2", // C A#
  AG: "[g4,b4]@2 [f4,a4]@2 [d#4,g4]@2 [c4,e4] [c5,e5]@3 [a#4,d5]@4 [g4,b4]@2", // G F D# C A# G
  AH: "[[g4,b4]@2 [f4,a4]@2 [d#4,g4]@2 [c4,e4] [c5,e5]@3 [a#4,d5]@4 [g4,b4]@4 [f4,a4]@2 [d#4,g4]@2 [c4,e4]@2 a#3@2 g3@2 f3@2 e3@12 ~@6]/3", // G F D# C A# G F D# …
})).s("gm_distortion_guitar").gain(0.47)

// other · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@42 A B C D E@2 F G A B C D E@2 F H I J K L M@2 N@2 O P Q@2 R@2 S T ~@30
>`.pickRestart({
  A: "~@4 a4@2 a#4 c5, c5@7 ~", B: "c5", C: "~@4 a#4 c5 d5!2, d5@3 ~", D: "d5", E: "[c5 [f4,c5,c6]@2 ~]/2",
  F: "~ a#5 g5!2 f5@4", G: "f5", H: "f5@4 ~ e5 d5 e5, ~ f5", I: "d5 c5", J: "~@3 d5 c5 d5@3 a4@2 g4@2 f4@2 g4@2, f4 ~",
  K: "a4@4 c5@2 ~@3 e5 c5 a4!2 c5 d5 ~, ~@6 a4@5 ~@5", L: "~@3 c4 f5 e5 d5 e5", M: "[d5@3 a4 a4@8 a4 g4 f4 d4]/2",
  N: "[f4@2 g4 f4 f4@8 a4 g4 f#4 d4]/2", O: "f4 f4@3", P: "~@3 d5!2 c5 a4 f4", Q: "[g4@4 a4@8 a4 g4 f4 d4]/2",
  R: "[f4@3 f4@6 ~ [f4,f5]@2 [f4,f5]@2 [f4,f5]@2]/2", S: "[f4,f5]@8 ~ f4 g4 a4 a#4 c5 d5 e5", T: "f5 ~@3",
})).s("gm_string_ensemble_1").gain(0.64)

// bass · acoustic bass · "ABass"
const bass = note(`<
  A B A B C D ~ A B A E F G H I J I K L M N O A B P Q R H I J I K L M N O A B P F G S T U T U T U T V T U T U T U T W
  ~@24 I J I K L M N O A B X Y Z AA H A AB F AC AD@3
>`.pickRestart({
  A: "c2 c3 ~@4 g2 a2", B: "a#2 c3 ~@6", C: "c2 c3 ~@3 a3!2 e3, ~@14 g3 ~", D: "e3 ~@15",
  E: "a#2 c3 ~@3 [c3,f3]!2 [a2,d3], ~@14 [c3,e3] ~", F: "c3 b2 c3 b2 c3 c#3@2 d3@3 c4@4 a#3@2",
  G: "g3 f3 d#3 c3 a#2 g2 f2 e2", H: "c2 c3 ~@6", I: "[g#2,g#3] [b2,b3] ~ [b2,b3] [g#2,g#3] [b2,b3] [g#2,g#3]!2",
  J: "[f2,f3]@2 [a2,c4]@2 f4 d#4 [b2,g#3]@2 ~@4 g#3@2 ~@2, ~@2 [g#2,g#3] g4@3 ~@2", // F Am E G#
  K: "[f2,f3]@2 [a2,c4]@2 f4 d#4 [b2,g#3]@2 ~@4 g#3@3 b2, ~@2 [g#2,g#3] g4@3 ~@2", // F Am E G#
  L: "g#2@2 f#2 g#2@2 g#2@2 g#2@2 g#2@3 g#2!2 g2@2", M: "e2 [b1,b2] e2 [b1,b2]", N: "[f#2,f#3]!2 [f2,f3]!2",
  O: "g2@3 g2 g2@4 [g#2,g#3]@3 [g#2,g#3] [g#2,g#3]@4", P: "c2@2 c3@2 ~@6 f3@2 f3 e3 c3@2",
  Q: "f3@2 e3@2 f3@2 f3@2 f#3 g3@2 c4@3 a#3@2", R: "g3 f3 d#3@2", S: "c2 c3 ~@5 c2", T: "f2 ~ c2 f2!2 ~ c2 f2",
  U: "f2@2 ~@2 c2@2 f2@2 f2@2 ~@2 c2 d2 f2 d2", V: "f2@2 ~@2 g#2 a2 d3 a2 c3@2 a2@2 g2 f2@3",
  W: "f2 c2 g#1 a1 a#1 b1 c2 c#2", X: "c2@2 c3@2 ~@6 a3!2 a3@2 g3@2", Y: "e3 f3!4 f#3 g3@2", Z: "f3 d#3 c3 a#2",
  AA: "c2@2 c3@2 ~@3 c3 c3@2 e3@2 g3@2 a3@2", AB: "a#2 c3 ~@3 a3!2 e3, ~@14 g3 ~",
  AC: "g3@2 f3@2 d#3@2 c3 c4@3 a#3@4 g3@2",
  AD: "[g3@2 f3@2 d#3@2 c3 c4@3 a#3@4 g3@4 f3@2 d#3@2 c3@2 a#2@2 g2@2 f2@2 c2@12 ~@6]/3",
})).s("gm_acoustic_bass").gain(0.64)

// other · fretless bass · "FBass"
const fretless_bass = note("<~@58 A B C@2 A B C D E F G H E I J K L M L M L M L M ~@22>".pickRestart({
  A: "d3@4 a2@2 c3@2 d3@4 a2 c3 d3 c3", B: "d3@2 a2 c3 d3@2 c3 a2", C: "f2@2 a2 c3 f2@2 a2 c3",
  D: "f3!2 f#3!2 g3!2 g#3 a3", E: "a#3@2 g3 a3 a#3@2 f3 a3", F: "a#3@2 f3 a3 a#3@2 a3 f3", G: "d3@2 a2 c3 d3@2 a2 c3",
  H: "d3@2 a2 c3 d3@2 f3 a3", I: "a#3!2 f3 a3 a#3!2 f3 a#3", J: "f4 f3 g3 a3 a#3 c4 d4 e4 f4!2 g4 a4 a#4 c5 d5 e5",
  K: "f5@2 ~@3 c4!3", L: "g#3 b3 ~ b3 g#3 b3 g#3 b3", M: "f3 c4 ~@6",
})).s("gm_fretless_bass").gain(0.32)

// chords · acoustic guitar nylon · "Gutar"
const acoustic_guitar_nylon = note(`<
  ~@15 A ~ B ~@11 A ~ B ~@10 C@2 D@2 C@2 D E C@2 D@2 C@2 D ~@26 A ~ B ~@18
>`.pickRestart({
  A: "[c4,c5]@2 a4@2 f5 d#5 g5@2 g5@2 g5@2 ~@2 g#4!2", B: "[c4,c5]@2 a4@2 f5 d#5 g5@3 g5@2 g5@3 ~@2",
  C: "~ [a3,c4,f4] ~@3 [a3,c4,f4] ~@2", D: "~ [a#3,d4,f4] ~@3 [a#3,d4,f4] ~@2", E: "~ [a3,c4,f4] ~@6",
})).s("gm_acoustic_guitar_nylon").gain(0.32)

// other · electric guitar jazz · "Bridge 2"
const electric_guitar_jazz = note("<~@74 A B A C A B A D ~@22>".pickRestart({
  A: "b2@2 g#2@2 ~@2 b2@2 g#2@2 b2 g#2@3 b2 g#2", B: "c3@2 a2@2 ~ f2 a2 c3 f3 a2 c3 f3 a3 f3 c3 a2",
  C: "c3@2 a2@2 ~ a2 c3 e3 a3 c3 e3 a3 c4 a3 e3 c3", D: "c3@2 a2@2 ~ f3 a3 c4 f4 a3 c4 f4 a4 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.64)

// other · steel drums · "Latin1"
const steel_drums = note("<~@2 A@3 ~@2 A@4 ~@2 B ~@8 A@3 ~@2 B ~@8 A@3 ~@2 A ~@48 A@3 ~@2 C A@3 ~@5>".pickRestart({
  A: "g4@2 g#4@2 a4@2 ~@2 g4@2 g#4 a4@2 a4 g#4@2", B: "g4@2 g#4@2 a4@2 ~@2 g4@2 g#4 a4@2 ~@3",
  C: "~@8 g4@2 g#4 a4@2 a4 g#4@2",
})).s("gm_steel_drums").gain(0.44)

// other · acoustic guitar steel · "Latin2"
const acoustic_guitar_steel = note("<~@72 [g3@2 g#3@2 a3@2 ~@2 g3@2 g#3 a3@2 a3 g#3@2]!2 ~@30>")
  .s("gm_acoustic_guitar_steel").gain(0.4)

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

// drums · kick
const kick = s("bd").struct("<~@4 A@3 ~@11 B ~@13 B ~@45 B ~@7 B ~@17>".pickRestart({
  A: "~@6 x!2", B: "x",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@14 [x!4]!8 ~@6 [x!4]!8 ~@38 [x!4]!16 ~@14>").gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<A@14 ~@4 B ~@3 A@6 ~@4 B ~@3 A@46 ~@4 B ~@3 A@12 ~@2>".pickRestart({
  A: "x!8", B: "x",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<A@14 B@8 A@6 B@8 A@38 C@8 B@8 A@12 ~@2>".pickRestart({
  A: "x ~@2 x ~@2 x ~", B: "x!4", C: "x ~ x!3 ~ x ~",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@20 A B ~@12 A B ~@44 A B ~@6 A B ~@14>".pickRestart({
  A: "x!2", B: "x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@18 A ~ B A ~@10 A ~ B A ~@42 A ~ B A ~@4 A ~ B A ~@14>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.48)

// drums · tambourine
const tambourine = s("tb").struct(`<
  [x ~@2 x ~@2 x ~]!14
  ~@8
  [x ~@2 x ~@2 x ~]!6
  ~@8
  [x ~@2 x ~@2 x ~]!46
  ~@8
  [x ~@2 x ~@2 x ~]!12
  ~@2
>`).gain(0.48)

// drums · ride
const ride = s("rd").struct("<~@18 A ~@13 A ~@45 A ~@7 A ~@17>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · congas
const congas = s("conga:13").struct("<~@18 A ~ B A ~@10 A ~ B A ~@42 A ~ B A ~@4 A ~ B A ~@14>".pickRestart({
  A: "x", B: "x!2",
})).gain(1.54)

// drums · congas
const congas_2 = s("conga:33").struct("<~@4 [~@6 x!2]!3 [~@9 x ~ x ~ x!3] ~@96>").gain(1.54)

// drums · whistle
const whistle = s("ballwhistle:1").struct("<~@81 x ~@22>").gain(0.62)

// drums · whistle
const whistle_2 = s("ballwhistle:0").struct("<~@81 x ~@22>").gain(0.62)

stack(
  distortion_guitar, string_ensemble_1, bass, fretless_bass, acoustic_guitar_nylon, electric_guitar_jazz, steel_drums,
  acoustic_guitar_steel, rim, kick, snare, hihat, mid_tom, high_tom, crash, tambourine, ride, congas, congas_2, whistle,
  whistle_2
)

More by Madonna