Strudelify

Tutto di te

Nek

KeyD majorTempo121 bpm
0:00/0:00
// Tutto di te — Nek
// 121 bpm, 3/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (3/4 at bar 1, 4/4 at bar 151) are rendered on a constant 3/4 grid of one bar per cycle
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 synth choir (copy of ch 1 synth choir)
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(121/3)

// 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(`<
  ~@32 A B C B A B D@2 E F G H E F G I J F G K L F G M J F G K L F G N O P Q R O P S T U V W X U V W Y U V W X U V Z AA
  AB AC AD AE AF AG AH AI AB AC AD AJ AK ~@7 AL J F AM AN AO AP AQ AR U V W X U V AS AT U V W X U V AU AV U V W X U V AU
  AV U V W X U V AW AX AY@2
>`.pickRestart({
  A: "b1", B: "a1", C: "g1", D: "g1/2", E: "b1@6 ~@5 f#1@3 ~@2", F: "b1@3 ~", G: "e1@10 ~ e2@5",
  H: "e1@3 e1@2 e2@2 ~ e2@2 ~ e2@2 a1@3", I: "e1@2 ~ e1@2 e2@2 ~ e2@2 ~ e2@2 a1@3", J: "b1@7 ~@4 f#1@5",
  K: "b1@2 ~ d2@2 e2@4 ~@2 f#1@4 ~", L: "b1@7 ~@9", M: "e2@5 d2@2 ~ e2@5 a1@3", N: "g1 ~@2 g1@2 b1@3 b2@3 e1@2 f#1@2 ~",
  O: "g1@10 ~ g1@3 ~@2", P: "f#1@11 ~@2 g1@2 ~", Q: "e1@10 ~ e1@3 ~@2", R: "d2 ~@2 e2 ~ e2@7 ~@4",
  S: "e1@10 ~ e1@2 b1@2 ~", T: "~@8 a2@2 ~ a2@5, a1", U: "b1@9 ~@2 b1@2 ~@3", V: "a1@10 ~ e2@5", W: "g1@9 ~@2 g1@4 ~",
  X: "a1@8 a1@2 ~ a1@4 ~", Y: "~@5 d2@3 c#2@2 ~ a1@2 e1@3", Z: "g1@5 g2@2 ~ d2@2 ~ g1@5",
  AA: "g2@2 ~ f#2@2 g2@2 ~ g2@8", AB: "d2@10 ~@3 d2 ~@2", AC: "a1@8 a1 ~@2 a1@5", AD: "e1@8 ~@3 e1@2 f#1@2 ~",
  AE: "g1@5 ~@3 g1@2 ~ a1@2 b1@3", AF: "d2@8 d2@2 ~ d2@2 b1 ~@2", AG: "a1@8 a1 ~@2 a1@2 d2@2 ~",
  AH: "e2@11 ~@2 f#1@2 ~", AI: "g1@7 ~ a1@2 ~ b1@2 ~@3", AJ: "g1@7 ~ g1@2 ~ g1@5", AK: "g2@2 ~ f#2 ~ g2@5 ~ d2@5",
  AL: "~@3 a1@5 d1 ~@2 e1@4 ~", AM: "e1@15 ~", AN: "e1 ~@2 e1 ~ b1@2 ~ d2@2 ~ e2@4 ~", AO: "g1@8 g1 ~@2 g1@2 d2@3",
  AP: "g1@5 ~@3 d2@2 ~ g1@2 g1@2 ~", AQ: "a1@8 a1@2 ~ a1@3 ~@2", AR: "d3@3 c#3@2 a2@3 e2 ~@2 d2@2 c#2@2 ~",
  AS: "g1@7 ~ g2@2 ~ g2@4 ~", AT: "g2@2 ~ a2@2 a2@4 ~@2 g2 ~ a2@3", AU: "g1@8 g2@2 ~ g2@5",
  AV: "~@3 e2@2 f#2@2 ~ a2@3 f#2 ~ e2@2 ~", AW: "g2@7 ~ g2@2 ~@3 c#3 ~@2", AX: "d3@2 ~ e3 ~ b2@5 ~ a2@5",
  AY: "[b1@29 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.63)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B C D A B C D A B C D A B C D A@2 C D A B C D E F G H E F G I J K L M J N O P Q R S ~ Q R S ~ Q R S@2 Q R S T Q R
  S@2 Q R S T E U G H E F G I J K L M J N O K J K L M J K O V W X Y Z AA AB AC AD AA AB AE AD AF A B C D A@2 C D Q R S@2
  E@2 AG@2 J K L M J K O K AH AI AJ AI AH AI AJ AI AH AI AJ AI AH AI AJ AI AH AI AJ AI AH AI AJ AI AK@2
>`.pickRestart({
  A: "b2@3 [d3,a3]@2 b2 ~@7 [d3,a3]@3, ~@8 [d3,a3]@5 ~@3, ~@11 b2@4 ~", // D5
  B: "b2@2 ~ [d3,a3]@2 b2 ~@7 [d3,a3]@3, ~@8 [d3,a3]@5 ~@3, ~@11 b2@4 ~", // D5
  C: "~@3 [b2,f#3]@2 e2 ~@5 e2@2 [b2,f#3]@2 ~, e2@5 ~@3 [b2,f#3]@5 ~@3", // B5
  D: "~@3 [b2,e3]@2 e2 ~@7 [a2,e3]@2 ~, e2@5 ~@3 [b2,e3]@5 ~@3, ~@11 e2@4 ~", // E5 A5 E5
  E: "g2@2 ~ [g2,d3]@3 ~@2 d3@3 g2@2 [g2,d3]@2 ~, ~@4 g2 ~@3", // G5
  F: "~@3 [a2,d3]@3 ~@2 [a2,d3,e3]@3 f#2@2 [a2,d3,e3]@2 ~, f#2@7 ~@9", // D5 Asus4
  G: "~@3 [b2,e3]@2 ~@3 e2@2 e2 ~@2 [e2,b2,e3]@2 ~, e2@7 ~ [b2,e3]@5 ~@3", // E5
  H: "e2@3 [b2,e3]@2 e2 ~@2 [b2,e3]@5 [e2,b2,e3] ~@2, ~@8 e2@3 ~@5", I: "[a2,e3,a3]",
  J: "b2@3 ~@2 b2 ~@7 [d3,a3,d4]@3, ~@3 [d3,a3,d4]@5 [d3,a3,d4]@5 ~@3, ~@11 b2@4 ~", // D5
  K: "a2@2 ~@3 a2 ~@7 [e3,a3,c#4]@3, ~@3 [e3,a3,c#4]@5 [e3,a3,c#4]@5 ~@3, ~@11 a2@4 ~", // A
  L: "~@3 [b2,d3,g3]@2 g2 ~@5 g2@2 b2@2 ~, g2@5 ~@3 [d3,g3]@8, ~@8 b2@5 ~@3", // G G5
  M: "~@3 e3@2 a2 ~@7 [e3,c#4]@3, a2@5 ~@6 a2@4 ~, ~@3 [a3,c#4]@5 [e3,a3,c#4]@5 ~@3", // C#m A
  N: "a2@3 ~@2 a2 ~@7 [e3,a3,c#4]@3, ~@3 [e3,a3,c#4]@5 [e3,a3,c#4]@5 ~@3, ~@11 a2@4 ~", // A
  O: "~@5 g2 ~@2 [d3,g3]@8, g2@5 ~@11, ~@3 [d3,g3,b3]@5 b3@5 ~@3", P: "[g3,b3,f#4]@15 ~",
  Q: "~@3 [f#3,a3,d4]@2 ~@3 [f#3,a3,d4]@3 ~@2 [f#3,a3,d4]@3", R: "~@3 [f#3,a3,d4]@2 ~@3 [f#3,a3,d4]@5 [f#3,a3,d4]@3",
  S: "~@3 [d3,f#3]@3 ~@2 [d3,f#3]@3 ~@2 [d3,f#3]@3", T: "~@3 [d3,e3]@3 ~@2 [d3,e3]@3 ~@2 [d3,e3]@3",
  U: "f#2@3 [a2,e3]@3 ~@2 [a2,e3]@3 f#2@2 [a2,e3]@2 ~", V: "[d3,g3,b3]@15 ~", W: "[a3,d4]@7 ~",
  X: "[a3,d4]@9 ~@2 [a3,e4]@3 ~@2", Y: "[b3,f#4]", Z: "[g3,b3]@15 ~",
  AA: "[a3,d4]@4 ~ a3@2 ~ a3 ~@2 [a3,d4]@2 [a3,d4]@2 ~, ~@5 d4@5 ~@6", // D5
  AB: "[a3,c#4]@4 ~ [a3,c#4]@2 ~ [a3,c#4]@2 ~ [a3,c#4]@5", AC: "[b3,d4]@4 ~ [b3,d4]@2 ~ [b3,d4] ~@2 [b3,d4]@5",
  AD: "[b3,d4]@4 ~ [b3,d4]@2 ~ [b3,d4]@2 ~ [b3,d4]@5", AE: "[b3,d4]@4 ~ [b3,d4]@2 ~ [b3,d4] ~@2 a3@2 b3@2 ~, ~@11 d4@5",
  AF: "[b3,d4,f#4]", AG: "a2@2 ~ [a2,e3]@3 ~@2 e3@3 a2@2 [a2,e3]@2 ~, ~@4 a2 ~@3",
  AH: "~@3 [f#3,b3,d4]@4 ~ [f#3,b3,d4]@4 ~ [f#3,b3,d4]@2 ~", // Bm
  AI: "[e3,a3,c#4]@2 ~ [e3,a3,c#4]@4 ~ [e3,a3,c#4]@4 ~ [e3,a3,c#4]@2 ~", // A
  AJ: "[g3,a3,d4]@2 ~ [g3,a3,d4]@4 ~ [g3,a3,d4]@4 ~ [g3,a3,d4]@2 ~", AK: "[[f#3,b3,d4]@27 ~@5]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.4)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@32 A B C@2 D B E@2 F@2 ~ G H@2 ~ I J@2 ~@5 K L@2 ~ M@3 N O@2 ~@3 P@3 ~ Q R S T U V W X Q R S T U V W Y Z AA Z AB Z
  AA AC AB ~@2 AD AE AF AG@2 ~@14 AH AI AJ AK U V W T Q R S T U V W T AL AM AJ AN U V W AO Q R S AO U V W AO AP@2
>`.pickRestart({
  A: "b3@5 ~@6 c#5@5, ~@5 d4@8 ~@3", B: "[a3,a4]",
  C: "[~@5 b3@6 ~@2 b3@3 ~@11 a4@2 e4@3, g3@14 ~@2 [a3,b4]@15 ~, ~@5 d5@19 ~@8, ~@11 c#5@14 ~@7]/2", // Asus2
  D: "[b3,f#4]@5 b3@6 ~@2 b3@3, ~@5 d4@8 ~@3, ~@11 c#5@5", // B5
  E: "[~ [f#4,b4], [g3,b3,d4], ~@5 d5@19 ~@8, ~@11 c#5@14 ~@7]/2", F: "[~@11 f#4@19 ~@2, ~@5 d4@22 ~@5]/2",
  G: "d4@3 b3@2 b4@10 ~", H: "[~@27 a5@5, ~@5 d4@22 ~@5, ~@11 f#4@19 ~@2]/2", I: "d4@3 b3@2 ~@6 e4@2 d4@3, ~@5 b4@10 ~",
  J: "[c#4@13 ~@3]/2", K: "~@5 c#4@3 d4@3 e4@2 d4@2 ~", L: "[c#4@15 ~]/2", M: "[~@11 d4@2 e4@20 ~@15]/3",
  N: "~@5 f#4@3 g4@3 f#4@2 g4@2 ~", O: "[f#4@3 g4@2 f#4@14 ~@13]/2", P: "[~@11 b4@37]/3",
  Q: "~@5 [d4,d5]@5 ~@3 b3@3, b3@5 ~@6 c#5@5, ~@3 f#3@5 ~@8", R: "a4@8 a4@2 ~ e4@3 ~@2, a3",
  S: "~@5 [b3,d5]@5 ~@3 b3@2 ~, g3@7 ~, ~@11 c#5@5", T: "[b3,b4]@5 d4@6 a4@2 e4@3, a3@15 ~, ~@5 a4@4 ~@7",
  U: "b3@5 b3@6 ~@2 b3@3, ~@5 d4@8 ~@3, ~@11 c#5@5", V: "a4@7 ~ a4@2 ~ e4@5, a3",
  W: "~@11 c#5@5, [b3,d4], g3@3 ~, ~@5 d5@11", X: "b4@5 a4@5 ~@6, a3", Y: "[f#4,g4,b4]",
  Z: "[c#4,e4]@2 ~ [d4,f#4]@2 [c#4,e4]@2 ~ [d4,f#4]@3 [c#4,e4]@2 [d4,f#4]@2 ~", // C#m D C#m D C#m D
  AA: "[c#4,e4]@2 ~ [d4,f#4]@2 [c#4,e4]@2 ~ [d4,f#4]@2 ~ [e4,a4]@2 [d4,f#4]@2 ~", // C#m D C#m D A5 D
  AB: "[c#4,e4]@2 ~ [b3,d4]@2 [b3,d4]@11", AC: "[c#4,e4]@3 [d4,f#4]@2 [c#4,e4]@2 ~ [d4,f#4]@3 [c#4,e4]@2 [d4,f#4]@2 ~",
  AD: "~@11 a3 ~@2 b3 ~", AE: "g4@7 ~ f#3@2 ~ a3@2 f#3@3", AF: "d3@3 c#3 ~ d3@5 ~ e3@5", AG: "[b3@27 ~@5]/2",
  AH: "b3@5 d5@5 ~ c#5@5", AI: "a4 ~@10 e4@3 ~@2, ~ a4", AJ: "~@5 d5@5 ~ c#5@5, g3@7 ~", AK: "b4@5 a4@10 ~",
  AL: "b3@5 d5@4 ~@2 c#5@5", AM: "a4@8 a4@2 ~ e4@3 ~@2", AN: "b4@5 d4@6 a4@2 e4@3, ~@5 a4@4 ~@7",
  AO: "b4@5 d4@6 a4@2 e4@3, a3@15 ~, ~@5 a4@4 ~@7", AP: "[[b3,d4]@3 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.64).pan(0.6)

// chords · pad warm
const pad_warm = note("<~@88 A B C D A B E D A B C D F ~@12 G@2 H@2 ~@34>".pickRestart({
  A: "[a3,f#4]", B: "e4@3 f#4@2 e4@3 f#4@2 ~ a4@2 f#4@3, a3", C: "e4@2 ~ f#4@2 e4@3 f#4@3 e4@2 f#4@3, [g3,d4]",
  D: "[g3,b3,d4]", E: "e4@3 f#4@2 e4@3 f#4@3 e4@2 f#4@3, [g3,d4]", F: "[g3,d4,f#4]", G: "[g3,d4]/2",
  H: "[[a3,e4]@31 ~]/2", // A5
})).s("gm_pad_warm").gain(0.46).pan(0.6)

// other · sitar
const sitar = note(`<
  ~@40 A@2 ~ B ~@3 C D ~@6 E F@2 ~ G@2 ~ H I@2 ~@7 J K L M N O P Q J K L M N O P R ~@29 S O T U J K L M J K L M J K L M
  J K L M J K L M J K L M J K L M J ~
>`.pickRestart({
  A: "[~@11 f#5@21, ~@5 d5@21 ~@6]/2", B: "d4@3 b3@2 e4@10 ~", C: "~@11 e4@2 d4@2 ~", D: "b3@7 ~",
  E: "~@5 c#4@3 d4@3 e4@2 d4@2 ~", F: "[c#4@15 ~]/2", G: "[~@11 f#4@2 g4@16 ~@3]/2", H: "~@5 f#4@3 g4@3 f#4@2 g4@2 ~",
  I: "[f#4@3 g4@2 f#4@14 ~@13]/2", J: "b3@15 ~", K: "a3@7 ~", L: "g3@5 d4@4 ~@2 c#4@5", M: "b3@5 a3@10 ~",
  N: "~@11 c#4@5, ~@5 d4@11", O: "a3", P: "~@5 d4@6 c#4@5", Q: "~@5 a3@10 ~, b3@13 ~@3", R: "g3@13 ~@3",
  S: "b3@5 d4@5 ~ c#4@5", T: "g3@5 d4@5 ~ c#4@5", U: "b3@5 a3@11",
})).s("gm_sitar").gain(0.35).pan(0.6)

// chords · koto
const koto = note("<~@39 A B@2 C@2 D@2 E@2 ~@103>".pickRestart({
  A: "~@5 b4@3 c#5@3 d5@2 e5@3", B: "[f#5@20 ~ b4@3 c#5@3 d5@2 e5@3]/2",
  C: "[f#5@3 g5@2 f#5@16 b4@3 c#5@3 d5@2 e5@3]/2",
  D: "[f#5@3 g5@2 ~@6 b4@2 g4@3 ~@5 b4@3 [d4,c#5]@3 [b3,d5]@2 [g3,e5]@3, ~@5 f#5@15 ~@12, ~@8 d5@5 ~@3 f#4@8 ~@8]/2", // Dmaj7 Bm C
  E: "[[e3,f#5]@3 [g4,g5]@2 b4@3 d5@3 ~@2 a5@17 ~@2, ~@5 f#5 ~@5 f#5@17 ~@4]/2", // Esus2 G
})).s("gm_koto").gain(0.37)

// other · pad metallic
const pad_metallic = note(`<
  ~@32 A B C B A D E@2 ~@5 F G H I ~@15 C J K@2 L M A N A B C B A D L D A B C B A D O@2 ~@25 P@2 Q@2 A B C B A D L D A B
  C B A D L D A B C B A D L D A B C B A D L D R@2
>`.pickRestart({
  A: "b3@15 ~", B: "a3@7 ~", C: "g3@15 ~", D: "a3@15 ~", E: "[g3@31 ~]/2", F: "b3@13 ~@3", G: "~@11 d4@5",
  H: "f#4@13 ~@3", I: "c#4", J: "f#3@15 ~", K: "[e3@21 ~@11]/2", L: "g3", M: "f#3@7 ~", N: "a4@15 ~", O: "[g3@7 ~]/2",
  P: "[g3@29 ~@3]/2", Q: "[a3@5 ~@3]/2", R: "[b3@29 ~@3]/2",
})).s("gm_pad_metallic").gain(0.29).pan(0.4)

// other · distortion guitar
const distortion_guitar = note("<~@96 A@2 B C ~@7 D@2 ~@42>".pickRestart({
  A: "[f#4@3 e4@2 d4@5 ~ c#4 ~ c#4@6 a3@2 e3 f#3@5 e3@3 ~@2]/2", B: "e3@5 d3@6 ~@5", C: "b3@9 ~@7",
  D: "[~@11 e5@20 ~]/2",
})).s("gm_distortion_guitar").gain(0.53).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  ~@32 A@8 B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C B C A@5 D A@5 D
  A@2 ~@7 C@8 B C B C@5 B C B C B C B C B C B C B C B C B C B C B C D C A ~
>`.pickRestart({
  A: "x", B: "x ~@10 x ~@4", C: "x ~@7 x ~@2 x ~@4", D: "x!2",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@40 A@48 B@3 C B@3 C B@5 ~@7 D B A B@6 A@4 B@2 A C A@7 E A@14 B F ~@2>".pickRestart({
  A: "~@5 x ~@10", B: "~@5 x ~@5 x ~@4", C: "~@5 x ~@5 x ~@3 x", D: "~@11 x ~ x ~ x", E: "~@5 x ~@9 x",
  F: "~@5 x ~@5 x ~ x ~ x",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@92 A ~@6 B ~@9 B C ~ B ~ B ~ B ~@5 B ~@28>".pickRestart({
  A: "~@15 x", B: "~@13 x ~ x", C: "~ x ~ x ~@12",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@31 A ~@8 B@48 C D@3 C D@3 C D@4 E ~@7 F G H B H B I B F B@3 H B@3 F B@7 F B@7 F B@5 J B ~@2
>`.pickRestart({
  A: "~@8 x ~@2 x ~ x ~@2", B: "x ~@2 x ~ x ~@2 x ~@2 x ~@4", C: "~@5 x ~@5 x ~@4", D: "x ~@4 x ~@5 x ~@4",
  E: "~@5 x ~@10", F: "~@3 x ~ x ~@2 x ~@2 x ~@4", G: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~ x", H: "~@5 x ~@2 x ~@2 x ~@4",
  I: "~@3 x!3 ~@2 x ~@2 x ~@4", J: "x ~@2 x ~ x ~@2 x!2 ~ x ~@4",
})).gain(0.48)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@101 [x ~@2 x ~@4 x ~@2 x ~ x ~@2] [x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2]!7 ~@42>")
  .gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct("<~@140 [~@13 x ~ x] ~@6 [~@12 x!2 ~@2] ~@3>").gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@39 A@60 ~ A B ~@7 A ~ C A C A@7 C A@27 ~@2>".pickRestart({
  A: "~@13 x ~@2", B: "~@3 x ~@12", C: "x ~@12 x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@88 A ~@3 A ~@3 A ~@12 A ~@5 A ~ A ~@7 A ~@7 A ~@7 A ~@7 A ~>".pickRestart({
  A: "x",
})).gain(0.48)

// drums · ride
const ride = s("rd").struct(`<
  ~@16 A B A C A C B ~ D E D E D E D E@9 ~@11 F G@4 ~@3 F G@28 H D@3 I D@2 J H D@4 E D E D E@2 D@2 ~ G A ~ A ~ A ~ A ~
  G@2 C G K L G@24 ~@2
>`.pickRestart({
  A: "~@13 x ~@2", B: "x ~@2 x ~@9 x ~@2", C: "x ~@12 x ~@2", D: "x ~@4 x ~@5 x ~@4", E: "x ~@4 x ~@5 x ~ x ~@2",
  F: "x ~@2 x ~ x ~@10", G: "x", H: "~@5 x ~@5 x ~@4", I: "~@5 x ~@2 x!2 ~ x ~@4", J: "x ~@4 x ~@2 x!2 ~ x ~@4",
  K: "x ~@14 x", L: "x!2 ~@3 x ~@10",
})).gain(0.48)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@32
  [~@3 x ~@4 x ~@7]!8
  ~@48
  [x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2]!12
  [x ~@2 x!3 ~@2 x!2 ~ x ~ x ~@2]
  ~@50
>`).gain(0.48)

// … 19 more lines

More by Nek