Strudelify

Felici e perdenti

Zero

KeyG minorTempo126 bpm
0:00/0:00
// Felici e perdenti — Zero
// 126 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// 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(126/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 · electric bass finger
const bass = note(`<
  ~ A@2 B@2 A@2 B@2 C@2 D E A@2 B@2 C@2 D E A@2 B@2 C@2 D F G H I@2 J K L@2 M K N@2 O P Q@2 A@2 B@2 A@2 B@2 C@2 D E A@2
  B@2 C@2 D F G H I@2 J K L@2 M K N@2 O P Q@2 A@2 B@2 A@2 B@2 C@2 D F A@2 B@2 C@2 D F A@2 B@2 C@2 D F A@2 B@2 C@2 D F
  A@2 B@2 C@2 D F A@2 B@2 C@2 D F A@2 B@2 R@2
>`.pickRestart({
  A: "[g1@4 g2 ~@5 g1@2 d2@2 c2@8 d2@3 ~ d2@2 f2@2 g2@2]/2", B: "[g1@2 g2 ~@2 g1 d2 c2@4 d2@3 f1 gb1]/2",
  C: "[g1@4 g2 ~@5 g1@2 d2@2 c2@7 ~ c2@6 bb1@2 c2@2]/2", D: "d2@5 ~ d2@2 d2@4 c2@2 a1@2", E: "d2@2 ~ d2@2 d2 c2 a1",
  F: "d2@2 ~ d2!2 db2 c2 bb1", G: "c2@5 ~ c2 ~ c2@4 bb1@2 c2@2", H: "d2@5 ~ d2@6 c2@2 bb1@2",
  I: "[g1@2 ~@2 g1@5 ~ d1@2 f1@2 g1@7 ~ g1@4 a1@2 bb1@2 d2@2]/2", J: "eb2@6 eb1 ~ eb1@4 eb2@2 eb1@2",
  K: "d2@6 d1@2 d2 ~ d2@2 c2@2 bb1@2", L: "[g1@2 ~@2 g1@4 ~@2 d1@2 f1@2 g1@7 ~ g1@3 ~ g1@2 a1@2 bb1@2]/2",
  M: "c2@6 c1 ~ c1@4 c2@2 c1@2", N: "[g1@2 ~ g1@4 f1@3 ~ f1@3 f2 f1]/2", O: "eb2@6 eb1 ~ eb1@4 eb2@2 d2@2",
  P: "c2@3 c1@3 bb1 c2", Q: "[d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2 d1@4 d2@2 d1@5 ~ d2@2 c2@2 bb1@2]/2",
  R: "[g1@4 g2 ~@5 g1@2 d2@2 c2@7 ~@11]/2",
})).s("gm_electric_bass_finger").gain(0.48)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  A B@2 C@2 ~@16 D@2 E@2 F@2 G H ~ I J@2 ~ K L@2 ~@8 B@2 C@2 ~@8 D@2 E@2 F@2 G H ~ M J@2 ~ K L@2 N O ~@6 D@2 E@2 D@2 E@2
  F@2 G H D@2 E@2 F@2 G H D@2 E@2 F@2 G H D@2 E@2 F@2 G H D@2 E@2 F@2 G H D@2 E@2 F@2 G H D@2 E@2 P@2
>`.pickRestart({
  A: "~@3 g2", B: "[~@2 d3@2 [bb3,d4] ~ d3@2 [c4,e4]@4 [bb3,d4]@2 g3@5 ~@3 d3 f3 [c4,f4] ~@3 [a3,c4] ~@3]/2",
  C: "[~@2 d3@2 [bb3,d4] ~ d3@2 [c4,e4]@4 [bb3,d4]@2 g3@5 ~@5 [c4,f4] ~@3 [c4,f4]@4]/2", // Bb C Bb F5
  D: "[~@4 [bb3,d4] ~@3 [c4,e4]@4 [bb3,d4]@2 g3@5 ~@3 d3 f3 [c4,f4] ~@3 [a3,c4] ~@3]/2", // Bb C Bb F5 Am
  E: "[~@4 [bb3,d4] ~@3 [c4,e4]@4 [bb3,d4]@2 g3@5 ~@5 [c4,f4] ~@3 [c4,f4]@4]/2", // Bb C Bb F5
  F: "[~@4 [bb3,d4] ~@3 [c4,e4]@4 [bb3,d4]@2 g3@5 ~@3 d3@2 [g3,bb3] ~ d3 ~ f3@2 g3 ~]/2", G: "g3@9 ~ d3@2 d4@2 d3 ~",
  H: "~@2 d3@2 d4@2 d3 ~@3 d3 ~ d4@4", I: "~@4 g4@2 ~@2 gb4@5 ~@3", J: "[~@2 [g4,bb4] ~@3 [f4,a4] [g4,bb4]@7 ~@2]/2",
  K: "~@2 [d5,g5]!2 [d5,g5]@2 g4@2 [d5,gb5]@7 ~", // G5 D
  L: "[~@4 [g4,bb4]@2 ~@6 [f4,a4]@2 [g4,bb4]@9 ~ [f4,a4]@2 [g4,bb4]@5 ~]/2", M: "~@4 g5@2 ~@2 gb5@5 ~@3",
  N: "bb3 ~ bb3 ~@3 bb3 d4", O: "a3@2 gb3@2 a3@2 g4@2 gb4@2 c4@2 a3@2 c4 ~",
  P: "[~@4 [bb3,d4] ~@3 [c4,e4]@4 [bb3,d4]@2 g3@5 ~@13]/2", // Bb C Bb
})).s("gm_overdriven_guitar").gain(0.24).pan(0.3)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note(`<
  A ~@20 B ~ B ~ B ~@4 C ~@26 B ~ B ~ B ~@4 D ~@6 E ~@7 B ~ B ~ B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~@3
  B ~ B ~ B ~@3 B ~ B ~ B ~@3 B ~ B ~ B ~
>`.pickRestart({
  A: "~@11 ab3 ~@4", B: "~ d3 ~ d3 ~@4", C: "~@6 d4 ~@9", D: "~@6 d5 ~@9", E: "~@2 g3 ~@3 g3 ~@3 g3 ~@5",
})).s("gm_overdriven_guitar").gain(0.18).pan(0.3)

// other · distortion guitar
const distortion_guitar = note(`<
  ~ A B C@2 ~@26 D@2 ~@2 E@2 ~@8 F@2 G@2 ~@15 H ~@2 I@2 ~@2 E@2 ~@28 J K L M N@2 O P@3 Q R S T U V@2 W X Y Z AA AB ~ AC
  AD@2 AE AF AG AH AI AJ AK AL AM AN ~
>`.pickRestart({
  A: "f5@7 c5", B: "bb4 a4 bb4 a4 f4 c4 a3 c4", C: "[bb3@2 g3@2 a3@2 bb3 a3 g3@2 f3@2 d3@2 c3@4 bb3@6 g3 f3 ~@6]/2",
  D: "[~@2 [g3,d4] ~@3 [f3,c4] [g3,d4]@7 ~@2]/2", E: "[~@4 [g3,d4]@2 ~@6 [f3,c4]@2 [g3,d4]@9 ~ [f3,c4]@2 [g3,d4]@6]/2",
  F: "[~@2 g3@2 d5@2 g3@2 c5@4 bb4@2 g4@4 a4 ~ bb4@2 a4@2 c4@2 g4@2 c4@2 bb3@2]/2",
  G: "[g3@2 a3@2 bb3@2 d3@2 [g3,c4]@2 d3 ~ [g3,bb3]@2 [eb3,g3]@10 ~@8]/2", H: "~@10 f5@5 ~",
  I: "[~@4 [g3,d4]@2 ~@6 [f3,c4]@2 [g3,d4]@4 d4 ~ d5@2 c5@2 bb4@5 ~@3]/2", J: "g4@15 ~",
  K: "~@2 bb3 c4 f4@4 c4@2 bb3@2 c4 d4 g4@2", L: "f4@4 d4 c4 ~@5 g3 c4@4", M: "bb3@4 g3 f3 d3@2 c3@3 bb2 c3 bb2 g2@2",
  N: "[g3@4 [g3,c4]@2 ~@8 c4@7 c4 ~ bb3 c4@2 bb3 g3 f4@4]/2", O: "d3 ~ d3 ~ g3@4 d4@4 c4@3 ~",
  P: "[f4@4 d4@4 a4@4 f4@2 c5@8 d5@8 c5@17 ~]/3", Q: "~ d5 c5 d5 bb4 a4 g4 d4", R: "bb4 g4 d4 c4@4 g4",
  S: "c5@2 bb4@2 d5@2 f5@2 bb4@4 c5 ~@3", T: "~@2 d5@3 f5@3 bb4@4 g4@3 [d4,e4,f4]", U: "[a3,b3,c4] ~@3 g4@4 d5@4 c5@4",
  V: "[f5@4 d5@4 a5@4 f5 ~ c6@6 bb5@2 c6@2 a5@4 bb5@2 c6@2]/2", W: "a5 f5 ~ a5 g5 d5 ~ f5 d5 c5 ~ bb4 c5 db5 ~ d5",
  X: "bb4 g4 ~ c5 bb4 g4 ~ f4 d4 g4 ~ f4 d4 db4 ~ c4", Y: "bb3 g3 ~ f3 d3 db3 ~ c3 bb2 g2 ~ d3 g3@4",
  Z: "d5@4 c5@4 bb4 ~ bb4 ~ a4 [a4,bb4] g4 f4, ~@9 c5@2 ~@5", AA: "g4@4 f4@4 c4@2 bb3@2 d4@2 f4 ~",
  AB: "d4 [d2,d3] d4@2", AC: "g3@3 ~, d4@3 ~@13", AD: "[a3@4 g3@2 c4@2 bb3@2 a3@2 g3@2 g4@9 ~@3 d4 f4 g4 f4 g4 f4]/2",
  AE: "d4 f4 g4 f4 d4 bb3 c4@5 d4 c4 bb3 g3 f3", AF: "g3@2 ~@4 [bb3,d4] g4", AG: "f4@4 g4@3 ~@2 g3 ~ bb3 d4 g4 ~ bb4",
  AH: "d5@3 ~", AI: "f5 ~ f5 d5 d3 [d3,f5] ~ f5 d5 d3!2 f5 ~ f5 d5 ~", AJ: "~@3 g5@5 f5@4 d5@4",
  AK: "c5 d5 c5 bb4 c5 bb4 a4 bb4 a4 g4 a4 bb4 c5 d5 g5 d5", AL: "a5 d5 bb5 c6 d6@6 ~@5 d5",
  AM: "c6@4 bb5@8 g5 f5 d5 ~", AN: "c6@2 bb5@4 ~ d5",
})).s("gm_distortion_guitar").gain(0.54).pan(0.6)

// other · guitar harmonics
const guitar_harmonics = note("<A B ~@33 C ~@9 D ~@25 C ~@37 E@2 ~@12 F@2 ~@14>".pickRestart({
  A: "~@10 f3 ~@5", B: "f3@7 ~", C: "~@10 d3!2 ~@4", D: "~@2 g2 ~@3 g2 ~@9", E: "[~@14 c4@17 ~]/2",
  F: "[~@8 d4@19 ~@5]/2",
})).s("gm_guitar_harmonics").gain(0.33).pan(0.7)

// chords · pad poly
const pad_poly = note(`<
  ~ A@2 B@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 E F G@2 H F I@2 J K H L M E N O A@2 B@2 A@2 B@2 C@2 D@2 A@2
  B@2 C@2 D@2 E F G@2 H F I@2 J K H L M E N O A@2 B@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2
  A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 A@2 B@2 C@2
>`.pickRestart({
  A: "[~@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4]@2 [c4,eb4,g4]@7 ~ [a3,c4,f4]@10]/2", // Gm F Cm F
  B: "[~@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4]@2 [c4,eb4,g4]@7 ~ [c4,f4,a4]@10]/2", // Gm F Cm F
  C: "[~@4 [d4,g4,bb4]@2 ~@6 [f4,a4]@2 [eb4,g4]@17 ~, ~@12 c4@19 ~]/2", // Gm F Eb
  D: "[[c4,d4,g4]@11 ~ a4@2 gb4@17 ~, ~@12 [c4,d4]@19 ~]/2", E: "[g3,c4,eb4]", F: "g4 gb4, [a3,d4]",
  G: "[~@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4] ~ [d4,f4,bb4]@14 ~@4]/2", H: "[g3,bb3,d4]",
  I: "[~@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4] ~ [d4,f4,bb4]@9 ~ [c4,f4,a4]@2 [d4,f4,bb4]@5 ~]/2", // Gm F Bb F Bb
  J: "bb3@6 g3 bb3, [g4,bb4]@15 ~", K: "g4 gb4, [d4,a4]", L: "[f3,bb3,d4]", M: "[g3,bb3,eb4]",
  N: "[a4,d5,g5] ~ [a4,d5,g5]@2 ~@2 [a4,d5,g5] ~ [a4,d5,g5]@2 ~@2 [a4,d5,g5] ~ [a4,d5,gb5]@2", // Dsus4 D
  O: "~@2 a5@5 ~ gb5@8, ~ [a4,d5]@7", // D5
})).s("gm_pad_poly").gain(0.24).pan(0.8)

// chords · brass section
const brass_section = note(`<
  ~ A@2 B@2 ~@26 C@2 ~@2 D@2 ~@6 E F A@2 B@2 ~@18 C@2 ~@2 D@2 ~@6 E F ~@8 G@2 E F H@2 I@2 J@2 K L H@2 I@2 J@2 K L H@2
  I@2 J@2 K L H@2 I@2 J@2 K L H@2 I@2 J@2 K L H@2 I@2 J@2
>`.pickRestart({
  A: "[~@4 [bb4,d5] ~@7 [a4,c5]@2 [g4,bb4]@7 ~ [f4,a4]@10]/2", // Bb Am Gm F
  B: "[~@4 [bb4,d5] ~@7 [a4,c5]@2 [g4,bb4]@6 ~@2 [c5,f5]@10]/2", C: "[~@4 [bb4,d5] ~@7 [a4,c5]@2 [bb4,d5]@14 ~@4]/2",
  D: "[~@4 [bb4,d5] ~@7 [a4,c5]@2 [bb4,d5]@9 ~ [a4,c5]@2 [bb4,d5]@6]/2", // Bb Am Bb Am Bb
  E: "[g4,d5,g5]!2 ~ [g4,d5,g5]!2 ~ [g4,d5,g5] [gb4,d5,gb5]", F: "~@2 [a4,d5,a5]@5 ~ [gb4,d5,gb5]@3 ~@5",
  G: "[~@4 [bb4,d5] ~@7 a4@2 [bb4,d5]@14 ~@4, ~@12 c5 ~@19]/2", // Bb
  H: "[~@4 [bb4,d5] ~@7 a4@2 [g4,bb4]@7 ~ [f4,a4]@10, ~@12 c5 ~@19]/2", // Bb Gm F
  I: "[~@4 [bb4,d5] ~@7 a4@2 [g4,bb4]@7 ~ [a4,c5]@10, ~@12 c5 ~@19]/2", // Bb Gm Am
  J: "[~@4 [bb4,d5] ~@7 a4@2 [g4,bb4]@14 ~@4, ~@12 c5 ~@19]/2", K: "~ [g3,g4] [d4,d5] [c4,c5]",
  L: "[f4,f5] [d4,d5] [a4,a5] [f4,f5], ~@8 [g4,g5] ~@7", // F D A F G
})).s("gm_brass_section").gain(0.5).pan(0.4)

// chords · epiano1
const epiano1 = note(`<
  ~ A@4 B@2 A@2 C@2 D@2 A@4 C@2 D@2 A@4 C@2 D@2 ~@16 A@4 B@2 A@2 C@2 D@2 A@4 C@2 D@2 ~@16 A@8 C@2 D@2 A@4 C@2 D@2 A@4
  C@2 D@2 A@4 C@2 D@2 A@4 C@2 D@2 A@4 C@2 D@2 A@4 C@2
>`.pickRestart({
  A: "[~@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4]@2 [c4,eb4,g4]@7 ~ [a3,c4,f4]@10]/2", // Gm F Cm F
  B: "[d4@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4]@2 [c4,eb4,g4]@7 ~ [a3,c4,f4]@10, [g3,bb3] ~, f4@3 ~@5]/2", // Gm F Cm F Gm
  C: "[~@4 [d4,g4,bb4]@2 ~@6 [f4,a4]@2 [eb4,g4]@17 ~, ~@12 c4@19 ~]/2", // Gm F Eb
  D: "[[c4,d4,g4]@11 ~ a4@2 gb4@17 ~, ~@12 [c4,d4]@19 ~]/2", // Csus2
})).s("gm_epiano1").gain(0.33).pan(0.4)

// chords · rock organ
const rock_organ = note("<~@14 A ~ A ~@2 B@2 C ~ A ~ A ~@6 D@2 E F ~@32 D@2 E F ~@67>".pickRestart({
  A: "~ bb5 c5 [a4,c5], ~ f5@2 ~", B: "[~@14 d5@15 b4 [e4,f4,g4,a4] [g3,a3,b3,c4,d4]]/2", C: "[e3,f3] ~@15",
  D: "[~@3 f6@5]/2", E: "g6 gb6, [a5,d6]", F: "[bb5,d6,g6] ~@15",
})).s("gm_rock_organ").gain(0.3)

// other · pad sweep
const pad_sweep = note("<~@27 A@2 B ~@33 A@2 B ~@73>".pickRestart({
  A: "[~@7 d5@9, ~ d6@5 ~@10, ~@4 a5@5 ~@7]/2", B: "d5 ~@7",
})).s("gm_pad_sweep").gain(0.1)

// chords · piano
const piano = note(`<
  ~@29 A B C@2 D E F@2 G H I J K L M@2 ~@12 N O N O N O ~@2 A B C@2 P@2 F@2 G H I J K L M@2 N O N O N O N O N O ~@2 N O
  N O N O ~@2 N O N O N O ~@2 N O N O N O ~@2 N O N O N O ~@2 N O N O N O ~@2 N O N O N O
>`.pickRestart({
  A: "~@5 [c5,c6]@3, [g3,c4,eb4]", B: "g4 gb4, [a3,d4]",
  C: "[~@4 [d4,g4,bb4]@2 ~@6 [c4,f4,a4] ~@6 d7 d8 ~ d8 ~ d8 ~@7, ~@7 [d4,f4,bb4]@7 ~@2]/2", // Gm F Bb
  D: "~@5 [c5,c6]@3, [eb3,bb3,d4]", E: "~ [a4,d5,gb5]",
  F: "[~@4 [g4,bb4] ~@7 [c4,f4,a4] ~ [d4,g4,bb4]@8 ~@2 [c4,f4,a4] ~ [d4,g4,bb4]@5 ~, ~@2 d4 ~@13]/2", // Gm F Gm F Gm
  G: "[eb3,g3,c4]@4 ~@2 g3@3 ~ [g3,c4]@4 eb3 ~, ~@4 eb3@5 ~ eb3@2 ~@4", // Cm C5
  H: "[g3,a3] ~ [g3,a3] ~ [a3,d4,g4]@2 ~@2 [a3,d4,gb4]@8, d4 ~@7", I: "[d4,g4,bb4]@7 ~", J: "[d4,f4,bb4]@13 ~@3",
  K: "[eb4,g4,bb4]@7 ~", L: "[c4,eb4,g4]@13 ~@3",
  M: "[[d4,g4,a4] ~ [d4,g4,a4]@2 ~@2 [d4,g4,a4] ~ [d4,g4,a4]@2 ~@2 [d4,g4] ~ [d4,gb4,a4]@10 ~@8, ~@6 a4 ~@9]/2", // Dsus4 G5 D
  N: "[d4,g4,bb4]@2 ~ [d4,g4,bb4] ~@2 [e4,g4,c5]@2 [d4,bb4] ~@7", O: "[c4,eb4,g4,bb4]@2 ~ [c4,eb4,g4,bb4] ~@12",
  P: "[~@7 [c5,c6]@3 ~@2 [a4,d5,gb5]@4, [eb3,bb3,d4] ~]/2", // C D Ebmaj7
})).s("gm_piano").gain(0.42).pan(0.6)

// other · electric guitar clean
const electric_guitar_clean = note("<~@39 A@4 B@2 ~@30 A@4 B@2 ~@58>".pickRestart({
  A: "[~ f3 bb3 c4@2 bb3 f3 d3@2 f3 bb3 c4@2 bb3 f3 eb3@2 eb3 bb3 c4@2 bb3 eb3 c3@2 eb3 bb3 c4@2 bb3 eb3 c3]/4",
  B: "[d3 a3 d4 d4@2 a3 d3 d4@2 d3 a3 d4@5]/2",
})).s("gm_electric_guitar_clean").gain(0.48)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@28 A ~@15 B ~@19 A ~@27 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@6>".pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.52)

// drums · hihat
const hihat = s("hh").struct("<~ [x!4]!137 [x!2 ~@2]>").gain(0.52)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ [~ x ~ x ~ x ~ x]!92 ~@46>").gain(0.26)

// drums · mid tom
const mid_tom = s("mt").struct("<~@44 [~@7 x] ~@35 [~@7 x] ~@58>").gain(0.52)

// drums · high tom
const high_tom = s("ht").struct("<~@44 [~@13 x ~@2] ~@94>").gain(0.52)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@27 A ~@8 B ~@4 A ~ A ~@19 A ~@8 B ~@6 A ~@11 A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@6 B A ~@5
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.39)

// drums · tambourine
// … 63 more lines

More by Zero