Strudelify

Quanno chiove

Daniele

KeyE♭ majorTempo120 bpm
0:00/0:00
// Quanno chiove — Daniele
// 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: Full arrangement: all 139 bars on a 16-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.

// chords · epiano1
const epiano1 = note(`<
  A B C@2 D E F@2 A B C@2 D E F@2 A B C@2 D E F@2 G H D I J K L M N O P Q J R A B C@2 D E F@2 A B C@2 D E F@2 A B C@2 D
  E F@2 G H D I J K L M N O P Q J R A B C@2 D E S@2 A B C@2 D E S@2 G H D I J K L M N O P Q J R A B C@2 D E F@2 A B C@2
  D E F@2 A B C@2 D E F@2 T@2 ~@7
>`.pickRestart({
  A: "eb4@3 ~@2 g4@3, [eb2,bb4], ~@3 eb4@5", B: "d4@3 ~@2 d4@3, [eb2,f4,bb4], ~@3 eb3@4 ~",
  C: "[~@6 f4 [eb3,db4,f4,ab4]@4 ~@2 f4@3, [eb2,g4]@15 ~@17, f4@3 ~@5, db4@5 db4@2 ~@9, ~@3 eb3@4 ~@4 [eb3,db4,g4]@5]/2", // Db Eb Eb7
  D: "[ab3,c4,eb4]@5 [ab3,c4,eb4]@3, ab2", E: "g3@5 g3@3, [g2,bb3,d4]",
  F: "[f3@6 ~@4 ab3@10 ~@2 [f3,ab3,c4]@4 [f3,ab3,c4]@5 ~, f2 ~, c4@7 ~@9, ab3@5 ~@11, ~@3 f3@6 ~@7]/2", // Fm
  G: "c4@5 c4@3, [c3,eb4,g4]", H: "[bb3,d4,f4]@5 [bb3,d4,f4]@3, g2@3 ~",
  I: "[c4,eb4,g4]@7 ~@3 [c4,eb4,g4] ~@5, c3@5 ~@11", J: "[b2,b3,eb4,gb4,ab4,bb4]",
  K: "b2@2 [b3,eb4,bb4] ~@5 [b3,eb4,bb4]@8, ~@3 b2@5", L: "eb3@3 ~@2 eb4@3, [g4,bb4], eb4@5 ~@3, ~@3 eb3@5",
  M: "d4@5 d4@3, [g3,f4,g4,b4]", N: "[c4,eb4,g4]@5 ~ [c4,eb4,g4] ~@5 [c4,eb4,g4]@4, c3@3 ~@2 c3@3",
  O: "[bb3,d4,f4]@5 [bb3,d4,f4]@3, g2", P: "ab3@5 ab3@3, [ab2,c4,eb4]", Q: "[c3,c4,eb4,g4]",
  R: "b2@2 [b3,eb4,gb4] ~@3 b2@4 [b3,eb4,gb4,ab4,bb4]@5 ~", // B Bmaj7
  S: "[f3@6 ~@14 ab3@2 [f3,ab3,c4]@4 [f3,ab3,c4]@5 ~, f2@16 f2@15 ~, c4@7 ~@9, ab3@5 ab3@5 ~@6, ~@3 f3@6 ~@7]/2", // Fm
  T: "[eb2,eb3,eb4,g4,bb4]/2", // Eb
})).s("gm_epiano1").gain(0.3)

// chords · epiano1 · soft notes
const epiano1_soft = note(`<
  A B ~@4 C@2 A B ~@4 C@2 A B ~@4 C@2 ~ D ~ E ~ F ~@8 A B ~@4 C@2 A B ~@4 C@2 A B ~@4 C@2 ~ D ~ E ~ F ~@8 A B ~@4 G@2 A
  B ~@4 G@2 ~ D ~ E ~ F ~@8 A B ~@4 C@2 A B ~@4 C@2 A B ~@4 C@2 ~@9
>`.pickRestart({
  A: "~@15 eb3", B: "~@7 eb3", C: "[~@10 ab3 ~@5, ~@7 c4@4 ~@5, ~@16 f2@15 ~, ~@9 f3@2 ~@5]/2", D: "~@3 g2",
  E: "~@3 c3@2 ~@3", F: "~@2 ab4 ~@5 ab4@8, ~@8 gb4 ~@7", G: "[~@9 f3@2 ~@5, ~@7 c4@4 ~@5]/2",
})).s("gm_epiano1").gain(0.12)

// bass · fretless bass
const bass = note(`<
  A B C D E F G@2 A B C D E F G@2 A B C D E F G@2 H I J K L M N O K I J P Q@2 A B C D E F G@2 A B C D E F G@2 A B C D E
  F G@2 H I J K L M N O K I J P Q@2 A B C D E F G@2 A B C D E F G@2 H I J K L M N O K I J P Q@2 A B C D E F G@2 A B C D
  E F G@2 A B C D E F G@2 R@8 ~
>`.pickRestart({
  A: "eb1@3 eb2@4 bb1", B: "eb1@3 eb2@2 bb1@3", C: "eb1@3 eb2@5", D: "eb1@3 eb2@2 eb1@3", E: "ab1@3 ab2@2 ab1@3",
  F: "g1@5 g2@3", G: "[f1@6 f2@8 f1@8 f2@4 c2@5 ~]/2", H: "c2@2 ~ c2@5", I: "g1@5 ~ g1@10", J: "ab1@5 ~ ab1@10",
  K: "c2@5 ~ c2@10", L: "b1@5 gb2@3", M: "b2@5 gb2@3", N: "eb2@4 ~@2 eb2@2 bb1@4 eb2@3 bb1", O: "g2@5 ~ g1@5 ~ d2@4",
  P: "c2@15 ~", Q: "[b1@3 gb2@6 b2@4 gb2@3]/2", R: "eb2/8",
})).s("gm_fretless_bass").gain(0.42)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A@4 B@2 C@2 ~@30 A@4 B@2 C@2 ~@60 A@4 B@2 C@2 A@4 B@2 C@2 A@4 B@2 C@2 D@2 ~@7
>`.pickRestart({
  A: "[~@21 db4@2 ~@6 g4@3, eb3@7 g4@9 bb3 db4@2 f4@4 db4@2 g4@2 f4@5, ~ bb3@3 bb3 bb4@4 bb3 d4 f4@3 bb3 d4@16 ~, ~@2 eb4@3 eb4@15 bb3 g4@2 ab4@9, ~@3 g4@3 bb3@2 eb3@4 bb3 bb4@14 db4 bb3@4]/4",
  B: "[~@5 [ab3,eb4]@2 ~@6 [bb3,f4]@3, ab2@3 ~ g2@3 ~, ~@2 eb3@6 eb3@7 ~@3 d3@4 d4@10, ~@2 ab3@3 ~@2 f4@5 d3@4, ~@6 c4@9 ~@5 bb3@6 ~@6]/2", // Ab5 Bb5
  C: "[~@26 eb4@5 ~, f2@16 f2@15 ~, eb4@5 eb4@8 ~@3, ~@2 c3@4 c4@8 c4@8 c4@9 ~, ~@4 ab3@14 c3@6 c3@7 ~]/2",
  D: "[eb4,g4,bb4]/2", // Eb
})).s("gm_acoustic_guitar_nylon").gain(0.28).pan(0.7)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note(`<
  ~@2 A@3 B C@2 ~@32 A@3 B C@2 ~@62 A@3 B C@2 ~@2 A@3 B C@2 ~@2 A@3 B C@2 ~@9
>`.pickRestart({
  A: "[~@12 bb3@4 bb3@4 bb3@4 ~@6 eb4@12 ~@2 ab2@3 ~, ~ eb3@7 ~@4, ~@13 db4@3 ~@8]/3", B: "~@3 g2",
  C: "[~@8 c3@10 ~@2 ab3@11 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.14).pan(0.7)

// other · string ensemble 2
const string_ensemble_2 = note("<~@76 A@2 B@3 C ~ D E F@3 G@2 ~@49>".pickRestart({
  A: "[~@12 d5@3 bb4@17]/2", B: "[f4@6 bb4@9 g4@9 bb4@7 eb4@16 ~]/3", C: "g4", D: "c4@9 ~@7", E: "eb5",
  F: "[f5@15 g5@16 ab5@8 ~ g5@8]/3", G: "[~@15 d5@8 ~@9]/2",
})).s("gm_string_ensemble_2").gain(0.24).pan(0.8)

// other · string ensemble 2 · soft notes
const string_ensemble_2_soft = note("<~@75 A@2 ~@5 B C ~@4 D E@3 ~@47>".pickRestart({
  A: "[~@15 eb5@12 ~@5]/2", B: "eb4", C: "~ bb3", D: "eb5", E: "[~@8 eb5@39 ~]/3",
})).s("gm_string_ensemble_2").gain(0.12).pan(0.8)

// drums · kick
const kick = s("bd").struct("<A@24 B@6 A@2 B@6 A@24 B@6 A@2 B@6 A@16 B@6 A@2 B@6 A@24 ~@9>".pickRestart({
  A: "x!2", B: "x ~@2 x ~@4",
})).gain(0.6)

// drums · snare
const snare = s("sd").struct(`<
  A@7 B A@17 B A B A B A@3 B A B A B A@7 B A@17 B A B A B A@3 B A B A B A C@2 A@6 C@2 A@6 B A B A B A@3 B A B A B A@24
  ~@9
>`.pickRestart({
  A: "~@3 x ~@4", B: "~@3 x ~@2 x ~", C: "~@3 x ~ x ~@2",
})).gain(0.54)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  A ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A
  B A@3 ~ A B A@2 C A@2 ~ A B A@2 C ~@3 A B A@2 C ~@3 A B A@3 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2 C A@2 ~ A B A@2
  C A@2 ~ A B A@2 ~@9
>`.pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6", C: "~@7 x",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@7 A ~@15 B ~@5 A ~ B ~@5 C ~@7 A ~@15 B ~@5 A ~ B ~@5 C ~@15 B ~@5 A ~ B ~@5 C ~@33
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@5 x!2 ~", C: "~@5 x ~ x",
})).gain(0.54)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C
  ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ D B A B C ~ C ~ D B A B C ~ C ~ B@2 A B C ~ C ~ B@2 A B C ~ B@2 A B C ~ C ~ B@2 A B
  C ~ C ~ B@2 A B C ~ C ~ E ~@8
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@7 x", C: "~@3 x", D: "~@3 x ~@3 x", E: "x",
})).gain(0.36)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct(`<
  ~@6 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@21 A ~@7 A ~@5 A ~@7 A ~@7 A ~@16
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@15 A ~@3 A ~ A ~ A ~ A ~ B ~ A ~@7 A ~@15 A ~@3 A ~ A ~ A ~ A ~ B ~ A ~@15 A ~@3 A ~ A ~ A ~ A ~ B ~ A ~@22 C
  ~@9
>`.pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "~@15 x",
})).gain(0.42)

// drums · crash · soft notes
const crash_soft = s("cr").struct("<~@28 A ~@37 A ~@29 A ~@33 B ~@8>".pickRestart({
  A: "~@3 x ~@4", B: "~@8 x ~@2 x ~@4",
})).gain(0.24)

// drums · ride
const ride = s("rd").struct("<~@129 [~@15 x] [x ~@14 x] ~@8>").gain(0.18)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ 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 ~ 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 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~@9
>`.pickRestart({
  A: "~@3 x",
})).gain(0.54)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[~ x ~ x ~ x ~ x]!130 ~@9>").gain(1.22)

// drums · shaker
const shaker = s("sh").struct("<[x!4]!130 ~@9>").gain(0.3)

stack(
  epiano1, epiano1_soft, bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, string_ensemble_2,
  string_ensemble_2_soft, kick, snare, snare_soft, low_tom, hihat, open_hat, open_hat_soft, crash, crash_soft, ride,
  tambourine, cabasa, shaker
)

More by Daniele