Strudelify

Come vorrei

Ricchi e Poveri

KeyD minorTempo92 bpm
0:00/0:00
// Come vorrei — Ricchi e Poveri
// 92 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 1 piano (copy of ch 8 synth strings 1)
// note: Full arrangement: all 68 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(92/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(`<
  ~@10 A B C D E F G H I J K@2 L M N O P J Q@2 R M S@2 T U V W X Y Z AA I J AB AC AD AE N AF AG AH AI@2 R M AJ AK AL ~@9
>`.pickRestart({
  A: "d2@10 ~@2 d2 ~@3 d2@16", B: "g2@9 ~@3 g2 ~@3 g2@8 d3@4 g2@4", C: "c2@10 ~@2 c2 ~@3 c2@16",
  D: "f2@9 ~@3 f2 ~@3 f2@8 c3@4 f2@4", E: "bb1@7 ~@5 bb1 ~@3 bb1@9 ~@3 a1@4", F: "g1@8 ~@4 g1@2 ~@2 g1@11 ~@5",
  G: "a1@9 ~@3 a1@2 ~@2 a1@13 ~@3", H: "d2@9 ~@3 d2 ~@3 d2@4 d3@4 a2@4 d2@4", I: "g1@8 ~@4 g1@2 ~@2 g1@13 ~@3",
  J: "c2@8 ~@4 c2 ~@3 c2@13 ~@3", K: "[f1@8 ~@4 f1 ~@3 f1@13 ~@2 d2@9 ~@4 d2 ~@3 d2@13 ~@3]/2",
  L: "g1@9 ~@3 g1@2 ~@2 g1@13 ~@3", M: "a1@9 ~@3 a1 ~@3 a1@16", N: "d2@9 ~@3 d2 ~@3 d2@11 ~ d2@2 a1@2",
  O: "d2@16 d3@8 a2@3 ~ d1@3 ~", P: "g1@4 ~@2 g1 ~ g1@4 ~@2 bb1 b1",
  Q: "[f1@8 ~@4 f1 ~@3 f1@10 ~@2 f1 ~@2 d2@9 ~@4 d2 ~@3 d2@10 ~@2 d2 ~@3]/2", R: "g1@9 ~@3 g1@2 ~@2 g1@10 ~@2 g1@2 ~@2",
  S: "[d1@52 ~@4 a2@3 ~ a1@3 ~]/2", T: "d2@9 ~@3 d2@2 ~@2 d2@15 ~", U: "g1@5 ~ g1 ~ g1@8",
  V: "c2@9 ~@3 c2@2 ~@2 c2@15 ~", W: "f1@5 ~ f1 ~ f1@8", X: "bb1@9 ~@3 bb1 ~@3 bb1@12 a1@4",
  Y: "g1@9 ~@3 g1@2 ~@2 g1@14 ~@2", Z: "a1@9 ~@3 a1@2 ~@2 a1@15 ~", AA: "d2@5 ~ d2 ~ d2@2 d3@2 a2@2 d2@2",
  AB: "f1@8 ~@4 f1 ~@3 f1@13 ~@3", AC: "d2@9 ~@3 d2 ~@3 d2@6 ~@2 f2@4 d2@4", AD: "g1@9 ~@3 g1@2 ~@2 g1@12 bb1@4",
  AE: "a1@9 ~@3 a1@2 ~@2 a1@12 db2@4", AF: "d2@4 d3@2 a2 d1", AG: "g1@8 ~@4 g1 ~@7 d2@4 g2@4 d2@4",
  AH: "c2@10 ~@2 c2 ~@3 c2@10 ~@2 c2@4", AI: "[f1@8 ~@4 f1 ~@3 f1@10 ~@2 f1@2 ~ d2@9 ~@4 d2 ~@3 d2@8 f2@4 d2@4]/2",
  AJ: "d1@12 ~@2 d2 a1", AK: "d1@20 a2@3 ~ a1@8", AL: "d2",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@10 A B C D E F G H I J K L M N O P I J K L M Q R S A B C D E F G H I J K L M N O P I J K L M Q R S A B C T E F U@2
  ~@2
>`.pickRestart({
  A: "~@16 f4@15 ~, d3@31 ~, ~@4 a3@27 ~, ~@8 d4@23 ~, ~@12 e4@19 ~",
  B: "~ g4, g2@31 ~, ~ bb3@7, ~@8 d4@23 ~, ~@3 f4@5", C: "~@16 e4@15 ~, c3@31 ~, ~@4 g3@7 ~ g3@19 ~, ~@8 c4@23 ~",
  D: "~ c4, f3, ~@4 c4@11 ~@17, ~@8 e4@23 ~, ~@3 a4@5", E: "~@4 f3@4 ~@8 d4@15 ~, bb2@31 ~, ~@8 bb3@23 ~, ~@12 f3@19 ~",
  F: "~@16 g4@15 ~, g2@31 ~, ~@4 bb3@8 bb3@19 ~, ~@8 d4@23 ~",
  G: "~@4 e3@4 ~@8 db4@15 ~, a2@31 ~, ~@8 a3@23 ~, ~@12 e3@19 ~",
  H: "~@16 gb4@15 ~, d3@31 ~, ~@4 a3@8 a3@19 ~, ~@8 d4@23 ~",
  I: "~@24 d4@7 ~, g2@31 ~, ~@4 bb3@8 bb3@8 bb3@11 ~, ~ d4@2 ~, ~@16 g4@15 ~",
  J: "~@12 g3@4 ~@8 g4@7 ~, c3, ~@4 g3@8 ~@4 e4@13 ~@3, ~@8 d4@21 ~@3, ~@20 g3@11 ~",
  K: "~@3 a3 ~@2 c4@2, f2@31 ~, ~@4 a3@8 ~@8 a3@11 ~, ~@8 c4@7 ~ e4@15 ~",
  L: "~@12 a3@4 ~@8 c4@7 ~, d3@31 ~, ~@4 a3@8 ~@4 f4@15 ~, ~@8 c4@9 ~@3 a3@11 ~",
  M: "~@24 d4@7 ~, g2, ~@4 bb3@8 bb3@8 bb3@11 ~, ~ d4@2 ~, ~@16 g4@9 ~@7",
  N: "~@16 a4@15 ~, a2@31 ~, ~ a3@7, ~ d4@3, ~@12 e4@19 ~", O: "~@12 f4@19 ~, d3@31 ~, ~@4 a3@27 ~, ~@8 d4@23 ~",
  P: "~@3 gb4@5, d3, ~ a3@7, ~ d4@3", Q: "~ e4, a2, ~ e3@2 e3@4 ~, ~ a3 ~@2",
  R: "~@16 [d4,f4]@15 ~, d3@31 ~, ~@4 a3@27 ~, ~ d4 ~@2, ~@12 e4@19 ~", // Dm
  S: "~@12 e4@4 [d4,f4]@15 ~, d3, ~ a3@7, ~ d4 ~@2", T: "~ c4, a3, ~@4 c4@11 ~@17, ~@8 e4@23 ~, ~@3 a4@5",
  U: "[~@5 e3@5 ~@9 db4@20 ~@25, ~ a2@38 ~@25, ~@10 a3@29 ~@25, ~@7 e3@12 ~@13]/2",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.3)

// bass · fretless bass
const bass_2 = note("<~@58 A B C D E F G H@3>".pickRestart({
  A: "d2@29 ~@3", B: "g2@3 d3 e3@2 f3 g2", C: "c3@15 ~", D: "e3@11 ~ e3@18 ~@2", E: "d3@31 ~", F: "g2@13 ~ g2@2",
  G: "a2@31 ~", H: "[~ a2@7 d2@60 ~@28]/3",
})).s("gm_fretless_bass").gain(0.48).pan(0.6)

// other · synth strings 1
const synth_strings_1 = note(`<
  A B A C D E F G H I A J K L M G N O ~@14 A B A C K E M G N O ~@14 A B A J K P M G Q R@3
>`.pickRestart({
  A: "d5@4 a5@4 e5@4 f5@4 d5@4 a5@3 ~ e5@4 f5@4", B: "d5 a5 e5 f5 d5 a5 e5 f5", C: "d5 bb5 e5 f5 d5 bb5 e5 f5",
  D: "c5 bb5 d5 e5 c5 bb5 d5 e5", E: "c5 a5 d5 e5 c5 a5 d5 e5", F: "bb4@4 a5@4 c5@4 d5@4 bb4@3 ~ a5@4 c5@4 d5@3 ~",
  G: "bb4@4 g5@4 c5@4 d5@3 ~ bb4@4 g5@4 c5@4 d5@3 ~", H: "a5@2 e5@2 d5@2 e5@2 a4@2 e5@2 d5@2 e5 ~",
  I: "f5@4 a5@4 e5@4 f5@4 d5@4 f5@4 e5@3 ~ f5@3 ~", J: "d5@4 bb5@4 e5@4 f5@4 d5@4 bb5@4 e5@4 f5@3 ~",
  K: "c5@4 bb5@4 d5@4 e5@4 c5@4 bb5@3 ~ d5@4 e5@4", L: "c5@4 a5@4 d5@4 e5@4 c5@4 a5@4 d5@4 e5@3 ~",
  M: "bb4@4 a5@4 c5@4 d5@4 bb4@4 a5@4 c5@4 d5@3 ~", N: "a4@2 e5@2 a5@2 g5@2 e5@2 a4@2 g4@2 a4 ~",
  O: "gb4@4 a4@4 e4@4 a4@4 d4@4 a4@4 d5@3 ~ a4@3 ~", P: "c5 a5 e5 d5 c5 a5 d5 e5",
  Q: "~ a4@4 e5@5 a5@4 g5@5 e5@5 a4@4 g4@4", R: "[~@2 e4@5 [a3,f4]@65 ~@24]/3",
})).s("gm_synth_strings_1").gain(0.33)

// chords · pad warm
const pad_warm = note(`<
  A@4 B C@4 D E@2 B F@5 G H@2 I J@2 K L G H@2 I M@2 ~@2 N@2 B O@4 L G H@2 I J@2 K L G H@2 I M@2 ~@2 N@2 B P@3 Q@3 ~
>`.pickRestart({
  A: "[~@2 [a3,d4,f4]@89 ~@4 [g3,bb3,d4,f4]@31 ~@2]/4", B: "[g3,c4,e4]@15 ~",
  C: "[[f3,a3,c4,e4]@31 [f3,bb3,d4]@32 [g3,bb3,d4]@31 ~@2 f4 ~@30 a3, ~@95 [a3,db4,e4]@32 ~]/4", D: "[d3,f3]",
  E: "[[d4,f4]@31 [g3,bb3,d4,f4]@31 ~@2, a3 ~@63]/2", // Dm Gm7
  F: "[[f3,a3,c4,e4]@31 [f3,bb3,d4]@32 [g3,bb3,d4]@31 ~ d4@17 ~ db4@14 ~ d4@32, ~@95 e3@33 ~@32, ~@95 a3@30 ~@2 [a3,gb4]@32 ~]/5", // Fmaj7 Bb Gm D
  G: "[g3,bb3,d4]@15 ~", H: "[[g3,c4,e4]@31 [f3,a3,c4,e4]@32 ~]/2", I: "[a3,d4,f4]@31 ~",
  J: "[[g3,bb3,d4,f4]@31 [a3,db4,e4,g4]@33]/2", K: "[a3,d4,f4]@15 ~", L: "[a3,d4,gb4]",
  M: "[[g3,bb3,d4,f4]@31 ~ e4@32, ~@31 [a3,db4,g4]@32 ~]/2", N: "[[a3,d4,f4]@31 [g3,bb3,d4,f4]@31 ~@2]/2",
  O: "[[f3,a3,c4,e4]@31 [f3,bb3,d4]@32 [g3,bb3,d4]@31 ~ d4@17 ~ db4@14 ~, ~@95 e3@33, ~@95 a3@30 ~@3]/4", // Fmaj7 Bb Gm
  P: "[[f3,a3,c4,e4]@31 [f3,bb3,d4]@32 [g3,bb3,d4]@31 ~@2]/3", // Fmaj7 Bb Gm
  Q: "[d4@19 ~ db4@18 ~ [a3,d4,f4]@44 ~@13, e3@13 ~@19, a3@3 ~@5]/3", // Dm
})).s("gm_pad_warm").gain(0.18)

// other · string ensemble 1
const string_ensemble_1 = note("<~@17 A@2 B@2 C@6 D@7 ~@7 A@2 B@2 C@6 D@7 ~@10>".pickRestart({
  A: "[~@31 [d3,d4]@8 [e3,e4]@8 [f3,f4]@8 [g3,g4]@8 [a3,a4]]/2", // D E F G A
  B: "[~@7 [bb3,bb4]@8 [c4,c5]@8 [d4,d5]@8 [c3,c4]@8 [d3,d4]@8 [e3,e4]@8 [f3,f4]@8 [g3,g4]]/2", // Bb C D C D E F G
  C: "[~@7 [a3,a4]@8 [bb3,bb4]@8 [c4,c5]@8 [d4,d5]@32 [e4,e5]@31 ~ [f4,f5]@32 [gb4,gb5]@31 ~ [d3,d4,d5]@8 [e3,e4,e5]@8 [f3,f4,f5]@8 [g3,g4,g5]@8 [a3,a4,a5]]/6", // A Bb C D E F Gb D …
  D: "[~@7 [bb3,bb4,bb5]@8 [c4,c5,c6]@8 [d4,d5,d6]@8 [c3,c4,c5]@8 [d3,d4,d5]@8 [e3,e4,e5]@8 [f3,f4,f5]@8 [g3,g4,g5]@8 [a3,a4,a5]@8 [bb3,bb4,bb5]@8 [c4,c5,c6]@8 [d4,bb4,d5,d6]@32 [e4,a4,e5,e6]@32 [f5,f6]@65]/7", // Bb C D C D E F G …
})).s("gm_string_ensemble_1").gain(0.28).pan(0.6)

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

// drums · rim
const rim = s("rim").struct("<~@10 [~ x ~ x]!15 ~@9 [~ x ~ x]!7 ~ [~ x ~ x]!7 ~@19>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~@25 A B@5 C ~@17 D B@5 C ~@12>".pickRestart({
  A: "~@6 x!2", B: "~ x ~ x", C: "~ x ~@2", D: "~@5 x!3",
})).gain(0.72)

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

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~@11 A ~ A ~ A ~ B ~ A ~ A ~ A ~@3 A ~ A ~@5 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~@14
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@6 x!2",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@17 A ~@13 B ~@9 C ~@6 D E ~@5 A ~@12>".pickRestart({
  A: "~@3 x", B: "~@11 x ~@4", C: "~@8 x!3 ~@5", D: "~@5 x!2 ~", E: "~@3 x ~@4",
})).gain(0.64)

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

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@5 B ~@9 C ~@6 D E ~@5 F ~@12>".pickRestart({
  A: "~ x ~@6", B: "~@3 x", C: "~ x ~ x ~@4", D: "~@5 x!3", E: "~@2 x ~@2 x ~@10", F: "~@5 x ~@2",
})).gain(0.64)

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

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

stack(
  bass, electric_guitar_clean, bass_2, synth_strings_1, pad_warm, string_ensemble_1, kick, rim, snare, low_tom, hihat,
  hihat_soft, mid_tom, open_hat, high_tom, crash, ride
)

More by Ricchi e Poveri