Strudelify

Puoi (Words)

Fiorello

KeyE♭ majorTempo124 bpm
0:00/0:00
// Puoi (Words) — Fiorello
// 124 bpm, 4/4, key D# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 111 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.

// bass · synth bass 2
const bass = note(`<
  ~@10 A B C D@2 B C D A E A B C D@2 B C D A F G H G H B I J D J D@2 A B C D@2 B C D A E A B C D@2 B C D A F G H G H B I
  J D J D@2 ~@8 K L M N O@2 M P A B C D@2 B C D A E A B C D@2 B C D A E Q@2 ~
>`.pickRestart({
  A: "ab2 ~ ab2 ~@3 eb2 gb2 ab2 ~ ab2 ~ ab2!2 ~@2", B: "f2 ~ f2 ~@3 c2 eb2 f2 ~ f2 ~ f2!3 ~",
  C: "bb2 ~ bb2 ~@3 f2 ab2 bb2 ~ bb2 ~ bb2!3 ~", D: "eb2 ~ eb2 ~@3 bb1 db2 eb2 ~ eb2 ~ eb2!3 ~",
  E: "db2 ~ db2 ~@3 c2 db2 eb2 ~ eb2 ~ eb2!3 ~", F: "ab2 ~ ab2 ~@3 eb2 gb2 db2@4 ab2@4",
  G: "eb2 ~ eb2 ~@3 bb1 db2 eb2 ~ eb2 ~ eb2!2 ~@2", H: "ab2 ~ ab2 ~@3 eb2 gb2 ab2 ~ ab2 ~ ab2!3 ~",
  I: "c2 ~ c2 ~@3 g1 bb1 c2 ~ c2 ~ c2!3 ~", J: "db2 ~ db2 ~@3 ab1 b1 db2 ~ db2 ~ db2!3 ~",
  K: "f2 ~@3 f2 ~@2 f2 ~@2 f2 ~@2 f2 ~@2", L: "e2 ~@3 e2 ~@2 e2 ~@2 e2 ~@2 e2 ~@2",
  M: "eb2 ~@3 eb2 ~@2 eb2 ~@2 eb2 ~@2 eb2 ~@2", N: "d2 ~@3 d2 ~@2 d2 ~@2 d2 ~@2 d2 ~@2",
  O: "db2 ~@3 db2 ~@2 db2 ~@2 db2 ~@2 db2 ~@2", P: "eb2 ~@15", Q: "ab1/2",
})).s("gm_synth_bass_2").gain(0.4)

// chords · piano
const piano = note("<~@29 A B C D E F G H I J K L ~@19 A B C D E F G H I J K L ~@39>".pickRestart({
  A: "~@8 [db3,ab3,db4]@3 ~ [eb3,ab3,c4]@3 ~", // Db5 Ab
  B: "[eb3,g3,bb3] ~ [eb3,g3,bb3]@2 ~ [eb3,g3,bb3]!2 eb3 [eb3,g3,bb3] ~ [eb3,g3,bb3] ~ [eb3,g3,bb3] [eb3,g3] ~@2, ~@13 bb3@2 ~", // Eb
  C: "[eb3,ab3,bb3,c4] ~ [eb3,ab3,c4]@2 ~ [eb3,ab3,c4]!2 ~ [eb3,ab3,c4] ab3 [eb3,ab3,c4] ab3 [eb3,ab3,c4] [eb3,ab3,c4]@3", // Ab
  D: "[eb3,g3,bb3] ~ [eb3,g3,bb3]@2 ~ [g3,bb3] [eb3,g3,bb3] eb3 [eb3,g3,bb3] eb3 [eb3,g3,bb3] ~ [eb3,g3,bb3] [eb3,bb3]@2 ~, ~@13 g3 ~@2", // Eb Gm Eb Eb5
  E: "[eb3,ab3,c4] ~ [eb3,ab3,c4]@2 ~ [eb3,ab3] [eb3,ab3,c4] ab3 [eb3,ab3,c4] ab3 [eb3,ab3,c4] ab3 [eb3,ab3,c4] [eb3,ab3,c4]@2 ~, ~@2 bb3 ~@13", // Ab Ab5 Ab
  F: "[ab3,c4,f4] ~ [ab3,c4,f4]@2 ab3 [ab3,c4,f4] ~ [ab3,c4,f4] ~ [ab3,c4,f4]@2 ab3 [ab3,c4,f4] ~ [ab3,c4,f4] ~", // Fm
  G: "[eb4,g4] ~ [c4,eb4,g4]@3 [c4,eb4,g4] ~ [c4,eb4,g4] ~ [c4,eb4,g4]@2 c4 eb4@2 c4 ~, ~@3 g4, ~@12 c4 ~@3", // Eb Cm
  H: "[ab3,db4,f4] ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4]@3 [ab3,db4,f4] ~ [ab3,db4,f4] ~", // Db
  I: "[g3,bb3,eb4] ~ [g3,bb3,eb4]@2 ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] [g3,bb3] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~, ~@5 eb4 ~@2", // Eb Gm Eb
  J: "[e3,ab3,db4] ~ [e3,ab3,db4]@2 ~ [e3,ab3,db4] ~ [e3,ab3,db4] ~ [e3,ab3,db4]@2 ~ [e3,ab3,db4] ~ [e3,ab3,db4] ~", // Dbm
  K: "[g3,bb3,eb4] ~ [g3,bb3,eb4]@2 ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3] ~@2 [g3,bb3,eb4] ~ [g3,bb3,eb4] ~, ~@9 eb4@2 ~@5", // Eb Gm Eb
  L: "[g3,bb3,eb4] ~ [g3,eb4]@2 ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] ~ [g3,bb3,eb4] eb4 [g3,bb3,eb4]!2 ~ [g3,bb3,eb4] ~, ~@2 bb3 ~@13", // Eb Cm Eb
})).s("gm_piano").gain(0.28).pan(0.4)

// other · vibraphone
const vibraphone = note(`<
  A@3 B C D E F G@2 A@3 B C D H F I@2 A@3 B C D J F K@2 L M N O P Q R S T U V A@3 B C D H F I@2 W@2 X B C D J F K@2 L M
  N O P Q R S T U V Y@2 ~@9 Z AA@2 AB@2 W@2 X B C D J F AC@2 W@2 X B C D J F AC@2 Y@2 ~
>`.pickRestart({
  A: "[ab4@22 ~@2 bb4@4 c5 ~ c5@4 db5@9 ~ ab4@4]/3", B: "g4@7 ~ g4@3 f4@3 eb4@2", C: "eb5@3 bb4",
  D: "a4@7 ~ a4@3 bb4@3 c5@2", E: "c5 db5@2 f4", F: "g4@6 ~@2 g4@2 ~ ab4@2 ~ bb4@2", G: "[bb4@2 c5@11 ~@3]/2",
  H: "db5@2 ~ f4", I: "[bb4@2 ab4@11 ~@3]/2", J: "c5 db5@4 ~ f4@2", K: "[bb4@3 ~ c5@22 ~@2 db5@2 c5@2]/2",
  L: "bb4@3 ~ bb4@5 ~ bb4@2 ~ c5@2 ~", M: "c5@9 ~ db5@2 ~@2 c5@2", N: "bb4@2 ~@2 bb4 ~ bb4@3 ~ bb4 ~ bb4@2 c5@2",
  O: "c5@4 ~ ab4 ~ bb4", P: "c5@3 ~ c5@2 c5@2 ~@2 c5@3 f5@2 ~", Q: "eb5@5 ~ eb5@2 db5@3 ~ c5@4",
  R: "~@4 f4 ~ f4@2 db5@4 c5@3 ~", S: "c5@4 bb4@4 ab4@4 bb4@3 ~", T: "~@4 e4 ~ e4@2 db5@4 c5@3 ~", U: "c5 bb4",
  V: "db5@8 c5@7 ~", W: "[ab4@11 ~ f5@3 eb5]/2", X: "eb5@6 f5@5 ~ ab4@4", Y: "[ab4@23 ~@9]/2", Z: "~@8 ab5@3 g5@3 f5@2",
  AA: "[c5@4 ab4@14 ~@6 f5@2 ~ f5@2 ~ c5@2]/2", AB: "[f5@4 eb5@19 ~@9]/2", AC: "[bb4@3 ~ c5@22 ~@6]/2",
})).s("gm_vibraphone").gain(0.48)

// other · pad new age
const pad_new_age = note(`<
  A B C D ~@2 E F ~ G A B C D ~@2 E F ~ G A B C D ~@2 E F ~@13 A B C D ~@2 E F ~ G A B C D ~@2 E F ~@29 A B C D ~@2 E F
  ~ G A B C D ~@2 E F ~ G ~@3
>`.pickRestart({
  A: "~@8 bb5@3 ~ c6@2 ~@2", B: "f5@5 ~@11", C: "~@8 db6@3 ~ c6@2 ~@2", D: "bb5@3 ~@5", E: "~@4 db6 ~ c6 ~",
  F: "bb5@3 ~@13", G: "db6 ~@7 eb6@2 ~@6",
})).s("gm_pad_new_age").gain(0.18).pan(0.1)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@10 A B C D E F G H I J A B K D E F G H I J ~@11 A B C D E F G H I J A B K D E F G H I J ~@27 A B K D E F G H I J A B
  K D E F G H I J ~@3
>`.pickRestart({
  A: "~@2 eb4!2 ab4 ~ eb4!2 ~ eb4!2 ~ ab4 ~@3", B: "eb4!4 ab4 eb4!3 ~ eb4!3 ab4 ~@2 eb4",
  C: "eb4!4 ab4 eb4!3 ~ eb4 ~@2 ab4 ~@3", D: "eb4 eb4@2 eb4 bb4 ~@2 eb4 ~ eb4!4 ~@3",
  E: "eb4!4 bb4 eb4 ~ eb4 ~ eb4!3 bb4 ~ eb4 ~", F: "f4 ~@2 f4 c5 ~@2 f4 ~ f4 ~@2 c5 ~ f4 ~",
  G: "f4!3 ~ db5 ~ f4!2 ~ f4 f4@2 bb4 ~ f4 ~", H: "eb4 ~ eb4!2 bb4 ~ eb4!2 ~ eb4 eb4@2 bb4 ~ eb4 ~",
  I: "eb4 ~ eb4@2 ab4 ~ eb4 ~@2 eb4!2 ~ ab4 ~@2 eb4", J: "eb4@2 eb4!2 ab4 eb4!3 ~ eb4!3 ab4 ~ eb4!2",
  K: "f4!4 bb4 f4!3 ~ f4 ~@2 bb4 ~@3",
})).s("gm_electric_guitar_muted").gain(0.12).pan(0.7)

// other · electric guitar muted · soft notes
const electric_guitar_muted_2 = note(`<
  ~@10 A ~ B C D E F G H ~ A ~ I C D E F G H ~@12 A ~ B C D E F G H ~ A ~ I C D E F G H ~@28 A ~ I C D E F G H ~ A ~ I C
  D E F G H ~@4
>`.pickRestart({
  A: "~@5 eb4 ~@5 eb4 ~@3 eb4", B: "~@10 eb4!2 ~@3 eb4", C: "~@5 eb4!2 ~@8 eb4", D: "~@6 eb4 ~@9",
  E: "~@6 f4 ~@3 f4@2 ~@4", F: "~@3 f4 ~@11 f4", G: "~ eb4 ~@3 eb4 ~@9 eb4", H: "~ eb4 ~@3 eb4 ~@10",
  I: "~@10 f4!2 ~@3 eb4",
})).s("gm_electric_guitar_muted").gain(0.07).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@20 A@2 B@2 C D@2 E F@2 G H G I@3 J K L M@2 ~@10 A@2 B@2 C D@2 E F@2 G H G I@3 J K L M@2 ~@8 N O P Q ~@4 A@2 B@2 C
  D@2 E R ~ A@2 B@2 C D@2 E R ~@4
>`.pickRestart({
  A: "[eb4@8 f4@7 ~, c4@31 ~]/2", B: "[f4@15 g4@16 ~, bb4@31 ~]/2", C: "[gb4,bb4]",
  D: "[a4@7 bb4@5 c5@4 db5@16, f4@31 ~]/2", E: "[eb4,g4]@15 ~", F: "[ab4@25 ~@7, c4@5 ~@3]/2", G: "[eb4,g4,bb4]",
  H: "[eb4,ab4,c5]@15 ~", I: "[[eb4,ab4,c5]@15 [ab3,f4]@15 ~ [g3,eb4]@16 ~, ~@15 c4@32 ~]/3", J: "[f3,ab3,db4]",
  K: "[g3,bb3]@7 ~, eb4", L: "[e3,ab3,db4]", M: "[[g3,bb3,eb4]@31 ~]/2", N: "f5@2 g5 ab5", O: "g5@15 ~",
  P: "ab5@2 bb5 c6", Q: "f6", R: "[c4,ab4]",
})).s("gm_string_ensemble_2").gain(0.17)

// chords · epiano2
const epiano2 = note(`<
  A B C D E F G H I J K L M N O P Q R K S K L M N O P Q R K T U V U W X Y Z AA AB AC ~ K L M N O P Q R K S K L M N O P Q
  R K T U V U W X Y Z AA AB AC ~ A B C D E F G H AD@2 AE@2 AF@2 AG AH K L M N O P Q R K AI K L M N O P Q R K AI AJ@2 ~
>`.pickRestart({
  A: "[ab2,c4,eb4,ab4]", B: "[f2,c4,eb4,ab4]", C: "[bb2,f4,ab4], db4@7 ~", D: "[eb3,bb3,eb4,g4]@15 ~",
  E: "[eb3,bb3,eb4,gb4]", F: "[f3,f4], [a3,c4]@7 ~", G: "[bb2,bb3,db4,f4]", H: "[bb3,db4,eb4,g4]@7 ~, eb3",
  I: "[ab2,c4,eb4,ab4]@15 ~", J: "[db3,bb3,db4,f4] [eb3,bb3,eb4,g4]", K: "[c4,eb4,ab4]@15 ~", L: "[c4,f4,ab4]",
  M: "[f4,bb4], db4@7 ~", N: "[bb3,eb4,g4]@15 ~", O: "[bb3,eb4,gb4]", P: "[a3,c4,f4]@15 ~", Q: "[bb3,db4,f4]@15 ~",
  R: "[bb3,db4,eb4,g4]@7 ~", S: "[f4,bb4,db5] [g4,bb4,eb5]", T: "[eb4,ab4] ~, c4@3 ~@5", U: "[g3,bb3,eb4]@7 ~",
  V: "[ab3,c4,eb4]@7 ~", W: "[ab3,c4,eb4]@3 ~", X: "[f3,ab3,c4]@7 ~", Y: "[eb3,g3,c4]@3 ~", Z: "[f3,ab3,db4]@15 ~",
  AA: "[g3,bb3,eb4]@3 ~", AB: "[e3,ab3,db4]@3 ~", AC: "[g3,bb3,eb4]", AD: "[f4@9 ~@3 ab4@4 g4@16, [ab3,c4]@15 ~]/2",
  AE: "[f4@4 g4@2 ab4@2 c5@7 ~, [ab3,c4]@31 ~]/2", AF: "[[db4,f4,ab4]@27 ~@5]/2",
  AG: "~@8 c5 ~ c5 ~ c5 ~ c5 ~, [eb4,g4,bb4]@15 ~", AH: "c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~ c5 ~", AI: "~ [g4,bb4,eb5]",
  AJ: "[[ab2,c4,ab4], eb4@15 ~]/2", // Ab
})).s("gm_epiano2").gain(0.19)

// chords · pad sweep
const pad_sweep = note("<~@29 A ~@30 A ~@36 A ~@9 A ~@3>".pickRestart({
  A: "[c4,eb4] ~", // Cm
})).s("gm_pad_sweep").gain(0.05)

// chords · pad sweep · soft notes
const pad_sweep_soft = note("<~@29 A ~@30 A ~@36 A ~@9 A ~@3>".pickRestart({
  A: "ab3 ~",
})).s("gm_pad_sweep").gain(0.03)

// drums · kick
const kick = s("bd").struct(`<
  ~@9 A@2 B A B A B A B A B A B A B 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 A B A B A B A B A B A
  B A B A@2 B C ~@15 A B A B A B A B A B A B A B A B A B A B C ~@2
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<[~ x ~@2]!10 ~@62 [~ x ~@2]!16 ~@20 [~ x ~@2]!2 ~>").gain(0.32)

// drums · snare
const snare = s("sd").struct("<~@9 A B@19 C B@30 C B@11 ~@15 D B@9 E B@9 E ~@3>".pickRestart({
  A: "~@13 x!3", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~@4 x ~@2 x ~ x!2 ~ x!2 ~ x", D: "~@8 x!8",
  E: "~@4 x ~@2 x ~ x ~ x!3 ~ x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct("<A@10 B A@9 B A@20 B A@9 B A@36 B A@9 B A@11 ~>".pickRestart({
  A: "x!4", B: "~ x!3",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@10 [~ x ~ x ~ x ~ x]!62 ~@16 [~ x ~ x ~ x ~ x]!20 ~@3>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@9 A ~@20 A ~@9 A ~@20 A ~@15 A ~@9 A ~@9 A ~ A>".pickRestart({
  A: "x",
})).gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<[~@3 x]!10 ~@62 [~@3 x]!16 ~@20 [~@3 x]!2 ~>").gain(0.56)

// drums · congas
const congas = s("conga:13").struct("<~@72 A B A B A B A B C D C D C D C ~@21 A B ~>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@6 x ~@7 x!2", C: "~@3 x!3 ~@5 x ~@4", D: "~@3 x!3 ~@5 x ~@3 x",
})).gain(0.77)

// drums · congas
const congas_2 = s("conga:18").struct("<~@72 [x!2]!15 [x ~ x!6] ~@20 [x!2]!2 ~>").gain(0.77)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@72
  [~@3 x ~@7 x ~@4]!8
  [~@2 x ~@3 x!2 ~@2 x ~@2 x!2 ~]!7
  [~ x ~@6]
  ~@20
  [~@3 x ~@7 x ~@4]!2
  x
>`).gain(0.77)

// drums · congas · soft notes
const congas_soft = s("conga:33").struct("<~@72 [~@5 x ~@7 x ~@2]!8 ~@28 [~@5 x ~@7 x ~@2]!2 ~>").gain(0.51)

// drums · shaker
const shaker = s("sh").struct("<~@9 [~@2 x!4 ~ x!4 ~@5] [x!16]!100 ~>").gain(0.32)

stack(
  bass, piano, vibraphone, pad_new_age, electric_guitar_muted, electric_guitar_muted_2, string_ensemble_2, epiano2,
  pad_sweep, pad_sweep_soft, kick, clap, snare, hihat, open_hat, crash, tambourine, congas, congas_2, congas_3,
  congas_soft, shaker
)

More by Fiorello