Strudelify

L'odore del sesso

LIGABUE

KeyG majorTempo113 bpm
0:00/0:00
// L'odore del sesso — LIGABUE
// 113 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(113/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(`<
  ~@3 A B C D A B C D E F D G H I J@2 H K L M N O P Q N R S A B C T E F C T E F D G H I J@2 H K L M N O P Q N R U V W@2
  U V W@2 X Y Z AA X AB L M AC O P Q N O L AD N O P Q N O L AE N O P AE N AF AG AH@4
>`.pickRestart({
  A: "e1@6 ~ e1 d2@2 e2@6", B: "c2@7 a1 b1@2 c2@2 b1@2 a1@2", C: "g1@7 e1 f#1@2 g1@6",
  D: "g1@7 e1 f#1@2 g1@2 f#1@2 g1@2", E: "e1@6 ~ e1 d2@2 e2@2 d2@4", F: "c2@7 a1 b1@2 c2@2 b1@4",
  G: "a1@7 g1 g1@2 a1@2 g1@2 a1@2", H: "c2@7 g1 c2 ~ c2@5 ~", I: "d2@7 a1 d2 ~ d2@2 b1@2 d2@2",
  J: "[e2@3 ~ e2@2 d2@2 e2@2 d2@2 ~@2 a1@5 ~ a1@3 g1 a1 ~ a1@4 ~@2]/2", K: "c2 ~ c2@2 g2@2 c2@2 g2@2 c2@2 g2@2 c2 ~",
  L: "g1 ~ g1 ~ g1 ~ g1@2 b1@2 d2@2 b1@2 d2@2", M: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e2@2 d2@2",
  N: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~", O: "a1 ~ a1 ~ a1 ~ a1 ~ b1@2 a1@2 b1@2 a1@2",
  P: "g1 ~ g1 ~ g1 ~ g1 ~ b1@2 d2@2 b1@2 d2@2", Q: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~",
  R: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", S: "a1 ~@15", T: "g1@7 e1 f#1@2 g1@2 f#1@4", U: "e1@11 ~ e1@4", V: "c2",
  W: "[g1@31 ~]/2", X: "c2@15 ~", Y: "d2", Z: "e2@11 ~ e2@4", AA: "a2", AB: "c2 f2 c3 g2",
  AC: "c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ b1 ~ b1 ~", AD: "e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ e1 ~ b1@2 d2@2",
  AE: "e1 ~ e1 ~ e1 ~ e1 ~ e2@2 g2@2 e2@2 d2@2", AF: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1@2",
  AG: "a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a2 ~ a1 ~ a1@2", AH: "g1/4",
})).s("gm_electric_bass_finger").gain(0.36)

// chords · distortion guitar
const distortion_guitar = note(`<
  ~@6 A@3 B@5 C@6 D@4 E@4 F ~ G@2 H@2 G@2 I@5 C@6 D@4 E@4 F ~@7 J@4 K L@5 E@4 M@4 E@4 M@4 E@4 N O P@4
>`.pickRestart({
  A: "[~@5 [d4,f#4] [d4,g4] [d4,a4]@2 [d4,b4]@15]/3", // D G5 D5 G
  B: "[~@10 [d4,f#4]@2 [d4,g4]@2 [d4,a4]@4 [d4,b4]@3 ~ [d4,a4]@4 [d4,b4]@3 ~@3 d5@15 ~ c5@7 ~ d5@7 ~@15 a3@2, ~@31 [e4,g4]@16 [e4,g4]@7 ~ [e4,g4]@8 d4@16 ~, ~@4 [g4,b4]]/5", // D G5 D5 G D5 G Em G
  C: "[~@10 e3@5 ~ [g3,c4]@15 ~ d4@15 ~@5 b2@2 b2@2 [d3,e3]@2 b2@2 ~@2 a3@8 c#4@4 a3@5 ~@11 b2@2 c3@2 d3@2, ~@2 c#4@13 ~@32 [b3,e4]@8 ~@25 c4@12 ~@4, ~@6 a3@9 e3@16 [f#3,a3]@16 ~ e3@7 ~@7 e3@17 [e3,g3]@12 ~@5]/6", // C5 Dsus2 E5 F#m Em
  D: "[~@2 g3@4 d3@4 g3@5 ~ [d4,g4]@15 ~ [b3,e4]@15 ~ [c4,e4]@16, ~@15 g3@15 ~ e3@16 g3@16 ~]/4", // G5 E5 C
  E: "[~@6 a3@4 g3@2 e3@3 ~ [d4,g4]@15 ~ [b3,e4]@15 ~ [c4,e4]@15 ~, a2@15 ~@49, e3@12 ~@3 g3@16 e3@16 g3@16 ~]/4", // G5 E5 C
  F: "a2@4 e3@4 a3@4 e3@3 ~", G: "[~@10 g4@3 ~@11 d4@2 c4@6, [e3,b3]@13 ~ c3@16 ~@2, ~@8 e4@5 ~ g3@14 ~@4]/2",
  H: "[[g2,d3,g3]@5 [d4,f#4] [d4,g4] [d4,a4]@2 [d4,b4]@7]/2", // G5 D G5 D5 G
  I: "[[g2,d3,g3]@10 [d4,f#4]@2 [d4,g4]@2 [d4,a4]@4 [d4,b4]@3 ~ [d4,a4]@4 [d4,b4]@3 ~@3 d5@15 ~ c5@7 ~ d5@7 ~@15 a3@2, ~@31 [e4,g4]@16 [e4,g4]@7 ~ [e4,g4]@8 d4@16 ~, ~@4 [g4,b4]]/5", // G5 D G5 D5 G D5 G Em …
  J: "[~@6 g4@4 f#4@2 g4@2 a4@4 b4@22 ~@2 f#4@2 g4@2 a4@4 b4@4 a4@4 b4@5 ~]/4", K: "[a2,e3,a3]",
  L: "[[c3,g3]@10 b2@2 c3@2 d3@4 g3@3 ~ d3@4 g3@5 ~ [d4,g4]@15 ~ [b3,e4]@15 ~ [c4,e4]@16, ~@31 g3@15 ~ e3@16 g3@16 ~]/5", // C5 G5 E5 C
  M: "[~@6 a3@4 g3@2 e3@3 ~ [d4,g4]@15 ~ [b3,e4]@15 ~ [c4,e4]@16, a2@15 ~@49, e3@12 ~@3 g3@15 ~ e3@16 g3@16 ~]/4", // G5 E5 C
  N: "[a2,e3]@4 [a2,e3]@2 [e3,a3,c#4]@3 ~ [a2,e3]!2 [e3,a3,c#4]@2 d3 e3", // A5 A A5 A
  O: "g3 a3@3 [a2,e3]@2 [e3,a3]@4 [a2,e3]@2 [e3,a3]@4, e3@3 ~@13", P: "[g2,d3,g3,d4]/4",
})).s("gm_distortion_guitar").gain(0.24).pan(0.7)

// other · overdriven guitar
const overdriven_guitar = note(`<
  ~@17 A@2 B@2 C@6 D@2 ~@8 E F G H@2 ~@2 A@2 B@2 C@4 I@2 D@2 J@2 K L M N O@2 P Q R S T U C@4 I@2 D@2 C@4 I@2 D@2 C@2 D@2
  C@2 V@2 W X@4
>`.pickRestart({
  A: "[~@14 [e3,a3]@17 [c4,g4]]/2", B: "d5/2", C: "[a4 g4 e4 g4@2 a4@2 b4@2 e4@2 a4@2 g4 e4@2]/2",
  D: "[a4 g4 e4 g4@2 b4@2 a4@2 e4@2 a4@2 g4 e4@2]/2", E: "~@3 b2", F: "e2@4 f#2@4 g2@3 ~ a2@3 ~",
  G: "b2@4 c3@4 d3@4 e3@3 ~", H: "[d3@13 ~ d3@18]/2", I: "[a4@2 g4@2 e4@2 g4@4 a4@4 b4@4 e4@3 ~ a4@4 g4@2 e4@4]/2",
  J: "[g4 ~ f#4 e4!3 d4 ~@4 e4 ~@2 g4 e4, ~ e4@2 ~@4 e4@2 e4@2 ~@2 e4@2 ~, ~@4 a4 g4 f#4 ~]/2",
  K: "~@3 b4@2 ~@2 d4, b4@3 ~@3 b4@2, ~ e4@3 ~ d4@2 ~", L: "~@4 d4 b4 b4@2, d4@2 d4@2 ~@2 d4 ~, ~ b4@2 a4@2 ~@3",
  M: "g4 e4 f#4 e4!3 d4 e4", N: "~ e4 g4 e4 f#4 e4 g4 e4, a4 ~@3",
  O: "[~@10 b4@2 ~@2 d4@2 ~@12 d4@3 ~, b4@9 ~@3 b4@6 b4@4 a4@4 b4@6, ~@3 e4@4 ~ d4@2 d4@2 d4@2 ~@2]/2",
  P: "g4 d4 f#4 d4 g4 d4 f#4 d4", Q: "~@3 d4 ~ d4 f#4 d4, g4 f#4 g4 ~, ~ d4@2 ~@5",
  R: "~@3 e4@2 ~@2 b4, b4@9 ~ b4@4 ~@2, ~@3 e4", S: "[e4,b4] [d4,c5]@2 d5@2 d5!3, ~@3 e4@3 e4@2",
  T: "e4 d4@2 ~@2 e5!3, d5@5 ~ [g3,e4]@6 [g3,e4]@4", U: "e5 ~ e4 [d4,e4,g5]!5, e4 ~@3, ~ g5@2 ~@5",
  V: "[a4 g4 e4 g4@2 b4@2 a4@2 e4@2 a4@2 g4 e4 g4]/2", W: "[e4,g4]!6 b4 ~", X: "[g3,d4,g4]/4",
})).s("gm_overdriven_guitar").gain(0.19).pan(0.2)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  A@5 B@2 A@2 B@2 A@2 B@2 A@2 C ~@12 A@2 B@2 A@2 B@2 A@2 B@2 A@2 C ~@54
>`.pickRestart({
  A: "e4 g4 b4 e4 a4 b4 a4 g4", B: "d4 g4 b4@2 a4 b4 a4 g4", C: "d4 g4 b4@2 a4 b4 a4 ~",
})).s("gm_electric_guitar_jazz").gain(0.14).pan(0.3)

// chords · electric guitar muted
const electric_guitar_muted = note("<~@58 A@6 ~@35>".pickRestart({
  A: "[~ [d4,g4]@2 [d4,g4]@2 d4!2 [d4,g4]@2 [d4,g4]@2 [d4,g4]@2 d4!2 [d4,g4]@2 [d4,g4]@2 [d4,g4]@2 d4!2 [d4,g4]@2 [d4,g4]@2 [d4,g4]@2 d4!2 [d4,g4]@2 d4!2 d4@2 d4!2 d4@2 [d4,g4] d4 [d4,g4]@4 ~, ~@10 g4@4 ~@12 g4@4 ~@12 g4@4 ~@12 g4@4 ~@4 g4@4 g4 ~@3 g4@4 g4 ~@17]/6", // G5
})).s("gm_electric_guitar_muted").gain(0.11).pan(0.9)

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

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@63
  [~@13 x!3]
  [~@2 x ~ x!2 ~ x ~@2 x!2 ~ x!3]!2
  [~ x!2 ~ x!2 ~ x ~ x!3 ~ x!3]
  [~ x ~@2 x ~@2 x ~ x!2 ~@2 x!3]
  [x ~ x ~ x!2 ~ x ~@2 x!2 ~ x!3]
  [x ~ x!8 ~@6]
  ~@29
>`).gain(0.24)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@29 x ~@26 x ~@37 [~@3 x] ~@4>").gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@94 [~@14 x!2] ~@4>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@3 A B@7 A B@5 C D A E A B@3 A B@2 F ~ A B@7 A B@5 C D A E A B@3 A B@2 F ~@14 A B@3 A B@3 A B A B A B A G A B@3 A F B
  A H ~@4
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "x ~ x ~ x!4", D: "~ x!2 ~ x ~ x ~", E: "x ~ x ~ x!2 ~@2", F: "x ~ x ~ x ~ x!2",
  G: "x!4 ~ x ~@2", H: "x!3 ~ x!2 ~@2",
})).gain(0.4)

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

// drums · tambourine
const tambourine = s("tb").struct("<~@29 A ~@18 B@8 A ~@8 C A C A ~ B@25 ~@4>".pickRestart({
  A: "x", B: "x!16", C: "~@12 x!4",
})).gain(0.32)

stack(
  bass, distortion_guitar, overdriven_guitar, electric_guitar_jazz, electric_guitar_muted, kick, snare, snare_soft,
  pedal_hat, mid_tom, open_hat, crash, tambourine
)

More by LIGABUE