Strudelify

Un'ora sola ti vorrei

Giorgia

KeyG majorTempo73 bpm
0:00/0:00
// Un'ora sola ti vorrei — Giorgia
// 73 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 71 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(73/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
const bass = note(`<
  ~@8 A ~@11 B C D E F G H I J K L M N O P Q R S T U@6 V@2 I W X L Y N O Z AA AB AC T U@12
>`.pickRestart({
  A: "~@12 [a1,a2]@2 ~ [a1,a2]@3 [g1,g2]@2 [e1,e2] [d1,d2]@3", B: "[b0,b1]@2 ~@9 [f#1,f#2] [b0,b1]@2 ~@9 b1",
  C: "[c1,c2]@2 ~@9 [c1,c2] [c1,c2]@3 ~@8 c2", // C
  D: "[b0,b1]@2 ~@7 d2@2 d#2 [e2,e3]@2 ~ [d2,d3]@2 ~ [e2,e3]@2 [d2,d3] [b1,b2]@2 ~", // B E D E D B
  E: "[a1,a2]@2 ~@9 [e1,e2] [d1,d2]@5 ~@6 [d1,d2]", // A E D
  F: "[g1,g2]@2 ~@6 g1 f#1@2 e1 [e1,e2]@2 ~@3 b1 [d2,d3]@2 ~ [b1,b2]@2 e1", G: "[a1,a2]@2 ~@9 [a1,a2] [d1,d2]@4 ~@7 d1",
  H: "[g1,g2]@5 ~ [f#1,f#2]@3 [f#1,f#2]@3", I: "[b0,b1]@2 ~@9 b1 [b0,b1]@2 ~@7 [d1,d2]@2 [d#1,d#2]",
  J: "[e1,e2]@2 ~@6 [e1,e2] [g1,g2]@2 ~ [f#1,f#2]@2 ~@4 [a#1,a#2]@6", // E G F# A#
  K: "[b0,b1]@3 ~@9 [e1,e2]@6 [e1,e2] [d1,d2] [c#1,c#2] [c1,c2] [b0,b1] [a#0,a#1]", // B E D C# C B A#
  L: "[a0,a1]@2 ~@6 [a0,a1] [c1,c2]@2 ~ [d1,d2]@3 ~@5 [d1,d2] [e1,e2]@2 [d1,d2]", // A C D E D
  M: "[g1,g2]@2 ~@10 [e1,e2]@2 [d1,d2] [e1,e2]@2 [d1,d2] [e1,e2]@3 [d1,d2]@3", // G E D E D E D
  N: "[b0,b1]@2 ~@9 [f#1,f#2] [b0,b1]@4 ~@5 [b0,b1]@3", O: "[c1,c2]@4 ~@7 [c1,c2] [c1,c2]@3 ~@8 c2",
  P: "[b0,b1]@4 ~ [b0,b1] [d1,d2]@2 ~ [d1,d2]@2 ~ [e1,e2]@2 ~ [e1,e2]@2 ~ [g#1,g#2]@2 ~ [g#1,g#2]@2 ~", // B D E G#
  Q: "a2 a2@2 [d1,d2], a1@3 ~", R: "[g1,g2]@4 ~ [b0,b1] [d1,d2]@2 [b0,b1] [d1,d2]@3 [e1,e2]@7 ~@5",
  S: "[a0,a1]@4 ~@4 [a0,a1] [b0,b1]@2 [c1,c2] [d1,d2]@10 ~ d1", T: "[g1,g2]@3 ~@8 g1 g1@3 ~@9",
  U: "[g1,g2]@11 [g1,g2] [g1,g2]@2 ~@10", // G
  V: "[[g1,g2]@11 [g1,g2] [g1,g2]@2 ~ [g1,g2] ~@2 [g1,g2]@8 ~@3 [d2,d3] [d2,d3]@2 [d2,d3] [b1,b2] ~ [a1,a2] [g1,g2]@3 [f#1,f#2]@2 [e1,e2] [f#1,f#2]@6]/2", // G D B A G F# E F#
  W: "[e1,e2]@2 ~@6 [e1,e2] [g1,g2]@2 ~ [f#1,f#2]@2 ~@4 [f#1,f#2]@6", X: "[b0,b1] ~@3 [e1,e2]@4",
  Y: "[g1,g2]@2 [f#1,f#2] b1", // G F#
  Z: "[b0,b1]@4 ~ [b0,b1] ~@2 [b0,b1] [d1,d2]@2 [d#1,d#2] [e1,e2]@2 [d1,d2] [e1,e2]@3 [g1,g2]@3 [b1,b2]@3", // B D D# E D E G B
  AA: "[a1,a2]@3 ~@6 [c1,c2]@2 [c#1,c#2] [d1,d2]@6 [e1,e2]@6", // A C C# D E
  AB: "[g1,g2]@6 [f#1,f#2]@6 [e1,e2]@3 ~@5 e1 [g1,g2]@2 e1", // G F# E G
  AC: "[a0,a1]@3 ~@5 [a0,a1] [b0,b1]@2 [c1,c2] d2 a1 e1 d1@4 ~@4 d1", // A B C
})).s("gm_electric_bass_finger").gain(0.54)

// bass · electric bass finger · soft notes
const bass_soft = note("<~@20 A B C ~ D E F G H ~ I ~@2 B ~@13 G H ~ I ~@2 B ~@2 J ~@14>".pickRestart({
  A: "~@23 b0", B: "~@23 c1", C: "~@9 d3@2 d#3 ~@2 [b1,b2] ~@2 [b1,b2] ~@5 [g1,g2]",
  D: "~@8 g2 f#2@2 e2 ~@5 b2 ~@2 [b1,b2] ~@2 e2", E: "~@23 d2", F: "~@11 [g1,g2] ~@12", G: "~@11 b0 ~@8 [b0,b1] ~@3",
  H: "~@6 [e1,e2]@2 ~@3 [e1,e2] ~@12", I: "~@11 [c#1,c#2] ~@12", J: "~@20 e2 ~@2 e2",
})).s("gm_electric_bass_finger").gain(0.34)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~@18 A@2 ~@11 B@5 C ~ D ~@4 E F G H ~@4 B@5 C ~ D ~@4 I F G E F G F J
>`.pickRestart({
  A: "[~@18 [g4,d5,g5]@2 [g4,d5,g5]@27 ~]/2", // G5
  B: "[~@24 [f#4,b4]@13 ~@11 [c4,e4]@13 ~@11 [f#4,b4]@11 ~ [d4,g#4]@11 ~@2 c4@12 ~@11, ~@23 d4@14 ~@10 g3@13 ~@11 d4@12 b3@12 e3@13 ~@12, ~@96 g3@13 ~@11]/5", // B5 C B5 Ddim
  C: "~@6 d4@3 ~@3 e4@11 ~, ~@3 g4@8 ~@13, ~@9 d4@8 ~@7", D: "~@3 [g4,d5,g5]",
  E: "[g4,d5,g5]@4 ~@2 [g4,d5,g5]@2 [g4,g5] ~@2 [g4,d5,g5] ~@3 [g4,d5,g5] ~@2 [g4,d5,g5]@2 [g4,d5,g5] ~@3", // G5 G G5
  F: "~@6 [g4,d5,g5]@4 ~ [g4,d5,g5] ~@3 [g4,d5,g5] ~@2 [g4,d5,g5]@5 ~", // G5
  G: "~@6 [g4,d5,g5]@4 ~ [g4,d5,g5] ~@3 [g4,d5,g5] ~@2 [g4,d5,g5]@2 [g4,d5,g5] ~@3", // G5
  H: "~@6 [g4,d5,g5]@4 ~ [g4,d5,g5] ~@3 [g4,d5,f#5] ~@2 [b4,d5,f#5]@6", // G5 Gmaj7 Bm
  I: "[g4,d5,g5]@4 ~@2 [g4,d5,g5]@2 [g4,g5] ~@2 [g4,d5,g5] ~@3 [g4,d5,g5] ~ g4 [g4,d5,g5]@2 [g4,d5,g5] ~@3", // G5 G G5
  J: "~@6 [g4,d5,g5]@4 ~ [g4,d5,g5] ~@3 [g4,d5,g5] ~@8", // G5
})).s("gm_electric_guitar_clean").gain(0.26).pan(0.7)

// chords · electric guitar clean · soft notes · G5
const electric_guitar_clean_2 = note(`<
  ~@43
  [~@5 [g4,d5,g5] ~@2 d5 ~@5 [g4,d5,g5] ~@2 [g4,d5,g5] ~@6]
  ~@19
  [~@5 [g4,d5,g5] ~@2 d5 ~@5 [g4,d5,g5] ~@2 [d5,g5] ~@6]
  ~@2
  [~@5 [g4,d5,g5] ~@2 d5 ~@5 [g4,d5,g5] ~@2 [g4,d5,g5] ~@6]
  ~@4
>`).s("gm_electric_guitar_clean").gain(0.15).pan(0.7)

// other · vibraphone
const vibraphone = note(`<
  ~@3 A B C D E F ~@2 G H I F J K L F G H M N O P Q R S T U V W H M N O P Q R ~@8 S X U V Y H M N O P Z R ~@12
>`.pickRestart({
  A: "~@6 b4 ~ b4 ~ b4@2 c5@5 ~ b4@2 a4@2 g4@2", B: "b4@7 ~@17", C: "~@6 b4 ~ b4 ~ d5@2 c5@5 ~ b4@2 a4@2 g4@2",
  D: "b4 a4@2 ~@3", E: "~@6 a4 ~ a4 ~ a4@2 b4@3 a4@3 g4@3 e4@3", F: "d4 ~",
  G: "~@6 g4@2 a4@2 b4@2 a4@2 g4@2 ~ b4@4 g4@3", H: "f#4@2 ~", I: "~@6 e4@2 f#4@2 g4@2 f#4@2 e4@2 ~ g4@4 e4@3",
  J: "~@6 c4@2 d4@2 e4@2 d4@2 ~ c4@2 ~ g3@3 a3@2 ~", K: "b3@4 d4@3 ~", L: "~@6 a3@2 b3@2 c4@2 d4@7 ~ e4@4",
  M: "~@6 e4@2 f#4@2 g4@2 f#4@2 e4@2 g4@4 e4@3 ~", N: "d4@10 ~ e4@12 ~",
  O: "~@6 c4@2 d4@2 e4@2 d4@2 ~ c4@2 ~@3 g3@2 a3@2", P: "b3@3 ~ d4@3 ~", Q: "~@6 a3@2 b3@2 c4@2 d4@7 ~@3 e4 ~",
  R: "g4 ~", S: "~@3 f#4 ~ f#4!2 ~ f#4 e4 ~ d4 ~@3 f#4 ~ f#4!2 ~ f#4 d4@2 ~",
  T: "f#4@3 e4@2 ~@3 d4@2 e4@2 d4@5 ~ d4 ~ d4@4", U: "~@3 f#4 ~ f#4!2 ~ f#4 d4@2 ~@4 f#4 ~ f#4!2 ~ f#4 d4 ~@2",
  V: "g4@11 ~ a4@2 ~ a4 ~ a4@3 g4@2 a4@2", W: "b4@3 ~@3 b4@2 b4@2 b4@2 a4@2 g4@2 ~ b4@4 g4@3",
  X: "f#4@3 e4@2 ~@3 d4@2 e4@2 f#4@5 ~ e4@2 ~ d4@3", Y: "b4@3 ~@3 d5@2 b4@2 b4@2 a4@2 g4@2 ~ b4@4 g4@3",
  Z: "~@6 a3@2 b3@2 c4@2 d4@7 ~@2 b4@3",
})).s("gm_vibraphone").gain(0.17)

// bass · slap bass 1
const bass_2 = note("<~@23 A ~@3 B ~@4 C ~@14 B ~@4 C ~@18>".pickRestart({
  A: "~@17 d2 ~@6", B: "~@17 b2 ~@6", C: "~@17 b1 ~@6",
})).s("gm_slap_bass_1").gain(0.8)

// chords · string ensemble 1
const string_ensemble_1 = note("<~@32 A B C D E F G@8 ~@6 A B C D E F G@8 ~@5>".pickRestart({
  A: "[d4,f#4,b4]", B: "[e4,g4,c5]", C: "[f#4,b4,d5] [e4,g#4,e5]", D: "[c4,g4,c5] [d4,a4,d5]",
  E: "g5@3 f#5 [g4,b4,e5]@4, [g4,b4] ~", F: "[e4,g4,c5] [d4,f#4,a4]", G: "[~@39 g5 ~@24, [g3,g4,b4]]/8",
})).s("gm_string_ensemble_1").gain(0.4).pan(0.3)

// other · piano
const piano = note("<~@26 [b3 d4 c#4 a#3] ~@44>").s("gm_piano").gain(0.48).pan(0.6)

// other · sitar
const sitar = note("<~@32 [~@2 b3 d4] [e4 ~@2] ~@18 [~@2 b3 d4] [e4 ~@2] ~@17>").s("gm_sitar").gain(0.48).pan(0.2)

// chords · piccolo · G Am G Am G Am G Am …
const piccolo = note(`<
  ~@39
  [[b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] ~@2]!8
  ~@12
  [[b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] [b3,d4,g4] [c4,e4,a4] ~@2]!12
>`).s("gm_piccolo").gain(0.56).pan(0.3)

// chords · synth strings 2
const synth_strings_2 = note("<A@2 ~@18 B C D E F G H ~@44>".pickRestart({
  A: "[g1,a3,b3,d4,f#4]/2", B: "[b2,a3,d4,f#4]@11 ~", C: "[c3,d4,e4,g4]@23 ~",
  D: "[b2,a3,d4,f#4]@4 ~@2 a3@2 ~ g#3@2 ~, ~@6 [e2,d4]@5 ~", E: "a2@3 ~ d2@4, [g3,c4]@23 ~",
  F: "[g2,b3,d4]@5 ~ [e2,g3,d4]@6", G: "[a2,c4,e4,g4]@11 ~ [d2,c4,d4,f#4]@10 ~@2",
  H: "[g2,b3,d4,g4]@9 ~@3 c#4@6 a#3@5 ~, ~ f#2, ~@4 f#4@3 ~", // G
})).s("gm_synth_strings_2").gain(0.16)

// chords · distortion guitar · G5
const distortion_guitar = note("<~@18 [~@12 [g4,d5,g5]!6 ~@6] ~@52>").s("gm_distortion_guitar").gain(0.29).pan(0.7)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@9
  [~@11 x ~@12]!19
  [~@8 x ~@2 x ~@11 x]
  ~@2
  [~@11 x ~@12]!17
  [~@8 x ~@2 x ~@11 x]
  ~@2
  [~@11 x ~@12]!20
>`).gain(0.48)

// drums · snare
const snare = s("sd").struct("<~@9 [~ x ~ x]!62>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct("<~@4 A ~ A ~@2 B@18 C B C B@9 C B@3 C B@3 C B C B@9 C B@3 C B@2 C B@3 D>".pickRestart({
  A: "~@23 x", B: "x ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x",
  C: "~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x", D: "~@2 x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!2 ~@5",
})).gain(0.32)

// drums · open hat
const open_hat = s("oh").struct("<~@5 x ~ x [~ x ~@2] ~@62>").gain(0.16)

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

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!8 [~ x ~@2] ~@62>").gain(0.4)

// drums · shaker
const shaker = s("sh").struct("<[x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2 x ~ x!2 ~@2]!8 [x ~ x!2 ~@2 x ~@17] ~@62>")
  .gain(0.24)

stack(
  bass, bass_soft, electric_guitar_clean, electric_guitar_clean_2, vibraphone, bass_2, string_ensemble_1, piano, sitar,
  piccolo, synth_strings_2, distortion_guitar, kick, kick_soft, snare, hihat, open_hat, crash, tambourine, shaker
)

More by Giorgia