Strudelify

Mi hai preso il cuore

Ron

KeyD majorTempo138 bpm
0:00/0:00
// Mi hai preso il cuore — Ron
// 138 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 157 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(138/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(`<
  ~@12 A@3 B@4 ~@5 C@3 ~ D@3 E@2 F@2 G@4 H@2 I@2 J@4 K@2 L@2 F@2 M@2 K@2 N@2 F@2 M@2 O@2 P@2 Q@2 R@2 S@2 T@2 U@2 V@2 W@2
  X@2 F@2 G@4 H@2 I@2 J@4 K@2 L@2 F@2 M@2 K@2 N@2 F@2 M@2 O@2 P@2 Y@2 Z@2 AA@2 AB@2 Y@2 Z@2 AC@2 AD@2 F@2 M@2 K@2 N@2
  F@2 M@2 O@2 P@2 F@2 M@2 K@2 ~@2
>`.pickRestart({
  A: "[~@10 c4@5 ~ d3@32, ~@4 e3@11 [f2,a#2]@32 ~]/3", // A#5
  B: "[e3@16 e3@6 ~ e3 ~@8 [f1,c3]@31 ~, g2@3 [a#1,d3] ~@4, ~@22 f3@2 ~@6 a3@33 ~]/4", // F5 A#
  C: "[e3@6 f3@6 g3@3 ~ [a#1,d3,f3]@32, ~@15 a#2@32 ~]/3", // A#
  D: "[~@10 c4@5 ~ [a#1,a#2,d3]@32, f3@15 f2@32 ~, ~@3 e3@5 ~@16]/3", E: "[[g2,c3,e3]@7 ~]/2", F: "[d2,d3,f#3,a3]/2",
  G: "[~ [f#1,e3], [b1,d3] ~, f#3@15 f#3@16 ~, a3@7 a3@8 ~, ~@26 c#4@33 ~@5]/4", // F#7 Bm
  H: "[d3@26 d3@2 [d3,g3]@3 ~, [g1,b3]@31 ~, g3@7 ~, ~@26 a3@5 ~]/2", I: "[[d2,a2,d3,f#3]@31 ~]/2",
  J: "[~ [f#1,e3], [b1,d3,f#3]@15 f#3@16 ~, a3@7 a3 ~@8, ~@13 c#4@16 ~@3]/4", K: "[g1,d3,g3,b3]/2",
  L: "[e2,e3,g#3,b3]/2", M: "[~@13 a4@3, [b1,d3,f#3,a3], ~@9 a4@4 ~@3, ~@11 c#4@5]/2", N: "[a1,e3,a3,c#4]/2",
  O: "[~ g1@31, [d3,g3,b3]]/2", P: "[[a1,e3,a3,c#4]@31 ~]/2",
  Q: "[c3@3 c3@5 ~@5 f3@3, f2, f3@11 a3@5, a3@5 c3@3, ~@8 c3 c4@7]/2", R: "[~@3 c4, [c2,c3,e3,g3]@31 ~]/2",
  S: "[d3@3 d3, [d2,f3,a3]]/2", T: "[e3@16 ~@10 g3@5 ~, [a1,c#3]@31 ~, a2@5 a2@3, ~ e3, ~@22 f3@9 ~]/2",
  U: "[a#2@3 a#2, [a#1,d3,f3]]/2", V: "[~@13 c4@3, [f1,c3,f3], ~@11 e3@5]/2", W: "[a#1,a#2,d3,f3]/2",
  X: "[c2,c3,e3,g3]/2", Y: "[f2,f3,a3,c4]/2", Z: "[~@13 c5@3, [d2,f3,a3,c4], ~@9 c5@4 ~@3, ~@11 e4@5]/2",
  AA: "[a#1,f3,a#3,d4]/2", AB: "[c2,g3,c4,e4]/2", AC: "[~ a#1@31, [f3,a#3,d4]]/2", AD: "[[c2,g3,c4,e4]@31 ~]/2",
})).s("gm_piano").gain(0.39)

// bass · fretless bass · "bass"
const bass = note(`<
  ~@21 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@2 P Q R S T U V W X Y Z S AA U AB V ~@16 G@2 H@2 I@2
  J@2 K@2 L@2 M@2 N@2 O@2 P Q R S T U V W X Y Z S AA U AB V AC AD AE AF AG AH AI AJ AK AL AM AF AN AH AO AI P Q R S T U
  V W X Y Z S AA U AB V P Q R S T AP ~@2
>`.pickRestart({
  A: "d2/2", B: "[a1@29 ~@3]/2", C: "[a#1@31 ~]/2", D: "[f1@31 ~]/2", E: "a#1/2", F: "c2/2", G: "[d2@29 ~ d2 ~]/2",
  H: "[b1@31 ~]/2", I: "[f#1@31 ~]/2", J: "[g1@31 ~]/2", K: "[a1@28 ~@2 a1 ~]/2", L: "[b1@29 ~ b1 ~]/2",
  M: "[f#1@28 ~@2 f#1 ~]/2", N: "[g1@28 ~@2 g1 ~]/2", O: "[g#1@31 ~]/2", P: "d1@11 ~ d1 ~@3", Q: "d1@9 ~ d1 ~@3 d1 ~",
  R: "b1@15 ~", S: "b1@14 a1 ~", T: "g1@11 ~ g1 ~@3", U: "g1@13 ~ g1 ~", V: "a1@15 ~", W: "a1@10 g1@2 f#1 ~ e1@2",
  X: "d1@13 ~ d1 ~", Y: "d1@10 d1 ~@3 d1 ~", Z: "b1@13 ~@3", AA: "g1@7 ~", AB: "a1@13 ~ a1 ~", AC: "f1@11 ~ f1 ~@3",
  AD: "f1@9 ~ f1 ~@3 f1 ~", AE: "d2@15 ~", AF: "d2@14 c2 ~", AG: "a#1@11 ~ a#1 ~@3", AH: "a#1@13 ~ a#1 ~",
  AI: "c2@15 ~", AJ: "c2@10 a#1@2 a1 ~ g1@2", AK: "f1@13 ~ f1 ~", AL: "f1@10 f1 ~@3 f1 ~", AM: "d2@13 ~@3",
  AN: "a#1@7 ~", AO: "c2@13 ~ c2 ~", AP: "g1@13 ~@3",
})).s("gm_fretless_bass").gain(0.48)

// chords · pad warm · "warmpad"
const pad_warm = note(`<
  A@3 B@2 C@2 D@2 E@2 F@2 E@2 G@2 H@2 B@2 C@2 D@2 E@2 F@2 E@2 I@2 J@8 K@6 L@2 M@2 N@2 O@2 L@2 P@2 Q@2 R@2 L@2 P@2 H@2
  B@2 S@2 P@2 E@2 F@2 E@2 T@2 J@8 K@6 L@2 M@2 N@2 O@2 L@2 P@2 Q@2 R@2 L@2 U@2 V@2 W@2 X@2 Y@2 Z@2 AA@2 X@2 AB@2 N@2 O@2
  L@2 P@2 Q@2 R@2 L@2 U@2 N@2 O@2 L@2 ~@2
>`.pickRestart({
  A: "[a3,c4,f4]/3", B: "[g3,c4,e4]/2", C: "[a3,d4,f4]/2", D: "[g3,a3,c#4,e4]/2", E: "[f3,a#3,d4]/2", F: "[f3,a3,c4]/2",
  G: "[~@3 a#3, g3, c4@23 ~@9, ~ e3@15]/2", H: "[a3,c4,f4]/2", I: "[e3,g3,c4]/2",
  J: "[a3@32 b3@31 a3@32 ~ g3@32, [f#3,d4]@58 ~@5 d4@59 ~@6, ~@63 f#3@31 ~ b3@32 ~]/8", // D
  K: "[a3 b3 a3, [f#3,d4]@91 ~@5]/6", L: "[g3,b3,d4]/2", M: "[g#3,b3,e4]/2", N: "[[a3,d4,f#4]@31 ~]/2",
  O: "[b3,d4,f#4]/2", P: "[a3,c#4,e4]/2", Q: "[a3,d4,f#4]/2", R: "[[b3,d4,f#4]@31 ~]/2", S: "[[a3,d4,f4]@31 ~]/2",
  T: "[[g3,c4,e4]@31 ~]/2", U: "[[a3,c#4,e4]@15 ~]/2", V: "[[c4,f4,a4]@31 ~]/2", W: "[d4,f4,a4]/2", X: "[a#3,d4,f4]/2",
  Y: "[c4,e4,g4]/2", Z: "[c4,f4,a4]/2", AA: "[[d4,f4,a4]@31 ~]/2", AB: "[[c4,e4,g4]@15 ~]/2",
})).s("gm_pad_warm").gain(0.4)

// other · string ensemble 2 · "strings"
const string_ensemble_2 = note(`<
  ~@17 A@4 B@4 C@2 D@2 C@2 E@2 F@8 ~@7 G@3 H@2 I@4 J@2 H@2 K@4 J@2 L@2 M@2 N@4 O@6 P@2 F@8 ~@7 G@3 H@2 I@4 J@2 H@2 K@4
  J@2 Q@2 R@4 S@2 Q@2 T@4 S@2 H@2 I@4 J@2 H@2 K@4 J@2 H@2 I@4 ~@2
>`.pickRestart({
  A: "[[f3,a3]@31 [g3,c4]@33]/4", B: "[[a3,d4]@31 [a3,c#4]@33]/4", C: "[f3,a#3]/2", D: "[f3,a3]/2", E: "[g3,c4]/2",
  F: "[a3,d4]/8", G: "[~@5 [b3,e4]@11]/3", H: "[e6@3 a6]/2", I: "[d6@18 a6@4 c#6@5 a6@4 b5@33]/4", J: "a5/2",
  K: "[d6@9 a6@2 c#6@2 a6@2 b5@17]/4", L: "f4/2", M: "e4/2", N: "[d4@31 c#4@32 ~]/4",
  O: "[~@16 d5@4 e5@3 f5@4 g5@4 a3@32 a#3@33, a#3@31 f5@21 ~@44]/6", P: "c4/2", Q: "[g6@3 c7]/2",
  R: "[f6@18 c7@4 e6@5 c7@4 d6@33]/4", S: "c6/2", T: "[f6@9 c7@2 e6@2 c7@2 d6@17]/4",
})).s("gm_string_ensemble_2").gain(0.25).pan(0.6)

// other · distortion guitar · "e.guit"
const distortion_guitar = note(`<
  ~@28 A B@2 ~@12 C@3 ~@12 D@3 ~@5 E@5 ~ F G@2 ~@15 H@3 I@4 ~@11 D@3 ~@5 J ~@7 K@3 ~@5 L ~@7 D@3 ~@5 J ~@8
>`.pickRestart({
  A: "~@5 e4@4 ~@2 e5@4 ~", B: "[f5@15 ~]/2", C: "[~ e6@33 ~@14]/3", D: "[d5 c#5 d5 e5@2 a5@16 ~@3]/3",
  E: "[~ c#5 d5 e5@2 a5@18 g5@16 ~]/5", F: "~@6 g5@3 a5@3 a#5@3 ~", G: "[a5@7 ~]/2", H: "[~@5 d5@3 ~ b4@2 ~@2 a4@35]/3",
  I: "[~@11 d6@46 ~@7]/4", J: "~ c#5 d5 e5@2 a5@3", K: "[f5 e5 f5 g5@2 c6@16 ~@3]/3", L: "~ e5 f5 g5@2 c6@3",
})).s("gm_distortion_guitar").gain(0.4).pan(0.4)

// other · overdriven guitar · "distorta"
const overdriven_guitar = note("<~@43 A@2 ~@22 B C D@2 ~ E@4 ~ F@3 ~ G@2 ~@74>".pickRestart({
  A: "[~@4 b3@2 d4@2 [d4,f#4]@21 ~@3, ~ a3@2 ~@13]/2", B: "~@13 a4@2 ~", C: "a#4@2 ~ c5@2 ~ d5@2 ~ c5@7",
  D: "[~ g4@10 ~@5]/2", E: "[~ f4@2 ~ g4@2 ~ a4 ~@2 a#4 ~@2 a4@20 ~ d4 ~ e4 ~ f4@17 ~@9]/4",
  F: "[~@13 f4 ~ a4@18 ~@15]/3", G: "[~@2 c5@13 ~]/2",
})).s("gm_overdriven_guitar").gain(0.48)

// chords · acoustic guitar nylon · "a.guit"
const acoustic_guitar_nylon = note(`<
  ~@33 A@4 B@2 C@2 D@4 E@2 F@3 ~@26 G H@2 ~ I J@2 A@4 B@2 C@2 K@4 E@2 L@3 ~@57
>`.pickRestart({
  A: "[~@4 d4@2 e4@12 ~@2 d4@2 e4@9 ~, ~@4 d3@27 ~@5 a3@26 ~@2]/4", B: "[~@2 d4 e4@5, ~ d3@7]/2",
  C: "[~@6 e4@9 ~, ~@2 d3@13 ~, ~@4 d4@11 ~]/2", D: "[~@4 d4@2 e4@11 ~ a3@2 d4@2 e4@10, d3@5 ~@3]/4",
  E: "[~ a3 d4 e4@5, d3@9 ~@23]/2", F: "[d3@2 a3@2 d4@2 e4@11 ~@7]/3", G: "d4@3 ~ e4@2 ~@2 f4@3 g4@4 ~",
  H: "[f4@9 c4@3 ~ c4@19]/2", I: "d4@3 ~@2 e4@2 ~ f4@2 g4@5 d4", J: "[e4@3 ~]/2",
  K: "[~@4 d4@2 e4@11 ~ a3@2 d4@2 e4@10]/4", L: "[~@2 a3@2 d4@2 e4@11 ~@7]/3",
})).s("gm_acoustic_guitar_nylon").gain(0.38).pan(0.8)

// chords · acoustic guitar nylon · "a.guit" · soft notes
const acoustic_guitar_nylon_2 = note("<~@35 A ~@5 B ~@43 A ~@5 C@3 ~@3 D ~@59>".pickRestart({
  A: "~ d3 ~@14", B: "~@4 a3@3 ~@9", C: "[~@4 a3@3 ~@41, d3@5 ~]/3", D: "d3@5 ~@11",
})).s("gm_acoustic_guitar_nylon").gain(0.19).pan(0.8)

// other · taiko drum · "perc"
const taiko_drum = note(`<
  ~@17 A B A B A B A B C B D E D E D E A B A B A B A B A B A B A B A B A B ~@32 A B A B A B A B A B A B A B A B A B ~@56
>`.pickRestart({
  A: "~@4 a5@2 ~@2 f5@2 ~@2 d5 ~@3", B: "~@4 a5@2 ~@2 f5 ~@7", C: "~@4 a#5@2 ~@2 f5@4 d5 ~@3",
  D: "~@4 a5@2 ~@2 f5 ~@3 d5 ~@3", E: "~@4 a5 ~@3 f5 ~@7",
})).s("gm_taiko_drum").gain(0.32)

// drums · kick
const kick = s("bd").struct(`<
  ~@21 A ~ A ~ A ~ A ~ A ~ A ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C D E F C F E ~ C D E F C F E G C D E F C F E H C D E
  F C F I ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ C D E F C F E ~ C D E F C F E ~ C D E F C F E ~ C D E F C F E ~ C D E F
  C F E ~ C D E F C F E ~ C D E F C ~@3
>`.pickRestart({
  A: "x", B: "x!2 ~@6", C: "x ~@2 x", D: "~@5 x!2 ~", E: "x ~@6 x", F: "~@7 x", G: "~@5 x!3", H: "~@5 x ~@2",
  I: "x ~@5 x!2",
})).gain(0.36)

// drums · rim
const rim = s("rim").struct("<~@34 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@33 B ~ B ~ B ~ B ~ B ~ B ~ B ~@60>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.3)

// drums · snare
const snare = s("sd").struct(`<
  ~@34 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ B ~ A ~ A ~ A ~ C ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ D ~@14 E ~ F G ~
  A ~ A ~ A ~ C ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ C ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ C ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "x", B: "x ~@4 x!11", C: "x ~@2 x!2 ~ x!2", D: "x ~@2 x!2 ~@3", E: "~ x ~@2", F: "~@4 x ~@2 x", G: "~ x!2 ~ x!4",
})).gain(0.42)

// drums · low tom
const low_tom = s("lt").struct("<~@49 A B ~@15 C ~@31 D E ~@16 F ~@15 F ~@15 F ~@8>".pickRestart({
  A: "~@5 x ~@2", B: "x", C: "~@2 x!3 ~@3", D: "x ~@2 x", E: "~@3 x ~@4", F: "~@10 x!3 ~ x!2",
})).gain(0.3)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@33 [~ x ~ x]!122 ~@2>").gain(0.36)

// drums · mid tom
const mid_tom = s("mt").struct("<~@49 A ~@8 B ~@38 B C D E ~@7 B ~@7 F ~@7 B ~@7 F ~@7 B ~@7 F ~@8>".pickRestart({
  A: "~@2 x ~@2 x ~@2", B: "~@5 x ~@2", C: "~ x", D: "~ x ~@2", E: "~@4 x!4", F: "~@2 x!3 ~ x!3 ~@7",
})).gain(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@98 A B ~@15 C D ~@14 C D ~@14 C D ~@8>".pickRestart({
  A: "~@3 x ~@4", B: "~ x ~@6", C: "~@14 x!2", D: "x",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~@51 A ~@7 A ~@6 B ~@7 C A ~@25 A ~@7 A ~@6 B A ~@7 A ~@6 B A ~@7 A ~@6 B A ~@7
>`.pickRestart({
  A: "x", B: "~@5 x!3", C: "~@5 x ~@2",
})).gain(0.3)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@20 A ~ A ~ A ~ A ~ A ~ A ~ A@2 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3
>`.pickRestart({
  A: "~ x",
})).gain(0.3)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@33 [x!4]!122 ~@2>").gain(0.91)

// drums · shaker
const shaker = s("sh").struct("<~@33 [~ x ~ x ~ x ~ x]!121 [~ x ~ x ~ x ~@2] ~@2>").gain(0.18)

stack(
  piano, bass, pad_warm, string_ensemble_2, distortion_guitar, overdriven_guitar, acoustic_guitar_nylon,
  acoustic_guitar_nylon_2, taiko_drum, kick, rim, snare, low_tom, pedal_hat, mid_tom, high_tom, crash, tambourine,
  cabasa, shaker
)

More by Ron