Strudelify

Vivere a colori

Fiorello

KeyD♭ majorTempo113 bpm
0:00/0:00
// Vivere a colori — Fiorello
// 112.8 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 3 electric guitar clean (copy of ch 11 piano)
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112.8/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 B C@2 A B C@2 D E F G D E F H I J K L A B C@2 A B C@2 A B C@2 M N A B C@2 A B C@2 D E F G D E F H I J K O A B C@2
  A B C@2 A B C@2 M N P Q R S P T U V A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 M W
>`.pickRestart({
  A: "gb1@2 ~ gb1 db1@2 eb1@2 gb1@2 ~ gb1 db1@2 eb1@2", B: "ab1@2 ~ ab1 eb1@2 f1@2 ab1@2 ~ ab1 eb1@2 f1@2",
  C: "db2@2 ~ db2 ab1@2 bb1@2 db2@2 ~ db2 ab1@2 bb1@2", D: "gb1@2 ~@5 gb1 gb1@2 ~@2 eb1@2 gb1@2",
  E: "ab1@2 ~@2 ab1@2 ~ ab1 ab1@2 ~@2 eb1@2 ~@2", F: "db1@2 ~@2 db1@2 ~ db1 db1@2 ~@2 ab1@2 db2@2",
  G: "db1@2 ~@2 db1@2 ~ db1 db1@2 ~@2 eb1@2 f1@2", H: "db1@2 ~@2 db1@2 ~ db1 db1@2 ~@2 e1@2 f1@2",
  I: "bb1 ~@5 bb1!3 ~@3 ab1@2 bb1@2", J: "f1@2 ~@2 f1@2 ~ f1 f1@2 ~@2 c1@2 f1@2",
  K: "gb1@2 ~@2 gb1@2 ~ gb1!4 ~ f1@2 gb1@2",
  L: "ab1 g1 [f1,gb1] [d1,eb1,e1] c1@4 c1 [db1,d1] [eb1,e1] [d1,eb1] [c1,db1] [db1,d1] [eb1,e1] f1, ~@4 db1 ~@11", // Gbmaj7 Dmaj7 Emaj7 Ebmaj7 Dbmaj7 Dmaj7 Emaj7
  M: "gb1 ~@2 gb1!2 ~@2 gb1", N: "ab1@2 ab1@2 ab1@2 ab1@4 [gb1,g1] [e1,f1] [d1,eb1] [c1,db1] [bb0,b0] ~",
  O: "ab1 g1 [f1,gb1] [d1,eb1,e1] c1@4 c1 [db1,d1,eb1] e1 [db1,d1,eb1] c1 [db1,d1] [eb1,e1] f1, ~@4 db1 ~@11", // Gbmaj7 Dmaj7 Emaj7
  P: "~ bb1 ~@2", Q: "~ f1 ~@2", R: "~@2 bb1@2 ~ c2 eb1 f1", S: "~@2 f1@2 ~ f1!2 ab1", T: "~ f1 ~ f1",
  U: "gb1@3 ~ gb1@3 ~ gb1@3 ~ gb1@3 ab1", V: "ab1!3 ~ gb2 ~ f2 ~ eb2 ~ db2 ~ c2 ~ ab1 ~", W: "ab1!4 ~@4",
})).s("gm_electric_bass_finger").gain(0.55)

// other · distortion guitar
const distortion_guitar = note(`<
  ~@3 A B ~@2 A B ~@14 A B ~@2 A B ~@2 A B ~@4 A B ~@2 A B ~@14 A B ~@2 A B ~@2 A B ~@12 A B ~@2 A B ~@2 A B ~@2 A B ~@2
  A B ~@2 A B ~@2 A B ~@2
>`.pickRestart({
  A: "f3 ab3 ~@2 ab3 db4 ~ ab3 db4 f3 ab3 db4 ~@4, ~ db4 ~@6, ~@3 f3@2 ~ f3@2 ~@8",
  B: "f3 ab3 db4 ~ ab3 db4 ~ ab3 db4 f3 ab3 db4 ~@4, ~@3 f3@2 ~ f3@2 ~@8",
})).s("gm_distortion_guitar").gain(0.64)

// chords · distortion guitar
const distortion_guitar_2 = note("<~@69 A B@7 ~@30>".pickRestart({
  A: "[db3,f3,bb3]@15 ~", // Bbm
  B: "[f3@15 ~ [f3,bb3]@14 ~@2 f3@15 ~ [f3,bb3]@15 ~ [f3,bb3]@15 ~ bb3@4 ab3@4 bb3@7 ~ bb3@7 [db3,eb3,bb3] ~@8, bb3@13 ~@2 db3@14 ~@2 c3@15 ~ db3@15 ~ c3@16 [db3,gb3]@16 [db3,eb3]@8 ~@9, ~@16 bb3@7 ~@33]/7", // Bb5 Eb7 Gb5 Dbsus2
})).s("gm_distortion_guitar").gain(0.06).pan(0.8)

// other · electric guitar clean
const electric_guitar_clean = note("<~@68 A B C D C B E F G ~ H I@2 ~@9 J K@2 ~@5 J K@2 ~@6>".pickRestart({
  A: "~@6 f2 ab2", B: "bb2@6 bb2 ab2", C: "f2@6 f2 ab2", D: "bb2@4 bb2 c3 bb2 ab2", E: "f2@3 ~", F: "gb2!2", G: "ab2",
  H: "~@2 eb3 f3 eb3 db3 bb2 db3", I: "[bb2@3 ab2@13]/2", J: "~@2 eb3 f3 eb3 db3!2 eb3", K: "[eb3@3 db3@13]/2",
})).s("gm_electric_guitar_clean").gain(0.71)

// chords · piano
const piano = note(`<
  ~ A B C D A B C D ~@8 E F G H A B C D A B C D A B C D ~@2 A B C D A B C D ~@7 I E F G H A B C D A B C D A B C D ~@2 J
  K J K J K L M A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@2
>`.pickRestart({
  A: "[gb3,bb3]@2 ~ [gb3,bb3,eb4]@2 ~ [gb3,bb3,db4]@2 ~@2 [gb3,bb3,db4] ~ [gb3,bb3,eb4] ~ [gb3,bb3,db4] ~, eb4 ~@15", // Gb Ebm Gb Ebm Gb
  B: "[ab3,c4,f4]@2 ~ [ab3,c4,f4]@2 ~ [ab3,c4,eb4]@2 ~@2 [ab3,c4,eb4] ~ [ab3,c4,eb4] ~@3", // Fm Ab
  C: "[bb3,eb4] ~@2 [bb3,eb4,gb4]@2 ~ [ab3,db4,f4]@2 ~@2 [ab3,db4,f4] ~ [ab3,db4]@2 ~@2, gb4@2 ~@10 f4 ~@3", // Eb5 Ebm Db Db5
  D: "[bb3,eb4,gb4] ~@2 [eb4,gb4]@2 ~ [ab3,db4,f4]@2 ~@2 [ab3,db4,f4] ~ [ab3,db4,f4] ~@3, ~@3 bb3 ~@12", // Ebm Db
  E: "[ab3,db4]@2 ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~@2 [ab3,db4,f4] ~ [ab3,db4,f4] ~ [ab3,db4,f4] ~, f4 ~@15", // Db5 Db
  F: "[bb3,c4,f4]@2 ~ [bb3,c4,f4]@2 ~ [a3,c4,f4]@2 ~@2 [a3,c4,f4] ~ [a3,c4,f4] ~@3", // Bbsus2 F
  G: "[bb3,db4] ~@2 [bb3,db4,f4]@2 ~ [bb3,db4,f4]@2 ~@2 [bb3,db4,f4] ~ [bb3,db4]@2 ~@2, f4@2 ~@10 f4 ~@3", // Bbm
  H: "[bb3,db4,eb4] ~@15", I: "~@7 f4, ~@9 ab3@7, ~@3 bb3", J: "[db3,f3,bb3]", K: "[c3,f3,bb3]",
  L: "[db3,gb3,bb3] [db3,ab3,bb3]", M: "[db3,eb3,ab3]!3 ~@5",
})).s("gm_piano").gain(0.49).pan(0.3)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~ A B C@2 A B C@2 A B C@2 A B C@2 D E F G A B C@2 A B C@2 A B C@2 H I A B C@2 A B C@2 A B C@2 A B C@2 D E F G A B C@2
  A B C@2 A B C@2 H I ~@8 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 H I
>`.pickRestart({
  A: "[gb3,bb3,eb4]@2 [gb3,bb3,eb4]!2 ~@2 [gb3,bb3,db4]@2 ~ [gb3,bb3,db4] [gb3,bb3,db4]@2 [gb3,bb3,db4]@2 ~@2", // Ebm Gb
  B: "[ab3,c4,f4]@2 [ab3,c4,f4]!2 ~@2 [ab3,c4,eb4]@2 ~ [ab3,c4,eb4] [ab3,c4,eb4]@2 [ab3,c4,eb4]@2 ~@2", // Fm Ab
  C: "[gb3,bb3,eb4]@2 [gb3,bb3,eb4]!2 ~@2 [f3,ab3,db4]@2 ~ [f3,ab3,db4] [f3,ab3,db4]@2 [f3,ab3,db4]@2 ~@2", // Ebm Db
  D: "[ab3,db4,f4]@2 [ab3,db4,f4]!2 ~@2 [ab3,db4,f4]@2 ~ [ab3,db4,f4] [ab3,db4,f4]@2 [ab3,db4,f4]@2 ~@2", // Db
  E: "[bb3,c4,f4]@2 [bb3,c4,f4]!2 ~@2 [a3,c4,f4]@2 ~ [a3,c4,f4] [a3,c4,f4]@2 [a3,c4,f4]@2 ~@2", // Bbsus2 F
  F: "[bb3,db4,f4]@2 [bb3,db4,f4]!2 ~@2 [bb3,db4,f4]@2 ~ [bb3,db4,f4] [bb3,db4,f4]@2 [bb3,db4,f4]@2 ~@2", // Bbm
  G: "[bb3,db4,eb4] ~@7", H: "[db3,gb3,bb3,eb4] ~@2 [db3,gb3,bb3,eb4]!2 ~@2 [db3,gb3,bb3,eb4]",
  I: "[eb3,ab3,c4,f4]!4 ~@4", // Fm7
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.9)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~ A B@3 A B@3 ~@8 C@2 D E A B@3 A B@3 A B@3 ~@2 A B@3 A B@3 ~@8 C@2 D E A B@3 A B@3 A B@3 ~@10 A B@3 A B@3 A B@3 A B@3
  A B@3 A B@3 A B@3 ~@2
>`.pickRestart({
  A: "eb4@3 db4@5, [bb3,gb4]", // Ebm
  B: "[f4@6 ~@10 [gb4,bb4]@5 ~ [db4,f4]@9 ~ [eb4,bb4]@6 [db4,f4,ab4]@10, [c4,ab4]@16 ~@5 ab4@10 gb4@7 ~@10, ~@3 eb4@8 ~@13]/3", // Gb Db Eb5 Db Fm
  C: "[[bb2,db4,f4]@2 ~ a3, bb3@3 ~, ~ [f2,c4,f4]]/2", D: "[gb2,gb3,bb3,db4]", E: "[ab2,bb3,db4,eb4] ~@7",
})).s("gm_synth_strings_1").gain(0.3)

// chords · rock organ
const rock_organ = note(`<
  ~@21 A B@2 C A B@2 C A B@2 C ~@18 D E F G A B@2 C A B@2 C A B@2 C ~@10 A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C A B@2 C
  A B@2 C ~@2
>`.pickRestart({
  A: "eb6@3 db6@5, bb5", B: "[f6@3 ~@5 gb6@3 [db6,f6]@5, c6 ~, ~@3 eb6@8 ~@5]/2", C: "[eb6,gb6]@3 [db6,f6]@5",
  D: "f6@3 gb6@3 f6@10", E: "eb6@3 f6@3 eb6@10", F: "db6", G: "db6 ~@15",
})).s("gm_rock_organ").gain(0.2)

// other · overdriven guitar
const overdriven_guitar = note(`<
  A B C D@3 C E@2 ~@25 A B C D@3 C E@2 ~@11 F ~@13 G H ~ I ~@6 J K@2 ~@3 A B C D@3 C L@2 B C D@3 C L@2 B C E@2 ~@2
>`.pickRestart({
  A: "~@3 db4", B: "db4@10 [g4,ab4,a4] [f4,gb4] f4@4", C: "f4 eb4@14 ~",
  D: "[b3 db4@2 db4@3 db4@19 ~@3 db4@14 [g4,ab4,a4] [f4,gb4] f4@4]/3", E: "[b3 db4@2 db4@3 db4@19 ~@7]/2", F: "~ ab2@3",
  G: "~@7 ab2", H: "bb2@3 ~", I: "~@6 bb2 ~", J: "~@2 eb3 f3 eb3 db3 bb2 db3", K: "[bb2@3 ab2@13]/2",
  L: "[b3 db4@2 db4@3 db4@19 ~@3 db4@4]/2",
})).s("gm_overdriven_guitar").gain(0.4)

// other · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@68 A B C D C E F G H ~@30>".pickRestart({
  A: "~@6 f2 ~", B: "~@6 bb2 ab2", C: "f2@6 f2 ab2", D: "bb2@4 bb2 c3 ~ ab2", E: "bb2@6 bb2 ab2", F: "f2@3 ~",
  G: "gb2!2", H: "ab2",
})).s("gm_overdriven_guitar").gain(0.22)

// drums · kick
const kick = s("bd").struct("<A B@32 ~@2 B@19 C B@14 ~@8 B@28 ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "x ~@6 x ~@2 x ~@5", C: "x ~@6 x ~@6 x ~",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~ [~ x]!32 ~@2 [~ x]!34 ~@8 [~ x]!28 ~@2>").gain(0.24)

// drums · snare
const snare = s("sd").struct("<A B@15 C B@16 ~@2 B@7 D B@7 C B@3 E B@14 ~@7 F B@15 G B@12 ~@2>".pickRestart({
  A: "~@8 x!2 ~ x!2 ~@3", B: "~ x ~ x", C: "~@4 x ~@5 x ~ x!2 ~@2", D: "~@4 x ~@7 x!2 ~@2", E: "~@9 x!2 ~ x!2 ~ x",
  F: "~@12 x!2 ~@2", G: "~@4 x ~@7 x ~@2 x",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A@15 B A@16 ~@2 A@15 B A@3 ~ A@14 ~@8 A@15 C A@12 ~@2>".pickRestart({
  A: "~@15 x", B: "~@9 x ~@4 x!2", C: "~@13 x ~ x",
})).gain(0.48)

// drums · low tom
const low_tom = s("lt").struct("<~@69 [~@2 x ~@8 x!2 ~@3]!8 ~@30>").gain(0.56)

// drums · low tom · soft notes
const low_tom_soft = s("lt").struct("<~@69 [~ x ~@2]!8 ~@30>").gain(0.32)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ [~@3 x ~@12]!32 ~@2 [~@3 x ~@12]!34 ~@8 [~@3 x ~@12]!28 ~@2>").gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@69 [~@5 x ~@2]!8 ~@30>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~ A@32 ~@2 A@20 B A@11 B A C@8 B A@27 ~@2>".pickRestart({
  A: "~@2 x ~@2 x ~ x", B: "~@5 x ~ x", C: "~@15 x",
})).gain(0.4)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~ [~@3 x]!32 ~@2 [~@3 x]!34 ~@8 [~@3 x]!28 ~@2>").gain(0.24)

// drums · high tom
const high_tom = s("ht").struct("<~@54 [~ x ~@2] ~@14 [x ~@2 x ~@3 x ~ x ~@6]!8 ~@30>").gain(0.56)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@69 [~ x ~@12 x!2]!8 ~@30>").gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@3 A ~@5 A ~@3 A ~@3 A ~@7 A ~@3 B ~@3 A ~@3 A ~ A ~ B ~@9 B ~@3 A ~@3 A ~ A ~ A
  ~@3 A ~@3 A ~@3 A ~@5
>`.pickRestart({
  A: "x", B: "x!2 ~@2",
})).gain(0.56)

// drums · tambourine
const tambourine = s("tb").struct("<~@69 [~@7 x ~@8]!3 [~@3 x ~@4] [~@7 x ~@8]!3 [~@3 x ~@4] ~@30>").gain(0.8)

// drums · shaker
const shaker = s("sh").struct("<~ [x!16]!32 ~@2 [x!16]!34 ~@8 [x!16]!28 ~@2>").gain(0.48)

stack(
  bass, distortion_guitar, distortion_guitar_2, electric_guitar_clean, piano, acoustic_guitar_steel, synth_strings_1,
  rock_organ, overdriven_guitar, overdriven_guitar_soft, kick, kick_soft, snare, snare_soft, low_tom, low_tom_soft,
  hihat, hihat_soft, mid_tom, open_hat, open_hat_soft, high_tom, high_tom_soft, crash, tambourine, shaker
)

More by Fiorello