Strudelify
Serenata Rap cover art

1994 · Lorenzo 1994

Serenata Rap

Jovanotti

KeyE♭ minorTempo95 bpm
0:00/0:00
// Serenata Rap — Jovanotti
// 95 bpm, 4/4, key D# minor. 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 113 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(95/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 · synth bass 2 · "SYN BASS 2"
const bass = note(`<
  A B A B A B C D A B A B A B C D A B A B A B C D A B C D A B C D A B A B A B C D A B A B A B C E A B A B A B C D A B A
  B A B C D A B A B A B C D A B A B A B C D A B A B A B C E A B A B A B C D A B A B A B C D A B A B A B C D ~
>`.pickRestart({
  A: "b1 gb1 ab1 b1 ~@6 b1@2 ~@4", B: "bb1 f1 ab1 bb1 ~@6 eb2@2 ~@4", C: "e1@4 ~@2 e1@3 ~@3 e1@16 ~@4",
  D: "db1@4 ~@2 db1@3 ~@3 db1@16 ~@4", E: "db1@2 ~ db1@4 ~",
})).s("gm_synth_bass_2").gain(0.46)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  A B C@2 A B D E@2 ~@15 A B D E@2 ~@2 E@2 ~@7 A B C@2 A B D E@2 ~@31 A B F ~@13 G@2 C@2 A B D H@3 C@2 A B D E@2
>`.pickRestart({
  A: "bb3@12 b3@2 bb3 ~@3 b3@2 ~@2 bb3@2 ~@2 b3@2 ~@4",
  B: "ab3@8 ~@2 eb3@2 gb3@2 ab3@2 ~@4 bb3 ~@5 ab3@2 ~@2 b3@2, ~@4 bb3 ~@3, ~@18 eb4@5 ~ db4@6 ~@2",
  C: "[~@2 gb3 ~ eb3 ~ b2@2 ~@14 eb3 ~ gb3 ~ ab3 ~ bb3 ~ ab3@6 bb3 ~@13 db4@2 eb4@2 gb4@2 ~@2 db4@2 bb3@2 ~@2, bb3@7 ~@57]/2",
  D: "e3@7 ~", E: "[~@4 eb4@2 db4@2 ~@2 gb4@2 ~@2 f4@2 ~@2 db4 ~@3 db4@2 ~@2 bb3@2 eb4@17 ~@19]/2",
  F: "~@2 gb3 ~ eb3 ~ b2@2 ~@24, bb3@7 ~@25",
  G: "[bb3@12 b3@2 bb3 ~@3 b3@2 ~@2 bb3@2 ~@2 b3@2 ~@3 ab3@8 ~@3 eb3@2 gb3@2 ab3@2 ~@4 bb3 ~@5 ab3@2 ~@2 b3@2, ~@12 bb3 ~@3, ~@50 eb4@5 ~ db4@6 ~@2]/2",
  H: "[~@4 eb4@2 db4@2 ~@2 gb4@2 ~@2 f4@2 ~@2 db4 ~@3 db4@2 ~@2 bb3@2 ~@4 bb3@12 b3@2 bb3 ~@3 b3@2 ~@2 bb3@2 ~@2 b3@2 ~@3 ab3@8 ~@3 eb3@2 gb3@2 ab3@2 ~@4 bb3 ~@5 ab3@2 ~@2 b3@2, ~@28 eb4@17 ~@35 bb3@4 ~@12, ~@82 eb4@5 ~ db4@6 ~@2]/3",
})).s("gm_electric_guitar_jazz").gain(0.18)

// other · electric guitar jazz · "JAZZ GTR" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~ A ~ B ~ A ~@19 A ~@15 A ~ B ~ A ~@35 A ~@15 A ~ B ~ A ~@3 A ~ B ~ A ~@3
>`.pickRestart({
  A: "~@11 ab3 ~@2 gb3 ~", B: "~@24 f4@3 ~@3 ab3 ~",
})).s("gm_electric_guitar_jazz").gain(0.09)

// other · piano · "A.PIANO 2"
const piano = note(`<
  ~@10 A B C D ~@2 E F ~@2 G H I J ~@10 K L M N O P@2 Q R ~ S T ~@3 U ~ U ~ U ~@3 V W X ~@5 U ~ U ~ U ~@4 Y Z ~ AA ~ AB
  AC Q R ~ S T ~@3 U ~ U ~ U ~@3 U ~ U ~ U ~@3 U ~ U ~ U ~@3
>`.pickRestart({
  A: "~@20 eb5@3 ~ f5@3 ~ gb5@2 ~@2", B: "~@22 bb4 ~ eb4@5 ~@3", C: "~@12 eb5 ~@7 ab4 ~@5 bb4 ~@5", D: "ab4 ~@7",
  E: "gb4@3 ~@11 gb4 ~", F: "ab4@4 ~@8 gb4 ~@13 [db4,gb4]@2 ~@2 [db4,eb4,gb4]@2, ~@26 eb4 ~@5", G: "~@7 eb4 eb5 ~@7",
  H: "ab4@11 ~ [gb4,bb4]@2 ~@18", I: "~@14 db4 ~",
  J: "eb4@2 ~@2 db4@2 ~@2 eb4@2 ~@2 gb4@2 ~@2 ab4@2 gb4@2 eb4 ~@3 db4@2 ~@2 eb4@2 ~@2", K: "~@7 [eb4,gb4]",
  L: "[db4,f4]@12 [bb3,eb4]@17 ~@3", M: "~@8 db4@2 ~@2 eb4@3 ~@17",
  N: "~@4 eb4@2 ~@2 db4@3 ~ eb4@2 ~@2 db5@3 ~ bb4@2 ~@2 ab4@2 ~@2 gb4@2 ~@2", O: "ab4@12 gb4 ~ ab4@2 gb4@15 ~",
  P: "[~@32 gb4@19 ~@11 db4@2, ~@29 db4@2 bb4@2 ~@31, ~@15 f4 ~@16]/2", Q: "eb4@2 gb4@3 ~@27",
  R: "~@24 gb4@3 ~@3 ab4@2", S: "~@6 bb4 ~@3 db5@2 ~@2 eb5@2 ~@16", T: "~@7 bb4 ab4 eb4 gb4 ~ eb4 ~ db4 ~",
  U: "~@22 bb3 ~ [db4,gb4]@2 bb3 ~ [db4,gb4]@3 ~", V: "~@14 eb4 ab4", W: "bb4@17 ~@5 gb4@2 bb4@3 ~ gb4 ~@3",
  X: "ab4@12 bb4@4 eb4@15 ~", Y: "~@16 ab4 ~ bb4@2 ~@12", Z: "~@22 eb4 ~ ab4@2 ~@6",
  AA: "~@18 eb4@2 ~@4 eb4@3 ~@3 eb4@2", AB: "~@24 gb4 ~ gb4@4 ~@2", AC: "~@15 db4",
})).s("gm_piano").gain(0.24)

// other · piano · "A.PIANO 2" · soft notes
const piano_soft = note("<~@15 A B ~@19 C ~@21 D ~@15 E F ~@3 G ~@33>".pickRestart({
  A: "~@15 ab4, ~@29 eb4@2 ~", B: "~@13 ab4 ~@2", C: "~ db4 eb4 ~@13", D: "~@20 eb4@2 ~@4 ab4@2 ~@2 eb4 ~",
  E: "~@14 eb4 ~@17", F: "~@26 bb4 ~ eb4@2 ~@2", G: "~@10 gb4 ~@5",
})).s("gm_piano").gain(0.16)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@56 A B C B A B D E ~@49>".pickRestart({
  A: "[b3,eb4,gb4]", B: "[db4,f4,ab4]@3 [bb3,eb4,gb4]@5", C: "[b3,gb4]", D: "[b3,e4,ab4]", E: "[db4,a4], f4@7 ~",
})).s("gm_string_ensemble_1").gain(0.05)

// chords · epiano1 · "E.PIANO 1"
const epiano1 = note(`<
  ~@26 A B ~@19 C D E F G H I A B ~@8 D E F G H I A B ~@16 D E F G H I J B D E F G H I J B D E F G H I J B ~
>`.pickRestart({
  A: "~@10 db4@2 eb4 ~@3 gb4 ~@3 ab4 ~@3 a4@2 ab4@2 gb4@2 ~@2", B: "~@6 db5@9 ~",
  C: "~@8 [bb4,eb5] ~@3 [bb4,eb5]@4 [db5,gb5] ~@3 [db5,gb5]@4 [bb4,eb5]@2 ~@2 [eb5,ab5]@3 ~", // Eb5 Gb5 Eb5 Ab5
  D: "eb5@7 ~ bb4@2 ab4@2 g4@2 gb4@3 ~ ab4 ~@3 gb4 ~ bb4@2 ~@2 ab4@2 ~@2",
  E: "[gb4,bb4]@4 [eb4,ab4] ~@3 [eb4,ab4]@3 ~ [db4,gb4] ~@3 [db4,gb4]@4 ab4 ~@3 [eb4,ab4]@4 [db4,gb4] ~@3", // Gb Ab5 Gb5 Ab5 Gb5
  F: "~@6 db4 ~@2 ab4@2 gb4 ~@2 gb4@4 ab4 ~@3 gb4 ~ bb4@2 gb4 ~@5, ~@4 bb4 ~@11",
  G: "[gb4,bb4]@2 [gb4,bb4] ~@9 bb4@2 [gb4,bb4] ~@17, ~@12 gb4 ~@19", H: "~@8 bb4@2 ab4@2 g4@2 gb4@4 ab4 ~@5 bb4@2 ~@6",
  I: "[gb4,bb4]@4 ab4 ~@3 [eb4,ab4]@4 gb4 ~@3 [db4,gb4]@4 ab4 ~@3 [eb4,ab4]@2 [db4,gb4]@4 gb4 ~", // Gb Ab5 Gb5 Ab5 Gb5
  J: "~@11 eb4 ~@4 gb4 ~@3 ab4 ~@3 a4@2 ab4@2 gb4@2 ~@2, ~@5 db4 ~@10",
})).s("gm_epiano1").gain(0.27)

// chords · epiano1 · "E.PIANO 1" · soft notes
const epiano1_soft = note("<~@49 A B ~ C D ~@11 A B ~ C D ~@19 A B ~ C D ~@3 A B ~ C D ~@3 A B ~ C D ~@3>".pickRestart({
  A: "~@20 eb4 ~@11", B: "~@12 g4 ~@15 ab4@2 ~@2", C: "~@22 gb4 ~@3 gb4 ~ ab4@2 ~@2",
  D: "~@4 eb4 ~@7 db4 ~@7 eb4 ~@9 db4 ~",
})).s("gm_epiano1").gain(0.11)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~@26 A B ~@19 C D E D E D E A B ~@8 D E D E D E A B ~@15 C D E D E D E A B D E D E D E A B D E D E D E A B ~
>`.pickRestart({
  A: "gb5!30 eb5 d5", B: "db5!24 eb5!2 ~@6", C: "~@24 eb5!8", D: "gb5!24 ab5!8", E: "db5!24 eb5!8",
})).s("gm_acoustic_guitar_steel").gain(0.11)

// chords · epiano2 · "E.PIANO 2"
const epiano2 = note(`<
  A B A B A C D E A B A B A C D E A B A B A C D E A B A E ~ C D E A B A B A C D E A B A B A C D E A B A B A C D E ~@7 F
  A B A B A C D E A B A B A C D E A B A B A C D G A B A B A C D E A B A B A C D E A B A B A C D E ~
>`.pickRestart({
  A: "[b2,b3,eb4,gb4,bb4]", B: "[bb2,bb3,db4,f4,ab4]@12 [eb2,eb3,bb3,eb4,gb4]@19 ~",
  C: "[bb2,bb3,db4,f4,ab4]@3 [eb2,eb3,bb3,eb4,gb4]@5", D: "[e2,b3,eb4,e4,ab4]", E: "[db2,db4,f4,a4]@29 ~@3",
  F: "[db4,f4,a4]@15 ~", G: "[db2,db4,f4,a4] ~@7",
})).s("gm_epiano2").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  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 C A B A B A B A B A B A B A B A B A B D ~ A B A B A B A C A E A
  E A E A E A E A E A E A C A B A B A B A B A B A B A B D ~ A E A E A E A C A E A E A E A C A E A E A E A C ~
>`.pickRestart({
  A: "x!2", B: "x ~@2 x!2 ~@3", C: "~@15 x", D: "x", E: "x ~@3 x!2 ~@2",
})).gain(0.72)

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@57 A ~ A ~ A ~ A ~ A ~ A ~ A ~@19 A ~ A ~ A ~@3 A ~ A ~ A ~@3 A ~ A ~ A ~@3
>`.pickRestart({
  A: "~@3 x ~@4",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct(`<
  A@7 B A@7 B A@7 B A@2 C D A@3 B A@3 E A@10 ~ F A@7 D C G C G C G C H C G C G C G C D A@7 B A@6 ~ F C G C G C G C D C G
  C G C G C D C G C G C G C D ~
>`.pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@6 x!2 ~ x ~", C: "~@8 x ~@6 x ~@8 x ~@7", D: "~@8 x!2 ~ x ~ x!2 ~", E: "~@4 x ~@6 x!2 ~@3",
  F: "~@11 x!2 ~@3", G: "~@8 x ~@6 x ~@8 x ~ x ~@5", H: "~@8 x ~@6 x ~@6 x ~ x ~@7",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<A@27 ~ A@18 ~@2 A@7 ~ A@15 ~ A@14 ~@2 A@7 ~ A@7 ~ A@7 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.56)

// drums · clap · soft notes
const clap_soft = s("cp").struct(`<
  ~@26 A ~@29 A B A B A B A@3 B A B A B A ~@17 A B A B A B A ~ A B A B A B A ~ A B A B A B A ~@2
>`.pickRestart({
  A: "~@15 x ~@16", B: "~@15 x ~@10 x ~@5",
})).gain(0.32)

// drums · hihat
const hihat = s("hh").struct(`<
  A@2 B A@3 B A@3 B A@3 B A@3 B A@3 B A@4 ~ A@2 B A@3 B A@3 B A@3 B A@3 C ~ A@2 B A@3 B ~ A@15 ~ A@2 B A@3 B A@3 B A@3
  D@2 A@7 ~ A@7 ~ A@7 ~@2
>`.pickRestart({
  A: "~ x!4 ~ x!2", B: "~@2 x ~ x ~ x!3 ~@3 x ~ x ~", C: "x", D: "x!8",
})).gain(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@35 [~@7 x] ~@11 [~@7 x] ~@15 [~@7 x] ~@49>").gain(0.32)

// drums · open hat
const open_hat = s("oh").struct(`<
  A@8 B A@7 B A@9 B ~ B A@3 B A@3 B A@9 ~@2 B A@6 ~ B A B A B A B A B A B A B A B ~ B A@13 ~@2 B A B A B A B ~ B A B A B
  A B ~ B A B A B A B ~@2
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "~@5 x ~@2",
})).gain(0.4)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~@7 A ~@9 A ~ A ~@3 A ~@3 A ~@11 A ~@7 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@15 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "x",
})).gain(0.4)

stack(
  bass, electric_guitar_jazz, electric_guitar_jazz_2, piano, piano_soft, string_ensemble_1, epiano1, epiano1_soft,
  acoustic_guitar_steel, epiano2, kick, kick_soft, snare, clap, clap_soft, hihat, low_tom, open_hat, crash
)

More by Jovanotti