Strudelify

Brussel

Liesbeth List

KeyC majorTempo110 bpm
0:00/0:00
// Brussel — Liesbeth List
// 110 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · tuba
const bass = note(`<
  ~@2 A B C D A B C E A F G B A B C E H I J K L I J K L I M N O P Q R A B C D A B C E A F G B A B C E H I J K L I J K L
  I M N O P Q R S B C D A B C E A F G B A B C E H I J K L I J K L I M N O P Q R
>`.pickRestart({
  A: "c3 ~@3 g2 ~@3 c3 ~@3 g2 ~@3", B: "g3 ~@3 d3 ~@3 g3 ~ d3 ~ f3 ~ g3 ~", C: "g3 ~@3 d3 ~@3 g3 ~@3 d3 ~@3",
  D: "c3 ~@3 g2 ~@3 g3 ~ d3 ~ f3 ~ g3 ~", E: "c3 ~@3 g2 ~@3 c3 ~ g2 ~ a2 ~ b2 ~",
  F: "f3 ~@3 c3 ~@3 f3 ~ c3 ~ d3 ~ e3 ~", G: "d3 ~@3 a2 ~@3 d3 ~@3 a2 ~@3",
  H: "g#2 ~ c2@2 c#2 ~ d2 ~ f2@2 d#2 ~ c2 ~ a#1 ~", I: "d#3 ~@3 a#2 ~@3 d#3 ~@3 a#2 ~@3",
  J: "d#3 ~@3 a#2 ~@3 d#3 ~ a#2 ~ c#3 ~ d#3 ~", K: "g#2 ~@3 d#2 ~@3 g#2 ~@3 d#2 ~@3",
  L: "g#2 ~@3 d#2 ~@3 g#2 ~ d#2 ~ f2 ~ g2 ~", M: "c3 ~@3 g2 ~@3 c3 ~ g2 ~ a#2 ~ c3 ~", N: "f3 ~@3 c3 ~@3 f3 ~@3 c3 ~@3",
  O: "c#3 ~@3 g#2 ~@3 c#3 ~ g#2 ~ a#2 ~ c3 ~", P: "c3 ~@3 g#2 ~@3 c3 ~@3 g#2 ~@3",
  Q: "d#2 ~@3 d#2 ~@3 g2 ~ d#2 ~@3 g2 ~", R: "g#2 ~@3 g#2 ~@3 g2 ~@3 g2 ~@3", S: "c3 ~@15",
})).s("gm_tuba").gain(0.45)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@2 A B@2 C A B@2 A D E F B A B@2 A G H I J K H I J K H L M N O P Q A B@2 C A B@2 A D E F B A B@2 A G H I J K H I J K
  H L M N O P Q R B@2 C A B@2 A D E F B A B@2 A G H I J K H I J K H L M N O P Q
>`.pickRestart({
  A: "~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~", // C
  B: "~@2 [b3,f4,g4] ~@3 [b3,f4,g4] ~@3 [b3,f4,g4] ~@3 [b3,f4,g4] ~", // G7
  C: "~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [b3,f4,g4] ~@3 [b3,f4,g4] ~", // C G7
  D: "~@2 [e3,a#3,c4] ~@3 [e3,a#3,c4] ~@3 [e3,a#3,c4] ~@3 [e3,a#3,c4] ~", // C7
  E: "~@2 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~@3 [a3,c4,f4] ~", // F
  F: "~@2 [f#3,c4,d4] ~@3 [f#3,c4,d4] ~@3 [f#3,c4,d4] ~@3 [f#3,c4,d4] ~", // D7
  G: "~@2 [c4,d#4,g#4]!3 ~ [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~@3 [c4,d#4,g#4] ~", // G#
  H: "~@2 [c#4,d#4,g4] ~@3 [c#4,d#4,g4] ~@3 [c#4,d#4,g4] ~@3 [c#4,d#4,g4] ~", // D#7
  I: "~@2 [c#4,d#4,g4]!3 ~ [c#4,d#4,g4] ~ [c#4,d#4,g4] ~ [c#4,d#4,g4,g5] g5 [c#4,d#4,g4,g5] ~ [c#4,d#4,g4,g5] ~", // D#7
  J: "~@2 [d#3,g#3,c4] ~@3 [d#3,g#3,c4] ~@3 [d#3,g#3,c4] ~@3 [d#3,g#3,c4] ~", // G#
  K: "~@2 [d#3,g#3,c4]!3 ~ [d#3,g#3,c4] ~ [d#3,g#3,c4] ~ [d#3,g#3,c4,c5] c5 [d#3,g#3,c4,c5] ~ [d#3,g#3,c4,c5] ~", // G#
  L: "~@2 [a#3,c4,e4]!3 ~ [a#3,c4,e4] ~ [a#3,c4,e4] ~ [a#3,c4,e4,e5] e5 [a#3,c4,e4,e5] ~ [a#3,c4,e4,e5] ~", // C7
  M: "~@2 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~@3 [c4,f4,g#4] ~", // Fm
  N: "~@2 [g#3,c#4,f4]!3 ~ [g#3,c#4,f4] ~ [g#3,c#4,f4] ~ [g#3,c#4,f4,f5] f5 [g#3,c#4,f4,f5] ~ [g#3,c#4,f4,f5] ~", // C#
  O: "~@2 [g#3,c4,d#4] ~@3 [g#3,c4,d#4] ~@3 [g#3,c4,d#4] ~@3 [g#3,c4,d#4] ~", // G#
  P: "~@2 [d#3,g3,a#3]!3 ~ [d#3,g3,a#3] ~ [d#3,g3,a#3] ~ [d#3,g3,a#3,b4] b4 [d#3,g3,a#3,b4] ~ [d#3,g3,a#3,b4] ~", // D#
  Q: "~@2 [g#3,c4,d#4] ~@3 [g#3,c4,d#4] ~@3 [f3,g3,b3] ~@3 [f3,g3,b3] ~", // G# G7
  R: "~@2 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3,c4] ~@3 [e3,g3] ~", // C Em
})).s("gm_acoustic_guitar_steel").gain(0.29).pan(0.9)

// chords · accordion
const accordion = note(`<
  A B C D E F C D E G H I J K C D E L M N O P Q R S T M U V W X Y Z AA C D E F C D E G H I J K C D E L M N O P Q R S T M
  U V W X Y Z AA C D E F C D E G H I J K C D E L M N O P Q R S T M U V W X Y Z AA
>`.pickRestart({
  A: "g5 ~ f#5@2 f5@2 e5@2 d#5@2 d5@2 c#5@2 c5@2", B: "b4 a#4 a4 g#4 g4@2 [b4,f5,g5]@2",
  C: "[c4,e4] [d4,f4] [e4,g4] [f4,a4]@2 [g4,b4]@2 [a4,c5]", D: "[g4,b4] [f4,a4] [a4,c5] [g4,b4]@2 ~@3",
  E: "[f4,a4] [g4,b4] [a4,c5] [g4,b4]@2 [f4,a4]@2 [g4,b4]", F: "[e4,c5] [e4,g4] [d#4,f#4] [d4,f4]",
  G: "[e4,c5] [e4,g4] [d#4,f#4] [e4,g4]", H: "c5 a4 a#4 g4@2 a4@2 b4, e4", I: "d5 c5 a#4 a4@3 ~@2, f4",
  J: "d5@2 b4@2 c5 ~ a4@4 b4@4 c5@2, f#4", K: "d5 b4 a4 g4, f4", L: "[e4,c5]!4", M: "c5@4 ~ g#4 d#4 c5",
  N: "c5@4 a#4@3 a#4", O: "a#4@4 ~ g4 d#4 a#4", P: "a#4@7 ~ g#4@8", Q: "d#4 f4 g4 g#4", R: "g#4@5 ~ g#4@2 g4@8",
  S: "d#4 g4 a#4 c#5", T: "c#5@3 c#5 c5@4", U: "c5 a#4", V: "a#4@4 ~ g4 e4 a#4", W: "a#4@4 g#4!2 g4 g#4",
  X: "f4@4 ~ g#4 g4 g#4", Y: "c5@4 ~ d#4 f4 g#4", Z: "a#4 c#5 c5 a#4", AA: "g#4 ~@3",
})).s("gm_accordion").gain(0.42).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 [x!4]!16 [x!2] [x!4]!31 [x!2] [x!4]!31 [x!2] [x!4]!15>").gain(0.44)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@18 [~@9 x!4 ~@3] ~@31 [~@9 x!4 ~@3] ~@31 [~@9 x!4 ~@3] ~@15>").gain(0.19)

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

// drums · ride
const ride = s("rd").struct("<~@18 [~ x ~@2] ~@31 [~ x ~@2] ~@31 [~ x ~@2] ~@15>").gain(0.44)

stack(bass, acoustic_guitar_steel, accordion, kick, snare, snare_soft, crash, ride)