Strudelify

Fumo negli occhi

Celentano

KeyD minorTempo112 bpm
0:00/0:00
// Fumo negli occhi — Celentano
// 112 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 102 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(112/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 · "FUMO NERO"
const bass = note(`<
  ~@5 A B C D E D A D A B C D E D A D A B C D E D A D A B C D E D A D F G H I J I F I A B C D E D A D K B C D E D A D A
  B C D E D A D F G H I J I F I L@4 M N L@2 A B C D E D A O A B C D E D A D P
>`.pickRestart({
  A: "d1@2 d1@2 d2@2 a1 c2 ~ c2 a1@2 c2@2 d2@2", B: "d1@2 d1@2 d2@2 a1 c2@2 c2 b1@2 a1@2 f1@2",
  C: "d1@2 d1@2 d2@2 a1 c2@2 c2 a1@2 c2@2 d2@2", D: "d1@2 d1@2 d2@2 a1 c2 ~ c2 b1@2 a1@2 f1@2",
  E: "d1 ~ d1@2 d2@2 a1 c2 ~ c2 a1@2 c2@2 d2@2", F: "e1@2 e1@2 e2@2 b1 d2 ~ d2 b1@2 d2@2 e2@2",
  G: "e1@2 e1@2 e2@2 b1 d2@2 d2 db2@2 b1@2 g1@2", H: "e1@2 e1@2 e2@2 b1 d2@2 d2 b1@2 d2@2 e2@2",
  I: "e1@2 e1@2 e2@2 b1 d2 ~ d2 db2@2 b1@2 g1@2", J: "e1 ~ e1@2 e2@2 b1 d2 ~ d2 b1@2 d2@2 e2@2",
  K: "d1@2 ~ d1@3 d1@3 c2 a1@2 c2@2 d2@2", L: "d1 ~ d1@13 ~", M: "a1 ~ a1@13 ~", N: "f1 ~ f1@13 ~",
  O: "d1 ~ e1 ~ f1@2 ~ f1 g1@2 ab1@2 a1 d1@3", P: "d1@15 ~",
})).s("gm_electric_bass_finger").gain(0.53)

// chords · piano
const piano = note(`<
  ~@5 A B C B A B C D A D C B A D C D A B C B A B C D A D C B A D C D ~@8 A B C B A B C D ~ D C B A D C D A B C B A B C
  D ~@8 E F G H I J G K ~@12 A B C B A
>`.pickRestart({
  A: "[d4,e4,f4,a4]@15 ~", B: "[c4,d4,e4,g4]@15 ~", C: "[bb3,c4,d4,f4]@15 ~", D: "[c4,d4,e4,g4]",
  E: "~@3 [a3,c4,e4,f4]@12 d2, d2@15 ~", F: "~@3 [c4,d4,f4,g4]@11 d3 a2", G: "~@3 [a3,c4,e4,f4]@12 d3, d2@15 ~",
  H: "~@3 [c4,d4,f4,g4]@11 d3 a2, d2@15 ~", I: "~@3 [a3,c4,e4,f4]@12 d3, a1@15 ~",
  J: "~@3 [c4,d4,f4,g4]@12 d3, d2@15 ~", K: "~@3 [c4,d4,f4,g4]@12 ~, d2@15 ~, ~@2 a2@13 ~",
})).s("gm_piano").gain(0.32).pan(0.4)

// chords · electric guitar jazz · "E.GUITAR"
const electric_guitar_jazz = note(`<
  ~@4 A B@2 C D E@2 C F ~@4 G H I J G K G J G L G J ~@8 M N O P M N O Q B@2 C R E@2 C S ~@4 G H I J ~@8 M N O P M N O T
  ~@8 U V W X Y Z AA AB Y Z AA AB Y Z AA AB ~
>`.pickRestart({
  A: "~@14 e4 f4", B: "[e4 f4 [d4,e4] c4 d4@7 ~ d4 e4 f4 g4@5 e4@4 c4@4 a3@4]/2", C: "c4 d4@11 ~@2 a3 ~",
  D: "c4@4 bb3@3 ~ a3@5 ~ e4 f4", E: "[e4@2 d4 c4 d4@7 ~ d4 e4 f4 g4@5 e4@4 c4@4 a3@4]/2",
  F: "c4@4 bb3 c4 bb3@2 a3@7 ~", G: "~@10 f4 ~ f4 e4 a3 ~", H: "d4@13 ~@3", I: "~@10 f4 ~ f4@2 a3 ~", J: "d4@7 ~",
  K: "c4 d4@13 ~@2", L: "c4 d4@14 ~", M: "ab3@7 ~@5 a3@2 b3@2", N: "c4@7 ~@5 b3@2 a3@2", O: "ab3@3 ~ f3@3 ~",
  P: "e3@7 ~@9", Q: "e3@6 ~@8 e4 f4", R: "c4@4 bb3@3 ~ a3@5 ~ e4@2", S: "c4@4 bb3@4 a3@7 ~", T: "e3@3 ~@5",
  U: "~@6 f4 ~ [c4,f4] [b3,e4] ~ [g3,c4] ~ [g3,c4] ~@2", // F5 E5 C5
  V: "~@4 c4 ~ [c4,f4] ~ [c4,f4] [b3,e4] ~ [g3,c4] ~ [g3,c4] ~@2", // F5 E5 C5
  W: "~@6 [c4,f4] ~ [c4,f4] [b3,e4] ~ [g3,c4] ~ [g3,c4] ~@2", // F5 E5 C5
  X: "~@4 f4 ~ f4 ~ [c4,f4] [b3,e4] ~ [g3,c4] ~ [g3,c4] ~@2", // F5 E5 C5
  Y: "[d4,a4] ~@2 [d4,a4] ~ [d4,a4] ~ [d4,a4]@2 a4 ~ d4 [f4,a4] ~ [f4,a4] ~", // D5 F
  Z: "[c4,g4]@3 [c4,g4] ~ [c4,g4] ~ [c4,g4]@2 g4 ~@2 [c4,g4] ~ [c4,e4] ~", // C5 C
  AA: "d4@3 [d4,f4] ~ [d4,f4] ~ [d4,f4]@2 f4 ~@2 [d4,f4] ~ [d4,f4] ~", // Dm
  AB: "[c4,g4]@2 c4 [c4,g4] ~ [c4,g4] ~ [c4,g4]@2 g4 ~ c4 [c4,g4]@2 c4 ~", // C5
})).s("gm_electric_guitar_jazz").gain(0.29).pan(0.7)

// other · electric guitar muted · "P.GUITAR"
const electric_guitar_muted = note("<~@29 A@3 B A@4 ~@24 A@3 B A@4 ~@33>".pickRestart({
  A: "d4@2 ~ d4 ~ d4 ~ d4 ~ d4 c4!2 d4!2 c4 ~", B: "d4@2 ~ d4 ~ d4 ~ d4 ~ d4 f4 e4 f4 e4 d4 ~",
})).s("gm_electric_guitar_muted").gain(0.43).pan(0.3)

// other · shakuhachi
const shakuhachi = note("<~@37 A B A B A B A B ~@24 A B A B A B A B ~@25>".pickRestart({
  A: "~@2 ab4 a4 b4 ab4 ~ c5 ~ c5 b4@2 a4@2 ab4@2", B: "~@2 e4 f4 ab4 f4 ~ a4 ~ a4 ab4@2 f4 [f4,ab4] e4@2",
})).s("gm_shakuhachi").gain(0.32).pan(0.3)

// chords · rock organ · "ORGAN"
const rock_organ = note("<A B@4 C@4 D@4 ~@16 C@8 ~@8 C@4 E@5 ~@7 C@8 ~@16 C@16 ~>".pickRestart({
  A: "~@12 d3 [e3,f3,g3,a3] [b3,c4,d4,e4,f4,g4,a4,b4] [c5,d5,e5,f5,g5,a5,b5,c6,d6]", // Fmaj7 Bm7b5 Cmaj7
  B: "[[d5,f5,a5] [c5,e5,g5] [bb4,d5,f5] [c5,e5,g5], [d6,a6], [e6,f6,g6] ~@63]/4", // Dm C Bb C D5 Em
  C: "[[d5,f5] [c5,e5,g5] [bb4,d5,f5] [c5,e5,g5], a5]/4", // Dm C Bb C
  D: "[[d5,f5]@16 [c5,e5,g5]@16 [bb4,d5,f5]@16 [c5,e5,g5]@13 g5 [f4,g4,a4,b4,c5,d5,e5,f5] ~, a5@61 ~@3]/4", // Dm C Bb C Fmaj7
  E: "[[d5,f5]@8 [c5,e5,g5]@8 [bb4,d5,f5]@8 [c5,e5,g5]@8 [d5,e5,f5]@3 ~@5, a5@7 ~]/5", // Dm C Bb C Dm
})).s("gm_rock_organ").gain(0.15)

// chords · string ensemble 2 · "PAD"
const string_ensemble_2 = note(`<
  ~@29 A B C D A B C D E F G H E F G H ~@16 A B C D A B C D E F G H E F G H I@4 J@2 K@2 L@8 ~@9
>`.pickRestart({
  A: "[d4,f4,a4]", B: "[c4,e4,g4]", C: "[bb3,d4,f4]", D: "[a3,c4,e4]", E: "ab4@6 a4 b4", F: "c5@6 b4 a4", G: "ab4 f4",
  H: "e4", I: "[[c4,d4,g4] [e4,f4,c5], a3]/4", J: "[c4,d4,g4,d5]/2", K: "[e4,f4,c5,g5]/2", L: "g5/2",
})).s("gm_string_ensemble_2").gain(0.19).pan(0.6)

// chords · pad sweep · "SYNTH"
const pad_sweep = note("<~@37 A@8 ~@24 A@8 ~@25>".pickRestart({
  A: "[~@3 ab4@7 ~ a4@7 ~ ab4@11 ~@2, ~ e5@4 f5@4 e5@6 ~, ~@5 b4@15 ~ c5@15 ~ b4@23 ~@4]/4",
})).s("gm_pad_sweep").gain(0.17).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ A@27 B A@15 C A@8 D A@6 B A@15 C A@7 E A@7 B A@8 F>".pickRestart({
  A: "x ~ x ~@4 x ~@2 x ~@5", B: "x!2 ~@2 x ~@3", C: "x!2 ~@6", D: "~@3 x ~@2 x ~@9", E: "~@2 x!2 ~@12", F: "x",
})).gain(0.48)

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

// drums · low tom
const low_tom = s("lt").struct("<~@84 [~@14 x!2] ~@17>").gain(0.48)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@28 [~@14 x!2] ~@31 [~@14 x!2] ~@23 [~@12 x!2 ~@2] ~@17>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@28 A ~@7 B ~@16 C ~@6 A ~@7 B ~@15 D ~@3 E ~@3 A ~@3 E ~@5>".pickRestart({
  A: "~ x", B: "~@3 x", C: "~@3 x ~@12", D: "~@2 x!2 ~@4", E: "~@5 x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@28 [~@3 x] ~@31 [~@3 x] ~@41>").gain(0.54)

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

// drums · ride bell
const ride_bell = s("rd").struct("<~@37 A@3 B A@3 C ~@24 A@3 B A@3 C ~@25>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~ x ~@4",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~ [x!16]!100 x>").gain(0.18)

stack(
  bass, piano, electric_guitar_jazz, electric_guitar_muted, shakuhachi, rock_organ, string_ensemble_2, pad_sweep, kick,
  snare, low_tom, hihat, mid_tom, open_hat, high_tom, crash, ride_bell, tambourine
)

More by Celentano