Strudelify

Rode schoentjes

Booming Support

KeyA minorTempo124 bpm
0:00/0:00
// Rode schoentjes — Booming Support
// 124 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: metre changes (3/4 at bar 1, 4/4 at bar 17, 3/4 at bar 92) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(124/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 · "A.PIANO 1"
const piano = note("<A@4 B@5 C@2 D@4 ~@42 E@2 F ~@29 G@2 H@3>".pickRestart({
  A: "[~@4 b5@2 ~ g#6@2 ~@7 g#5@2 b5@2 ~ a5@2 ~@5 d#6@5 c#6@2 ~@7 d#5@3 f#5@2 g#5@2 ~@5 b5@2 [b4,b5]@5 b5@2 ~, ~@9 f#6@10 ~@7 e5@4 ~@5 d#5@7 ~@10 b4@4 ~@8, ~@9 b4@5 b4@8 ~ f#5@10 ~@4 a5@9 ~@8 e5@5 ~@5, ~@11 e6@8 ~@6 a5@7 ~@3 b5@11 ~@18, ~@11 e5@3 b5@4 ~@3 f#4@13 ~@6 [b4,f#5]@5 ~@4 [g#4,a5]@12 ~@3]/4", // B B5 Amaj7
  B: "[~@6 b5@3 [e5,g#5]@2 b5@2 ~@8 [e5,g#6]@4 f#6@2 ~@10 c#6@2 d#6@2 ~@8 [g#4,g#5]@5 b5@2 ~@9 d#7@2 ~ c#7@2 ~@7 [d#5,f#6]@3, g#6@11 ~@7 [c#5,e6]@7 ~@3 d#5@13 ~@6 [d#5,b5]@6 ~@8 [e5,b6]@6 ~@8 g#6@5, ~@2 f#6@9 ~@5 c#6@8 ~@4 e6@11 ~@3 e6@10 ~@4 g#6@10 ~@4 b6@10, ~@2 b4@2 e5@2 b4@6 ~@2 [f#4,a5]@12 ~@6 [b4,c#6]@3 b5@4 ~@24 [b4,e7]@4 ~@13, ~@4 e6@7 ~@5 a4@10 ~@4 d#6@8 ~@34 a6@8]/5", // E G# D#m C#m G#m E5 F#m Bsus2 …
  C: "[~@2 d#5@3 ~@9 [a4,a6]@2 [b4,g#6]@2 ~ f#6 ~@6 [b4,e6]@5 ~, ~@5 f#4@13 ~@5 d#6@6 ~@3, ~@5 f#6@4 a6@3 d#7@4 ~@4 f#6@10 ~@2, ~@7 g#6@9 ~@3 g#6@11 ~@2, ~@7 a4@2 b4@7 ~@5 [b4,e6]@5 ~@6]/2", // A E E5
  D: "[~@10 [e5,f#6]@3 g#6@2 b6@2 ~@10 e6@2 ~@5 b5@2 [d#5,b5]@3 c#6@2 d#6@2 ~@5 b5@4 ~@12, ~ g#6@12 ~@4 a6@12 ~@35, ~@5 e5@5 ~@12 [e5,f#6]@8 ~@13 g#5@5 ~@16, ~@6 d#6@8 ~@15 d#6@11 ~@24, ~@8 e6@5 ~@7 g#6@9 b4@9 ~@7 b4@7 ~@12]/4", // Esus2 G#m Esus2
  E: "[~@7 b5@2 [g#4,g#6]@2 b4@2 [e5,e6]@2 ~ b5 ~ [e5,g#5]@2 b5@2 ~ f#4@2 [a4,c#6]@2 [c#5,e6]@3 [e5,a6]@2, ~@11 f#6 ~@3 b4@2 ~@5 a5@2 ~@8]/2", // G# E A C#m A5
  F: "c#5@2 [e5,a6]@3 ~@11", // A5
  G: "[~@15 e6@2 ~@8 a6@5 a6@2, ~@8 f#6@8 ~ c#6@12 ~@3, ~@8 e5@5 ~@9 e6@7 ~@3, ~@11 b4@6 ~ f#4@13 ~, ~@22 e5@5 ~@5]/2",
  H: "[~@7 f#6@4 ~ f#6@2 ~@7 [b4,b6]@5 b5@2 ~@7 [b4,e6]@3 e5@2 ~@8, [d#5,b6]@11 ~@5 b4@5 ~@9 b4@5 ~@13, ~@2 a6@9 ~@8 e5@4 ~@10 e5@5 ~@10, ~@5 g#6@6 ~@8 g#6@7 ~@2 g#6@5 g#6@7 ~@8, ~@5 b4@4 ~@5 [g#4,e6]@12 ~@22]/3", // B E5 G#m C#m
})).s("gm_piano").gain(0.25)

// chords · piano · "A.PIANO 1" · soft notes
const piano_soft = note("<A@5 B@5 C@3 D@2 ~@74 E@2 F G@2>".pickRestart({
  A: "[~@16 e5@5 ~@2 a4@5 ~@2 e5@5 ~@2 a4@5 a4@3 ~@2 d#5@3 ~@9 e5@3 ~ g#4@11 ~@6, ~@7 g#4@14 ~@7 a4@7 ~@10 b4@4 ~@31]/5",
  B: "[~@14 a4@5 ~@2 b4@3 ~@4 b4@8 ~@6 b4@5 ~@3 e5@3 ~@6 b4@5 ~@12 d#5@4, ~@19 a4@4 ~@3 g#4@7 ~@7 g#4@13 ~ f#4@12 ~@14, ~@57 a4@7 ~@16]/5",
  C: "[~@7 e5@5 ~@3 g#5@2 ~@2 b4@5 b4@5 ~@7 c#5@5 ~@2 a4@3 ~@2, ~@3 g#4@12 ~@2 [g#4,b5]@12 ~@2 f#4@15 ~@2, ~@12 e5@5 ~@16 a4@10 ~@5, ~@41 c#5@5 ~@2]/3", // G#m
  D: "[~@7 b4@4 ~@5 e5@4 ~@12, ~@11 g#4@9 ~@12]/2",
  E: "[~@7 b4@3 ~@3 e5@5 ~@2 a4@5 ~@2 e5@5, ~@7 g#4@10 ~@8 a4@7, ~@10 e6@5 ~@17]/2",
  F: "~@2 a4@5 ~@2 b4@3 d#5@3 ~, ~@7 a4@4 ~@5", G: "[~@7 e5@3 ~@2 g#4@11 ~@9]/2",
})).s("gm_piano").gain(0.1)

// bass · synth bass 1 · "SYN BASS 1"
const bass = note("<~@14 A B@7 C A B C A B@2 D B@15 D B@11 C ~@3 A B@16 D B@2 D@2 B@2 D B@3 E ~@4>".pickRestart({
  A: "~@4 d2@2 ~ d2@2 ~ f2 ~@2 f2 ~@2", B: "d#2 ~ f2 ~ d2@2 ~ d2@2 ~ f2 ~@2 f2 ~@2", C: "d#2 ~ f2 ~@13",
  D: "d#2 ~ f2 ~ d2@2 ~ d2@2 ~ f2 ~@2 f2@2 ~", E: "d#2 f2 ~@14",
})).s("gm_synth_bass_1").gain(0.45)

// chords · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note("<~@14 A B@7 C A B C A B@2 D B@15 D B@23 C ~@7 A D B@2 D@2 B@2 D B@3 E ~@4>".pickRestart({
  A: "~@4 [d4,f#4] ~@2 [d4,f#4]@2 ~ [f4,a4] ~@2 [f4,a4] ~@2", // D F
  B: "[d#4,g4] ~ [f4,a4] ~ [d4,f#4] ~@2 [d4,f#4]@2 ~ [f4,a4] ~@2 [f4,a4] ~@2", C: "[d#4,g4] ~ [f4,a4] ~@13",
  D: "[d#4,g4] ~ [f4,a4] ~ [d4,f#4] ~@2 [d4,f#4]@2 ~ [f4,a4] ~@2 [f4,a4]@2 ~", E: "[d#4,g4] [f4,a4] ~@14",
})).s("gm_lead_2_sawtooth").gain(0.36)

// chords · lead 2 sawtooth · "SAW WAVE" · soft notes
const lead_2_sawtooth_soft = note(`<
  ~@14 A B@7 C A B C A B@2 D B@15 D B@23 C ~@7 A D B@2 D@2 B@2 D B@3 E ~@4
>`.pickRestart({
  A: "~@4 a3 ~@2 a3@2 ~ c4 ~@2 c4 ~@2", B: "a#3 ~ c4 ~ a3 ~@2 a3@2 ~ c4 ~@2 c4 ~@2", C: "a#3 ~ c4 ~@13",
  D: "a#3 ~ c4 ~ a3 ~@2 a3@2 ~ c4 ~@2 c4@2 ~", E: "a#3 c4 ~@14",
})).s("gm_lead_2_sawtooth").gain(0.16)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@69 [~@3 x] [~@11 x!2 ~@3]!7 ~@8 [~ x ~@2] [~@3 x!2 ~@11]!3 [~ x ~@6] ~@4>")
  .gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@14 A B C B C B C B D A B D E F@7 G ~ E F@7 G ~@3 E H F H D ~@6 I J F@8 K L I M I ~ N J F@8 G ~@8
>`.pickRestart({
  A: "~ x", B: "x!2 ~@2 x ~@3", C: "x!2", D: "x", E: "~@8 x ~@4 x ~@2", F: "x ~ x ~@5 x ~@4 x ~@2", G: "x!2 ~@6",
  H: "x ~@7 x ~@4 x ~@2", I: "~@2 x ~@2 x ~@2", J: "~@4 x ~@2 x ~@2 x ~ x!4", K: "x!3 ~@2 x ~@2", L: "~@4 x ~@8 x ~@2",
  M: "~@13 x ~@2", N: "~ x ~@2",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@27 A@8 ~@2 A@8 ~@5 A ~@11 A@8 ~@4 B ~@3 A@8 ~@8>".pickRestart({
  A: "~@3 x ~@12", B: "~@4 x ~@8 x ~@2",
})).gain(0.15)

// drums · clap
const clap = s("cp").struct("<~@26 A B@7 C ~ A B@15 C A B@3 C ~@3 A B@7 C ~@7 A B@9 C B C ~@4>".pickRestart({
  A: "~ x", B: "x!2", C: "x",
})).gain(0.5)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@26 A@8 ~@2 A@16 ~ A@4 ~@4 A@8 ~@8 A@12 ~@5>".pickRestart({
  A: "~@15 x",
})).gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@14 A B C B C B C B D A B D A B C B C B C B D ~ A B C B C B C B D ~@3 A B C B D A B C B D ~@3 A B C B C B C B D ~@7 A
  B C B C B C B C B C B E ~@4
>`.pickRestart({
  A: "~@4 x ~@2 x ~@2 x ~ x ~ x!2", B: "~@2 x!3 ~@2 x ~@2 x ~ x ~ x!2", C: "~@2 x ~ x ~@2 x ~@2 x ~ x ~ x!2",
  D: "~ x ~@6", E: "~ x ~@14",
})).gain(0.35)

// drums · open hat
const open_hat = s("oh").struct("<~@23 A B C A B@7 C ~ A B@7 C ~@16 A B@7 D E F G F E H ~ A B@11 I ~@4>".pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~@6", D: "~ x!2 ~@2 x ~@2", E: "~@4 x ~@8 x ~@2",
  F: "~@2 x ~@2 x ~@2", G: "~@13 x ~@2", H: "~ x ~@2", I: "~ x ~@14",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@69 [~@4 x ~@5 x ~@2 x ~ x] [x ~ x ~ x ~@5 x ~@2 x ~ x]!7 [x!2 ~@6] ~@16>").gain(0.3)

// drums · china
const china = s("cr").struct("<~@23 A@2 ~ A@8 ~@2 A@8 ~@17 A@8 ~@8 A@12 ~@5>".pickRestart({
  A: "~ x ~@2",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct("<~@23 A B C A B@7 C ~ A B@7 D@8 C E D@3 C ~@3 A B@27 F ~@4>".pickRestart({
  A: "~@4 x!6 ~ x!3 ~ x", B: "x!2 ~ x!7 ~ x!3 ~ x", C: "x!2 ~ x ~@12", D: "x!2 ~ x!3 ~ x!3 ~ x!3 ~ x",
  E: "~@4 x!2 ~ x!3 ~ x!3 ~ x", F: "x!3 ~@13",
})).gain(0.3)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@23 A B C A B@7 C ~ A B@7 D@8 C E D@3 C ~@3 A B@27 ~@5>".pickRestart({
  A: "~@5 x ~ x", B: "~ x ~@3 x ~ x", C: "~ x ~@6", D: "~ x ~ x ~ x ~ x", E: "~@3 x ~ x ~ x",
})).gain(0.2)

// drums · claves
const claves = s("clave:2").struct("<~@23 A B C A B@7 C ~ A B@7 C ~@16 A B@7 C ~@7 A B@11 C ~@4>".pickRestart({
  A: "~ x", B: "x!2", C: "x",
})).gain(2.43)

// drums · shaker
const shaker = s("sh").struct("<~@36 A@8 ~@4 A@4 ~ A@4 ~@4 A@8 ~@8 A@12 ~@5>".pickRestart({
  A: "~@4 x ~ x!3 ~@7",
})).gain(0.3)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<~@36 A B@7 C ~@3 A B@3 C A B@3 C ~@3 A B@7 C ~@7 A B@11 D ~@4>".pickRestart({
  A: "~@5 x ~@10", B: "~@3 x ~ x ~@10", C: "~@3 x ~@12", D: "~ x ~@6",
})).gain(0.15)

stack(
  piano, piano_soft, bass, lead_2_sawtooth, lead_2_sawtooth_soft, kick, kick_soft, snare, snare_soft, clap, clap_soft,
  hihat, open_hat, high_tom, china, tambourine, tambourine_soft, claves, shaker, shaker_soft
)