Strudelify
Maria Maria cover art

1999 · Supernatural

Maria Maria

Santana

KeyA minorTempo98 bpm
0:00/0:00
// Maria Maria — Santana
// 98 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/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 · electric bass pick
const bass = note(`<
  A@8 B C A@2 D@2 A@2 B C A@2 D E A@5 F G F A F G F A@4 B C A@2 D@2 A@2 B C A@2 D E A@5 F G F A F G F A@9 F G F A F G F
  B C A@2 D@2 A@2 B C A@2 D@2 A@15 H I
>`.pickRestart({
  A: "a1@2 ~ e1 a1 ~@2 a1@2 ~@7", B: "d2@2 ~ a1 d2 ~@2 d2@2 ~@7", C: "d2@2 ~ a1 d2 a1 ~ d2@2 ~@7",
  D: "e2@2 ~ b1 e2 b1 ~ e2@2 ~@7", E: "e2 ~@7", F: "g1@2 ~@2 g1 ~@2 g1@2 ~@7", G: "f1@2 ~@2 f1 ~@2 f1@2 ~@7",
  H: "a1@2 ~ e1 a1 ~@2 a1@2 ~@5 e1@2", I: "a1 ~@3",
})).s("gm_electric_bass_pick").gain(0.4)

// bass · electric bass pick · soft notes
const bass_soft = note(`<
  A B A B A B A B C ~ A B D ~ A B C ~ A B D ~ A B A B@2 E F E B E F E A B A B C ~ A B D ~ A B C ~ A B D ~ A B A B@2 E F
  E B E F E A B A B A B A B@2 E F E B E F E C ~ A B D ~ A B C ~ A B D ~ A B A B A B A B A B A B A B A B ~
>`.pickRestart({
  A: "~@5 e1 ~@8 e1@2", B: "~@5 e1 ~@10", C: "~@5 a1 ~@8 a1@2", D: "~@7 b1", E: "~@3 d1 ~ d1 ~@10",
  F: "~@3 c1 ~ c1 ~@10",
})).s("gm_electric_bass_pick").gain(0.24)

// other · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A@2 B@2 ~ C@2 D E F G H I J K L@2 M@2 N O ~@7 P Q P Q ~@5 R S T@2 U V ~ W X@2 Y Z AA@2 ~@19 AB ~ AC@2 AD AE@2 AF AG
  AH AI AJ AK AL@2 ~@16 AM ~@8
>`.pickRestart({
  A: "[~@8 e4@2 a4 b4 c5 b4 b4@5 ~@13]/2",
  B: "[~@2 e4@2 a4 b4 c5 b4@2 d5 c5 b4 c5 b4 c5 ~ a4@2 a4@4 ~ c4@2 d4@2 e4@5, ~@15 b4@2 ~@15]/2",
  C: "[~@2 c4@2 d4 e4 g4 f4 e4 d4 c4@2 d4@2 e4@5 ~@13]/2", D: "~@12 d4@2 e4 f4",
  E: "a4 c5 a4 ~@3 e4@2 ~@4 a4@4, ~@3 f4@2 d4@2 ~@9, ~@2 e4 ~@5", F: "~@9 d4 e4 g4 f4 e4 d4 c4", G: "d4 c4 d4 ~@13",
  H: "~@8 b3@2 ~ c4@2 b3 c4 b3, ~@5 d4 ~@2", I: "g#3 ~@7", J: "~@5 e4!2 ~ a4@2 ~ b4@2 ~ c5@2, ~@7 e4@2 ~ e4@2 ~ e4@2 ~",
  K: "e4 d5@2 e5 ~@4 e5@2 e5@2 e5@2 e5@2", L: "[f5@2 ~@6 e5@2 f5 e5 g5 f5 e5 ~ e5 d5 d5@8 ~@6, ~@15 f5@2 ~@15]/2",
  M: "[~@16 c5@2 c5@2 b4@2 b4@2 a4@4 ~@2 e4 f4, ~@5 e4 b4!2 ~@8, ~@11 a4@2 c5@2 d5@2 ~@15]/2",
  N: "e4@3 ~@5 b3@2 d4 e4 g4 f4 e4 f4, ~@3 c4@2 ~@3", O: "e4@2 d4@3 ~@11", P: "~@10 e4@2 e4 g4 a4@2", Q: "a4@3 ~@5",
  R: "~@8 a3 d4!2 e4 f4 g4 g4@2", S: "f4@2 f4@2 e4@2 e4@3 ~@7",
  T: "[~@7 a4 b4 c5@2 c5 ~ b4 d5 ~@2 a4@4 ~@11, ~@6 e4@2 ~@4 c5@2 ~ c5@2 ~@15, ~@8 b4 ~@7]/2",
  U: "~@8 e4@2 ~ e4 ~@3 d4, ~@5 f4 g4 e4, ~@13 f4@2 ~", V: "~ b3 ~@6, d4 ~@7, ~ c4@2 ~@13",
  W: "~ g#4 a4 b4 c5 b4 c5 d5@8 ~",
  X: "[~@2 f5!2 f5@2 d5@2 a4@2 a4@2 f4@2 ~@3 a4@4 ~@11, ~@7 a3 f4 ~@7, ~@15 d4@2 ~@15]/2",
  Y: "~@8 e5 g5 ~@2 e5@2 d5@2, ~@5 g5 ~@2, ~@11 f5@2 ~@3", Z: "c5@2 d5@2 e5@2 e5 ~@9",
  AA: "[~@4 b4 c5 d5 c5 b4 c5 b4 c5 ~@2 b4@6 ~@12, ~@6 b4 ~@9, ~@13 a4@2 ~@17]/2",
  AB: "~@13 e4 ~@2, ~@9 e3@2 b3@2 ~@3, ~@5 a3 c4 ~",
  AC: "[~@18 e4@2 g4@2 a4!4 ~ a4 d4@2 c4@2, ~@6 e4!2 c4 ~@7, ~@13 f4@2 d4@2 d4@2 ~@13]/2",
  AD: "e4!2 ~@3 c4@2 c4@2 a3@2 ~@5, ~ e4!2 ~@5, ~@3 f4@2 ~@11",
  AE: "[~@9 b4@2 e4@2 e4@2 e4@2 d4@2 ~ g4@2 g4@2 g4 f4@2 e4 f4 e4 ~ d4, ~@3 e3@2 b3@2 b4@2 ~@23, ~@2 a3 e4 c5 ~@11]/2",
  AF: "d4 ~@5 c4 ~ e4@2 d4@2 ~ c4@2 ~, ~@7 d4@2 ~@3 d4@2 ~@2", AG: "d4 ~ a4!3 a4@2 ~ c5@2 ~ c5 ~ c5!3, ~@7 b4@2 ~@7",
  AH: "d5!2 ~ d5 ~ e5 f5 e5 d5@2 e5 d5 c5 ~@3", AI: "d5@7 ~", AJ: "~@8 a4 c5 e5 a4 c5 e5 a4 c5",
  AK: "e5 e5@2 e5 c5@2 c5@2 ~ e4@2 ~@2 e4@3, ~@8 a4@2 ~ c4@2 ~@3, ~@6 d4 ~",
  AL: "[~@5 b4 c5 b4@2 g4@2 e4@2 ~@4 d4@2 ~@13, ~@13 d4@2 d4@2 ~@15, ~@7 c4 e4 ~@7]/2",
  AM: "~@4 e5@2 ~ c5@2 d5@2 e5@3 ~@2",
})).s("gm_acoustic_guitar_nylon").gain(0.22).pan(0.6)

// other · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@9 A B C ~@27 D ~@3 E ~ F G H ~ I ~@21 J K ~ L ~@2 M N ~ O ~@30>".pickRestart({
  A: "~@7 g4!6 ~@3", B: "~@8 a3 ~@7", C: "~@3 e4!4 e4@4 ~@5", D: "~@8 d4@3 ~@5",
  E: "~@3 e3 ~@4, ~@3 a3@2 f3@2 ~@9, ~@2 g#3 ~@5", F: "a4 ~@15", G: "d5 ~@7", H: "~@3 d5@4 ~@9", I: "~@8 a4!6 ~@2",
  J: "~@14 c4!2", K: "c4!5 ~@11", L: "~@10 a4 ~@5", M: "~@14 d4 ~", N: "~ d4!2 ~@13", O: "~@13 a4@2 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.1).pan(0.6)

// chords · guitar harmonics
const guitar_harmonics = note(`<
  ~@8 A ~ B ~ C ~ D ~ A ~ B ~ E F ~@4 G H I J G H I J ~@4 A ~ B ~ C ~ D ~ A ~ B ~ E F ~@4 G H I J G H I J ~@8 G H I J G
  H I J A ~ B ~ C ~ D ~ A ~ B ~ E ~ B ~@16
>`.pickRestart({
  A: "d2, f2@13 ~@3, a2@11 ~@5, d3@9 ~@7", B: "[e2,a2]@11 ~@5, a1, c2@13 ~@3, c3@9 ~@7",
  C: "[g2,b2]@3 ~, d2@7 ~, d3@9 ~@7", D: "[a2,c3,e3]@3 ~, a1, e2@7 ~", E: "[b2,d3] ~, d2@3 ~, g2@5 ~@3",
  F: "[b1,e2,g#2,b2,e3] ~@7", G: "[a1,c2,e2,a2]@13 ~@3", H: "[g1,d2] ~, [b1,g2]@3 ~@5", I: "[f1,a1,c2,f2]@13 ~@3",
  J: "[b1,g2]@3 ~, g1, d2@7 ~", // Em
})).s("gm_guitar_harmonics").gain(0.09).pan(0.2)

// chords · lead 4 chiff
const lead_4_chiff = note(`<
  ~@8 A ~ B ~ C ~ D ~ A ~ B ~ E F ~@4 G H I J G H I J ~@4 A ~ B ~ C ~ D ~ A ~ B ~ E F ~@4 G H I J G H I J ~@8 G H I J G
  H I J A ~ B ~ C ~ D ~ A ~ B ~ E ~ B ~@16
>`.pickRestart({
  A: "d3, f3@13 ~@3, a3@11 ~@5, d4@9 ~@7", B: "[e3,a3]@11 ~@5, a2, c3@13 ~@3, c4@9 ~@7",
  C: "[g3,b3]@3 ~, d3@7 ~, d4@9 ~@7", D: "[a3,c4,e4]@3 ~, a2, e3@7 ~", E: "[b3,d4] ~, d3@3 ~, g3@5 ~@3",
  F: "[b2,e3,g#3,b3,e4] ~@7", G: "[a2,c3,e3,a3]@13 ~@3", H: "[g2,d3] ~, [b2,g3]@3 ~@5", I: "[f2,a2,c3,f3]@13 ~@3",
  J: "[b2,g3]@3 ~, g2, d3@7 ~", // Em
})).s("gm_lead_4_chiff").gain(0.12).pan(0.8)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@22 A B C@3 ~@25 A B D@2 ~@30 E F G@2 H@2 I J K L M N O P K L M N O Q ~@5
>`.pickRestart({
  A: "e5@5 ~ e5 f5 e5@2 c5@2 a4@2 c5@2", B: "e5@5 ~ e5 a5 ~ c5@3 a4@2 c5@2, ~@4 e5 ~@3",
  C: "[e5 d#5 e5@3 e5 f5 e5@2 c5@2 a4@2 c5@2 [c5,e5]@2 ~@3 e5@2 [c5,e5]@2 e5 e5@2 c5 d5 c5 d5 a4@6 ~@11, ~@17 c5@2 c5@3 ~@2 c5@3 ~@21, ~@9 e5 ~@14]/3", // C
  D: "[e5 d#5 e5@3 e5 f5 e5@2 c5@2 a4@2 c5@2 ~ c5@2 ~@2 e5@2 ~ e5 c5 d5 a4@4 ~@2, ~@15 e5@3 [c5,e5]@2 ~@2 c5@2 ~@8, ~@19 c5@3 ~@10]/2", // C
  E: "a4 c5 e5 ~ e5 ~ a4 c5 [a4,e5] ~ e5 ~@2 e5 e5@2, ~@13 a4@3", // A5
  F: "~@3 a4@2 ~@2 d5 a4@7 ~, e5!2 ~ e5 ~@4, ~ a4@2 ~@2 a4@3 ~@8", G: "[~@4 g5@17 g5 e5 d5 c5 [d5,e5]@2 a4@3 e5 ~]/2",
  H: "[~@4 d#5 e5!2 d#5 [d#5,e5] e5!2 d#5 e5!3 d#5 ~ c5 d5 e5 a4@4 ~@8, ~@2 a4@2 a4@2 a4@3 ~@7, ~@8 [e5,g5] ~@7]/2", // Emaj7 Em
  I: "e4@2 g#4 a4 b4 g#4 a4 b4 d5 c5 b4 c5 b4 a4 g#4@2", J: "b4 ~@15", K: "e5@5 ~ f5 ~ e5@2 c5@2 a4@2 c5@2",
  L: "e5@5 ~ e5 f5 ~ c5@3 a4@2 c5@2, ~@4 e5 ~@3", M: "e5 d#5 e5@3 e5 f5 e5@2 c5@2 a4@2 c5@2 ~",
  N: "e5@5 ~ e5 a5 e5@2 c5@2 a4@2 c5@2", O: "~@2 a4@2 ~ e5@2 e5 ~ c5 a4 e5 ~ e5 ~ e5, ~@2 c5 ~@5",
  P: "c5 a4@11 c5@2 ~@2", Q: "c5 a4@11 ~@4",
})).s("gm_overdriven_guitar").gain(0.5)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@59 A@2 ~@25 B C ~@23>".pickRestart({
  A: "[~@8 [e3,e4] [g3,g4] [a3,a4] [e3,a3,a4] [g3,e4] g4 [a3,a4]@5 ~@13]/2", B: "~@11 a4 c5 ~@3", C: "~@2 d5 ~@5",
})).s("gm_overdriven_guitar").gain(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@8 A@2 B@2 C@2 D@2 E@2 F@2 G ~@5 H I J I H I J I ~@4 A@2 B@2 C@2 D@2 E@2 F@2 G ~@5 H I J I H I J I ~@8 H I J I H I J
  I A@2 B@2 C@2 D@2 E@2 F@2 G ~@18
>`.pickRestart({
  A: "[[a3,d4,f4]@31 ~]/2", B: "[[c4,e4]@25 ~@7, a3@27 ~@5]/2", C: "[[b3,d4]@15 ~, g3@7 ~]/2",
  D: "[[a3,e4]@7 ~, c4@15 ~]/2", E: "[[a3,f4]@29 ~@3, d4@27 ~@5]/2", F: "[[a3,c4,e4]@7 ~]/2", G: "[g3,b3,d4]",
  H: "[a3,c4,e4]@11 ~@5", I: "[g3,b3,d4]@11 ~@5", J: "[f#3,a3,c4]@11 ~@5",
})).s("gm_string_ensemble_2").gain(0.1)

// drums · kick
const kick = s("bd").struct("<[x ~@4 x ~ x ~@8]!21 x [x ~@4 x ~ x ~@8]!29 x [x ~@4 x ~ x ~@8]!58 x>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<A@21 B A@29 B A@27 C A@13 D A@16 ~>".pickRestart({
  A: "~ x ~ x", B: "~@12 x!2 ~@2", C: "~@4 x ~@7 x!2 ~ x", D: "~@4 x ~@5 x ~ x!2 ~ x",
})).gain(0.5)

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

// drums · tambourine
const tambourine = s("tb").struct("<[~@9 x ~ x ~@4]!21 ~ [~@9 x ~ x ~@4]!29 ~ [~@9 x ~ x ~@4]!58 ~>").gain(0.15)

// drums · crash
const crash = s("cr").struct("<~@110 x>").gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<[~@9 x!3 ~@4] [~@9 x ~ x ~@4]!20 ~ [~@9 x ~ x ~@4]!29 ~ [~@9 x ~ x ~@4]!58 ~>")
  .gain(0.25)

stack(
  bass, bass_soft, acoustic_guitar_nylon, acoustic_guitar_nylon_2, guitar_harmonics, lead_4_chiff, overdriven_guitar,
  overdriven_guitar_soft, string_ensemble_2, kick, snare, hihat, tambourine, crash, shaker
)

More by Santana