Strudelify

Salvami

Jovanotti

KeyC majorTempo82 bpm
0:00/0:00
// Salvami — Jovanotti
// 82 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 71 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(82/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(`<
  ~@18 A B A B C D C D C D C D C D C E A B A B C D C D C D C ~ C D C D C E A B A B A B F G H ~@10
>`.pickRestart({
  A: "c2!16", B: "a#1!8 g1!8", C: "c2!3 e2@2 f2@2 g2 c2!3 e2@2 f2@2 g2", D: "a#2!8 d#2!8", E: "a#2!8 d#2 ~@7",
  F: "c2!8 c3!8", G: "a#2!8 g2!3 f2!3 e2 d2", H: "c2@13 ~@3",
})).s("gm_electric_bass_finger").gain(0.58)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  A B A B A B A B A B A B A B A B A B A B A B ~@11 C A B A B ~@14 A B A B A B A B A B A B A B A B A B D
>`.pickRestart({
  A: "[e3,g3,e4] [g3,e4] ~ [e3,g3,e4]!3 c4 g3 [e3,g3,e4]!2 ~ [e3,g3,e4]!3 ~@2", // Em C Em
  B: "[f3,a#3,d4]!2 ~ [f3,a#3,d4]!3 ~@2 [g3,b3,d4]!2 ~ [g3,b3,d4] [b3,d4] [g3,b3,d4] ~@2", // A# G Bm G
  C: "~@8 [g3,b3,d4]!2 ~ [g3,b3,d4] [b3,d4] [g3,b3,d4] ~@2", D: "[e3,g3,e4] ~@15",
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.1)

// chords · electric guitar clean
const electric_guitar_clean_2 = note(`<
  A B A C A B A B A B A B A B A B A B A B A B ~@11 D A B A B ~@14 A B A B A B A B A B A B A B A B A B E
>`.pickRestart({
  A: "[e3,c4,e4]!2 ~ [e3,c4] [e3,c4,e4]!2 ~@2 [e3,c4,e4] [e3,c4] ~ [e3,c4,e4] [e3,c4] [e3,c4,e4] ~@2", // C
  B: "[f3,a#3,d4]!2 ~ [f3,a#3,d4]!3 e2 ~ [g3,d4,g4]!2 ~ [g3,d4,g4]!3 ~@2", // A# G5
  C: "[f3,a#3,d4]!2 ~ [f3,a#3,d4]!3 ~@2 [g3,d4,g4]!2 ~ [g3,d4,g4]!3 ~@2", D: "~@8 [g3,d4,g4]!2 ~ [g3,d4,g4]!3 ~@2",
  E: "[e3,c4,e4] ~@15", // C
})).s("gm_electric_guitar_clean").gain(0.32).pan(0.9)

// other · electric guitar clean
const electric_guitar_clean_3 = note("<~@34 A@2 B C ~@14 D@2 E C F@2 E C ~@11>".pickRestart({
  A: "[~ c4 ~@2 c4 ~ c4 ~ c4 ~@2 c4 g4 ~ c4 ~ c4 ~ c4 g4 c4 g3 c4 g4 c4 g3 c4 g4 c4 g3 c4 g4, g3@2 g4@2 ~ g4@2 ~@2 g4@2 ~@4 g4@2 ~@15, ~@3 g3@2 ~@2 g3@3 g3@2 ~ g3@2 ~@2 g3@2 ~@13]/2",
  B: "g3 c4 g4 g3 c4 g4 c4 g3 c4 g4 g3 c4 g4 g3 c4 g4", C: "c4 g3 c4 g4 c4 g3 c4 g4 c4 g3 c4 g4 c4 g3 c4 g4",
  D: "[~ c4 ~@2 c4 ~ c4 ~ c4 ~@2 c4 g4 ~ c4 ~ c4 ~ c4 ~ c4 g3 c4 g4 c4 g3 c4 g4 c4 g3 c4 g4, g3@2 g4@2 ~ g4@2 ~@2 g4@2 ~@4 g4@2 ~@2 g4@2 ~@11, ~@3 g3@2 ~@2 g3@3 g3@2 ~ g3@2 ~@2 g3@3 ~@12]/2",
  E: "g3 c4 g4 g3 c4 ~ c4 g3 c4 g4 g3 c4 g4 g3 c4 g4, ~@5 g4@2 ~@9",
  F: "[~ c4 ~@2 c4 ~ c4 ~ c4 ~@2 c4 g4 ~ c4 ~ c4 ~ c4 ~ c4 g3 c4 g4 c4 ~ c4 g4 c4 g3 c4 g4, g3@2 g4@2 ~ g4@2 ~@2 g4@2 ~@4 g4@2 ~@2 g4@2 ~@11, ~@3 g3@2 ~@2 g3@3 g3@2 ~ g3@2 ~@2 g3@3 ~@5 g3@2 ~@5]/2",
})).s("gm_electric_guitar_clean").gain(0.28)

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

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

// drums · clap
const clap = s("cp").struct("<[~ x ~ x ~ x ~ x]!22 ~@12 [~ x ~ x ~ x ~ x]!4 ~@14 [~ x ~ x ~ x ~ x]!18 ~>").gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@17 [x!8 ~@4 x!4] ~@53>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@18 A@4 B@3 C B C B C B C B D A@4 B@3 C B C E F G C G C B D A@7 H ~@11>".pickRestart({
  A: "x!13 ~ x ~", B: "x!16", C: "x!15 ~", D: "x!9 ~@7", E: "x!12 ~ x ~@2", F: "~ x!14 ~", G: "~ x!15",
  H: "x!12 ~@2 x ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@18 A@4 ~@3 B ~ B ~ B ~ B ~@2 A@4 ~@3 B ~ B C B ~ B ~ B ~@2 A@8 ~@11>".pickRestart({
  A: "~@13 x ~ x", B: "~@15 x", C: "~@6 x!2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct("<~@18 A ~ A ~ A ~@11 A ~ A ~ A ~@6 A@2 ~ A ~@3 A ~ A ~ A ~ A ~ A ~@10>".pickRestart({
  A: "x",
})).gain(0.64)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, electric_guitar_clean_3, kick, snare, clap, low_tom, hihat,
  open_hat, crash
)

More by Jovanotti