Strudelify
KeyD♭ majorTempo132 bpm
0:00/0:00
// Peppino — Antonello Venditti
// 132 bpm, 4/4, key C# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(132/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(`<
  ~@28 A B A C D E A F G H I J D K L M A B A C D E A F G H I J D K N@2 O C P@2 Q R@2 M A B A C D E A F G H I J D S A B A
  C D E A F G H I J T@2 ~@15
>`.pickRestart({
  A: "db2@13 ~ db2 ~", B: "db2@15 ~", C: "db2@13 ~@3", D: "ab1@13 ~ ab1 ~", E: "ab1@7 ~ c2@7 ~", F: "db2@7 ~ c2@7 ~",
  G: "bb1@13 ~ bb1 ~", H: "bb1@7 ~ ab1@7 ~", I: "gb1@13 ~ gb1 ~", J: "gb1@15 ~", K: "ab1@7 ~ bb1@7 ~",
  L: "c2@13 ~ c2 ~", M: "c2", N: "[c2@31 ~]/2", O: "eb2@7 ~ c2@5 ~ db2 ~", P: "[eb2@7 ab1@4 db2@4 ~]/2",
  Q: "eb2@8 c2@5 ~ db2 ~", R: "[db2@8 bb1@6 b1@9 ~ b1@5 ~ c2 ~]/2", S: "ab1@7 ~@9", T: "[ab1@31 ~]/2",
})).s("gm_fretless_bass").gain(0.5)

// other · french horn
const french_horn = note(`<
  ~@4 A@2 B@2 A@2 B@2 ~@13 C D@2 ~@40 E@2 F@2 G@2 H@2 I@2 J@2 K@2 L@2 M@2 N@2 O@4 P@2 Q@2 ~@15
>`.pickRestart({
  A: "[ab3@5 ~@2 ab3@20 ~ ab3@2 ~@2]/2", B: "[ab3@3 ~ gb3@2 ~ bb3@25]/2", C: "[ab2,c3] ~ [bb2,db3] ~",
  D: "[[c3,eb3]@31 ~]/2", E: "[f4@3 ab4]/2", F: "[gb4@3 ab4]/2", G: "[eb4@3 gb4]/2", H: "[f4@31 ~]/2",
  I: "[db5@24 c5@6 ab4 ~]/2", J: "bb4/2", K: "eb4/2", L: "[~@8 f4@19 ~ f4@2 ~@2]/2", M: "[f4@4 eb4@2 gb4@25 ~]/2",
  N: "[c4@23 ~ c4@2 db4@2 eb4@2 ~@2]/2", O: "[eb4@3 ~ db4@2 ~@14 db4@2 c4@4 db4@4 bb3@26 ab3@8, ~@3 f4@12 ~@17]/4",
  P: "gb3/2", Q: "c4/2",
})).s("gm_french_horn").gain(0.25).pan(0.7)

// other · music box
const music_box = note(`<
  ~@12 A ~ B@2 C@2 D ~ E F G@2 H I@3 J K L@2 M N O@2 P Q R@2 S@2 T U V W X@2 Y Z AA@2 AB@2 AC ~ AD@2 AE@2 ~@8 AF AG AH ~
  AI AJ AK@2 AL AM AN@2 AO@2 AP ~@7 AL AM AN@2 AO@2 AP ~@14
>`.pickRestart({
  A: "~@6 f4 ~ f4!3 ~ ab4@2 ~ ab4", B: "[eb4@2 ~ eb4 ~ eb4 ~@2 f4 gb4@10 ~@13]/2",
  C: "[~@4 c5 ~ c5 ~ c5 ~@2 c5!3 ~ db5@3 ~@2 db5@7 ~ db5@2 eb5 ~]/2", D: "db5@3 ~ ab4 ~ ab4@10",
  E: "~@6 db4 ~ db4@3 ~ db4 ~ eb4@2", F: "~@2 eb4@9 ~@3 db4@2", G: "[~ db4@3 ~ f4@2 eb4@4 ~ bb3@9 ~@11]/2",
  H: "~@3 c5 ~@2 c5!2 c5@2 ~@4 c5 ~", I: "[c5@3 ~ db5@2 eb5@3 ~ eb5@4 ~ eb5@24 ~@9]/3", J: "~@6 f4 ~@2 f4!3 ~ ab4@2 ~",
  K: "ab4@9 ~ ab4@2 ~ ab4 ~ bb4", L: "[~ ab4@3 gb4 ~ ab4@14 ~@12]/2", M: "~@6 c5 ~ c5@2 ~@2 c5 ~ eb5@2",
  N: "~@2 eb5@8 ~ db5@2 ~ eb5@2", O: "[~ db5@2 ~ ab4 ~ ab4@12 ~@14]/2", P: "~@6 db4 ~ db4@3 ~ db4 eb4@3",
  Q: "~@2 eb4@11 db4@2 ~", R: "[eb4@2 ~ eb4@6 ~ bb3@11 ~@11]/2",
  S: "[~@6 c5 ~ c5@3 ~ c5 ~ c5@5 ~ db5@2 eb5@3 ~ eb5@6]/2", T: "eb5@15 ~", U: "~@4 ab5 ~ ab5 ~ ab5@3 ~ gb5@3 ~",
  V: "f5@13 ~@3", W: "~@8 f5@3 ~ gb5@3 ~", X: "[f5@3 ~ eb5@2 gb5@16 ~@10]/2", Y: "~@13 eb5 ~ eb5",
  Z: "~ eb5 eb5@3 ~@2 eb5@3 ~ eb5@2 ~ f5@2", AA: "[eb5@3 ~ db5@2 f5@16 ~@10]/2",
  AB: "[~@6 db5 ~ db5@2 ~@2 db5 ~ eb5@4 db5@3 ~@5 db5 ~ db5 eb5@2 ~]/2", AC: "eb5@3 bb4@2 ~@3",
  AD: "[~@6 c5 ~ c5@3 ~ c5 ~ c5@5 ~ db5 ~ db5@5 ~ f5@3 ~]/2", AE: "[eb5@9 ~@7]/2", AF: "~@6 f4 ~ f4@3 ~ f4 ~ ab4@2",
  AG: "~@2 ab4@2 ~@8 ab4 ~ bb4 ~", AH: "ab4@3 ~ gb4@2 bb4@2 ~@2 bb4@2 ~@4", AI: "~@8 c5@2 ~ c5 ~@2 c5 ~",
  AJ: "eb5@3 ~ eb5@5 ~ db5@3 ~ eb5@2", AK: "[db5@2 ~ ab4 ~ ab4 ~@2 ab4@12 ~@12]/2", AL: "~@8 db4@2 ~ db4@2 ~ db4 ~",
  AM: "eb4@2 eb4@5 db4", AN: "[eb4@2 ~@2 eb4@8 bb3@13 ~@7]/2",
  AO: "[~@6 c5 ~ c5@3 ~ c5 ~ c5@6 db5@2 ~@2 eb5@3 ~@3 f5@2]/2", AP: "db5 ~",
})).s("gm_music_box").gain(0.46)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@2 B C A@2 B C A@2 B C A@2 B C D@2 E@4 F@2 G H I@2 J@2 K@6 ~ L M@6 N@4 O@4 P@2 Q@2 R@4 ~@8 A@2 B C D@2 E@4 F@2 G S
  ~@4 T@4 U@2 V@2 W@2 ~@9 X@6
>`.pickRestart({
  A: "~@2 ab3 ~ db4 ~ f4 ~ eb4 ~ f4 ~ db4 ~ ab4 ~", B: "~@2 bb3 ~ eb4 ~ gb4 ~ f4 ~ gb4 ~ eb4 ~ bb4 ~",
  C: "~@2 bb3 ~ eb4 ~ gb4 ~ f4 ~ gb4 ~ eb4 ~ db4 ~",
  D: "~@2 [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~", // Cm
  E: "~@2 [db4,f4] ~ [db4,f4] ~ [db4,f4] ~ [db4,f4] ~ [db4,f4] ~ [db4,f4] ~ [db4,f4] ~", // Db
  F: "~@2 [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~ [bb3,eb4] ~", // Eb5
  G: "[c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~", // Cm
  H: "[c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [db4,f4] ~ [db4,f4] ~ [db4,f4] ~ [db4,f4] ~", I: "[c4,ab4]/2",
  J: "[[ab3,db4], f3@15 ~]/2", K: "[[gb3,bb3]@31 ~ c4@32 [db4,f4]@32, eb4@2 ~, ~@31 ab3@64 ~]/6", L: "~ ab5",
  M: "[gb5@15 ~ gb5@6 ab5@6 bb5@4 ~@16 c4@7 ~ db4@7 ~ eb4@31 ~, eb4 ~, ~@32 ab5@63 ~]/6",
  N: "[f6@3 ab6 gb6@4, db6@63 ~]/4", O: "[eb6@31 [db6,f6]@32 ~, c6@15 ~@17]/4", P: "[[bb5,db6]@3 [ab5,c6]]/2",
  Q: "[bb5@11 c6@3 db6@2, gb5]/2", R: "[eb5,ab5]/4", S: "[c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~ [c4,eb4] ~@9",
  T: "[eb6@18 db6 f6@13]/4", U: "[db6@6 c6 ab5]/2", V: "[bb5@22 c6@5 ~ db6@4]/2", W: "[ab5@31 ~]/2", X: "[db2@23 ~]/6",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.7)

// other · tremolo strings
const tremolo_strings = note("<~@101 A@8 ~@2>".pickRestart({
  A: "[~@15 ab4@49, ~@3 ab5@61]/8",
})).s("gm_tremolo_strings").gain(0.1)

// other · french horn
const french_horn_2 = note("<~@4 A@2 B@2 A@2 B@2 ~@74 C@2 D@2 E@2 F@2 G@2 ~@15>".pickRestart({
  A: "[ab3@6 f4@21 ~ f4@3 ~]/2", B: "[f4@3 ~ eb4@2 ~ gb4@25]/2", C: "[eb4@23 ~ eb4@2 f4@2 gb4@3 ~]/2",
  D: "[gb4@2 f4 ab4@9 bb4@2 c5@2]/2", E: "[db5@6 c5 ab4]/2", F: "[bb4@11 c5@3 db5@2]/2", G: "[ab4@31 ~]/2",
})).s("gm_french_horn").gain(0.22).pan(0.4)

// chords · pan flute
const pan_flute = note("<~@60 A B C D A E F G ~@43>".pickRestart({
  A: "[bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,db5,f5] ~", // Ebm Ab Db
  B: "[ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~", // Db
  C: "[bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [bb4,eb5,gb5] ~ [ab4,c5,eb5] ~", // Ebm Ab
  D: "[ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,c5,eb5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~", // Ab Db
  E: "[ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [ab4,db5,f5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,bb4,db5] ~ [gb4,b4,eb5] ~", // Db Gb B
  F: "[gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~", // B
  G: "[c5,eb5,ab5] ~ [c5,eb5,ab5] ~ [c5,eb5,ab5] ~ [c5,eb5,ab5] ~ [c5,eb5,ab5] ~ [c5,eb5,ab5] ~ [c5,eb5,ab5] ~ [c5,eb5,ab5] ~", // Ab
})).s("gm_pan_flute").gain(0.24)

// chords · piano
const piano = note(`<
  ~@5 A B@2 ~ A B@2 C@2 D E@3 F G@2 H I J K L M@2 C@2 D N@2 O F G@2 H I J K L M@2 C@2 D N@2 O F G@2 H I J K L M@2 ~@8
  C@2 D N@2 O F G@2 H I J K ~ P@2 Q@4 R G@2 H I J K ~ S@2 T@2 U@2 V@2 W@7
>`.pickRestart({
  A: "~@6 [f3,ab3] ~", B: "[[f3,ab3]@2 [eb3,gb3] [gb3,bb3]@7 ~@6]/2", C: "[[db3,ab3,db4,f4]@27 ~ [db3,ab3,db4,f4]@4]/2",
  D: "[eb3,bb3,eb4,gb4]@15 ~", // Ebm
  E: "[[bb4,gb5]@3 ~ f5@2 [gb4,eb5]@2 ~@2 [f4,db5]@3 ~@3 [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~ [ab3,c4,eb4] ~, ~@4 ab4 ~@9 gb4@4 ~@30, ~@15 eb5@4 ~@29, ~@16 [ab2,eb3]@31 ~]/3", // Ebm Db Ab Ab5
  F: "[db2,ab2,ab3,db4,f4]@7 ~", G: "[~@4 [f5,db6] ~ [eb5,c6]@2 ~@2 [f5,db6]@2 ~@2 [db5,bb5]@9 ~@9]/2",
  H: "~@8 [ab2,bb3,db4,f4]@7 ~", I: "[gb3,bb3,eb4]@7 ~, gb2", J: "[gb4,bb4]@5 ~ [ab4,c5]@6 [bb4,db5]@4",
  K: "~ gb2 ~@14, [ab2,eb3]@3 ~, [ab4,c5]@9 ~@7", L: "[ab2,ab3,c4]@7 ~ [bb2,ab3,db4]@7 ~", M: "[[c3,ab3,eb4]@29 ~@3]/2",
  N: "[[bb4,gb5]@3 ~ f5@2 [gb4,eb5]@2 ~@2 [f4,db5]@3 ~@2 eb5@4 ~@13, ~@4 ab4 ~@9 gb4@4 ~@14]/2", // Ebm Db
  O: "~@4 [eb4,ab4,c5]@3 ~", P: "[[ab3,db4,f4]@12 ~@2 [f4,ab4] ~]/2",
  Q: "[[f4,ab4]@4 [eb4,gb4]@2 bb4@10 [bb4,gb5]@3 ~ f5@2 [gb4,eb5]@2 ~@2 [f4,db5]@3 ~@3 [ab3,c4,eb4]@24 c4@2 [db4,f4]@2 [eb4,gb4]@2 ~@2, ~@6 gb4@14 ab4 ~@9 gb4@4 ~@22 eb4 ~@7, ~@31 eb5@4 ~@29]/4", // Fm Ebm Db Ab Db Ebm
  R: "[eb4,gb4]@2 [db4,f4] ab4@5, ~@6 f4 ~@9", // Ebm Db
  S: "[~@6 eb5@6 ~@12 [f5,db6]@2 [gb5,eb6]@2 [ab5,f6]@3 ~, db4@29 ~@3, f6@13 ~@3, db5 db5@2 f5@3 db5@2, ~ ab4@5 ~@5 ab4@5]/2", // Db Ebm Db
  T: "[~@2 [gb5,eb6] gb6@9 gb5 f5 eb5 db5, db5@23 ~@9, [ab5,f6]@2 ~ bb5@12 ~, ~@2 bb4@21 ~@9]/2", // Ebm Db
  U: "[eb5 ~@2 ab4 ~ eb5@2 ~@3 db4@3 [db5,ab5] [f5,db6] [gb5,eb6], ~@2 ab4@4 ~@2 db5@6 f5@11 ~@3 db5 ~@3, ~@4 db4@14 ab4@7 ~@3 ab4@4]/2", // Db5 Db Ebm
  V: "[[ab5,f6]@3 ~ ab4@2 ~@2 [gb5,eb6]@2 bb5@10 ~@6 eb5@6, ~ db5@5 ~@2, ~@4 [ab5,f6]@4 ~@2 gb6@19 ~@3, ~@3 bb4@9 ~@4, ~@5 ab5@3]/2", // Db Ebm Db
  W: "[~@6 eb4@8 ~@3 db4@91 ~@4, ab4@15 ab2@92 ~@5, ~@7 db2@46 ~@3, ~@4 [f3,ab3]@23 ~]/7", // Fm
})).s("gm_piano").gain(0.45)

// chords · music box
const music_box_2 = note(`<
  ~@5 A B@2 ~ A B@2 ~@3 C@2 ~@2 D@2 ~ E F G ~@6 C@2 ~@2 D@2 ~ E F G ~@30 C@2 ~@2 D@2 ~ E F G ~@30
>`.pickRestart({
  A: "~@12 [f5,ab5] ~@3", B: "[f5@2 eb5 [gb5,bb5]@12 ~, ab5@2 ~@2 gb5 ~@27]/2",
  C: "[[bb4,gb5]@3 ~ f5@2 [gb4,eb5]@2 ~@2 [f4,db5]@3 ~@2 eb5@4 ~@13, ~@4 ab4 ~@9 gb4@4 ~@14]/2", // Ebm Db
  D: "[~@4 [f5,db6] ~ [eb5,c6]@2 ~@2 [f5,db6]@2 ~@2 [db5,bb5]@9 ~@9]/2", E: "gb2",
  F: "[gb4,bb4]@5 ~ [ab4,c5]@6 [bb4,db5]@4", G: "~ gb2 ~@14, [ab2,eb3]@3 ~, [ab4,c5]@9 ~@7",
})).s("gm_music_box").gain(0.1).pan(0.9)

// other · pizzicato strings
const pizzicato_strings = note(`<
  ~@82
  [~@2 ab3 ~ db4 ~ ab3 ~ f4 ~ db4 ~ ab4 ~@3]!2
  [~@2 bb3 ~ eb4 ~ bb3 ~ gb4 ~ eb4 ~ bb4 ~@3]!2
  [~@2 ab3 ~ c4 ~ ab3 ~ eb4 ~ c4 ~ ab4 ~@3]!2
  [~@2 ab3 ~ db4 ~ ab3 ~ f4 ~ db4 ~ ab4 ~@3]!2
  [~@2 db4 ~ f4 ~ db4 ~ ab4 ~ f4 ~ db5 ~@3]!2
  [~@2 bb3 ~ eb4 ~ bb3 ~ gb4 ~ eb4 ~ bb4 ~@3]!2
  ~@17
>`).s("gm_pizzicato_strings").gain(0.11).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@28 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B@2 ~ A B A ~ A@2 C B A B A B A B A B A B A B A B A B A
  B A B A B A B A B@2 ~@16
>`.pickRestart({
  A: "x ~@6 x", B: "x", C: "~@7 x",
})).gain(0.38)

// drums · snare
const snare = s("sd").struct("<~@28 A@15 B A@14 C ~ A@21 D A@7 E A@4 ~@17>".pickRestart({
  A: "~ x", B: "~@3 x ~@4", C: "~@4 x!2 ~@2", D: "~@8 x ~@6 x", E: "~@14 x!2",
})).gain(0.38)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@43 [~ x] ~@15 [~@3 x!2 ~@3] ~@29 [~@3 x ~@4] ~@21>").gain(0.43)

// drums · open hat
const open_hat = s("oh").struct("<~@28 A ~@15 A ~@23 A ~@13 A ~@28>".pickRestart({
  A: "x",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@43 [~@3 x ~@12] ~@45 [~ x ~@2] ~@21>").gain(0.43)

// drums · crash
const crash = s("cr").struct("<~@28 A ~@15 A ~@23 A ~@13 A ~@7 A ~@3 A ~@16>".pickRestart({
  A: "x",
})).gain(0.33)

stack(
  bass, french_horn, music_box, string_ensemble_1, tremolo_strings, french_horn_2, pan_flute, piano, music_box_2,
  pizzicato_strings, kick, snare, low_tom, mid_tom, open_hat, high_tom, crash
)

More by Antonello Venditti