Strudelify

Tu sei l'unica donna per me

Sorrenti

KeyC majorTempo106 bpm
0:00/0:00
// Tu sei l'unica donna per me — Sorrenti
// 106 bpm, 4/4, key C 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. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): CLEAN GTR.
setcpm(106/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 · fretless bass · "FRETLESS"
const bass = note(`<
  ~ A B C D E B C D E F G H I J G H I K L M N O P Q R S T U V G H I J G H I K L B C D E B C D E F M N O P Q R S T U V G
  H G H G W X Y Z G H I J G H I K G H I J G H I K G H I J G H I K G H I J G H I AA
>`.pickRestart({
  A: "~@10 c2 ~ g2@4", B: "c2@4 ~@2 c2 ~ c2@7 ~", C: "d2@4 ~@2 d2 ~ d2@4 e2@4", D: "f2@4 ~@2 f2 ~ f2@7 ~",
  E: "c2@5 ~ c2 ~ c2@4 g2@4", F: "c3@6 g2 ~ a2@2 g2@2 e2@2 d2@2", G: "c2@5 ~ c3@4 g2@2 c2@3 ~",
  H: "d2@5 ~ d3@4 a2@2 d2@2 f2@2", I: "g2@4 ~@2 g2 ~ g2@4 g2@3 ~", J: "c2@4 ~@2 c2 ~ c2@2 a1@2 g1@2 a1@2",
  K: "c2@4 ~@2 c2 ~ c2@8", L: "c2@4 ~@2 g2 ~ c3@2 g2@2 e2@2 d2@2", M: "c2@4 ~@2 c2 ~ c2@4 g2@4",
  N: "d2@4 ~@2 d2 ~ d2@4 a2@4", O: "g2@4 ~@2 g2 ~ g2@4 a1@2 b1@2", P: "c2@4 ~@2 c2 ~ c2@5 ~ d2@2",
  Q: "e2@4 ~@2 e2 ~ e2@4 b1@4", R: "a1@4 ~@2 a1 ~ a1@4 a2@4", S: "g2@4 ~@2 g2 ~ g2@4 f#2@4",
  T: "e2@4 ~@2 e2 ~ e2@4 e2@4", U: "g#2@4 ~@2 g#2 ~ g#2@4 b2@4", V: "e2@4 ~@2 e2 ~ e2@2 c3@2 b2@2 e2@2",
  W: "d2@5 ~ d3@4 a2@2 d2@2 a2@2", X: "d3@5 ~ d2@2 d2@4 d2@4", Y: "b2 a2 g2@3 f2 d2 b1", Z: "g1!4 a1!4",
  AA: "c2@4 ~@2 c2 ~@9",
})).s("gm_fretless_bass").gain(0.35)

// other · electric guitar jazz · "JAZZ GTR"
const electric_guitar_jazz = note(`<
  ~@2 A@8 B@2 ~@27 A@8 B@2 ~@21 B@2 ~@2 C D ~@2 B@2 ~@2 C D ~@2 B@2 ~@2 C D ~@2 B@2 ~@2 E
>`.pickRestart({
  A: "[c5@4 b4 c5 b4 a4@5 e5@3 a4@5 e5@3 d5@2 c5@6 ~]/4", B: "[~ e4@2 c4@2 g3@2 e3@4 ~@5]/2", C: "~ e4@2 f4 g4@2 c5@2",
  D: "e5", E: "~ e4@2 f4 g4@2 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.36).pan(0.4)

// other · electric guitar jazz · "+HAWAIIGTR"
const electric_guitar_jazz_2 = note(`<
  ~@6 A@4 B@2 ~@31 A@4 B@2 ~@21 B@2 ~@2 C D ~@2 B@2 ~@2 C D ~@2 B@2 ~@2 C D ~@2 B@2 ~@2 E
>`.pickRestart({
  A: "[e5@4 d5 e5 d5 c5@5 g5@3 c5@5 g5@3 f5@2 e5@6 ~]/4", B: "[~ g4@2 e4@2 c4@2 g3@4 ~@5]/2", C: "~ g4@2 a4 c5@2 e5@2",
  D: "g5", E: "~ g4@2 a4 c5@2 ~@2",
})).s("gm_electric_guitar_jazz").gain(0.54).pan(0.7)

// other · lead 2 sawtooth · "SAW WAVE"
const lead_2_sawtooth = note(`<
  ~@5 A B@2 C@2 D E@2 F G H I J@2 K L ~@9 E@2 F M N@2 O P K Q ~@2 A B@2 C@2 D ~@19 R S T@2 R S T@2 R S T@2 R S T@2 R S
  T@2 R S T@2 R S T@2 R S U@2
>`.pickRestart({
  A: "~@5 c6 g5 f5", B: "[e5@5 d5@2 c5@2 [f5,a5]@2 [e5,g5]@2 [d5,f5]@3]/2",
  C: "[c5@4 [e5,g5] [f5,a5]@2 [f5,a5]@2 [e5,g5]@2 [a5,d6]@2 [g5,c6]@2 [e5,g5]]/2", D: "[c5,e5]", E: "a#4/2", F: "b4",
  G: "c5@5 g4 c5 d5", H: "e5", I: "f5@3 a5", J: "[g5@11 f5@2 e5@2 d5]/2", K: "c5@3 a4@2 g4@2 f4", L: "e4",
  M: "c5 g4 c5 d5@2 c5@2 a5", N: "f5/2", O: "g5", P: "c5 g4 c5 d5@2 c5@3", Q: "e4@13 ~@3", R: "e6", S: "d6@5 c6 b5 a5",
  T: "[g5 f5 e5@14]/2", U: "[g5 f5 e5@12 ~@2]/2",
})).s("gm_lead_2_sawtooth").gain(0.26).pan(0.7)

// chords · piano · "A.PIANO 2"
const piano = note(`<
  ~@2 A@3 B A@3 C@2 D@2 E F G@2 E F H I J K L M N O P Q R D@2 E F G@2 E F H A@3 B A@3 C@2 I J K L M N O P Q R S T S T S
  T U ~@2 D@2 E F G@2 E F D@2 E F G@2 E F D@2 E F G@2 E F D@2 E F G@2 E V
>`.pickRestart({
  A: "[[g3,c4,e4]@13 ~ [a3,c4]@14 ~@2 [a3,c4]@17 ~]/3", B: "[g3,c4,e4]@5 ~ [g3,c4,f4]@4 [g3,c4,e4]@4 d4@2",
  C: "[g3,c4,e4]@5 ~ [g3,c4,f4]@4 [g3,c4,e4]@5 ~", D: "[[g3,c4]@7 [c4,f4]@7 [c4,e4]@2]/2", E: "[b3,d4]",
  F: "[c4,e4]@5 ~ [c4,f4]@4 [c4,e4]@4 [b3,d4]@2", G: "[[c4,e4]@7 [c4,f4]@7 [c4,e4]@2]/2",
  H: "e4@4 e4 ~ [f4,a4,c5]@3 ~ [e4,g4,c5]@6, [g4,c5]@3 ~@5", I: "[c4,e4]@13 ~ [c4,e4,g4]@2, g3@11 ~@5",
  J: "[a3,d4,f4]@6 ~ [a3,c4,f4]", K: "[b3,d4,g4]@15 ~", L: "~@3 d4@2 e4@3, [c3,c4]@15 ~, ~@2 g3@13 ~",
  M: "[b3,d4,e4]@5 ~ [d4,e4,g4]@8 ~@2", N: "[c4,e4,g4]@4 c4 ~ [e4,g4,a4,c5]@8 ~@2",
  O: "a4 ~@5 [b3,d4,g4]@4 g3@2 [b3,d4,g4]@3 ~, d4@4 g3@5 ~@7, ~ b4@5 ~@10", P: "~@4 b3 ~ [b3,e4]@7 ~@3, e3@13 ~@3",
  Q: "[b3,e4]@5 ~ [b3,e4]@8 ~@2", R: "[b3,e4,g#4]@5 ~ e4@2 [b3,e4]@3 ~ [b3,e4]@2 [b3,e4]@2, ~@6 g#4@9 ~, ~@6 b3 ~@9",
  S: "[g3,c4]", T: "[c4,f4]@11 ~ [c4,f4]@4", U: "[c4,f#4]@11 ~ [c4,f#4]@4", V: "[c4,e4]@5 ~ [c4,f4]@4 [c4,e4]@4 ~@2",
})).s("gm_piano").gain(0.41)

// other · string ensemble 2 · "SLOWSTRING"
const string_ensemble_2 = note(`<
  ~@3 A@2 B@2 C D E ~ F G H I J K L@2 M N ~@6 O P Q R@2 S T R@2 S U M V A@2 B@2 C D B@2 ~@7 O P Q W@2 X@2 J Y Z AA AB AC
  AD AE@2 AC AD AE@2 AC AD AE@2 AC AD AE@2 AC AD AE@2 AC AD AE@2 AC AD AE@2 AC AD AF@2
>`.pickRestart({
  A: "[~ f3 a3 c4@5]/2", B: "g3/2", C: "f3", D: "a3", E: "g3", F: "c5", G: "a4", H: "b4", I: "c5@5 g4 c5 d5", J: "e5",
  K: "f5@3 a5", L: "[g5@11 f5@2 e5@2 d5]/2", M: "c5@3 a4@2 g4@2 f4", N: "e4", O: "~@5 d4 e4 f#4", P: "g#4@5 a4 b4 c#5",
  Q: "d5@2 c#5@2 d5@2 e5@2 f#5 d5 e5 f#5 g#5 [e5,f#5] g#5 [a5,a#5,b5]", R: "a#5/2", S: "g5", T: "c5 g4 e5 f5@2 e5@2 d6",
  U: "e5 c5 e5 f5@2 e5@3", V: "c4@15 ~", W: "[c6@6 a5 f5]/2", X: "[g5@6 a5 f5]/2", Y: "f5", Z: "f#5",
  AA: "g5@5 b4 c5 d5", AB: "e5 d5 e5 f5 g5 f5 g5 a5 b5 a5 b5 c6 d6 e6 f6 a6", AC: "g6", AD: "f6@5 e6 d6 c6",
  AE: "[b5 a5 g5@14]/2", AF: "[b5@2 a5@2 g5@25 ~@3]/2",
})).s("gm_string_ensemble_2").gain(0.26).pan(0.4)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A@2 B C D A B C D A@2 B C E A B C E A@2 B C E B F G E H@3 B C E A B C E A@2 B C D A B C D A@2 B C E B F G E H@3 B C B
  C B C I E@2 B C E A B C E A B C E A B C E A B C E A B C E A B C E A B C E J
>`.pickRestart({
  A: "[e4,g4]!2 [g3,c4,e4,g4] [g3,c4,f4,g4]@2 [g3,c4,e4,g4]@2 [g3,c4,d4,g4], [g3,c4] ~@3", // Em C Csus4 C Gsus4 C5
  B: "[e4,g4]!2 [g3,c4,e4,g4] [g3,c4,e4,g4]@2 [c4,e4]!2 [g3,c4,e4,g4], [g3,c4]@2 ~@3 [g3,g4]@2 ~", // Em C C5 G
  C: "[f4,a4]!2 [a3,d4,f4,a4] [a3,d4,f4,a4]@2 [d4,f4]!2 [a3,d4,f4,a4], [a3,d4]@2 ~@3 [a3,a4]@2 ~", // F Dm D5 A
  D: "[f4,a4]!2 [a3,c4,f4,a4] [a3,c4,f4,a4]@2 [c4,f4]!2 [a3,c4,f4,a4], [a3,c4]@2 ~@3 [a3,a4]@2 ~", // F F5 F Am A
  E: "[d4,g4]!2 [g3,b3,d4,g4] [g3,b3,d4,g4]@2 [b3,d4]!2 [g3,b3,d4,g4], [g3,b3]@2 ~@3 [g3,g4]@2 ~", // G5 G Bm G
  F: "[g4,b4]!2 [g3,d4,g4,b4] [g3,d4,g4,b4]@2 [d4,g4]!2 [g3,d4,g4,b4], [g3,d4]@2 ~@3 [g3,b4]@2 ~", // G G5 G G5 G
  G: "[e4,a4]!2 [a3,c4,e4,a4] [a3,c4,e4,a4]@2 [c4,e4]!2 [a3,c4,e4,a4], [a3,c4]@2 ~@3 [a3,a4]@2 ~", // A5 Am C Am A
  H: "[e4,g#4]!2 [g#3,b3,e4,g#4] [g#3,b3,e4,g#4]@2 [b3,e4]!2 [g#3,b3,e4,g#4], [g#3,b3]@2 ~@3 [g#3,g#4]@2 ~", // E E5 E G#m G#
  I: "[f#4,a4]!2 [a3,d4,f#4,a4] [a3,d4,f#4,a4]@2 [d4,f#4]!2 [a3,d4,f#4,a4], [a3,d4]@2 ~@3 [a3,a4]@2 ~", // F#m D D5 A
  J: "[e4,g4]!2 [g3,c4,e4,g4] [g3,c4,f4,g4]@2 ~@3, [g3,c4] ~@3", // Em C Csus4 C5
})).s("gm_acoustic_guitar_steel").gain(0.17).pan(0.7)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@21 A B ~ C ~@24 A B ~ C ~@46>".pickRestart({
  A: "~ c4@3", B: "~@2 b3@13 ~", C: "e3@3 ~",
})).s("gm_electric_guitar_clean").gain(0.2).pan(0.7)

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

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

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

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@68 B ~@7 B ~@7 B ~@7 B ~@4>".pickRestart({
  A: "~@7 x", B: "~@15 x",
})).gain(0.44)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@8 A ~@8 A ~@18 A ~@8 A ~@22 B ~@7 B ~@7 B ~@7 B ~@4>".pickRestart({
  A: "~@5 x ~@2", B: "~@7 x",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@10 A@2 ~@8 A ~@9 A ~@16 A@2 ~@9 A ~@8 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
>`.pickRestart({
  A: "x",
})).gain(0.25)

stack(
  bass, electric_guitar_jazz, electric_guitar_jazz_2, lead_2_sawtooth, piano, string_ensemble_2, acoustic_guitar_steel,
  electric_guitar_clean, kick, snare, hihat, low_tom, open_hat, mid_tom, crash
)