Strudelify

Una sgommata e via

Paola Turci

KeyE majorTempo98 bpm
0:00/0:00
// Una sgommata e via — Paola Turci
// 98 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 106 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 · [...]/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
const bass = note(`<
  ~@2 A B A C A B D E D F G F H A E A E D F G F I J K L M N K L M O P Q K L M N K L M O A B A C D E D F G F H E A E D F
  G F I J K L M N K L M O P Q K L M N K L M O P Q P R S K L M N K L M O P Q K L M N K L M O P@2
>`.pickRestart({
  A: "a1@2 ~ b1 ~@2 c#2@8 ~@2", B: "b1@7 a1@2 ~ b1@2 ~@4", C: "b1@7 a1@2 ~ b1@2 e2 d#2 c#2 b1",
  D: "a1@6 ~ g1@3 a1@2 ~@4", E: "b1@6 ~ a1@3 b1@2 ~@4", F: "c#2@2 ~ d#2 ~@2 e2@8 ~@2", G: "b1@7 a1@3 b1@2 ~@4",
  H: "a1@7 g1@3 a1@2 ~@4", I: "b1@2 b1 ~ b1@2 ~ a1@3 b1@2 a1@2 b1@2", J: "b1@2 b1 ~ b1@2 ~ a1@3 b1@2 b1@2 g#1@2",
  K: "e1@3 f#1@3 g#1@3 ~@3 e2@4", L: "b1@3 c#2@3 d#2@4 ~@6", M: "a1@3 b1@3 c#2@5 ~@5",
  N: "d2@3 e2@3 a1@3 b2 a2 e2 a2 b2 e2@2", O: "e2@3 g#2@3 b2@4 b1@6", P: "a1@2 ~ a1@2 ~ a1@6 ~@4",
  Q: "a1@2 ~ a1@2 ~ a1@6 a1@2 g#1@2", R: "a1@7 ~", S: "~@3 e3",
})).s("gm_fretless_bass").gain(0.53)

// chords · piano
const piano = note(`<
  ~@2 A B A B A C D ~@2 E F G ~ H ~ H ~@2 E F G ~@13 I J K ~ I J L M B A B D ~@2 E F G ~@2 H ~@2 E F G ~@26 I J K ~ I J
  L ~@3 I J K ~ I J L ~@2
>`.pickRestart({
  A: "[a3,a4,c#5]@2 ~ [b3,b4,d#5] ~@2 [c#4,c#5,e5]@8 ~@2", B: "[b3,b4,d#5]@7 [a3,a4,c#5]@2 ~ [b3,b4,d#5]@2 ~@4",
  C: "[b3,b4,d#5]@15 ~", D: "~@4 [a2,e3,b3,c#4,a4]@3 [a2,e3,b3,c#4,a4] ~@8", E: "[c#3,g#3,c#4,e4,g#4]@15 ~",
  F: "~@4 [d#4,f#4]@2 ~ [a3,c#4,e4]@2 ~ [b3,d#4,f#4] ~@5, ~@4 b3 ~@11", // D#m A B
  G: "[c#3,c#4,e4]@2 ~ [d#3,d#4,f#4] ~@2 [e3,e4,g#4]@8 ~@2", H: "[a3,c#4]@2 ~ [b2,b3,d#4] ~@2 [c#3,c#4,e4]@8 ~@2",
  I: "b4", J: "c#5, a4@3 ~@5", K: "~@3 e5@5", L: "~@3 f#5@5", M: "[a4,c#5]@2 ~ [b3,b4,d#5] ~@2 [c#4,c#5,e5]@8 ~@2",
})).s("gm_piano").gain(0.44).pan(0.3)

// chords · piano · soft notes
const piano_soft = note("<~@35 A B C D A B C E ~@43 A B C D A B C E ~@2 A B C D A B C E ~@2>".pickRestart({
  A: "[b4,e5,g#5]", B: "[d#5,f#5]", C: "~@3 g#4@5, e5", D: "[a4,d5,f#5]@3 [a4,c#5]@5", E: "[b4,e5,g#5]@3 [b4,d#5]@5",
})).s("gm_piano").gain(0.27).pan(0.3)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@5 A ~ A ~@2 B ~@3 B ~@4 B ~@3 A@2 C D E F C D E G H I C D E F C D E G ~@3 A ~@2 B ~@3 B ~@3 B ~@3 A@2 C D E F C D E
  G H I C D E F C D E G H I H J@2 C D E F C D E G H I C D E F C D E G H@2
>`.pickRestart({
  A: "b2 b3!2 b2 b3!2 b2 b3 b2 b3!2 b2 b3!2 b2 b3", B: "a2 a3!2 a2 a3!2 a2 a3 a2 a3!2 a2 a3!2 a2 a3",
  C: "e2@3 f#2@3 g#2@3 ~@3 e3@4", D: "b2@3 c#3@3 d#3@4 ~@6", E: "a2@3 b2@3 c#3@5 ~@5",
  F: "d3@3 e3@3 a2@3 b3 a3 e3 a3 b3 e3@2", G: "e3@3 g#3@3 b3@4 b2@6", H: "a2@2 ~ a2@2 ~ a2@6 ~@4",
  I: "a2@2 ~ a2@2 ~ a2@6 a2@2 g#2@2", J: "[a2@9 ~@7]/2",
})).s("gm_electric_guitar_muted").gain(0.41).pan(0.7)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@2 A B A C A D E F G H B H I J F J F G H B H K L M N O P M N O Q R@2 S T U V M N O Q W B A C E F G H B H I F J F G H
  B H K L M N O P M N O Q X@2 M N O P M N O Q X@4 Y S T U V Z AA AB AC AD AE S T U V Z AA AB AC AD AF
>`.pickRestart({
  A: "[a2,e3]@2 ~ [b2,f#3] ~@2 [c#3,g#3]@10", B: "[b2,f#3]@7 [a2,e3]@3 [b2,f#3]@4 ~@2",
  C: "[b2,f#3]@7 [a2,e3]@2 ~ [b2,f#3]@2 ~@4", D: "[b2,f#3]@15 ~", E: "e3@14 [d#3,f#3,b3]!2, a2@5 ~@3",
  F: "~@4 [d#3,f#3,b3,d#4]@3 [d#3,f#3,b3,d#4] ~@8", G: "~@4 [a2,c#3,e3]@3 [a2,c#3,e3] ~@8", H: "c#3@2 ~ d#3 ~@2 e3@10",
  I: "~@4 [e3,a3,c#4,e4] ~@7 [e3,a3,c#4,e4] ~@3", J: "[a2,e3,c#4]@2 ~ [b2,f#3,d#4] ~@2 [c#3,g#3,e4]@10",
  K: "[b2,d#3,b3]", L: "[b2,f#3,d#4]", M: "[b2,e3,g#3]", N: "[b2,d#3,f#3]", O: "a2@3 g#2@5, [c#3,e3]",
  P: "[a2,d3,f#3]@3 [a2,c#3,e3]@5", Q: "[b2,e3,g#3]@3 [b2,d#3,f#3]@5",
  R: "[~@3 a3@8 ~ b3@2 b2 c#4@2 c#3 d#4@2 d#3 e4@2 e3 f#4@3 f#3 [g#3,g#4] [b3,b4] [c#4,c#5] [b3,b4], a2@7 ~, e3@3 ~@5]/2", // G# B C# B
  S: "[g#4,g#5]@3 b4 [g#4,g#5]@9 ~ [f#4,f#5] [e4,e5], ~@4 b5 ~@11", // G# F# E
  T: "[f#4,f#5]@8 ~@2 [c#4,g#4]!2 [g#4,c#5] [c#4,g#4] [g#4,c#5]!2", // F# C#5
  U: "[c#4,b4] [c#4,g#4] [c#4,f#4] [c#4,e4] [g#3,f#4] [c#3,c#4] [g#3,e4]@5 [c#4,g#4]@5", // C#7 C#5 F#5 C#m G#7 C# C#m C#5
  V: "~ [c#5,f#5] ~ [a4,d5] ~ [f#4,a4] [a3,e4]@9 ~, [a4,a5] [f#4,f#5] [d4,d5] ~@5", // F#5 D5 F#m A5 A F# D
  W: "a2@2 ~ [b2,f#3] ~@2 [c#3,g#3]@10", X: "[~@3 a3@28 ~, [a2,e3]@7 ~]/2", Y: "~ [a2,a3]",
  Z: "[g#4,g#5]@6 [e4,e5]@2 [e4,b4]@5 ~ [c#4,c#5]!2", // G# E E5 C#
  AA: "[b3,b4] [g#3,g#4] [e3,f#3,e4,f#4] [c#3,c#4] ~ [b2,b3] [e3,e4]@5 g#3 a3 g#3 e3 c#3, ~@3 a2", // B G# Esus2 C# B E
  AB: "e2@2 e3 b2 g#2 b2 c#3 ~ e3@2 c#3 b2 [g#3,g#4]!2 [g#3,c#5] [g#3,g#4], ~@7 b2@2 ~@7, ~@2 e2 ~", // G# C#5 G#
  AC: "[c#4,c#5] [b3,b4] [g#4,b4] [c#4,c#5]@4 b4 [g#4,b4] [e4,f#4,c#5] [f#3,f#4]@6", // C# B G#m C# G#m F#7 F#
  AD: "[g#4,g#5] [g#4,a5] [g#4,g#5]!2 [g#4,a5] [g#4,g#5] [g4,g5]@8 ~@2", AE: "~@7 [e5,b5]@9, ~ a4@2 ~",
  AF: "~@7 [e5,b5]@5 ~@4, ~ a4@2 ~", // E5
})).s("gm_overdriven_guitar").gain(0.51).pan(0.4)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  ~@23 A@2 B@2 C D E@2 C F G@2 E@2 C D E@2 C F ~@18 A@2 B@2 C D E@2 C F G@2 E@2 C D E@2 C F G@4 ~ E@2 C D E@2 C F H@2
  E@2 C D E@2 C F I@2
>`.pickRestart({
  A: "[~@3 g#5, b3, ~ [a4,d#5]]/2", B: "[[b3,b4]@3 g#4@5 b4@3 ~@4 g#5, b5@15 ~, g#5@8 f#5@7 ~, ~@11 f#4@5]/2",
  C: "a4@3 g#4@5, [c#4,e5]", D: "[d4,f#5]@3 [c#4,e5]@5, a4",
  E: "[b4@3 g#4@5 b4@3 ~@4 g#5, b5@15 ~, g#5@8 f#5@7 ~, ~@11 f#4@5]/2", F: "[e4,g#5]@3 [d#4,f#5]@5, b4",
  G: "[c#4,a4]/2", H: "[c#4,a4,e5]/2", I: "[[c#4,a4,e5]@7 ~]/2",
})).s("gm_string_ensemble_2").gain(0.31).pan(0.6)

// other · distortion guitar
const distortion_guitar = note("<A@3 ~@16 B ~@4 C ~@18 A ~@13 B ~@4 C ~@43>".pickRestart({
  A: "a2!16", B: "~@4 b4 a4 f#4 a4@2 ~@7", C: "b2!16",
})).s("gm_distortion_guitar").gain(0.09).pan(0.2)

// other · guitar harmonics
const guitar_harmonics = note(`<
  [~@4 a2@2 e2@3 a2@2 ~ a2 ~@2 a2, ~@11 e2@2 ~ e2@2]
  [~ e2 a2 e2@2 a2@2 e2@2 a2 e2 a2 e2 ~ a2 e2]
  ~@104
>`).s("gm_guitar_harmonics").gain(0.21).pan(0.2)

// drums · kick
const kick = s("bd").struct(`<
  ~@2 A@23 B C B C B C B C@3 B C B C B C B C A@20 B C B C B C B C@3 B C B C B C B C@4 D E B C B C B C B C@3 B C B C B C
  B C@3
>`.pickRestart({
  A: "x ~@6 x ~@2 x ~@5", B: "x ~@2 x ~@2 x ~@9", C: "x ~@2 x ~@2 x ~@3 x ~@5", D: "x", E: "x ~@4 x ~@10",
})).gain(0.53)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B@4 C D B@5 E C B F B@3 D B@2 G H B E I J B J B@2 K L B L I J B I B M J N B D B A D E D O D G B P B E@2 P Q J P
  O R P B@3 J S C T B U V E B@2 J S E ~@2 P J W X V B L C V Y V B V O E L V@2 B Z
>`.pickRestart({
  A: "~@3 x!2 ~@7 x!2 ~@2", B: "~ x ~ x", C: "~@4 x ~@4 x ~@2 x ~@3", D: "~@3 x!2 ~@7 x ~@3", E: "~@4 x!2 ~@6 x ~@3",
  F: "~@4 x!2 ~@3 x ~@2 x!2 ~@2", G: "~@4 x ~@4 x ~@2 x!2 ~@2", H: "~@4 x!2 ~@6 x!2 ~@2", I: "~@4 x ~@7 x!2 ~ x",
  J: "~@4 x ~@6 x!2 ~@3", K: "~@4 x ~@3 x!2 ~@2 x!2 ~@2", L: "~@4 x ~@6 x!3 ~@2", M: "~@3 x!2 ~@6 x!2 ~@3",
  N: "~ x ~@2 x!2 ~@6 x ~@3", O: "~@4 x ~@7 x ~@2 x", P: "~@4 x!2 ~@5 x!2 ~@3", Q: "~@4 x ~@4 x ~@2 x!2 ~ x",
  R: "~@4 x ~@2 x ~@3 x!2 ~@2 x", S: "~@4 x!2 ~@2 x ~@3 x!2 ~@2", T: "~@4 x!2 ~@5 x!3 ~@2",
  U: "~@4 x ~@2 x ~@3 x!3 ~ x", V: "~@4 x ~@7 x!2 ~@2", W: "~@4 x!2 ~@6 x ~@2 x", X: "~@4 x ~@6 x!2 ~@2 x",
  Y: "~@4 x ~@3 x ~@3 x!2 ~@2", Z: "~ x!2 ~",
})).gain(0.35)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@3 A B C D E D E@3 F G H I J F D E ~ J D C F H K H B@2 H L@3 B@2 L ~@2 D M J N@2 D L O K P ~ B L H K D Q K L D R L S
  ~ D L K ~ L H D K T U D ~ D ~ B V L D@2 U ~@3 L D L D H B ~ L ~ H ~ H ~@6 D ~
>`.pickRestart({
  A: "~@3 x ~ x ~@7 x ~@2", B: "~@5 x ~@10", C: "~@3 x ~ x ~@10", D: "~@5 x ~@7 x ~@2", E: "~@3 x ~@9 x ~@2",
  F: "~@3 x ~@12", G: "~@3 x ~@7 x ~@4", H: "~@11 x ~@4", I: "~@13 x ~ x", J: "~@5 x ~@5 x ~@4",
  K: "~@5 x ~@5 x ~ x ~@2", L: "~@13 x ~@2", M: "~@11 x ~ x ~ x", N: "~@5 x ~@7 x ~ x", O: "~@3 x ~ x ~@7 x ~ x",
  P: "~ x ~ x ~ x ~@5 x ~ x ~@2", Q: "~@3 x ~ x ~@5 x ~@4", R: "~ x ~ x ~@7 x ~ x ~ x", S: "~ x ~ x ~@5 x ~@6",
  T: "~@7 x ~@5 x ~@2", U: "~@7 x ~ x ~@6", V: "~@11 x ~ x ~@2",
})).gain(0.24)

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

// drums · low tom
const low_tom = s("lt").struct("<~@24 [~@15 x] ~@37 [~@15 x] ~@22 [~@15 x] ~@20>").gain(0.35)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 [~@7 x] ~@37 [~@7 x] ~@22 [x ~ x!2 ~@6 x!2 ~ x!2 ~] ~@20>").gain(0.47)

// drums · crash
const crash = s("cr").struct(`<
  ~@2 A ~@5 A ~@14 A ~ A ~@3 A ~@5 A ~@3 A ~@3 A ~@3 A ~@13 A ~ A ~@3 A ~@5 A ~@3 A ~@6 A ~ A ~@3 A ~@5 A ~@3 A ~@5
>`.pickRestart({
  A: "x",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@24 [~@13 x ~@2] ~@37 [~@13 x ~@2] ~@22 [~@5 x ~ x!2 ~@3 x ~@3] ~@20>").gain(0.35)

// drums · tambourine
const tambourine = s("tb").struct("<~@2 A@23 B@18 A@20 B@21 C ~ B@19 D>".pickRestart({
  A: "x!3 ~ x!7 ~ x!4", B: "x!16", C: "x", D: "x!11 ~@5",
})).gain(0.18)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@2 [~@3 x ~@7 x ~@4]!23 ~@18 [~@3 x ~@7 x ~@4]!20 ~@43>").gain(0.12)

stack(
  bass, piano, piano_soft, electric_guitar_muted, overdriven_guitar, string_ensemble_2, distortion_guitar,
  guitar_harmonics, kick, snare, snare_soft, hihat, low_tom, open_hat, mid_tom, crash, high_tom, tambourine,
  tambourine_soft
)

More by Paola Turci