Strudelify

Dimmi dimmi perche

Fiorello

KeyF majorTempo98 bpm
0:00/0:00
// Dimmi dimmi perche — Fiorello
// 98 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 12 epiano2 (copy of ch 11 epiano2); ch 15 voice oohs (copy of ch 16 synth choir)
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(98/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// bass · electric bass pick
const bass = note(`<
  ~@13 A B C D A B C E F G H I F G H J K L M N O P H Q A B C D A B C E ~@2 H I F G H J K L M N ~@4 A B C D A B C E A B C
  R A B C E A B C D A B C E A B C D A B C E ~
>`.pickRestart({
  A: "f1@4 f1@3 c2 f2@4 f1@4", B: "a1@4 a1@3 e2 a2@4 a1@4", C: "bb1@4 bb1@3 f2 bb2@4 bb1@4",
  D: "c2@4 c2@3 g2 c3 ~ c2@2 c2 g2@3", E: "c2@8 ~@3 g2 c3 g2 c2@2", F: "f1@4 f1@3 c2 f1@4 f1@4",
  G: "a1@4 a1@3 e2 a1@4 a1@4", H: "bb1@4 bb1@3 f2 bb1@4 bb1@4", I: "c2@4 c2@3 g1 c2 ~ c2@2 c2 g1@3",
  J: "c2@4 c2@3 g1 c2 ~ c2@2 c2 b1@3", K: "bb1@7 f2 bb1@8", L: "a1@7 e2 a1@5 c2@3", M: "d2@7 a1 d2@8",
  N: "g1@7 d2 g1@4 d2 c2@3", O: "g1@4 g1@3 d2 g1@8", P: "a1@4 a1@3 e2 a1@6 a1@2", Q: "c2@4 c2@3 g2 c3@5 g1@3",
  R: "c2@4 c2@3 g2 c3 ~ c2 ~ c2 g2@3",
})).s("gm_electric_bass_pick").gain(0.64)

// chords · slap bass 1
const slap_bass_1 = note(`<
  ~ A B C D A B C D A B C ~ A B C D A B C ~ A B C D A B C D E F G@3 F E ~ A B C D A B C ~ A H C D A B C D E F G@2 ~@4 A
  B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~
>`.pickRestart({
  A: "~@2 [c4,f4]!2 ~@2 [f4,a4] ~@3 [c4,f4]!2 ~@2 [f4,a4] ~", // F5 F F5 F
  B: "~@2 [c4,e4]!2 ~@2 [e4,g4] ~@3 [c4,e4]!2 ~@2 [e4,g4] ~", // C Em C Em
  C: "~@2 [d4,f4]!2 ~@2 [f4,a4] ~@3 [d4,f4]!2 ~@2 [d4,f4,a4] ~", // Dm F Dm
  D: "~@2 [bb3,d4]!2 ~@2 [d4,f4] ~@3 [bb3,d4]!2 ~@2 [d4,f4] ~", // Bb Dm Bb Dm
  E: "~@2 [f4,a4]!2 ~@2 [f4,a4] ~@3 [f4,a4]!2 ~@2 [f4,a4] ~", // F
  F: "~@2 [e4,g4]!2 ~@2 [e4,g4] ~@3 [e4,g4]!2 ~@2 [e4,g4] ~", // Em
  G: "~@2 [d4,f4]!2 ~@2 [d4,f4] ~@3 [d4,f4]!2 ~@2 [d4,f4] ~", // Dm
  H: "~@2 [c4,e4]!2 ~@2 [c4,e4] ~@3 [c4,e4]!2 ~@2 [c4,e4] ~", // C
})).s("gm_slap_bass_1").gain(0.41)

// chords · epiano2
const epiano2 = note(`<
  ~ A B C D A B C D A B C ~ A B C D A B C D A B C D A B C E F G H I J K L M A B C D A B C D ~@2 C D A B C E F G H I J K
  L M A B C D A B C N A B C D A B C N A B C D A B C N A B C D A B C N ~
>`.pickRestart({
  A: "[f3,a3,c4,f4]", B: "[a2,g3,c4,e4]", C: "[bb2,f3,a3,d4]", D: "[c3,f3,bb3,d4]@6 [f3,bb3] [bb3,f4], ~@3 [c3,d4]",
  E: "[c3,f3,bb3,d4]", F: "[bb2,d4,f4,a4]", G: "[a2,db4,e4,g4]", H: "[d3,d4,f4,a4]", I: "[g3,b3,d4,g4]@15 ~",
  J: "[g2,bb3,d4,f4]", K: "[a2,b3,c4,e4,g4]", L: "[bb2,d4,f4,a4], c4@3 ~", M: "[c3,bb3,d4,f4,a4]",
  N: "[c3,f3,bb3,d4]@5 [bb3,d4,f4,a4]@2 [bb3,d4,f4,a4], ~@5 c3@3", // Bb Bbmaj7
})).s("gm_epiano2").gain(0.43).pan(0)

// other · pad new age
const pad_new_age = note(`<
  ~@9 A B C ~ D B ~ C D B ~@2 E F ~ G E F ~ H D B D B ~@4 D B ~ C D B ~@5 G E F ~ H D B D B ~@4 D B ~ C D B ~@2 D B ~ C
  D B ~@2 D B ~ C D B ~@2 D B ~ C D B ~@3
>`.pickRestart({
  A: "~@12 [f4,f5] ~@3", B: "[g4,g5] ~@15", C: "~@12 [a4,a5] ~@3", D: "[f4,a4] ~@11 [f4,f5] ~@3", E: "[f4,a4] ~@5 f4 ~",
  F: "g4@3 ~@13", G: "bb4@2 ~@2 a4@2 ~@2 f4@3 ~ d4 ~@3", H: "bb4@2 ~@2 a4@2 ~@2 f4@2 d4@3 e4 ~@2",
})).s("gm_pad_new_age").gain(0.57).pan(0.7)

// drums · rim
const rim = s("rim").struct("<[x!2] ~@93>").gain(0.4)

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

// drums · snare
const snare = s("sd").struct("<~@12 [~ x] ~@81>").gain(0.64)

// drums · clap
const clap = s("cp").struct(`<
  ~
  [x!4]!4
  [x ~ x ~ x ~@2 x!2 ~@3 x ~@3]!7
  [x ~@6 x ~@8]
  [x ~ x ~ x ~@2 x!2 ~@3 x ~@3]!80
  ~
>`).gain(0.64)

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

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

// drums · crash
const crash = s("cr").struct("<~@5 A ~@19 A ~@3 A ~@3 A ~@15 A ~@3 A ~@3 A ~@36>".pickRestart({
  A: "x",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@13 [x!16]!8 ~@16 [x!16]!8 ~@16 [x!16]!32 ~>").gain(0.32)

// drums · ht
const ht = s("ht").struct("<~@12 A ~@7 B ~@15 B ~@23 B ~@31 C D>".pickRestart({
  A: "~@11 x!3 ~@2", B: "~@8 x ~@2 x!5", C: "~@8 x ~@3 x!4", D: "x",
})).gain(0.72)

// drums · ht · soft notes
const ht_soft = s("ht").struct("<~@92 [~@11 x ~@4] [~@2 x!3 ~ x!3 ~ x!3 ~ x!2]>").gain(0.24)

// drums · mt
const mt = s("mt").struct("<~@12 [~@14 x!2] ~@81>").gain(0.72)

// drums · shaker
const shaker = s("sh").struct("<~@5 A@7 ~ A@55 B A@7 B A@7 B A@7 B ~>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@2 x ~@3 x ~ x!3 ~ x!3 ~",
})).gain(0.32)

stack(
  bass, slap_bass_1, epiano2, pad_new_age, rim, kick, snare, clap, hihat, open_hat, crash, tambourine, ht, ht_soft, mt,
  shaker
)

More by Fiorello