Strudelify

Se non avessi te

Tozzi

KeyC majorTempo102 bpm
0:00/0:00
// Se non avessi te — Tozzi
// 102 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 117 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(102/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.

// chords · piano
const piano = note("<~@2 A B@7 C@2 ~@105>".pickRestart({
  A: "c3@5 ~@2 c3, c2@15 ~, [g3,c4,e4]@3 [g3,c4,e4], ~@5 c3@2 ~", // C
  B: "[[g3,a#3,e4]@12 ~@4 f2@6 ~@2 [g3,d4]@8 [g3,e4]@16 a#2@15 ~ [f1,f2,f3,a3,c4]@8 [g2,g3]@8 c3@10 ~@4 c3@2 [c2,c3,c4,e4]@16, [a#1,a#2,c4]@14 a#2@10 [g1,g2,b3]@23 ~ [a#1,g3,a#3,e4]@24 ~@18 c3@4 ~@18, ~@12 [a#3,e4]@19 ~@49 g3@12 g3@20, ~@12 g3@10 f2@9 ~ [c2,c3,c4]@31 ~@17 [c2,c4,e4]@16 ~@16, ~@16 [f1,f3,a3,c4]@15 ~@41 [g1,b3,d4]@23 ~@17]/7", // Edim G5 C F G C A#sus2 G …
  C: "[c2,c3,g3,c4]/2", // C5
})).s("gm_piano").gain(0.28)

// bass · fretless bass
const bass = note(`<
  ~@2 A B C A B C D@3 A E F G H D@2 I A J F G H D K D A E F L H M N D A J O G P A Q R S T F U V S H D A E O G H A B F L
  W D X D A E F L H M N D A J O G P A Q R S T F U V S H D A E O G H A B F C A Q R S A B F C A Q R S A B F C A Q R Y
>`.pickRestart({
  A: "c2@5 ~ c2 ~ c2@8", B: "a#1@5 ~ a#1 ~ a#1@8", C: "f1@5 ~ f1 ~ g1@8", D: "c2@5 ~ c2 ~ c2@7 ~",
  E: "a1@5 ~ a1 ~ a1@7 ~", F: "a1@5 ~ a1 ~ a1@8", G: "f1@4 ~@2 f1 ~ f1@8", H: "g1@5 ~ g1 ~ g1@8",
  I: "c2@4 ~@2 c2 ~ c2@6 ~@2", J: "a1@4 ~@2 a1 ~ a1@7 ~", K: "c2@5 ~ c2 ~ c2@2 ~@2 c2@2 g1 a1", L: "f1@5 ~ f1 ~ f1@8",
  M: "a#1@4 ~@2 a#1 ~ a#1@7 ~", N: "a1@5 ~ a1 ~ a#1@6 g1@2", O: "a1@4 ~@2 a1 ~ a1@8", P: "g1@4 ~@2 g1 ~ g1@8",
  Q: "a#1@5 ~ a#1 ~ a#1@6 ~@2", R: "f1@5 ~ f1 ~ f1@5 ~ f1@2", S: "g1@5 ~ g1 ~ g1@7 ~", T: "c2@5 ~ c2 ~ c2@5 ~ c2 ~",
  U: "f#1@5 ~ f#1 ~ f#1@8", V: "d1@5 ~ d1 ~ d1@8", W: "d2@5 ~ d2 ~ g1@8", X: "c2@5 ~ c2 ~ c2@6 g1 a1", Y: "g1@5 ~@11",
})).s("gm_fretless_bass").gain(0.25)

// chords · pad warm
const pad_warm = note(`<
  A@2 B@8 ~ C@4 D@8 E@3 F@5 G H I F@5 J@3 K G L@6 M@5 N@6 O@2 F@5 G H I F@5 J@3 K G L@6 M@5 P@5 Q@2 K R@5 Q@2 K R@5 Q@2
  K S
>`.pickRestart({
  A: "[c2,c3,d4,g4]/2", B: "[g3,c4,g4]/8", C: "[g4 ~@2 f4, c5@63 ~, e4@3 ~, ~ a4@3]/4",
  D: "[[d4,b4] ~@6 f4, g4@5 a4@3, ~ c5@7, ~ e4@6 ~]/8", E: "[[d4,b4] [e4,c5]@2, g4]/3",
  F: "[g4@2 ~@2 f4, c5, e4@4 ~, ~@2 a4@3]/5", G: "[d4,g4,b4]", H: "[d4,f4,a#4]", I: "[e4,a4,c5]@3 [f4,a#4,d5]",
  J: "[[d4,b4] ~ a#4, g4, ~ [e4,c5]@2]/3", K: "[f4,a4,c5]",
  L: "[~@3 d5 [g4,b4]@2, c5 ~, e4 d4@2, ~ a4@3 ~@2, ~ f#4 ~]/6", M: "[~@4 f4, c5, e4@4 ~, ~@2 a4@3]/5",
  N: "[[d4,b4]@2 ~@2 a#4@2 ~@5 [g4,b4], g4@6 a4@5 ~, ~ c5@4 d5, ~@2 e4@6 f4@3 ~]/6", O: "[e4,g4,c5]/2",
  P: "[[d4,b4]@2 ~@2 a#4@2 ~@2 f4 ~, g4@6 a4@3 ~, ~@2 c5@7 ~, ~ e4@3 ~]/5", Q: "[~ a#4, [e4,c5]]/2",
  R: "[[d4,b4]@2 ~@2 a#4@2 ~@2 f4 ~, g4@4 ~@2 a4@3 ~, ~@2 c5@7 ~, ~ e4@3 ~]/5", S: "[d4,g4,b4]@3 ~",
})).s("gm_pad_warm").gain(0.1)

// chords · pad warm · soft notes
const pad_warm_soft = note("<A@2 ~@94 B ~@7 B ~@7 B ~@4>".pickRestart({
  A: "c4/2", B: "~ [d4,g4,d5]",
})).s("gm_pad_warm").gain(0.06)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@2 A B C A B C D@2 A@2 E@2 F G A@2 D H E@2 F I A J A@2 E@2 F G B K L A M E F G A B F G A E N O P G D A E@2 F G A B E
  F Q A R A@2 E@2 F G B K L A M E F G A B F G A E N O P G D A E@2 F G A B E C A B F G A B E C A B F G A B E C A B F S
>`.pickRestart({
  A: "c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~@3 c3 ~", B: "a#2 ~ a#2 ~@3 a#2 ~ a#2 ~ a#2 ~@3 a#2 ~",
  C: "f2 ~ f2 ~@3 f2 ~ g2 ~ g2 ~@3 g2 ~", D: "c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~@5", E: "a2 ~ a2 ~@3 a2 ~ a2 ~ a2 ~@3 a2 ~",
  F: "f2 ~ f2 ~@3 f2 ~ f2 ~ f2 ~@3 f2 ~", G: "g2 ~ g2 ~@3 g2 ~ g2 ~ g2 ~@3 g2 ~",
  H: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~@3 c3 ~", I: "g2 ~ g2 ~ g2 ~ g2 ~ g2 ~ g2 ~@3 g2 ~",
  J: "c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~@3 g2 a2", K: "a2 ~ a2 ~@3 a2 ~ a#2 ~@3 a#2 ~ a#2 ~",
  L: "c3 ~ c3 ~@3 c3 ~ c3 ~ c3 ~ c3 ~@3", M: "a2 ~ a2 ~@3 a2 ~ a2 ~ a2 ~@5",
  N: "f#2 ~ f#2 ~@3 f#2 ~ f#2 ~ f#2 ~ f#2 ~@3", O: "d3 ~ d3 ~@3 d3 ~ d3 ~ d3 ~@3 d3 ~",
  P: "g2 ~ g2 ~@3 g2 ~ g2 ~ g2 ~@5", Q: "d3 ~ d3 ~@3 d3 ~ g2 ~ g2 ~@3 g2 ~", R: "~@2 c3 ~@3 c3 ~ c3 ~ c3 ~@3 g2 a2",
  S: "g2 ~ g2 ~@3 g2 ~@9",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0)

// other · piano
const piano_2 = note("<~@2 [~ c4 d4 e4]!114 ~>").s("gm_piano").gain(0.25).pan(1)

// other · string ensemble 2
const string_ensemble_2 = note(`<
  ~@26 A@4 B C D E F@4 B G@3 B H@3 I@2 J@2 K@7 L@2 M@4 A@4 B C D E F@4 B G@3 B H@3 I@2 J@2 K@7 L@2 N@2 O B P@2 L@2 N@2 O
  B P@2 L@2 N@2 O B Q
>`.pickRestart({
  A: "[~ [g3,g5]@15]/4", B: "[a3,a5]", C: "[g3,g5]", D: "[a#3,a#5]", E: "[a3,a5] [a#3,a#5]", F: "[g3,g5]/4",
  G: "[[g3,g5]@9 [c4,c6] [d4,d6] [g4,g6]]/3", H: "[g3,g5]/3", I: "[a3,a5]/2", J: "[b3,b5]/2", K: "[g3,g5]/7",
  L: "[c4,c5] [d4,d5] [e4,e5] [g4,g5]", M: "[[c4,c5]@63 ~]/4", N: "[c4,c5]/2", O: "~ [c4,c6] [d4,d6] [g4,g6]",
  P: "[g3,g5]/2", Q: "[g3,g5]@3 ~",
})).s("gm_string_ensemble_2").gain(0.12)

// other · string ensemble 1
const string_ensemble_1 = note("<~@26 A@4 ~@4 A@4 ~@25 A@4 ~@4 A@4 ~@42>".pickRestart({
  A: "[~@4 [c3,c4]@45 ~@15]/4", // C
})).s("gm_string_ensemble_1").gain(0.56).pan(0.6)

// other · pad metallic
const pad_metallic = note("<~@18 A@2 B C D@3 ~@25 A@2 B C D@3 ~@30 A@2 B C D@3 ~@23>".pickRestart({
  A: "c5/2", B: "g5@3 a5", C: "g5@3 e5", D: "c5/3",
})).s("gm_pad_metallic").gain(0.4).pan(0.3)

// drums · kick
const kick = s("bd").struct("<~@2 [x ~@2 x!2 ~@3]!115>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@2
  [~ x ~ x]!60
  [~@4 x ~@7 x ~ x!2]
  [~ x ~ x]!23
  [~@4 x ~@7 x ~ x!2]
  [~ x ~ x]!29
  [~ x ~@2]
>`).gain(0.72)

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

// drums · low tom
const low_tom = s("lt").struct("<~@41 [~@7 x] ~@36 [~@7 x] ~@38>").gain(0.72)

// drums · mid tom
const mid_tom = s("mt").struct("<~@41 [~@5 x!2 ~] ~@36 [~@5 x!2 ~] ~@38>").gain(0.72)

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

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

// drums · high tom
const high_tom = s("ht").struct("<~@41 [~@5 x!3] ~@36 [~@5 x!3] ~@38>").gain(0.56)

stack(
  piano, bass, pad_warm, pad_warm_soft, electric_guitar_muted, piano_2, string_ensemble_2, string_ensemble_1,
  pad_metallic, kick, snare, hihat, low_tom, mid_tom, open_hat, crash, high_tom
)

More by Tozzi