Strudelify

Nel cuore lei

Andrea Bocelli

KeyG minorTempo89 bpm
0:00/0:00
// Nel cuore lei — Andrea Bocelli
// 89 bpm, 4/4, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 82 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(89/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 · synth strings 1
const synth_strings_1 = note(`<
  A B@2 C A D A E F G A H I J K L M A D A E F G A H I N K O P@2 Q R Q S T U T V W@2 X Y@2 Z@2 AA AB@2 AC AD AE Q R Q S T
  U T V AF AG R AH AI AJ AI AK AL AM AN@2 AK AJ AO AP AQ AR@2 AS@2 ~
>`.pickRestart({
  A: "[g3,b3,d4]", B: "[[g3,c4,e4] [g3,d4], b3]/2", C: "[g3,b3,c4,e4]@15 ~", D: "[g3,b3,c4,e4]",
  E: "[g3,b3,e4]@3 [gb3,a3,d4]@5", F: "[g3,a3,c4,e4]", G: "g3 gb3, [a3,d4]", H: "[b3,d4,gb4]",
  I: "[g3,e4]@8 [gb3,d4]@7 ~, b3", J: "[b3,c4,e4]", K: "[g3,c4,eb4]", L: "d4@7 ~ e3@8, [g3,b3]@15 ~",
  M: "[g3,a3,d4]@15 ~", N: "[a3,c4,e4]", O: "d4 e3, [g3,b3]",
  P: "[[g3,c4,e4]@8 [d4,gb4]@7 [b3,d4]@12 ~ [c4,eb4]@4, a3@15 g3@16 ~]/2", Q: "[c4,eb4,g4] [bb3,d4,f4], ab3",
  R: "eb4 d4, [g3,bb3]", S: "[bb3,d4,f4] [c4,eb4], g3", T: "[ab3,c4,eb4,g4] [ab3,bb3,d4,f4]",
  U: "[bb3,d4]@7 ~ c4@8, g3@15 ~, ~@7 eb4@8 ~", V: "[g3,bb3,eb4]", W: "[[ab3,c4] bb3, [eb4,g4]]/2",
  X: "[c4,eb4] [bb3,d4,f4], g3", Y: "[[ab3,c4,g4]@16 ~@12 d4@3 ~, eb4@7 ~, ~ [bb3,f4]]/2",
  Z: "[eb4@15 ~ [d4,f4]@15 ~, [g3,bb3]@31 ~]/2", AA: "[c4,eb4]@8 [bb3,d4]@7 ~, g3",
  AB: "[[c4,eb4,g4] [b3,eb4,gb4], ab3@31 ~]/2", AC: "[bb3,eb4]@2 c4 eb4, g3, ~ bb3", AD: "eb4 d4, [bb3,f4]",
  AE: "bb3@11 ~ c4@4, [g3,eb4]", AF: "ab3 g3, [c4,eb4]", AG: "[ab3,c4,eb4,f4]", AH: "f4 e4, [g3,c4]", AI: "[a3,c4,f4]",
  AJ: "[bb3,d4,f4,a4]", AK: "[a3,d4,f4]@8 [g3,c4,e4]@7 ~", AL: "[bb3,d4,f4]", AM: "f4 e4, [g3,c4]@15 ~",
  AN: "[f4 [e4,g4], [a3,c4]]/2", AO: "[bb3,db4,f4]", AP: "c4@7 d4@8 ~, [a3,f4]", AQ: "f4 e4, [c3,bb3,d4]",
  AR: "[db2,bb3,db4,f4]/2", AS: "[[f2,a3,c4,f4], g3@15 ~]/2",
})).s("gm_synth_strings_1").gain(0.29)

// bass · electric bass finger
const bass = note(`<
  A B A B A B A C B D A E F G H I J A B A C B D A E F K H I L M N O P Q R S P T U V W X Y Z AA AB AC AD AE AF AG N O P Q
  R S P T AH AI AJ AK AL AM AN AO AP AQ AR AS AT AF AU AV B AW@2 AX@2 ~
>`.pickRestart({
  A: "g1", B: "c2", C: "e1 d1", D: "d2", E: "b1", F: "e1@4 d2@3 d2", G: "~@6 c3@9 ~, c2@15 ~", H: "eb2@15 ~",
  I: "d2 e2", J: "~ d1, d2@15 ~", K: "~@3 c3@5, c2", L: "a1@2 ~ d1, ~ d2", M: "g1@6 bb1 ab1", N: "ab1 bb1", O: "eb2 d2",
  P: "ab1@3 ab1 bb1@4", Q: "g1 c2", R: "ab1", S: "g1@3 g1 c2@2 bb1@2", T: "eb1", U: "ab1@5 ab1 eb1 ab1",
  V: "~@6 eb1@9 ~, eb2@15 ~", W: "c2@3 c2 bb1@4", X: "ab1@5 ~ ab1@2 c2@8", Y: "bb1@5 ~ bb1@10", Z: "eb2@3 eb1 eb1@4",
  AA: "g1@6 g1@9 ~", AB: "c2@5 ~ c2@2 bb1@6 bb1@2", AC: "ab1@3 ab1@5", AD: "b1@6 b1@9 ~", AE: "bb1@3 bb1 c2@4",
  AF: "bb1@3 bb1 bb1@4", AG: "eb2@6 eb1 ~ eb1@4 eb1@2 eb1@2", AH: "ab1 g1", AI: "f1@7 bb1", AJ: "eb2 eb1 d2 d1",
  AK: "c2@2 c1!2", AL: "f2 c2 f1@6", AM: "bb1", AN: "f2@6 f1 ~ f1@4 e1@3 ~", AO: "d1@5 ~ d1@2 c2@7 ~",
  AP: "bb1@5 ~ bb1@2 d2@5 ~ d2@2", AQ: "c2@6 c2@2 c2@7 ~", AR: "f1@6 f1 ~ f1@8", AS: "a1@3 a1 a1@4", AT: "d2 c2",
  AU: "db2", AV: "c2 d1", AW: "db1/2", AX: "f1/2",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@2 A@4 ~@17 B@2 C D E F G H I J I K L@3 M N@2 O P Q R S T U V W@2 X I J I K L@3 M Y@2 Z AA AB@2 AC@2 AD AE AF AG AH@2
  AI AJ AK AL@2 AM@2 ~
>`.pickRestart({
  A: "[g4@27 ~@5]/4", B: "[g3@16 gb3@15 ~, b3]/2", C: "e3@7 ~ d3@8, b3", D: "[g3,a3,c4,e4]", E: "[g3,c4,eb4]",
  F: "~ e3, [g3,b3,d4]", G: "d3!2, a3", H: "d4@3 c4, g3", I: "[c4,eb4,g4] [d4,f4,ab4]", J: "eb4 d4, [bb3,g4]",
  K: "d4@2 c5 d5 ~@2 eb5@2, [g4,bb4] [g4,c5]", L: "[[ab4,eb5] bb4 g4 c5 c5 [d5,f5], ~ f5@2 eb5@2 ~]/3", M: "[g4,eb5]",
  N: "[c4 bb3, eb4]/2", O: "c4@3 eb4 d4@4, g3", P: "[eb3,c4]", Q: "[bb2,f3]", R: "[eb3,g3]", S: "[g3,bb3,f4]",
  T: "eb4 d4, g4", U: "[ab3,eb4]", V: "[b3,eb4]", W: "[eb4@2 d4 eb4@3 f4@2, bb3]/2", X: "[g3,eb4]@6 f4 eb4",
  Y: "[[eb3,c5]@3 [f3,d5] g3@4 f3@8, ~@8 eb5@23 ~]/2", Z: "[bb4,bb5]@4 [c5,c6] [d5,d6] [eb5,eb6] [g5,g6]",
  AA: "[f5,f6]@8 [e5,g6]@7 ~", AB: "[f4@2 c5@2 d5 [d4,d5,d6] [g4,g5,g6] [e4,e5,e6], a6@5 ~@3]/2",
  AC: "[c6@2 a3 g3, c5]/2", AD: "[bb3,c4,f4]", AE: "f4 e4, c4", AF: "[f4,c5]", AG: "e5 c5, a4",
  AH: "[[d4,f4] [c4,e4] [bb3,d4]@2, d6]/2", AI: "c6 bb5 a5 g5, [f4,bb4]", AJ: "e5 f5 c5 d5", AK: "f4 e4, [g3,c4]",
  AL: "[bb3,db4,f4]/2", AM: "[g3,a3,c4,f4]/2",
})).s("gm_string_ensemble_1").gain(0.29)

// chords · epiano1
const epiano1 = note(`<
  A B A B A B A C D E A F G H I J K A B A C D E A F G L I J M N O P Q R S T U V W X Y Z AA V AB AC AD AE AF AG AH O P Q
  R S T U V AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ@2 BA@2 ~
>`.pickRestart({
  A: "[d4,g4,a4,d5]@15 ~", B: "[c4,e4,g4,b4]@15 ~", C: "[e4,g4]@6 d4@9 ~, b4@15 ~", D: "[g4,a4,c5,e5]@15 ~",
  E: "g4@6 ~@2 gb4@7 ~, [a4,d5]@15 ~", F: "[gb4,a4,b4,d5]", G: "[e4,g4] [d4,gb4], b3", H: "[b3,c4,e4,g4]@15 ~",
  I: "[c4,eb4,g4]", J: "d4 e4, [g4,b4]", K: "[g4,a4,d5]@15 ~", L: "[a3,c4,e4,g4]", M: "[g4,c5]@8 [d4,gb4]@7 ~, a4@15 ~",
  N: "[b3,d4,g4]@3 [g3,c4,eb4]", O: "[c4,eb4,g4,bb4] [bb3,d4,f4,ab4]", P: "eb4@8 d4@7 ~, [bb3,g4]@15 ~",
  Q: "[c4,eb4,g4,bb4]@8 [ab3,bb3,d4,f4]@7 ~", R: "[bb3,d4,f4,g4]@8 [c4,eb4,g4]@7 ~",
  S: "[c4,eb4,g4,bb4] [ab3,bb3,d4,f4]", T: "[bb3,d4,f4,g4] [c4,eb4,g4]", U: "[ab3,c4,eb4,g4] [bb3,d4,f4,ab4]",
  V: "[bb3,eb4,f4,g4]@15 ~", W: "[c4,eb4,g4,bb4]", X: "[bb3,eb4,f4,g4]", Y: "[c5,eb5]@7 ~ [bb4,d5]@8, g4",
  Z: "[eb4,f4,ab4,c5]@15 ~", AA: "eb4@11 ~ d4@3 ~, [f4,ab4,eb5]", AB: "[bb3,d4,f4,g4]@15 ~",
  AC: "[c4,eb4,g4] [bb3,d4,g4]", AD: "[ab3,c4,eb4,g4]@7 ~", AE: "[b3,eb4,ab4]", AF: "bb3@7 ~ c4@8, [eb4,g4]",
  AG: "eb4 d4, [f4,bb4]", AH: "bb4@3 c4, [eb4,g4]", AI: "[ab3,c4,eb4]@8 [c4,eb4,g4]@7 ~", AJ: "[c4,eb4,f4,ab4]@15 ~",
  AK: "[bb3,eb4,g4]@8 [bb3,d4,g4]@7 ~", AL: "f4@8 e4@7 ~, [g3,c4]@15 ~", AM: "[a3,c4,f4]", AN: "[bb3,d4,f4,a4]@15 ~",
  AO: "f4@3 e4, [a3,c4]", AP: "[a3,d4,f4]@8 [c4,e4,g4]@7 ~", AQ: "[d4,f4,bb4]", AR: "f4@8 e4@7 ~, [c4,g4]@15 ~",
  AS: "[c4,f4,a4]@15 ~", AT: "[a3,c4,e4,g4]@15 ~", AU: "[a3,d4,f4] [c4,e4,g4]", AV: "[bb3,d4,f4,a4]",
  AW: "[bb3,db4,f4]", AX: "c4 d4, [a3,f4]", AY: "f4 e4, [g3,bb3]", AZ: "[[bb3,db4,f4,ab4]@15 ~]/2",
  BA: "[[a3,c4,f4], g3@15 ~]/2", // F
})).s("gm_epiano1").gain(0.29).pan(0.6)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C D A B C E F G A ~@6 A B H ~ F G A ~@6 I J K L M N O P Q R S T U V W X Y@2 Z AA AB AC J K L M N O P Q AD AE AF AG
  AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU@2 AV@2 ~
>`.pickRestart({
  A: "~@2 a3 ~ a3@3 ~, d3@7 ~, ~ g3@3 ~@4, ~@3 d4@4 ~", B: "b3@3 ~",
  C: "~@8 a3@7 ~, ~@2 d3@13 ~, ~@4 g3@5 ~@7, ~@6 d4@9 ~", D: "~@6 e3@9 ~, b3@11 ~@5",
  E: "~@6 e3@2 gb3@7 ~, ~@4 d3@11 ~", F: "~@3 g3@4 ~, ~ g2@6 ~, ~@2 c3@5 ~",
  G: "~@6 g3@2 gb3@7 ~, d2 ~, ~@2 a2@11 ~@3, ~@4 d3@7 ~@5", H: "~@6 d4@2 a3@7 ~",
  I: "~@4 c4 b3 f4 eb4, g2@11 ~@5, ~ d3@5 ~@2, ~@4 g3@5 ~@7, ~@6 d4@5 ~@5",
  J: "~@6 [f4,g4]@2 ~@6 g4 ab4, ~ ab3@3 ~@4, ~ eb4 ~@2", K: "~@3 eb4 f4@2 eb4@2, g4 bb3 ~@2, ~ g3@3 ~@4",
  L: "~@2 eb4 f4 ab4@2 ~@2, ~ ab3@3 ~@4", M: "~@3 f4@2 g4@2 ~, g3@7 ~@9, ~ bb3@3 ~@4, ~@4 d4@5 ~@7",
  N: "~@2 ab4@2 ~ eb4 d4@2, c5 bb4, ~ eb4@3 ~@4", O: "~@4 bb3@3 ~@5 eb4@3 ~, [f4,bb4] [g4,c5]",
  P: "~@3 eb4 ~ d4 ~ d4, ab3!2, ~ c4@3 ~@4, ~ g4 ~ f4", Q: "~@6 eb3 ~@5 eb4@4, eb3@4 eb4@6 g3@5 ~, ~@2 g3@6 f3@7 ~",
  R: "ab2@7 ~", S: "~@6 g3@2 f3@7 ~, eb2@15 ~, ~@2 bb2@13 ~, ~@2 eb3@5 ~",
  T: "g3@2 ~@2 g3@2 eb4@2 ~@4 g3@3 ~, c4@4 ~@4 d4@7 ~, ~ c3@2 ~@5", U: "[g3,c4] ~",
  V: "~@2 ab3@2 ~@2 eb4@4 ab3@2 d4@3 ~, f4@5 ~@3, ~@4 f3@11 ~", W: "~ g3 ~ g3@4 ~, eb3@13 ~@3, ~@2 bb3@5 ~",
  X: "~@4 bb3@2 ~@2 bb3@2 g3@4 eb4 f4, d3@15 ~, ~ g3@3 ~@4, ~@3 f4@2 ~@3",
  Y: "[g4@4 f4@4 eb4@4 g3@2 ab3@10 ~@4 d4@2 eb4 ~]/2", Z: "eb4@7 ~@9", AA: "~ eb3 g3 eb4@4 f4",
  AB: "f4 ab3 bb3 eb4 f4@3 ~", AC: "~@2 ab3 eb4 eb3@2 f4 eb4, eb3@3 ~@5, ~ g3@2 ~@5",
  AD: "~@2 c3@2 ~@2 eb3@2 ~@2 c3@2 ~@3 eb4, ab2@3 ~ g2@3 [c3,c4], ~ ab3 ~ g3", // C
  AE: "~@2 c4@2 ab3@2 ~@2 ab3@5 ~ eb4 f4, f4@3 g4@4 ~",
  AF: "g4@2 ~@3 bb3@3 ~@6 g3@2, ~ f4@3 ~ d4@3, ~@3 g4@5 g4@8, ~@3 bb3",
  AG: "f4 ~ f4 ~@4 c5, ~ c4@3 e4@4, ~@3 c5@3 g4@2, ~@5 c4@3", AH: "~@2 g3 ~ g3@2 f3@2, f2, ~ f3@3 ~@4, ~@3 c4@5",
  AI: "~@2 a3@2 ~@6 bb3@2 f3@2 bb3 ~, bb2, ~ bb3 d4@2, ~@3 f4@5",
  AJ: "~@2 g3 ~@3 e2@2, f2@3 ~, ~@2 f3@6 g3@7 ~, ~@3 c4@5",
  AK: "~@6 f4@2 ~@2 c4@2 g3@2 c4 ~, d3 [c3,e4], ~ a3@3 ~@4, ~ d4 ~@2", // C
  AL: "~@2 d4 ~ d4 ~ d4 f4, bb2 d3, ~ bb3@2 f4@3 ~@2, ~@5 bb3@3",
  AM: "~@6 f4@2 ~ c4 ~@4 g3@2, c3, ~ g3@2 ~ g3@2 c4@2, ~@4 c4@5 ~ e4@6", AN: "~@4 g3@2 a3@9 ~, f2@7 ~, ~ c3@6 ~",
  AO: "~@8 g4@2 a4@5 ~, a2@15 ~, ~ a3@6 ~, ~@2 c4@5 ~, ~@6 e4@9 ~",
  AP: "~@3 f4 ~ c4 g3 c4, d3 [c3,e4], ~@2 a3@7 ~@7, ~ d4 ~@2", // C
  AQ: "~@2 bb3 d4 ~ bb3 d4 bb3, bb2, ~@2 d3@4 ~@2 f3@5 ~@3", AR: "~@2 c4 bb3@3 ~@2, [db3,f4]@7 ~, ~@2 db4@11 ~@3",
  AS: "~@2 a3 c4 d4@2 f4@2, ~@2 f3@6 d3@7 ~", AT: "f4 e4, g3",
  AU: "[~@2 db4 ~ db4 ~ db4 ~@2 db4 ~ db4 ~@2 f4@2, db2, ~ bb3@3 ~ bb3@2 ~ bb3@3 ~ bb3@4, ~@6 f4@6 ~@2 f4@4 ~@2 f4@5 ~@7]/2",
  AV: "[~@3 c4@13, f2, f3@15 ~, ~@2 g3@29 ~, ~ a3@7]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.44).pan(0.4)

// chords · shamisen
const shamisen = note("<A B C B A B C B A B A B C B A B C A B C B A B A B C B A B C B ~@8 D E F E G ~@38>".pickRestart({
  A: "[g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5]!2 ~ d5 [g4,d5] ~ [g4,d5] ~ [g4,d5] ~", // G5
  B: "~@2 [g4,d5] ~ [g4,d5] ~ [g4,d5]!2 ~ [g4,d5]!2 ~ [g4,d5] ~ [g4,d5] ~", // G5
  C: "[g4,d5] ~ [g4,d5] ~ [g4,d5] ~ [g4,d5]!2 ~ [g4,d5]!2 ~ [g4,d5] ~ [g4,d5] ~", // G5
  D: "[g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5]!2 ~ c5 [g4,c5] ~ [g4,c5] ~ [g4,c5] ~", // C5
  E: "~@2 [g4,c5] ~ [g4,c5] ~ [g4,c5]!2 ~ [g4,c5]!2 ~ [g4,c5] ~ [g4,c5] ~", // C5
  F: "[g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5]!2 ~ [g4,c5]!2 ~ [g4,c5] ~ [g4,c5] ~", // C5
  G: "[f4,c5] ~ [f4,c5] ~ [f4,c5] ~ [f4,c5]!2 ~ c5 [f4,c5] ~ [f4,c5] ~ [f4,c5] ~", // F5
})).s("gm_shamisen").gain(0.17).pan(0.7)

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

// drums · rim
const rim = s("rim").struct("<[~ x ~@2]!31 ~@8 [~ x]!13 ~@30>").gain(0.53)

// drums · snare
const snare = s("sd").struct("<~@31 [~ x]!8 ~@13 [~ x]!11 [~ x!7] [~ x]!10 ~@8>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct(`<
  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 C D A E C D A E C D A E@2 B D A E@2 B D A C D A E C D A
  E C D A E C D A E C D F E B D ~@8
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "~ x!6 ~", D: "x!3 ~ x ~ x!2", E: "x ~ x!5 ~", F: "~ x!7",
})).gain(0.33)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@31 A B ~ C A B ~ C A B ~ C@2 A B ~ C@2 A B ~ A B ~ C A B ~ C A B ~ C A B ~ C A B ~ C A B ~@8
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~ x ~@2", C: "~ x ~@6",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~@30 [~@6 x!2] ~@20 [~@6 x!2] ~@30>").gain(0.53)

// drums · mid tom
const mid_tom = s("mt").struct("<~@63 [~ x!7] ~@18>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A@2 ~@3 A@2 ~@6 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@2 B ~@7
>`.pickRestart({
  A: "~@7 x", B: "x",
})).gain(0.27)

// drums · high tom
const high_tom = s("ht").struct("<~@30 [~@5 x!3] ~@20 [~@5 x!3] ~@30>").gain(0.33)

// drums · crash
const crash = s("cr").struct("<~@31 A ~@3 A ~@3 A ~@12 A ~@3 A ~@3 A ~@3 A ~@3 A ~ A ~@11>".pickRestart({
  A: "x",
})).gain(0.4)

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

stack(
  synth_strings_1, bass, string_ensemble_1, epiano1, acoustic_guitar_nylon, shamisen, kick, rim, snare, hihat,
  hihat_soft, low_tom, mid_tom, open_hat, high_tom, crash, tambourine
)

More by Andrea Bocelli