Strudelify

Ti parlero d'amore

Ranieri

KeyD majorTempo88 bpm
0:00/0:00
// Ti parlero d'amore — Ranieri
// 88 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(88/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 · fretless bass
const bass = note(`<
  ~@13 A B C D A E F G H I J K J L M N O P Q R S T U V O P Q R W X Y Z AA Z AB A B C D A E F G H I J K J L M N O P Q R S
  T U V O P Q R W X Y Z AA Z AB AC@2
>`.pickRestart({
  A: "f#1", B: "g1", C: "d1", D: "e1@3 a1@5", E: "g1@3 f#1", F: "e1", G: "a1@3 a2@5", H: "g1@5 ~ g1@2 f#1@8",
  I: "e1@5 ~ e1@2 d1@2 d1 e1@2 ~ f#1@2", J: "g1@5 ~ g1@2 f#1@7 ~", K: "e1@6 a1@7 ~ a1 ~", L: "e1@5 ~ e1@2 d1@6 a1 b1",
  M: "c2@5 ~ c2@6 ~@2 g1 g#1", N: "a1@6 ~@2 d2@2 e2@2 f#2@3 ~", O: "g1@5 ~ g1@2 g#1@5 ~ g#1@2", P: "a1@5 ~ a1@6 g1@3 ~",
  Q: "f#1@5 ~ f#1@2 a#1@5 ~ a#1@2", R: "b1@5 ~ b1@5 ~ a1@3 ~", S: "g#1@3 g#1 ~@2 g#1@7 ~ g#1@2",
  T: "g1@3 g1 ~@2 g1@5 ~ f#1@4", U: "e1@5 ~ e1@3 ~ e1@2 e2@2 e1@2", V: "a1@3 ~ a1@2 ~@2 d1@2 e1@2 f#1@2 ~@2",
  W: "g#1@5 ~ g#1@7 ~ g#1@2", X: "g1@5 ~ g1@7 ~ g1@2", Y: "e1@5 ~ e1@2 a1@5 ~ a1@2", Z: "d1@5 ~ d1@8 ~@2",
  AA: "g1@5 ~ g1@9 ~", AB: "e1@2 ~ e1 ~@2 a1@3 ~ a1@6", AC: "[~@2 d1@23 ~@7]/2",
})).s("gm_fretless_bass").gain(0.64)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@21 A@2 B@2 C@2 D E ~@27 C@2 B@2 C@2 D E ~@21>".pickRestart({
  A: "[~ b3 ~@3 a3 ~@3 g3 ~@3 f#3 ~ f#3, g3@3 b3@2 ~ d4@2 e3@3 g3@2 ~ d4@2, ~@4 d4@4 f#3@6 a3@4 ~@2 d4@4 d3@7 ~]/2",
  B: "[~ b3 ~@3 a3 ~@3 g3 ~ g3 ~ g3 ~ g3, g3@8 f#3@7 ~ e3@6 ~@2 a2@7 ~, ~@4 d4@4 ~@4 d4@5 ~@3 d4@5 ~@3 d4@4, ~@3 b3@2 ~@2 a3@2 ~@7]/2",
  C: "[~ b3 ~@3 a3 ~@3 g3 ~@3 f#3 ~ f#3, g3@8 f#3@7 ~ e3@7 ~ d3@7 ~, ~@4 d4@4 ~@4 d4@5 ~@3 d4@5 ~@3 d4@4, ~@3 b3@2 ~@2 a3@2 ~@2 g3@2 ~@3]/2",
  D: "~ g3 ~ g3 ~ g3 ~ g3, c3@6 ~@2 c3@7 ~, ~ d4 ~ d4", E: "~@4 d4@2 ~@2 d3@2 e3@2 f#3@3 ~, a2@3 ~@5, ~ g3@2 ~@5",
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.8)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@21 A@2 B@2 A@2 C D E F G H@3 I J K L M N O P Q R S T@2 ~@8 A@2 B@2 A@2 C D E F G H@3 I J K L M N O P Q R S U@2 V@2
>`.pickRestart({
  A: "[b3 a3 g3 f#3, d4@31 ~]/2", B: "[b3@8 a3@8 g3@6 [a3,e4]@9 ~, d4@11 ~@5]/2", C: "e4@8 d4@4 e4@3 ~, g3@15 ~",
  D: "[g3,e4]@3 ~ [a3,d4,f#4] [b3,e4,g4] [d4,f#4,a4] ~", E: "[d4,d5] [e4,e5]", F: "[a4,a5]@3 [c#5,c#6]",
  G: "[b4,b5] [a#4,a#5]", H: "[[b4,b5]@39 ~ [b4,b5]@4 [a4,a5]@4]/3", I: "[g4,g5]@4 [g4,g5] [a4,a5] [b4,b5]@2",
  J: "[d5,d6]@4 [c#5,c#6]@4 [f#4,f#5]@2 [g4,g5]@2 [a4,a5]@3 ~", K: "[b4,b5]", L: "[c#5,c#6]@3 [b4,b5]",
  M: "[a#4,a#5]@3 [c#5,c#6]", N: "[d5,d6]", O: "~ [f#5,f#6] [d5,d6] [b4,b5]@5", P: "~ [b5,b6] [f#5,f#6] [d5,d6]@5",
  Q: "[b4,g5]", R: "[f#3,a3]", S: "[g3,b3]@2 [f#3,a3] [e3,g3]",
  T: "[[f#3,a3]@13 ~ [a3,f#4]@4 [g3,e4]@4 [f#3,d4]@4 [e3,c#4]@5 ~]/2", // F#m D C D C#m
  U: "[[f#3,a3]@13 ~ [a3,f#4]@4 [g3,e4]@4 [f#3,d4]@4 [e3,c#4]@6]/2", V: "[~@2 [f#3,d4]@23 ~@7]/2",
})).s("gm_string_ensemble_2").gain(0.56).pan(0.4)

// chords · piano
const piano = note(`<
  A B@2 C@2 D ~@4 E F G H I H J H K L M N O N P N Q R S T U V W X Y Z AA T U V W X Y AB AC@2 AD@2 H I H J H K L M N O N
  P N Q R S T U V W X Y Z AA T U V W X Y AB AC@2 AE@2 AF@2
>`.pickRestart({
  A: "~@7 d5", B: "[c#5 d5 c#5 d5 c#5 a4 f#4 b4@7 ~ d5]/2",
  C: "[c#5@2 d5@2 c#5@2 d5@2 c#5@2 a4@2 f#4@2 f#4@4 e4@4 d4@4 c#4@5 ~]/2", D: "[f#2,a3,d4,f#4]", E: "~@12 b4 a4 g4 f#4",
  F: "g4@10 ~@2 g4 f#4 e4 d4", G: "e4@3 a4@3 a4@8 ~@2", H: "[f#2,a3,d4]", I: "~@6 b3@9 ~, g2, ~ d3@7, ~ g3@3",
  J: "~@10 a4@5 ~, e2@6 d4@9 ~, ~ e3@7, ~ g3@3, ~@8 a2@7 ~", K: "~@12 b4 a4 g4 f#4, g2, ~ d3@7, ~ g3@3, ~@6 b3@9 ~",
  L: "~@6 d4@6 g4 f#4 e4 d4, e2@15 ~, g4@5 ~@3, ~ e3@7, ~ g3@3",
  M: "~@3 a4@3 [g3,d4,e4]@10, a2@15 ~, [g3,d4,e4]@5 ~ a4@8 ~@2", N: "[g2,g3,b3,d4] [f#2,f#3,a3,d4]",
  O: "[e2,g3,b3,d4]@8 [d2,f#3,a3,d4]@2 [d2,f#3,a3,d4] [e2,g3,b3,d4]@3 [f#2,f#3,a3,d4]@2", // Em7 D Em7 D
  P: "[e2,g3,b3,d4]@3 [a2,g3,b3,d4]@5", Q: "[e2,g3,b3,d4] [d2,f#3,a3,d4]", R: "[c2,e3,g3,d4]@5 ~ [c2,e3,g3,d4]@9 ~",
  S: "[a2,g3,a3,d4]@5 ~@3 [d2,a3,d4,f#4]@2 [e2,b3,d4,g4]@2 [f#2,d4,f#4,a4]@4", // Dsus4 D Em7 D
  T: "[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2@2 [g#2,g#3,b3,e4]@4 [g#3,b3,e4]@2 g#2@2, g2 ~@3", // G E
  U: "[a3,c#4,e4]@3 ~ [a3,c#4,e4]@2 a2@2 [a3,c#4,e4]@2 g2@2 [a3,c#4,e4]@2 g2@2, a2 ~@3", // A
  V: "[b3,c#4,f#4]@3 ~ [b3,c#4,f#4]@2 f#2 ~ [a#3,c#4,f#4]@3 ~ [a#3,c#4,f#4]@2 f#2@2, f#2 ~ f#2 ~", // Bsus2 F#
  W: "[b3,d4,f#4]@3 ~ [b3,d4,f#4]@2 b2@2 [b2,b3,d4,f#4]@4 [a2,b3,d4,f#4]@3 ~, b2 ~@3", // Bm Bm7
  X: "[b3,d4,f#4]@3 ~ [b3,d4,f#4]@2 ~@2 [b3,d4,f#4]@3 ~ [b3,d4,f#4]@2 g#2@2, g#2@4 ~@2 g#2@7 ~@3", // Bm
  Y: "[g2,b3,d4,f#4]@2 [b3,d4,f#4] ~ [b3,d4,f#4] g2 [b3,d4,f#4] g2, ~@3 g2@2 ~@3", // Gmaj7 Bm
  Z: "[b3,d4,g4]@3 ~ [b3,d4,g4]@2 e2@2 [b3,d4,g4]@2 e2@2 [b3,d4,g4]@2 e2@2, e2 ~@3", // G
  AA: "[a2,a3,d4,f#4]@3 ~ [a2,a3,c#4,e4]@3 ~ [d2,f#3,a3,d4]@2 [e2,g3,b3,e4]@2 [f#2,a3,d4,f#4]@3 ~", // D A D Em D
  AB: "[b3,d4,g4]@3 ~ [b3,d4,g4]@2 e2@2 [b3,d4,g4]@3 ~ [b3,d4,g4]@2 [a2,d5]@2, e2 ~ a2 ~", // G D5
  AC: "[c#5@2 d5@2 c#5@2 d5@2 c#5@2 a4@2 f#4@2 ~@2 [g3,b3,d4]@5 ~ [g3,b3,d4]@8 d5@2, [f#3,a3,d4]@5 ~ [f#3,a3,d4]@8 b4@14 ~@4]/2", // G D
  AD: "[c#5@2 d5@2 c#5@2 d5@2 c#5@2 a4@2 f#4@2 [a3,f#4]@4 [g3,e4]@4 [f#3,d4]@4 [e3,c#4]@5 ~, [f#3,a3,d4]@5 ~ [f#3,d4]@9 ~@17, ~@3 a3@3 ~@10]/2", // D C D C#m D
  AE: "[c#5 d5 c#5 d5 c#5 a4 f#4 [a3,f#4]@2 [g3,e4]@2 [f#3,d4]@2 [e3,c#4]@3, [f#3,a3,d4]@5 ~ [f#3,d4]@9 ~@17, ~@3 a3@3 ~@10]/2", // D C D C#m D
  AF: "[~@2 [d2,f#3,a3,d4]@23 ~@7]/2", // D
})).s("gm_piano").gain(0.35).pan(0.4)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~
  [~@10 a3!2 d4!2 a3@2]!20
  ~@23
  [~@10 a3!2 d4!2 a3@2]!12
  ~@23
  [~@10 a3!2 d4!2 a3@2]!3
  ~@3
>`).s("gm_electric_guitar_muted").gain(0.32).pan(0.1)

// chords · pad warm
const pad_warm = note(`<
  ~ A B A C D B A E D F G H D B A E D F G H I@2 J@2 I@2 K@2 L M N O@3 P Q L M N O@3 P R S R T D B A E D F G H I@2 J@2
  I@2 K@2 L M N O@3 P Q L M N O@3 P R S R U@3
>`.pickRestart({
  A: "[d3,f#3,a3,d4,a4]", B: "[g2,g3,b3,d4,a4]", C: "[g2,g3,b3,d4,a4]@3 d4@2 c#4@3, ~@3 [a2,e3,a3,a4]@5",
  D: "[f#2,d3,a3,d4,a4]", E: "[e2,g3,b3,d4,a4] [a2,e3,a3,d4,b4]", F: "g2@3 f#2, [g3,b3,d4,a4]", G: "[e2,g3,b3,d4,a4]",
  H: "[a2,e3,a3,d4,b4]", I: "[[g3,b3] [f#3,a3] [e3,g3] [d3,f#3], d4]/2",
  J: "[[g3,b3]@4 [f#3,a3]@4 [e3,g3]@3 [g3,a3]@5, d4]/2", K: "[[e3,g3,d4]@21 ~@11]/2", L: "[d3,g3] [e3,g#3], b3",
  M: "[e3,a3,c#4]", N: "b3 a#3, [f#3,c#4]", O: "[f#3,b3,d4]/3", P: "[g3,b3,e4]", Q: "[f#3,a3,d4]@2 [e3,a3,c#4] ~@5",
  R: "[f#3,d4,a4]", S: "[b3,d4,a4]", T: "[b3,d4,a4]@3 d4@2 c#4@3, ~@3 [e4,a4]@5",
  U: "[[b3,d4,a4]@6 d4@4 c#4@8 [d4,f#4,a4]@23 ~@7, ~ [e4,a4]@2 ~@5]/3", // Bm7 D A5
})).s("gm_pad_warm").gain(0.32).pan(0.7)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@29 A@2 B C@2 D E F A@2 B C@2 D E ~@20 A@2 B C@2 D E F A@2 B C@2 D E ~@6
>`.pickRestart({
  A: "[~@3 b3@2 ~@2 b3@2 ~@2 a3@5, ~ g4@3 ~ g#4@3 ~ a4@7, ~@4 d4@5 ~@3 e4@5 ~@3 e4@12]/2",
  B: "~@3 f#3@5, ~ f#4@7, ~ c#4@3", C: "~@3 b3@5, ~ f#4@7, ~ d4@3", D: "~@3 d4@5, ~ b4@7, ~ f#4@3",
  E: "~@3 g3@5, ~ e4@7, ~ d4@3", F: "[a3,d4]@3 ~ [a3,c#4]@3 ~ d3@2 e3@2 f#3@3 ~",
})).s("gm_distortion_guitar").gain(0.48)

// drums · kick
const kick = s("bd").struct("<~ A@20 B C B C B C A D E@15 A@12 B C B C B C A D E@15 A@4 F ~>".pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~ x ~@2", D: "x", E: "x ~@2 x ~@2 x ~@3 x ~@5", F: "~ x ~@6",
})).gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@21 A@3 ~ A@3 B C@7 D C@11 A@11 ~ A@3 B C@7 D C@7 ~@6>".pickRestart({
  A: "~@3 x", B: "~@3 x ~@4", C: "~ x ~ x", D: "~ x!3",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@3 B ~@14 C ~@15 A ~@3 B ~@14 C ~@6>".pickRestart({
  A: "~@7 x", B: "~@4 x!3 ~", C: "~@15 x",
})).gain(0.64)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@13 A B A C A B A D A B E C A B E ~@16 F@4 A B A B A B A B A B E C A B E ~@22
>`.pickRestart({
  A: "~@5 x ~ x", B: "~@3 x ~ x ~ x", C: "~@3 x ~ x ~@2", D: "~@7 x", E: "~ x ~@3 x ~ x", F: "~@3 x ~@4",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A ~@3 B ~@7 C ~@6 D ~@15 A ~@3 B ~@7 C ~@6 D ~@6>".pickRestart({
  A: "~@3 x", B: "~@4 x!3 ~", C: "~@7 x", D: "~@13 x!2 ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@16 A ~@3 B ~@8 C D@6 E ~@6 F ~ F@3 ~@16 C D@6 E ~@6 F ~@6>".pickRestart({
  A: "~@3 x", B: "~@3 x ~ x ~@2", C: "~ x!3", D: "x!4", E: "x!3 ~", F: "~@5 x ~@2",
})).gain(0.48)

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@29 A B@6 C ~@27 A B@6 C ~@13>".pickRestart({
  A: "~@3 x ~ x ~ x", B: "~ x ~ x ~ x ~ x", C: "~ x ~ x ~@4",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~@21 A ~@3 A ~ B ~ A ~@7 A ~@6 A ~@2 C A ~@7 A ~@3 A ~ B ~ A ~@7 A ~@10 D ~
>`.pickRestart({
  A: "x", B: "~@3 x ~@4", C: "~@3 x", D: "~ x ~@6",
})).gain(0.56)

// drums · ride
const ride = s("rd").struct("<~@37 A B@5 C ~@28 A B@5 C ~@6>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!5 ~@3",
})).gain(0.8)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@29
  [x ~ x!11 ~ x!2]!14
  [x ~ x!11 ~@3]
  ~@20
  [x ~ x!7 ~ x!3 ~ x!2]!14
  [x ~ x!7 ~ x!3 ~@3]
  ~@6
>`).gain(0.32)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@29 [~ x ~@11 x ~@2]!15 ~@20 [~ x ~@7 x ~@3 x ~@2]!15 ~@6>").gain(0.24)

// drums · congas
const congas = s("conga:18").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@22 A ~ A ~ A ~ A ~ A ~ A ~ A ~@18 A ~@4
>`.pickRestart({
  A: "~@7 x",
})).gain(1.79)

// drums · congas
const congas_2 = s("conga:33").struct("<~ [~@5 x ~@2]!27 ~@20 [~@5 x ~@2]!15 ~@16 [~@5 x ~@2]!4 ~@2>").gain(1.79)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ A@27 B ~@19 A@15 B ~@15 A@4 ~@2>".pickRestart({
  A: "x!4", B: "x!2 ~@2",
})).gain(2.43)

// drums · cabasa · soft notes
const cabasa_soft = s("cabasa:4").struct("<~ A@27 B ~@19 A@15 B ~@15 A@3 C ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~@6", C: "~ x ~ x ~ x ~@2",
})).gain(1.22)

// … 8 more lines

More by Ranieri