Strudelify
KeyD majorTempo120 bpm
0:00/0:00
// Little Girl — The Syndicate of Sound
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 5 "OVERDRIVE" overdriven guitar (copy of ch 3 "E.PIANO 1" epiano1)
// note: Full arrangement: all 117 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. 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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~@4 A B C D E F G H I J K L M N O P A B C D E F G H I J K L M N O P A B C D E F G H I J K L M N O P A B C D E F G H
  ~@4 A B C D E F G H Q R I J K L M N O P A B C D E F G H I J K L M N O P A B C D E F G H Q R S@3 ~@6
>`.pickRestart({
  A: "a2@4 ~@2 a2@6 d3@5 ~ d3@5 ~", B: "g3@5 ~ g3@6 c3@4 ~@2 c3@5 ~", C: "g3@4 ~@2 g3@5 ~ g3@5 ~ g3@5 ~",
  D: "g3@4 ~@2 g3@5 ~ g3@4 ~@2 g3@5 ~", E: "a2@2 ~ a2@3 d3@2 ~ d3@2 ~", F: "g3@4 ~@2 g3@5 ~ c3@4 ~@2 c3@5 ~",
  G: "g3@4 ~@2 g3@4 ~@2 g3@5 ~ g3@5 ~", H: "g3@4 ~@2 g3@5 ~ g3@5 ~ g3@4 ~@2", I: "e2@4 ~@2 e2@5 ~ a2@5 ~ a2@4 ~@2",
  J: "d3@4 ~@2 d3@6 g2@5 ~ g2@5 ~", K: "a2@5 ~ a2@5 ~ a2@4 ~@2 a2@5 ~", L: "a2@4 ~@2 a2@5 ~ a2@5 ~ a2@5 ~",
  M: "e2@5 ~ e2@5 ~ a2@5 ~ a2@5 ~", N: "d3@5 ~ d3@5 ~ g2@4 ~@2 g2@5 ~", O: "a2@4 ~@2 a2@5 ~ a2@4 ~@2 a2@5 ~",
  P: "a2@4 ~@2 a2@5 ~ a2@4 ~@2 a2@4 ~@2", Q: "e3@11 ~ a3@12", R: "d3@4 g3@3 ~", S: "a2/3",
})).s("gm_acoustic_bass").gain(0.54)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  A@3 B C D E F@3 G H I J K@2 I L M N C D E F@3 G H I J K@2 I L M N C D E F@3 G H I J K@2 I L M N C D E F@3 G H O@3 P C
  D E F@3 G H Q R I J K@2 I L M N C D E F@3 G H I J K@2 I L M N C D E F@3 G H Q R S@8 ~
>`.pickRestart({
  A: "[~@6 [b3,b4]@4 e4@2 [a3,a4]@3 ~@9 [g#3,g#4]@3 ~@7 e4@2 [a3,a4]@3 ~ e4@2 ~@6 [b3,b4]@4 e4@2 [b3,b4]@2 ~@2 e4@2 ~@4 e4@2 [a3,a4]@3 ~ e4@2, [b3,b4]@6 ~@12 [a3,a4]@8 ~@4 [g#3,g#4]@7 ~@5 [a3,a4]@10 ~@8 [a3,a4]@6 ~@6, ~@2 e4@3 ~@3 e4@3 e4@2 ~ e4@3 ~@6 e4@3 ~@10]/3", // B A G# A B A B A …
  B: "~@10 e4@2 [a3,a4]@3 ~ e4@2 [a3,a4]@3 e4@2 ~, [g#3,g#4]@6 [g#3,g#4]@7 ~@11, ~@2 e4@3 ~@7", // A G#
  C: "e4 c#5 [e4,c#5] ~ [e4,a4,c#5] a4 [e4,c#5] a4 [e4,a4,c#5] ~ [e4,a4,c#5] ~ a4 ~@2 a4 [f#4,a4,d5]@2 a4 ~@3 [f#4,d5]@2, ~ a4@3 ~@8 [f#4,d5]@2 [f#4,d5]@2 ~@2 [f#4,d5]@2 [f#4,d5]@2 ~@2, ~@13 a4@2 ~@4 a4@2 a4@3", // C#m A C#m A D
  D: "[g4,b4]@2 [d4,g4,b4] ~ [g4,b4]@2 [d4,g4,b4]@2 [d4,b4]@2 [d4,g4,b4]@2 [e4,g4] ~ [e4,g4,c5] ~ [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2, d4 ~@3 d4 ~@3 g4 ~@3 c5@2 ~@10", // G Em C
  E: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4] ~ [g4,b4]@2 [d4,g4,b4]@2, ~@20 d4 ~@3", // G
  F: "[[d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4] d4 [g4,b4] ~ [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 ~ g4 ~@2 [e4,a4,c#5]@2 [e4,a4,c#5] ~ [e4,a4,c#5] ~ [e4,a4,c#5]@2 [e4,a4,c#5]@2 [e4,a4,c#5]@2 [f#4,d5] a4 d5 f#4 [f#4,a4,d5]@2 ~ f#4 ~@4 b4 d4 b4 [d4,g4] [d4,g4,b4] ~@4 g4 [d4,g4,b4]@2 [e4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5] ~ [e4,g4,c5]@2 [e4,g4,c5]@2 [e4,g4,c5]@2, ~@20 [d4,b4]@2 [d4,g4,b4]@4 ~@12 a4@2 ~@2 d5@2 [f#4,d5]@2 [f#4,d5]@2 ~ g4@2 ~@3 [d4,b4]@2 [d4,b4]@2 ~@14, ~@43 a4@2 a4@2 a4@2 ~@6 g4@2 ~@3 g4@2 ~@10]/3", // G A D G5 G C G D …
  G: "[d4,g4,b4] ~ [d4,g4,b4] ~ [d4,g4,b4] ~ [g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [g4,b4]@2 [g4,b4]@2 [d4,g4,b4]@2 [d4,g4,b4]@2 [d4,g4]@2 [d4,g4,b4] ~, ~@6 d4 ~@5 d4 ~ d4 ~@5 b4 ~@3", // G G5 G
  H: "[d4,g4] ~ [d4,g4,b4]@2 d4 ~ [g4,b4]@2 [d4,g4,b4] d4 g4@2 d4 ~ g4 ~@4 d4 ~ d4 [g4,b4] d4, b4@2 ~@2 [g4,b4]@2 ~@4 b4 ~ [g4,b4]@2 b4@2 b4@2 [g4,b4]@2 [g4,b4]@2 ~@2, ~@5 d4@2 ~@6 d4@2 [d4,g4]@2 d4@2 ~@5", // G5 G G5
  I: "~@6 [e3,g#3,b3]@2 ~@10 [e3,a3,c#4]@3 ~@3", J: "~@3 [f#3,a3,d4] ~@5 [g3,b3,d4] ~@2",
  K: "~@3 [a3,c#4] ~@5 [a3,c#4,e4] ~@2, ~@6 e4 ~@17", L: "~@6 [f#3,a3,d4]@3 ~@9 [g3,b3,d4]@2 ~@4",
  M: "~@6 [a3,c#4,e4]@2 ~@10 [a3,c#4,e4]@3 ~@3", N: "~@3 [a3,c#4,e4] ~@5 [a3,c#4,e4] ~@2",
  O: "[[b3,b4]@4 e4@2 [b3,b4]@3 ~ e4@2 [a3,a4]@3 ~@9 [g#3,g#4]@3 ~@7 e4@2 [a3,a4]@3 ~ e4@2 ~@6 [b3,b4]@4 e4@2 [b3,b4]@2 ~@2 e4@2 ~@4 e4@2 [a3,a4]@3 ~ e4@2, [e3,g#3]@11 ~ [e3,g#3,b3]@12 [e3,b3]@12 [e3,g#3,b3]@12 [e3,g#3]@10 ~@2 [e3,g#3,b3]@9 ~@3, ~@8 e4@3 e4@2 ~ e4@3 ~@6 e4@3 ~@10, ~@18 [a3,a4]@8 ~@4 [g#3,g#4]@7 ~@5 [a3,a4]@10 ~@8 [a3,a4]@6 ~@6]/3", // B A G# A B A E E5 …
  P: "~@10 e4@2 [e3,g#3,a3,b3,a4]@3 ~ e4@2 [e3,g#3,a3,b3,a4]@3 e4@2 ~, [e3,g#3,b3,g#4]@6 [e3,g#3,b3,g#4]@7 ~@11, ~@2 e4@3 ~@7", // E
  Q: "[g#3,b3,d4]@7 ~@5 [g3,c#4,e4]@8 ~@4, d#4 ~@11 a3 ~@11", R: "[a3,c4,f#4]@7 ~@5 [g3,b3,d4,f4]@8 ~@4",
  S: "[[a3,c#4,e4], a2@59 ~@133]/8", // A
})).s("gm_epiano1").gain(0.34)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  A@4 B C D E@3 F G H I J@2 K I J@2 B C D E@3 F G H I J@2 K I J@2 B C D E@3 F G H I J@2 K I J@2 B C D E@3 F G L@4 B C D
  E@3 F G M N K I J@2 K I J@2 B C D E@3 F G H I J@2 K I J@2 B C D E@3 F G M N O@8 ~
>`.pickRestart({
  A: "[[b2,b3]@4 ~@89 e3@2 ~, ~@4 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@5 ~@3, ~@6 [b2,b3]@42 [b2,b3]@6 [b2,b3]@41 ~, ~@12 [a2,a3]@6 [a2,a3]@18 [a2,a3]@6 [a2,a3]@18 [a2,a3]@6 [a2,a3]@18 [a2,a3]@6 [a2,a3]@5 ~, ~@24 [g#2,g#3]@6 [g#2,g#3]@42 [g#2,g#3]@6 [g#2,g#3]@17 ~]/4", // B A G#
  B: "e3 c#4 e3 c#4 [e3,a3,c#4] a3 [e3,c#4] a3 [e3,a3,c#4] ~ [e3,a3,c#4] ~@4 [a3,d4] [f#3,a3,d4]@2 ~ d4 ~@2 [f#3,d4]@2, ~ a3@3 ~@8 [f#3,a3,d4]@2 f#3@2 ~@2 [f#3,a3]@2 [f#3,a3,d4]@2 ~@2, ~@13 a3@2 ~@6 a3@3", // A C#m A D5 D F#m D
  C: "[d3,b3] ~ [d3,b3] g3 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [e3,g3,c4] ~ [e3,g3,c4] ~ [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4]@2 [e3,g3,c4]@2, ~ g3@2 ~@21", // G C
  D: "[d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3]@2 ~ b3 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3] ~ [d3,g3,b3]@2 [d3,g3,b3]@2, ~@5 [d3,g3] ~@6", // G G5
  E: "[[d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 ~ [g3,b3] ~@4 [e3,c#4] a3 [e3,c#4] a3 [e3,a3,c#4]@2 ~ [e3,a3] [e3,a3,c#4]@2 d4 ~ d4 ~@8 a3@2 [d3,g3,b3] b3 [d3,g3] b3 [d3,g3] ~@6 [e3,c4] g3 [g3,c4] e3 [e3,g3,c4] ~ [e3,g3,c4]@2 ~@3 g3, ~@20 d3@2 [d3,g3,b3]@3 a3@2 ~@5 c#4@2 ~@6 d4@2 d4@2 d4@2 [f#3,d4]@2 ~@6 b3@2 b3@2 b3@2 ~@9 g3@2 ~, ~@24 [e3,c#4]@2 ~@11 [f#3,a3]@2 [f#3,a3]@2 [f#3,a3]@2 [f#3,a3]@2 [f#3,a3]@2 ~@8 [d3,g3]@2 [d3,g3]@2 [d3,g3]@2 ~@7 [e3,c4]@2 [e3,c4]@2]/3", // G C#m A A5 A G G5 C …
  F: "[d3,g3] b3 [d3,g3,b3] ~ [d3,g3,b3] ~ [d3,g3,b3]@2 ~ b3 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3] ~ [d3,g3] b3, ~@4 [d3,g3] ~@7", // G5 G G5
  G: "[d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3] ~ [d3,g3,b3] ~@7 [g3,b3]@2 [d3,g3,b3]@2 [d3,g3,b3] ~, ~@6 [d3,g3,b3] [g3,b3]!2 ~@3, ~@13 d3@2 d3@2 d3@2 ~@5", // G
  H: "[g#2,b2,e3]@5 ~@8 e3@4 ~ [e2,a2,c#3,e3]@6, d3 ~@4 e2@6 e2@6 ~@7, ~@3 [g#2,b2]@3 [a2,c#3]@2 ~@4, ~@7 e3@6 ~@11", // E A G#m A
  I: "[f#2,a2,d3]@6 [f#2,a2,d3]@6 ~ d3@5 ~ d3@5, ~@12 [d2,g2,b2]@5 ~ [d2,g2,b2]@5 ~", // D G
  J: "[~@12 [a2,b2]@3 ~@9 [a2,d3,e3]@6 ~@6 [a2,b2,e3]@3 ~ [a2,c#3]@7 ~, e2@8 a2@4 ~@3 [a2,e3]@3 ~@6, ~ e3@5 [c#3,e3]@10 c#3@14 c#3@9 ~@9, ~@4 a2@8 ~@3 e3@9 ~@15 e3@8 ~, ~@22 e2@8 ~@4 e2@5 ~@9]/2", // Asus2 Asus4 Asus2 A A5 C#m
  K: "[g#2,b2,e3]@5 ~@8 e3@4 ~ [e2,a2,c#3,e3]@6, ~@5 e2@6 e2@6 ~@7, ~@3 [g#2,b2]@3 [a2,c#3]@2 ~@4, ~@7 e3@6 ~@11", // E A G#m A
  L: "[[b2,b3]@4 ~@89 e3@2 ~, d3 ~@3 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@6 e3@5 ~@3, ~@6 [b2,b3]@42 [b2,b3]@6 [b2,b3]@41 ~, ~@12 [a2,a3]@6 [a2,a3]@18 [a2,a3]@6 [a2,a3]@18 [a2,a3]@6 [a2,a3]@18 [a2,a3]@6 [a2,a3]@5 ~, ~@24 [g#2,g#3]@6 [g#2,g#3]@42 [g#2,g#3]@6 [g#2,g#3]@17 ~]/4", // B A G#
  M: "d3@6 b2@6 e3@5 ~ g3@6", N: "f#3@6 c3@6 b2@5 ~ f3@5 ~", O: "[[a2,c#3,e3], e2@41 ~@151]/8",
})).s("gm_acoustic_guitar_nylon").gain(0.38)

// drums · kick
const kick = s("bd").struct("<~@4 A@59 B A@8 C B A@32 C B D ~@8>".pickRestart({
  A: "x ~@4 x!2 ~@5", B: "x ~ x!2", C: "x!2", D: "x",
})).gain(0.76)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@10 A B ~@7 C ~@6 A B ~@7 C ~@6 A B ~@7 C ~@7 D ~@13 D ~@7 C ~@6 A B ~@7 C ~@6 A B ~ D ~@9
>`.pickRestart({
  A: "~@11 x", B: "x!2 ~@10", C: "~@9 x!2 ~", D: "~ x",
})).gain(0.23)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!56 ~@4 [~ x ~ x]!8 ~@2 [~ x ~ x]!32 ~@11>").gain(0.76)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@7 B ~@7 C ~@7 B ~@7 C ~@3 D ~@3 B ~@7 C ~@7 A E@3 F ~@3 D ~@5 A ~@7 C ~@7 B ~@7 C ~@3 D ~@3 B ~ A G ~@8
>`.pickRestart({
  A: "~@3 x", B: "~@8 x!4", C: "~ x!3", D: "~ x ~ x", E: "~@2 x ~@2 x", F: "~@2 x!2", G: "x",
})).gain(0.76)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!4 [x!4]!56 [~ x ~ x]!4 [x!4]!8 ~@2 [x!4]!32 ~@11>").gain(0.76)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@4
  [~@2 x ~@2 x ~@2 x ~@2 x]!56
  ~@4
  [~@2 x ~@2 x ~@2 x ~@2 x]!8
  ~@2
  [~@2 x ~@2 x ~@2 x ~@2 x]!32
  ~@11
>`).gain(0.23)

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

// drums · high tom
const high_tom = s("ht").struct("<~@60 [~ x ~ x]!3 ~@54>").gain(0.76)

// drums · crash
const crash = s("cr").struct(`<
  ~@3 A B ~@7 B ~@7 B ~@3 B ~@3 B ~@7 B ~@3 B ~@3 B ~@7 B ~@3 B ~@7 B ~@3 B ~@3 B@3 ~@7 B ~@3 B ~@3 B ~@7 B ~@3 B ~@3
  B@3 ~@8
>`.pickRestart({
  A: "~@3 x", B: "x",
})).gain(0.76)

// drums · ride
const ride = s("rd").struct(`<
  ~@4 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B ~@8 A B A B A B A B C@4 A B A B A B A B C D ~@8 A B A B A
  B A B ~@8 A B A B A B A B C D ~@9
>`.pickRestart({
  A: "x!4", B: "x ~@5 x!2 ~@4 x ~@5 x ~@5", C: "x!2", D: "x ~ x!2",
})).gain(0.76)

// drums · tambourine
const tambourine = s("tb").struct("<~@3 [~@3 x] [~ x ~ x]!56 ~@4 [~ x ~ x]!8 ~@2 [~ x ~ x]!32 ~@11>").gain(0.76)

stack(
  bass, epiano1, acoustic_guitar_nylon, kick, snare, snare_soft, clap, low_tom, hihat, hihat_soft, mid_tom, high_tom,
  crash, ride, tambourine
)