Strudelify

Let the Children Play

Santana

KeyD majorTempo137 bpm
0:00/0:00
// Let the Children Play — Santana
// 137 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 113 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(137/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 · piano · "Piano  1"
const piano = note(`<
  ~ A@16 B C B C B C B C B C B C B C B C D@6 E@2 F G H I J G H I K L H I J G H I K M N O C P C P C P C P C P C P C B C B
  C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C Q
>`.pickRestart({
  A: "[g4@5 ~ g4 ~ g4@5 ~ f#4@4 [d5,f#5,a5]@4 f#4 ~@7 g4 ~, ~@3 f#4, ~@13 [d5,f#5,a5]@3]/2", B: "g4@5 ~ g4 ~ g4@8",
  C: "~@2 [f#4,d5]@3 ~ [e4,a4]@3 ~ [f#4,d5]@3 ~ g4 ~", // D A5 D
  D: "[g4@5 ~ g4 ~@3 [c5,e5,g5]@4 f#4@4 [c5,d5,f#5,a5]@3 ~ f#4 ~ f#4@2 ~@4 g4 ~, ~@4 g4@2 ~@7 [c5,d5,f#5,a5]@3]/2", // C D7
  E: "[g4@5 ~ g4 ~@3 [c5,e5,g5]@4 f#4@4 [c5,d5,f#5,a5]@3 ~ f#4 ~ f#4@2 a4@2 c5@2 e5@2, ~@2 g4 ~@5]/2", F: "a5 ~@15",
  G: "a4@3 ~ [c5,e5]@2 ~@2 a4@2 [c5,e5]@3 ~ g#4@2", H: "~@2 [c5,e5]@2 ~@2 g#4@3 ~ [c5,e5]@4 g#4@2",
  I: "g4@3 ~ [c5,e5]@2 g4 ~ g4@2 [c5,e5]@2 ~@2 f#4@2", J: "~@2 [c5,e5]@2 ~@2 f#4@3 ~ [c5,e5]@2 ~@2 g#4 ~",
  K: "~@2 [c5,e5]@2 ~@2 f#4@3 ~ [c5,e5]@2 c4 ~ [b3,g#4] ~", L: "a4@3 ~ [c5,e5]@2 ~@2 a4@2 [c5,e5]@3 ~ g#4@2, a3 ~@15",
  M: "a3 ~@15", N: "~@8 e7 d7 [b6,c7] [f6,g6,a6] [c6,d6,e6] [g5,a5,b5] [d5,e5,f5] [b4,c5]",
  O: "g4@5 ~ g4 ~ g4@8, a4 ~@15", P: "g4 ~@5 g4 ~ g4@8", Q: "g4@3 ~@13",
})).s("gm_piano").gain(0.46)

// bass · fretless bass · "Basse  2"
const bass = note(`<
  ~ A@2 B@4 C@2 A@2 D@4 C@2 E@2 D@4 C@2 E@2 D@4 C@2 E@2 D@2 E@2 D@2 F E@2 D@2 E@2 D@2 E@2 D@2 E@2 D@2 G H I@2 D@2 E@2
  J@2 E@2 D@2 E@2 J@2 E@2 D@2 E@2 J@2 E@2 D@2 E@2 J@2 E@2 D@2 E@2 J@2 E@12 ~
>`.pickRestart({
  A: "[a2@4 ~@2 b2 ~ b2@3 ~ a2 ~ d2@6 ~@2 d2 ~ e2@3 ~ g2@2 ~@2]/2",
  B: "[a2@4 ~@2 b2@2 b2@3 ~ a2@2 d3@6 ~@2 d2@2 e2@3 ~ g2@2 ~@2]/2",
  C: "[a2@5 ~ b2@2 b2@3 ~ a2@2 d3@5 ~@3 d3@2 e2@3 ~ g2@2 ~@2]/2",
  D: "[a2@4 ~@2 b2@2 b2@3 ~ a2@2 d3@6 ~@2 d3@2 e2@3 ~ g2@2 ~@2]/2",
  E: "[a2@4 ~@2 b2@2 b2@3 ~ a2 ~ d2@6 ~@2 d2 ~ e2@3 ~ g2@2 ~@2]/2", F: "a2 ~@5 d2@2",
  G: "f2@3 c3@2 ~ f3@2 f2@3 c3@2 f3@2 ~", H: "e2@3 b2@2 ~ e3@2 e2@2 b2@2 e2 ~ b1@2",
  I: "[a1@4 ~@2 a2@2 a2@3 ~ a2 ~ d2@6 ~@2 d2 ~ e2@3 ~ g2@2 ~@2]/2",
  J: "[a2@4 ~@2 b2@2 b2@3 ~ a2@2 d2@6 ~@2 d2@2 e2@3 ~ g2@2 ~@2]/2",
})).s("gm_fretless_bass").gain(0.36)

// chords · overdriven guitar · "GuitSat3"
const overdriven_guitar = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G@2 H I ~@16 J@2 K ~ L M ~ N O ~@16 P Q R@8 S@2 T ~@5 U@2 T ~@34
>`.pickRestart({
  A: "[b4@18 ~@2 a4@2 b4@4 c5@5 ~, a#4 ~]/2", B: "[b4@5 ~ g4@3 ~ e4@2 a4@13 ~@7]/2",
  C: "[[c#5,d5]@3 ~@3 c5@2 b4@3 ~ c5@2 a4@14 ~@4]/2", D: "[~@2 d5 ~ c5@2 b4@2 ~@2 c5@2 a4 ~ a4@13 ~@5]/2",
  E: "[[a4,b4]@18 ~@2 a4 ~ b4@4 c5 ~@5]/2", F: "[b4@2 ~ b4 ~@2 g4@2 f#4 ~ e4@18 ~@4]/2",
  G: "[[c#5,d5]@3 ~@3 c5@2 c5@3 ~ c5@2 a4@10 ~@8, ~@14 c#5 ~@17]/2", H: "~ d5@2 b4 ~ c5 a4!2",
  I: "~@2 e4 ~ g#3@2 d#3@2 c3@2 a2@2 g2@2 e2@2", J: "[[g#3,a3]@20 ~@2 a3@2 c4@2 d4 ~ e4@2 c4@2]/2",
  K: "d4@2 d4 ~ e4@2 [c4,d#4]@2 d4@2 d4@2 g#3 ~@3", L: "~@2 d4@2 e4 ~ a4@3 ~ a4@2 e4@2 c4@2",
  M: "d4@2 d4@2 e4@2 c4@2 d4@2 [a3,d4] ~@5", N: "~@10 a2 ~ [c3,e3]@2 e3 ~", O: "a3 ~@7",
  P: "[f3,a3,c4]@3 [f3,a3,c4]@2 ~ [a3,c4]@2 [f3,a3,c4,f4]@4 [f3,a3,c4,f4]@4, c3@3 ~, f4 ~, ~@5 f3@2 ~@9", // F Am F
  Q: "~ e4@2 [b3,e4]@2 ~ [g#3,b3,e4]@2 [e3,g#3,b3]@4 [e2,b2,e3,g#3,b3]@3 ~, [e3,g#3]@5 e3@3 ~@8, b3@2 ~@6 e4@7 ~", // E5 E
  R: "[[e3,a3,c4,e4,a4]@4 [a3,c4,e4,a4] ~@3 [c4,e4,a4]@2 [c4,e4,a4] ~@3 [d3,a3,d4,f#4,a4]@4 ~@2 [a3,d4,f#4,a4] ~@3 [d4,f#4,a4]@2 [d4,f#4,a4] ~@5, ~@2 a3 ~@3 a3 ~]/2", // Am D
  S: "[[g3,a3]@18 ~ g3 e3 ~ a3@2 c4@2 d4@2 e4@2 c4@2]/2", T: "d4!2 e4 c4 d4!2 ~@2",
  U: "[a3@19 g3 e3 ~ a3@2 c4@2 d4@2 e4@2 c4@2, g3@9 ~@7]/2",
})).s("gm_overdriven_guitar").gain(0.29).pan(0.6)

// chords · overdriven guitar · "GuitSat3" · soft notes
const overdriven_guitar_soft = note("<~@58 A B C D C D C D C D ~@45>".pickRestart({
  A: "~@13 c3@3", B: "~ e2@5 ~@2, b2@3 ~", C: "~@2 a2@2 ~@2 [e4,a4] ~@2 a2@2 ~@5",
  D: "~@2 a2@2 ~@2 [f#4,a4] ~@2 a2@2 ~@5", // F#m
})).s("gm_overdriven_guitar").gain(0.12).pan(0.6)

// chords · rock organ · "Orgue  5"
const rock_organ = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 B@2 C@2 F G D@2 H@2 F G I@2 J@2 D@2 K@2 I@2 ~@4 L M ~ N O P@4 Q@4 R@3 S@5 T U V@2 W X Y Z AA
  AB@2 AC AD AE D@2 H@2 F G I@2 J@2 D@2 K@2 I@2 D@2 H@2 F G I@2 J@2 D@2 K@2 I@2 D@2 H@2 AF G I@2 ~
>`.pickRestart({
  A: "[[e5,g5,b5]@15 ~ [d4,d5,f#5,a5]@16, [a3,c5]]/2", // Em D Am
  B: "[[c5,e5,g5,b5]@6 [c5,e5,g5]@5 ~ [d4,c5,d5,f#5,a5]@20, a3@3 ~@5]/2", // Cmaj7 C D7
  C: "[[c5,e5,g5]@6 ~ [d4,a4,c5,d5,f#5]@9, [a3,a4]@7 ~@9]/2", D: "[[a3,a4,c5,e5,g5]@7 [d4,a4,c5,d5,f#5]@9]/2",
  E: "[[a3,e5,g5,b5] [d4,d5,f#5,a5], c5]/2", F: "[a3,a4,c5,e5,g5]", G: "[d4,a4,c5,d5,f#5]",
  H: "[[e5,g5]@10 e5@5 ~ [d5,f#5]@7 ~ [a4,c5,d5,f#5]!2 ~@2 [a4,c5,d5,f#5]!2 ~@2, [a4,c5]@23 ~@9, a3 d4]/2", // Em D D7 Am
  I: "[[a4,c5,e5,g5]@9 ~ [a4,c5,e5,g5] ~@3 [d4,a4,c5,d5,f#5]@18, a3@7 ~@9]/2", // Am7 D7
  J: "[[a4,c5,e5,g5]@9 ~ [a4,c5,e5,g5]@2 ~@2 [c5,d5,f#5,a5]@9 ~ [c5,d5,f#5]@2 [d5,f#5] ~@5, a3@7 d4@9]/2", // Am7 D7 D
  K: "[[a4,c5,e5,g5]@10 [a4,c5,e5,g5] ~@3 [d4,a4,c5,d5,f#5]@18, a3@7 ~@9]/2", L: "~@2 d6@2 e6 ~ a6@3 ~ a6@2 e6@2 c6@2",
  M: "d6@4 e6@2 c6@2 d6@2 d6 ~@5", N: "~@10 a5 ~ c6 ~ e6 ~", O: "a6 ~@7",
  P: "[[a3,a5] [e3,g#5] [a3,g5] [d3,f#5], [c5,e5]]/4", // A E A7 D C
  Q: "[a5@5 ~@3 [e3,g#5]@8 [a3,g5]@7 [d3,f#5]@9, c5, a3 ~@3, e5@4 ~ e5@27]/4", // E A7 D
  R: "[[a3,c5,a5] [e3,g#5,b5] [a3,g5,c6], e5@47 ~]/3", // Am E Am7
  S: "[[d3,f#5] a3 [e3,g#5,b5] a3 [d3,f#5,d6], [c5,a5]@2 ~ c6@2, ~ e5@3 ~, ~@24 g5@7 ~@9]/5", T: "[f3,c5,f5,a5]",
  U: "[e3,d5,g#5,b5]", V: "[a3@16 ~@12 e6 d6 c6 ~, [e6,a6]@7 ~, ~ d4]/2", W: "d6@2 e6 ~ c6 ~ a5@10, a3",
  X: "g5@2 a5 ~ d5@2 c5 ~ d5@2 [a5,e6,g6]!6, d4, ~@4 c#5 ~@11", // A7
  Y: "[a5,d6,g6] [a5,e6] [a5,e6,g6]!2 [a5,d6,g6] [a5,e6] [a5,e6,g6]!2 [a5,d6,g6] [a5,e6,g6]!3 [a5,d6,g6] [a5,e6,g6]!3, a3", // Dsus4 A5 A7 Dsus4 A5 A7 Dsus4 A7 …
  Z: "[a5,d6,g6] e6 [a5,e6,g6]!6 [a5,d6,g6] [a5,e6,g6] [a5,d6] [a5,e6,g6] [a5,d6,g6] [a5,e6,g6] [a5,d6,a6] [a5,c6,e6,a6], d4, ~@7 g6", // Dsus4 A7 Dsus4 A7 D5 A7 Dsus4 A7 …
  AA: "d6@2 [c6,a6] ~ [d6,a6] [e6,a6] d6@2 [c6,a6]@2 [d6,a6] [e6,a6] [d6,a6] ~ [c6,a6] ~, a3, a6 ~@5 a6 ~@9", // F D5 A5 F D5 A5 D5 F
  AB: "[[d6,a6] [e6,a6] [d6,a6] ~ [c6,a6]@2 [d6,a6] [e6,a6] d6@2 [c6,a6]@2 c3 [d3,e3,f3] [g3,a3,b3,c4] [e4,f4,g4,a4,b4] [a3,a6]@16, d4@7 d4@7 ~@2, ~@8 a6 ~@7 [c5,d5] ~@15]/2", // D5 A5 D5 F D5 A5 F Dm …
  AC: "~@6 a5 ~ c6@2 d6@2 e6@2 c6 ~, d4", AD: "d6@3 ~ e6 ~ c6 ~ d6 ~ d6@2 ~@4, a3", AE: "d4",
  AF: "[a3,a4,c5,e5,g5]@15 ~", // Am7
})).s("gm_rock_organ").gain(0.29)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.24)

// drums · rim
const rim = s("rim").struct("<~@42 [~ x ~ x]!16 ~@4 [~ x ~ x]!10 ~@4 [~ x ~ x]!4 ~@33>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@40 [~@5 x!3] ~@17 [~ x ~ x] [~@4 x ~@3 x ~@2 x!2 ~@3] ~@53>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<~ A@32 B C ~ D A@4 E A@18 ~@2 F A F A@22 G F A@2 G F A@2 G F A@15 ~>".pickRestart({
  A: "x ~ x!6", B: "~@5 x ~@2", C: "x ~@4 x ~@2", D: "x!8", E: "x", F: "~@2 x!6", G: "x ~ x!3 ~@3",
})).gain(0.36)

// drums · low tom
const low_tom = s("lt").struct("<~@61 A ~@13 B ~@7 B ~@3 B ~@3 B ~@3 B ~@17>".pickRestart({
  A: "~@3 x!2 ~@3", B: "~@7 x",
})).gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  A ~@15 B ~@15 A ~@5 C D ~ A ~@18 E F ~ G ~@11 H ~@7 H ~@3 H ~@3 H ~@3 H ~@17
>`.pickRestart({
  A: "~@12 x!4", B: "~@5 x ~@2", C: "~@2 x!5 ~@2 x!5 ~@2", D: "~@2 x!4 ~@2 x ~@7", E: "~@7 x", F: "x",
  G: "~@12 x ~ x!2", H: "~@3 x",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@33 A ~ B ~@4 A ~@19 A ~ A ~ A ~@48>".pickRestart({
  A: "x", B: "~@5 x!2 ~",
})).gain(0.36)

// drums · high tom
const high_tom = s("ht").struct(`<
  A ~@15 B ~@15 A ~@6 C ~ A ~@18 D E ~@13 F ~@3 E ~@3 F ~@3 F ~@3 F ~@3 F ~@17
>`.pickRestart({
  A: "~ x", B: "~@2 x!2 ~@4", C: "~@9 x ~@6", D: "~@3 x!2 ~@3", E: "~@10 x!3 ~ x ~", F: "~@5 x ~@2",
})).gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@34 [x ~ x ~ x!4] [x ~ x!3 ~@3] ~@77>").gain(0.36)

// drums · cowbell
const cowbell = s("cb").struct("<~ A@40 ~ A@16 B C ~@2 A@50 ~>".pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~ x!2 ~@2 x ~ x!2", C: "~@2 x ~@2 x ~@2 x ~ x ~ x ~@3",
})).gain(0.4)

// drums · bongos
const bongos = s("bongo:18").struct("<~@60 [~@9 x!4 ~ x!2] ~@17 [~@9 x!4 ~ x!2] ~@34>").gain(0.85)

// drums · bongos · soft notes
const bongos_soft = s("bongo:18").struct("<~@60 [~@13 x ~@2] x ~@16 [~@13 x ~@2] x ~@33>").gain(0.53)

// drums · congas
const congas = s("conga:13").struct("<~ [~@5 x ~@2]!34 [x!2]!6 [~ x] [~@5 x ~@2]!16 ~@4 [~@5 x ~@2]!50 ~>").gain(0.64)

// drums · congas
const congas_2 = s("conga:18").struct("<~ A@34 B@6 ~ A@16 ~@3 C A@16 ~ C A@32 ~>".pickRestart({
  A: "~ x!2 ~", B: "~@2 x ~ x!4 ~@2 x ~ x!4", C: "~ x!4 ~@11",
})).gain(0.64)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~ 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 C D E@4 ~ A B A B A B A B A B A B A B A B ~@3 F
  A B A B A B A B A B A B A B A B ~ F 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: "x ~@5 x!2", B: "~ x ~@4 x!2", C: "~@2 x!2 ~@4", D: "~@2 x ~@2 x!2 ~", E: "~@2 x ~@3 x!2", F: "~@5 x!4 ~@7",
})).gain(0.64)

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

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

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@42 [x!8]!16 ~@4 [x!8]!10 ~@4 [x!8]!4 ~@33>").gain(1.22)

// drums · guiro
const guiro = s("guiro:0").struct("<~@41 A ~@16 B@2 ~@8 B@4 ~@4 B@4 ~@33>".pickRestart({
  A: "~@3 x", B: "x",
})).gain(6.79)

// drums · woodblocks
// … 10 more lines

More by Santana