Strudelify

Il diluvio

Battisti

KeyG majorTempo101 bpm
0:00/0:00
// Il diluvio — Battisti
// 100.5 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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. Source detail keeps the original performance.
setcpm(100.5/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.

// other · pizzicato strings · "pizzicato"
const pizzicato_strings = note(`<
  A B A C A D A C E D E C E D F@2 ~@27 E C E C E D F ~@27 E C E C E D F ~@10
>`.pickRestart({
  A: "c3 ~@15", B: "b2 ~@9 d3 ~@5", C: "d3 ~@9 b2 ~@5", D: "b2 ~@9 b2 ~@5", E: "c3 ~@5 e3 ~@9", F: "g2 ~@15",
})).s("gm_pizzicato_strings").gain(0.32)

// other · melodic tom · "melotom"
const melodic_tom = note(`<
  A B C D C E C D F E F D F E G H I J K L M J N O F P F D F E G H I ~@10 Q R Q R Q S T ~ J K L M J N O F P F D F E G H I
  ~@10 Q R Q R Q S T ~ J K L M J N O ~@2
>`.pickRestart({
  A: "[a1,a5] ~@7", B: "[f#1,f#5] ~@9 [c2,c6] ~@5", C: "[a1,a5] ~@15", D: "[c2,c6] ~@9 [f#1,f#5] ~@5",
  E: "[f#1,f#5] ~@9 [f#1,f#5] ~@5", F: "[a1,a5] ~@5 [e2,e4] ~@9", G: "[c1,c5] ~@15", H: "[c1,c5] ~@9 [c1,c5] ~@5",
  I: "f#2@13 ~@3", J: "[e2,e4]@8 ~@2 [e2,e4] ~@5", K: "[f#2,f#4]", L: "[a#2,a#4]@8 ~@2 [a#2,a#4] ~@5",
  M: "[f#2,f#4]@13 ~@3", N: "[a#1,a#3]@7 ~", O: "[a#1,a#3]@9 ~ [a#1,a#3] ~@5", P: "[c2,f#5] ~@9 [f#1,c6] ~@5",
  Q: "a1 ~@5 e2 ~@9", R: "c2 ~@9 f#1 ~@5", S: "f#1 ~@9 f#1 ~@5", T: "c1 ~@9 c1 ~@5",
})).s("gm_melodic_tom").gain(0.32)

// other · pad metallic · "metalpad"
const pad_metallic = note(`<
  A B A ~ A B C ~ A D A ~ A@2 E F ~@8 A B A ~ A B C ~@12 A G A H I H ~@9 J K L M N O P Q ~@11 A G A H I H ~@11
>`.pickRestart({
  A: "~@2 g4 ~@5 g4 ~@5 g4 ~", B: "~@8 g4 ~@5 g4 ~", C: "~@4 g4 ~@3 g4 ~@5 g4 ~", D: "~@2 g4 ~@8 g4 ~@4",
  E: "~@4 g4 ~@5 g4 ~@5", F: "~@2 g4!2 ~@12", G: "~@8 g4 ~@2 f#4 ~@2 d4 ~", H: "~@8 d5 ~@2 a4 ~ d4!2 ~",
  I: "~@6 g3 ~ g4 ~@2 f#4 ~@2 d4 ~", J: "~@2 g4 ~@3 g4 ~ g4 ~ g4 ~@2 g4!2 ~",
  K: "~@2 g4 f#4 ~ g4 f#4 ~ g4 ~ d4 ~ f#4 ~ g4 ~", L: "g3 ~ g4 d4 ~ g3 g4 ~ g4 ~ g4 d4 ~ g3 g4 ~",
  M: "~@2 g4 f#4 ~ g4 f#4 ~@3 d4 ~ f#4 ~ g4 ~", N: "g3 ~ g4 f#4 ~ g4 f#4 ~ g4 ~ d4 ~ f#4 ~ [d4,g4] ~",
  O: "g3 ~ g4 d4 ~ g3 g4 ~ g4 ~ g4 d4 ~ g3 [f#4,g4] ~", P: "g3 ~ g4 ~ [d4,g4] ~ g3 g4!2 ~ g4 ~ d4 ~ [g3,g4] g4",
  Q: "~@2 g4 ~ d4 ~ g3 ~@2 g4 ~@3 g4 ~@2",
})).s("gm_pad_metallic").gain(0.36)

// chords · electric guitar jazz · "guitjazz"
const electric_guitar_jazz = note(`<
  ~@8 A B C D C B E@2 ~@8 F G F G F H I@2 ~ J K L M J K L ~@3 A B C D C B N@2 ~@7 O P C Q C B R@2 ~ J K L M J K L ~@3 A
  B C D C B N@2 ~@9
>`.pickRestart({
  A: "[c2,c3,c4,e4,g4]@15 ~", B: "[b1,b2,a3,d4,f#4]", C: "[c2,c3,c4,e4,g4]", D: "[d2,d3,d4,f#4,a4]",
  E: "[[g1,g2,g3,b3,d4]@31 ~]/2", F: "[c4,e4,g4]", G: "[d4,f#4,a4]", H: "[a3,d4,f#4]", I: "[[g3,b3,d4]@15 ~]/2",
  J: "[c#3,e3,g#3]", K: "[a2,c#3,e3]", L: "[b2,d#3,f#3]", M: "[e3,g#3,b3]", N: "[g1,g2,g3,b3,d4]/2",
  O: "[c4,e4,g4]@15 ~", P: "[b1,b2,d4,f#4,a4]", Q: "~@2 e3 ~@9 [f#2,f#3]@4, [d2,d3,d4,f#4,a4], ~@5 [e2,e3]@3",
  R: "[[g1,g2,g3,b3,d4]@15 ~]/2", // G
})).s("gm_electric_guitar_jazz").gain(0.32)

// chords · piano · "pianofort"
const piano = note("<~@7 A@2 ~@2 B@2 ~ C@2 ~@3 D@3 ~ E@3 ~@5 F@3 ~@16 G H@5 I@3 ~@25 G J@5 K@4>".pickRestart({
  A: "[~@3 d4@2 d4@2 d4@2 ~ d4@2 ~ g4@2 g4@10 ~@7, ~@3 d4 ~@4]/2",
  B: "[a4@4 a4@5 ~@3 [d2,d3,c4]@20, ~@9 a4@23, ~@5 [f#4,g4]@11, ~@11 d4@21]/2", // D7 Gmaj7
  C: "[~@16 d3@15 ~, g1@31 ~, ~@13 d4@17 ~@2, ~@7 b3@8 ~, ~@15 [g3,a3]@16 ~]/2", // Gsus2
  D: "[~ g2@4 ~, ~@5 g4@35 ~@8, ~@6 d4@35 ~@7, ~@7 [g3,c4]@34 ~@7]/3", // C5
  E: "[~@3 g4@8 ~, c1 c4@4 ~, ~ c2@4 e4@16 ~@3, ~ c3@8 ~@3, ~@3 g3@16 ~@5]/3",
  F: "[~ [e2,e3,b3]@2, ~@7 [g#4,b4]@16 ~, ~@15 [e4,f#4]@32 ~]/3", G: "~@10 c4 ~@2 c4 d4@2",
  H: "[~@12 d4@26 ~ [g3,c4,d4]@13 ~ d4 ~ d4 ~@2 d4 g4 ~ g4 ~ g4@6 ~@5 [d4,g4]@2 c4@2 d4@2, e4@32 ~@7 b3@10 ~@31, ~@6 c5@32 ~@33 c5@6 ~@3, ~@8 b4@32 ~@32 b4@5 ~@3, ~@10 g4@28 g4@14 ~@17 g4@4 ~@7]/5", // Gsus4 G5
  I: "[[c4,e4]@7 ~@8 c3 ~@10 c4@6 ~@16, c3@5 ~@2 c4@5 g3@4 ~@8, ~@15 e3@17 ~@16, ~@15 g3 [c3,d3]@17 ~@15, ~@16 c2@23 ~@9]/3", // C Csus2
  J: "[~@11 d4@27 ~ [g3,c4,d4]@13 ~ d4 ~ d4 ~@2 d4 g4 ~ g4 ~ g4@6 ~@5 [d4,g4]@2 c4@2 d4@2, e4@32 ~@7 b3@10 ~@31, ~@6 c5@32 ~@33 c5@6 ~@3, ~@8 b4@32 ~@32 b4@5 ~@3, ~@10 g4@28 g4@14 ~@17 g4@4 ~@7]/5", // Gsus4 G5
  K: "[[c4,e4]@7 ~@8 c3 ~@10 c4@32 ~@6, c3@5 ~@2 c4@6 ~@19, ~@15 e3@32 ~@17, ~@15 g3@9 g3@32 ~@8, ~ [c2,c3,d3]@2 ~]/4", // C Csus2
})).s("gm_piano").gain(0.6)

// chords · synth strings 1 · "synstr1"
const synth_strings_1 = note("<~@3 A@5 ~@3 B@6 C D E F C G@2 ~@6 H@2 ~@32 H@2 ~@28>".pickRestart({
  A: "[~@5 c3@11 ~@32 c2@32, ~@5 [d3,g3]@74 ~, ~@16 c3@63 ~]/5", // G5
  B: "[~@3 c4@77 [f1,f2,c4,f4]@16, ~@3 [d4,a4]@82 ~@11]/6", C: "[e2,e3,d4,g4]", D: "[f2,f3,c4,f4]", E: "[g2,g3,b3,d4]",
  F: "[f2,f3,c4,f4]@15 ~", G: "[~ c1, [c2,c3,c4,e4,g4]]/2", H: "[e3,g#3,b3]/2",
})).s("gm_synth_strings_1").gain(0.46)

// chords · epiano2 · "elpiano2"
const epiano2 = note(`<
  ~@16 A B C@2 D@2 E F@3 ~@6 G@2 H I G@2 H J ~@10 K L M N M O P Q ~@8 R@2 H I G@2 H J ~@10 K L M N M O P Q ~@2
>`.pickRestart({
  A: "~@2 [d6,g6] [a5,c6] ~ [d6,g6] ~ [a5,c6] ~ [d6,g6] [a5,c6]@3 ~@3", // G5 Am G5 Am G5 Am
  B: "[d6,g6] [g5,b5] [d6,g6] [g5,b5] ~ [d6,g6] ~ [g5,b5] ~ [d6,g6] [g5,b5]@5 ~", // G5 G G5 G G5 G G5 G
  C: "[[d6,g6] [a5,c6] [d6,g6] [a5,c6]@2 [d6,g6] ~ [a5,c6] ~ [d6,g6] ~@13 [g5,b5,c6]@9, ~@5 [a5,c6]@7 ~@4, ~@11 [d6,g6]@5]/2", // G5 Am G5 Am G5 Am G5 Cmaj7 …
  D: "[[d6,g6] [a5,c6] [d6,g6] [a5,c6] ~ [d6,g6] ~ [a5,c6] ~@2 [a5,c6]@8 [d6,g6] [g5,b5] ~ [d6,g6] ~ [g5,b5] ~ [d6,g6] [g5,b5]@4 ~@2, ~@9 [d6,g6]@9 ~@14]/2", // G5 Am G5 Am G5 Am G5 G …
  E: "[d6,g6] [g5,c6] [d6,g6] [g5,c6] ~ [d6,g6] ~ [g5,c6] ~ [d6,g6] [g5,c6]@5 ~", // G5 C5 G5 C5 G5 C5 G5 C5
  F: "[[d6,g6] [g5,c6] [d6,g6] [g5,c6] ~ [d6,g6] ~ [g5,c6] ~ [d6,g6] [g5,c6]@32 ~@6]/3", // G5 C5 G5 C5 G5 C5 G5 C5
  G: "[g#3,b3,e4]!5 [g#3,b3,e4]@11", H: "[a3,c#4,e4]!5 [a3,c#4,e4]@11", I: "[f#3,b3,d#4]!3 [f#3,b3,d#4]@13",
  J: "[f#3,b3,d#4]!5 [f#3,b3,d#4]@10 ~", K: "a4 c4 a4 [c4,f4] ~ [f4,a4] [c4,f4] ~@9, f4@3 ~@13",
  L: "b4 d4 b4 [d4,e4,g4] ~ b4 [d4,g4] ~@9, g4 ~@7", M: "[f4,a4] [c4,f4] [f4,a4] [c4,f4] ~ [f4,a4] [c4,f4] ~@9",
  N: "[d4,g4] [b3,d4] [d4,g4] [b3,d4] ~ [d4,g4] [b3,d4,g4] ~@9", // G5 Bm G5 Bm G5 G
  O: "[g4,b4] [d4,g4] [g4,b4] [d4,g4] ~ [g4,b4] [d4,g4] ~@9", // G G5 G G5 G G5
  P: "[d4,g4] [c4,e4] g4 [c4,e4] ~ [d4,g4] [c4,e4] ~@9, ~ d4 ~@6", // G5 C G5 C
  Q: "[d4,g4] [c4,e4] [d4,g4] [c4,e4] ~ [d4,g4] [c4,e4] ~@9", R: "[g#3,b3,e4]!5 [g#3,b3,e4]@9 ~@2",
})).s("gm_epiano2").gain(0.4)

// chords · electric guitar muted · "mutedgtr"
const electric_guitar_muted = note(`<
  ~@24 A@2 ~@2 B ~@3 C D E F C D E F G@3 ~@7 H I J@2 H I K@2 L M N O P M Q@2 C D E F C D E F G@3 ~@7 H I J@2 H I K@2 ~@2
>`.pickRestart({
  A: "[[c3,e3]@29 ~@3]/2", B: "e3", C: "e2@7 e1", D: "c#2@7 g#1", E: "a1@7 f#1", F: "b1@5 c#2 e2 f#2",
  G: "[g#1@32 ~@7 d#3@7 ~@2, g#2@41 ~@7, ~@32 g#1@13 ~@3, ~@34 g#3@11 ~@3, ~@37 g3@8 ~@3]/3", H: "f2", I: "e2",
  J: "[~ g2, f2@3 ~]/2", K: "[~ c1, c2]/2",
  L: "c4@2 ~@12 c4 ~, [c2,c3]@15 ~, g3@3 g3@3 [g3,b4]@2, e4@4 e4@6 e4@5 ~, ~ c4@3 c4@3 ~", M: "[b1,b2,a3,d4,f#4]",
  N: "[c2,c3,g3,c4,e4]", O: "~@3 [f#2,f#3,f#4,a4], [d2,d3,a3,d4], f#4@3 ~, ~@5 [e2,e3,e4,g4]@3",
  P: "~@3 b4, [c2,c3,g3,c4,e4]", Q: "[[g1,g2,g3,b3,d4]@15 ~]/2",
})).s("gm_electric_guitar_muted").gain(0.8)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!92 ~@2>").gain(0.32)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!92 ~@2>").gain(0.32)

// drums · shaker
const shaker = s("sh").struct("<A B@23 A B@18 A B@14 A B@18 A B@14 ~@2>".pickRestart({
  A: "~@8 x ~@2 x ~@2 x ~", B: "x ~@7 x ~@2 x ~@2 x ~",
})).gain(0.32)

// drums · rim
const rim = s("rim").struct(`<
  A@3 ~ A@3 ~ B A B C A D A@2 ~@8 A D B D A D B@2 ~@11 A D B D A D B ~@8 A D B D A D B@2 ~@11 A D B D A D B ~@10
>`.pickRestart({
  A: "~@2 x!7 ~@2 x ~@2 x ~", B: "~@2 x!5 ~ x ~@2 x ~@2 x ~", C: "~@2 x!3 ~@11", D: "~@2 x!3 ~ x!3 ~@2 x ~@2 x ~",
})).gain(0.32)

stack(
  pizzicato_strings, melodic_tom, pad_metallic, electric_guitar_jazz, piano, synth_strings_1, epiano2,
  electric_guitar_muted, snare, tambourine, shaker, rim
)

More by Battisti