Strudelify

Mi sono innamorato di te

Paoli

KeyC minorTempo76 bpm
0:00/0:00
// Mi sono innamorato di te — Paoli
// 76 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 53 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(76/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 · piano
const piano = note(`<
  A B C D E F G@3 H I J K L M N O P Q R S T U V ~@10 W X@2 Y Z AA AB AC ~ AD@2 AE AF AG AH N AI@3
>`.pickRestart({
  A: "c2@29 ~@3", B: "~@12 ab3@2 c3 ~, f2@15 ~, ~ c3@6 ~, ~@4 ab3@6 c4@5 ~, ~@6 c4@2 f4@7 ~",
  C: "~@6 c4 d3, bb2@15 ~, ~@2 ab3@12 ab3 ~, ~@4 c4@6 d4@5 ~, ~@6 d4@2 f4@7 ~",
  D: "~@20 eb4@4 ~@4 d3@3 ~, eb3@3 [eb3,bb3,eb4,bb4], ~@2 g3@13 ~, ~ bb3!2 ~, ~@3 eb4@2 ~@3", // Eb5
  E: "~@24 eb4@4 ab4 ~@3, c3@29 ~@3, ~@4 ab3@25 ~@3, ~@2 eb4@3 ab4@2 ~, ~@12 ab4@4 eb5@13 ~@3",
  F: "~@24 c4@4 [d3,c5]@3 ~, d3@7 ~, ~@2 ab3@13 ~, ~@4 c4@6 f4@5 ~, ~@3 f4 c5@3 ~", // D7
  G: "[~@9 eb4 g4 c5 eb5 g5 c6 eb6 [eb6,g6]@7 ~, g2@4 g4@4 c3@4 c5 eb5 g5 c6@8 ~, ~ d3@8 g3@14 ~, ~@2 b3@8 eb4@13 ~, ~@2 g3 d4@8 g4@12 ~]/3", // Eb
  H: "~@28 [c4,ab4]@3 ~, f2, f4@8 f4@8 c5@4 f5@11 ~, ~@4 c4@16 ab4@4 [f4,c5]@7 ~, ~@4 ab4@4 c5@4 [ab4,f5]@4 ab5@15 ~", // Fm F5 Db
  I: "~@8 bb4@4 ~@8 bb4@4 ~@4 [d4,ab4]@3 ~, bb2@31 ~, ~@4 [d4,ab4]@20 [f4,bb4]@7 ~, ~@8 f4@12 f5@11 ~, ~@12 [bb4,f5]@4 [d5,ab5]@15 ~", // Ddim Bb5 Ddim
  J: "~@28 [bb3,g4]@3 ~, [eb2,eb3]@31 ~, ~@4 bb3@16 g4@4 [eb4,bb4]@7 ~, ~@4 g4@4 bb4@4 [g4,eb5]@4 g5@15 ~, ~@8 eb4@8 bb4@4 eb5@11 ~", // Eb Eb5 Cm
  K: "~@28 [c4,ab4]@3 ~, [ab2,eb3,ab3]@31 ~, ~@4 c4@16 ab4@4 [eb4,c5]@7 ~, ~@4 ab4@4 c5@4 [ab4,eb5]@4 ab5@15 ~, ~@8 eb4@8 c5@4 eb5@11 ~", // Fm Ab5 Cm Ab5
  L: "~@28 [ab3,f4]@3 ~, [d2,d3]@31 ~, ~@4 ab3@16 f4@4 [d4,ab4]@7 ~, ~@4 f4@4 ab4@4 [f4,d5]@4 f5@15 ~, ~@8 d4@8 ab4@4 d5@11 ~", // Db D Ddim Dm
  M: "~@28 [b3,f4]@3 ~, g2@20 f4@4 [d4,g4]@7 ~, ~@4 b3@16 d5@11 ~, ~@4 f4@4 [d4,g4]@4 [f4,d5]@4 [b4,f5]@15 ~, ~@8 g3@23 ~", // Bdim G5 Dm Bdim
  N: "[g2,f3,b3]@29 ~@3", // G7
  O: "~@7 g4, c3@16 c3@15 ~, [g3,c4,eb4] g2@2 [g2,g3,c4,eb4], ~ g4@2 g4@2 g4@2 ~, ~ [g3,c4,eb4]!2 ~", // Cm
  P: "~@12 [g2,g3,bb3,e4]@2 g4 ~, c3@3 g4 [g3,bb3,e4] g4@2 ~, [g3,c4,e4]@4 c4@11 ~, ~@2 g4@2 [g3,e4]@4 c3@7 ~, ~ g2@2 ~", // Edim C
  Q: "~@28 bb4@3 ~, db3@16 db3@15 ~, [bb3,db4,f4]@8 [bb3,db4,f4]@8 [bb3,db4,f4]@8 [c3,bb3,db4,f4]@7 ~, ~ bb4@2 bb4@2 bb4@2 ~", // Bbm
  R: "~@2 bb4@2 ~@8 [bb3,f5,bb5,db6]@2 bb2 ~, db4@15 ~, bb2@3 bb2 [bb3,f5] bb2@2 ~, [bb3,f4]@4 f4@11 ~, ~@4 [bb3,bb4,db5]@4 [bb4,db5]@7 ~", // Bbm Bb5 Bbm
  S: "bb3@4 bb3@4 ab2@4 ~@8 ab2@4 ab2@4 ab2@3 ~, [ab2,ab3,db4,f4]@8 [bb3,db4]@23 ~, ~@8 [ab3,f4,bb4]@8 [f4,bb4]@15 ~, ~@3 ab2@2 ~@3, ~@16 [ab3,db5,f5]@8 [ab3,db5,f5,ab5,db6]@7 ~", // Db Bbm Bb7 Bb5 Db
  T: "g2@2 ~@10 [g3,bb4,db5,f5,bb5]@2 g2 ~, [bb3,db4]@15 ~, [g3,f4]@4 f4@11 ~, ~ g2@2 g2@2 g2@2 ~, ~ [g3,bb4,db5] [g3,bb4,db5,f5] ~", // Gm7b5 Bbm G7 Gdim Gm7b5
  U: "c3@2 c3@2 c3@2 c3@2 c3@2 c3@2 [c3,g4,bb4,c5,e5]@2 c3 ~, bb3@15 ~, [c4,e4]@4 c4@11 ~, gb4 ~@7 [e4,g4]@8 e4@14 ~@2, ~@2 [g4,bb4,c5] ~", // C7 C Em C7
  V: "[f2,f5,ab5,c6]@15 ~", W: "~@12 c5@4 d5@5 eb5@4 ~ f5@3 g5@3",
  X: "[~ ab5@9 ~ ab5@2 ~ ab5@2 ~ ab5@12 ~ f5@4 bb5@17 ~ f5@4 g5@3 ab5@3 bb5@2]/2",
  Y: "g5@5 ~ g5@3 ~@2 g5@4 ~ g5@4 ~ g5@7 ~ eb5@3", Z: "ab5@16 eb5@5 f5@4 ~ g5@3 ab5@3",
  AA: "~ f5@5 f5@3 ~@2 f5@3 ~ f5@12 d5@4 ~", AB: "g5@16 d5@5 eb5@5 f5@3 ~ g5@2",
  AC: "~ eb5@5 eb5@5 eb5@4 ~ eb5@4 ~ eb5@11",
  AD: "[~@20 [ab4,f5]@3 ~@5 [c4,ab4]@3 ~@9 bb4@4 [bb4,f5]@3 ~@5 bb4@4 [f4,bb4]@4 [d4,ab4]@2 ~@2, f2@47 ~@17, f4@8 f4@15 ~ [f4,c5]@7 ~@5 [d4,ab4]@11 ~@5 f5@10 ~@2, ~@4 c4@19 ~@9 bb2@15 ~@17, ~@4 ab4@4 c5@4 [ab4,f5]@4 [c5,ab5]@7 ~@17 f4@7 ~ [d5,ab5]@14 ~@2]/2", // Db Fm Bb5 Ddim F5 Ddim Db Fm …
  AE: "~@4 [eb4,bb4]@2 [g4,eb5] ~@5 [eb4,bb4]@2 [bb3,g4] ~, [eb2,eb3]@7 ~ bb4@4 ~@4, ~@2 [bb3,g4]@5 ~ g5@7 ~, ~@10 [g4,eb5]@5 ~", // Eb5 Cm Eb5 Eb Cm
  AF: "~@12 [ab4,eb5]@3 ~@9 [eb4,c5]@4 [c4,ab4]@2 ~@2, [ab2,eb3,ab3]@15 ~@17, ~@4 c4@11 ~@5 [ab4,eb5]@10 ~@2, ~@2 ab4@4 ~@2 ab5@7 ~, ~@8 [eb4,c5]@7 ~ c5@8 ~@8", // Ab5 Cm Fm Ab5 Cm
  AG: "~@4 [d4,ab4]@2 [f4,d5] ~@5 [d4,ab4]@2 [ab3,f4] ~, [d2,d3]@7 ~ ab4@4 ~@4, ~@2 [ab3,f4]@5 ~ f5@7 ~, ~@10 [f4,d5]@5 ~", // Ddim Dm Ddim Db D Db Dm
  AH: "~@4 [g3,d4,g4]@2 [f4,d5] ~@5 [d4,g4]@2 [b3,f4] ~, g2@7 ~@3 [f4,d5]@5 ~, ~@2 [b3,f4]@5 ~ [b4,f5]@7 ~", // G5 Dm G5 Bdim Dm Bdim
  AI: "[c3@4 ~@39 d6@29 ~@24, eb4@17 eb4@21 g4 c5 d5 eb5 g5@30 ~@24, c4@13 c4@8 d4@51 ~@24, g3 g3@8 ~@3, ~@4 c3@22 g4@6 d5@5 c4@35 ~@24]/3",
})).s("gm_piano").gain(0.27)

// chords · electric guitar jazz
const electric_guitar_jazz = note("<~@26 A@3 B C D@2 E@2 F G H I J K@3 ~@10>".pickRestart({
  A: "[[ab3,c4,eb4]@7 ~ [ab3,c4,eb4]@7 ~@2 f4@6 ~ [ab3,c4,eb4]@6 ~@2 [d4,f4]@7 ~ [d4,f4]@6 ~@3 f4@6 ~ [ab3,d4,f4]@6 ~@2 [bb3,eb4]@7 ~ [g3,bb3,eb4]@6 ~@3 eb4@6 ~ [g3,bb3,eb4]@5 ~@3, ~@16 [ab3,c4]@7 ~@8 ab3@7 ~ ab3@7 ~ ab3@7 ~@9 g3@8 ~@9 [g3,bb3]@7 ~@9, ~@8 d4 ~@7]/3", // Ab Dm Ddim Eb5 Eb Ab Gm
  B: "[ab3,c4,eb4]@7 ~ [ab3,c4,eb4]@6 ~@2 [c4,eb4]@6 ~@2 [ab3,c4,eb4]@4 ~@4, ~@15 ab3@7 ~@10", // Ab Cm Ab
  C: "[ab3,c4,f4]@6 ~@2 [ab3,c4,f4]@5 ~@4 f4@5 ~@2 [ab3,c4,f4]@6 ~@2, ~@16 [ab3,c4]@7 ~@9", // Fm Ab
  D: "[[g3,c4,d4]@7 ~ [g3,c4,d4]@6 ~@2 [g3,c4,d4]@7 ~ [g3,c4,d4]@5 ~@3 [b3,d4]@13 ~@3 [b3,d4]@12 ~@4, ~@31 g3@14 ~@2 f3@13 ~@4]/2", // Gsus4 Bm
  E: "[~ eb4@5 ~@2 [g3,bb3,eb4]@5 ~@3 [a3,c4,eb4]@5 ~@3 [a3,c4,eb4]@5 ~@3 [bb3,eb4]@5 ~@3 [g3,bb3,eb4]@5 ~@3 [bb3,eb4]@5 ~@3 [g3,bb3,eb4]@4 ~@4, [g3,bb3]@5 ~@26 g3@5 ~@11 g3@6 ~@11]/2", // Eb Adim Eb5 Eb Eb5 Eb Gm
  F: "[ab3,c4,eb4]@5 ~@3 [ab3,c4,eb4]@6 ~@2 [ab3,c4,eb4]@5 ~@3 [ab3,c4,eb4]@5 ~@3", // Ab
  G: "~ d4@4 ~@3 [ab3,bb3,d4]@5 ~@3 [bb3,d4]@5 ~@3 [ab3,bb3,d4]@4 ~@4, [ab3,bb3]@5 ~@10 ab3@5 ~@12", // Bb7 Bb Bb7 Absus2
  H: "[g3,bb3,d4]@4 ~@4 [g3,bb3,d4]@5 ~@3 [bb3,d4]@5 ~@3 [g3,bb3,d4]@4 ~@4, ~@15 g3@6 ~@11", // Gm Bb Gm
  I: "[ab3,c4,eb4]@4 ~@4 [ab3,c4,eb4]@5 ~@4 eb4@4 ~@3 [ab3,c4,eb4]@4 ~@4, ~@16 [ab3,c4]@5 ~@11", // Ab
  J: "[f3,ab3,c4,d4]@4 ~@4 [ab3,c4,d4]@5 ~@3 [ab3,c4,d4]@5 ~@3 [ab3,c4,d4]@4 ~@4, ~@15 f3@5 ~@12", // Dm7b5
  K: "[[f3,g3,b3,d4]@5 ~@3 [f3,g3,b3,d4]@5 ~@4 d4@5 ~@2 [f3,g3,b3,d4]@4 ~@4 [bb3,c4,eb4]@4 ~@4 [g3,bb3,c4,eb4]@4 ~@4 [a3,c4,eb4]@4 ~@4 [g3,a3,c4,eb4]@4 ~@4 [c4,eb4]@9 ~@23, ~@16 [f3,g3,b3]@5 ~@10 g3@5 ~@11 g3@5 ~@11 [g3,bb3]@10 ~@23]/3", // G7 Cm7 Adim Am7b5 Cm G7 Gm
})).s("gm_electric_guitar_jazz").gain(0.1).pan(0.4)

// bass · fretless bass
const bass = note("<~@26 A B C D E F G H I J K L M E N O P ~@10>".pickRestart({
  A: "f2 c3", B: "bb2@14 ~@2 bb2@15 ~", C: "eb2 bb2", D: "ab2@7 ~ ab2@8", E: "d2@7 ~ d2@4 c2@4", F: "b1@15 ~@17",
  G: "g1@9 ~@7", H: "c2 f2", I: "c2@14 ~@2 c2@15 ~", J: "f2@7 ~ f2@4 eb2@4", K: "d2@7 ~ d2@8", L: "eb2@15 ~ eb2@8 d2@8",
  M: "c2@7 ~ c2@8", N: "b1@15 ~ b1@8 g1@8", O: "c2@15 ~ f1@15 ~", P: "c2 ~@3",
})).s("gm_fretless_bass").gain(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@9 A@4 B@3 ~ C D E F G@2 H I J K L M N O@3 P Q ~@5 R@3 ~@6 S T@2 ~>".pickRestart({
  A: "[f3 eb3 d3@2 eb3 d3 c3@2, f4 eb4, ~@64 g4@31 ~@33]/4", B: "[d3@2 c3@2 b2@4 [g2,f3] ~@3, d4@3 ~]/3",
  C: "~@3 c3, ~ g3, ~@21 c4@8 ~@3", D: "db3@23 ~ c3@8, [bb3,db4,f4,bb4]@31 ~", E: "[bb2,bb3,db4,f4]@31 ~",
  F: "[bb3,db4,f4]@8 [db4,f4,bb4]@23 ~, [ab2,ab3]@31 ~", // Bbm Ab
  G: "[[g2,g3,db4,bb4]@31 c4@16 ~ [bb3,c4,g4]@14 ~@2, f4@29 ~@2 c3@33, ab4 ~@30 e4@30 ~@3]/2", // Gdim C7
  H: "[f2,f3,c4,f4,ab4]@3 ~@29", I: "~@15 b3@16 ~, g4, d4@7 ~", J: "[c3,c5]@5 ~@27",
  K: "~@7 f4@4 c5@4 ~ f4@4 c5@4 f4@3 c5@4 ~", L: "~@7 c5@4 ~ f5@4 c5@4 f5@4 c5@4 f5@3 ~",
  M: "~@7 f5@4 ~ c6@4 f5@4 c6@4 f5@3 ~ c6@4", N: "~@7 c6@4 f6@4 ~ c6@4 f6@4 c6@4 f6@4",
  O: "[~@21 b3@3 ~@8, ~@2 d4@7 ~@3, ~@31 g3@40 ~@25, ~@31 c4@31 ~@34, ~@13 g4@11 ~@8]/3",
  P: "[c4,g4]@4 [eb4,bb4]@4 g4@4 [eb4,bb4]@4 g4@4 [eb4,a4]@4 [c4,g4]@4 [eb4,a4]@3 ~, bb3@15 ~ a3@13 ~@3, ~@8 c4@13 ~@11", // C5 Eb5 Ebdim C5 Ebdim
  Q: "[c4,g4]@4 [eb4,bb4]@4 [c4,g4]@4 [eb4,bb4]@4 [c4,g4]@4 bb4@4 [c4,g4]@4 [eb4,bb4]@3 ~, bb3", // C5 Eb5 C5 Eb5 C5 Eb5
  R: "[~@31 b4@16 ~@8 d5@8 g4@6 ~@27, ~@24 a4@5 ~@19]/3", S: "~@12 g4@4 g4@6 b4@5 d5@5", T: "[~ c2, [c3,c5]]/2",
})).s("gm_string_ensemble_2").gain(0.24)

// chords · string ensemble 2 · soft notes
const string_ensemble_2_soft = note(`<
  ~@9 A B ~ C D E@2 F@2 ~@5 G@2 H I J K L@2 ~@3 M N O P@3 Q@8 ~@2 R@2 ~
>`.pickRestart({
  A: "ab4", B: "d4", C: "c4", D: "f4@31 ~", E: "[~@4 g3 ~@3, b3@5 ~@3]/2",
  F: "[~@32 c3@23 ~@9, ~@31 e4@28 ~@5, ~@31 c4@21 ~@12]/2",
  G: "[~ [d3,f4] [g2,g3]@2, ~@16 c4@31 ~@17, ~@16 ab4@13 ~@35]/2", H: "eb4@5 ~@27", I: "[ab3,c4,eb4]@31 ~",
  J: "[ab3,bb3,d4]@31 ~", K: "[g3,bb3,db4]@31 ~",
  L: "[[ab3,c4,eb4]@31 ~ f3@29 ~@3, ~@31 ab3@29 ~@4, ~@31 c4@16 ~@17]/2", M: "~@5 eb4 ~@2",
  N: "~@15 eb4@13 ~@4, [f4,ab4,c5]@29 ~@3", O: "[f4,bb4]@15 ~, f5@27 ~@5",
  P: "[[eb4,g4,bb4]@30 ~ [eb4,eb5]@30 ~@2 d5@24 c5@8 [g4,b4], ~@31 ab4@63 ~@2, ~@21 f4@11]/3", // Eb G
  Q: "[~@48 f4@15 eb4@6 ~@187, ~@31 c4@225, ~@31 eb4@21 ~@204]/8", R: "[~ eb4@15]/2",
})).s("gm_string_ensemble_2").gain(0.16)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@42 A B@2 C@2 D@2 E ~@3>".pickRestart({
  A: "~@11 [c4,c5]@4 [d4,d5]@4 ~ eb5@3 [f4,f5]@4 [g4,g5]@3 ~@2, ~@19 eb4@4 ~@9", // C D F G
  B: "[[ab4,ab5]@11 ab5@4 ~ [ab4,ab5]@11 f5@5 [bb4,bb5]@15 f5@4 ~ g5@3 ~ ab5@3 [bb4,bb5]@4 ~, f3 eb3 d3@2, ~@27 f4@20 f4@7 ~@10, ~@51 g4@4 ab4@4 ~@5]/2", // Ab Bb
  C: "[eb3@16 ~@11 eb5@5 [ab4,ab5]@16 eb5@3 ~ f5@3 [g4,g5]@4 ~ ab5@4, [eb4,g4,g5]@27 eb4@21 eb4@7 ~@9, ~ d3 c3@2, ~@51 f4@4 ~@4 ab4@4 ~]/2", // Ab G Eb
  D: "[d3@16 ~@11 d5@4 ~ [b2,g5]@32, [d4,f4,f5]@27 d4@27 ~@10, ~@16 c3@15 g4@33]/2", E: "g2 ~@3",
})).s("gm_string_ensemble_1").gain(0.32)

// chords · string ensemble 1 · soft notes
const string_ensemble_1_soft = note("<~@43 A B ~ C ~ D@2 ~@3>".pickRestart({
  A: "~@11 ab4@4 ~@17, f4@27 ~@5", B: "d4", C: "c4", D: "[~@4 [f3,g3] ~@3, b3@5 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.16)

// drums · snare
const snare = s("sd").struct("<~@26 A B@5 C B@6 D B@2 C ~@10>".pickRestart({
  A: "~ x!4 ~ x!2", B: "x!8", C: "x!3 ~@5", D: "x ~@3 x ~@3 x ~@4 x ~@2 x ~@3 x ~@3 x ~@3 x ~@3",
})).gain(0.3)

// drums · ride
const ride = s("rd").struct("<~@26 A@3 B A@2 C A B A@6 D C ~@10>".pickRestart({
  A: "x!4", B: "x ~@3 x ~@3 x ~@3 x ~@2 x", C: "x", D: "x ~@8 x ~@7 x ~@6 x ~@7",
})).gain(0.3)

stack(
  piano, electric_guitar_jazz, bass, string_ensemble_2, string_ensemble_2_soft, string_ensemble_1,
  string_ensemble_1_soft, snare, ride
)

More by Paoli