Strudelify

Dimmi dove sei

Giorgia

KeyE majorTempo68 bpm
0:00/0:00
// Dimmi dove sei — Giorgia
// 68 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 65 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(68/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(`<
  ~ A@3 B C@2 D@2 E@2 D@2 F G H I J K@2 L@2 M N@2 O P Q@4 R S@3 T U V@7 W@2 X Y@2 O P Z@4 R S@3 T AA R AB@2 ~
>`.pickRestart({
  A: "[~@2 c2@5 ~@4 g1@3 c2@2 ~ c#2@3 d2@6 ~@21 b1@2 ~ e1@45 g1@3 c2@7 ~@2 g1@2 ~ c2@3 c#2@3 d2@5 ~@13 a1@10]/3",
  B: "~@2 e1@45 ~", C: "[~@2 e2@72 ~@3 e1@2 ~ e1@5 ~@11]/2", D: "~@2 e1@24 ~@3 e1@2 ~ e1@5 ~@11",
  E: "[~@2 e1@24 ~@3 e1@2 ~ e1@5 ~@10 b1@2 ~ e2@20 ~ e1 ~@2 e1 ~@2 e1 ~@2 e1@15 ~]/2",
  F: "~@2 e1@11 ~ f#1@12 g1@12 g#1@10", G: "~ a1@23", H: "~@2 f#1@21 f#2@3 e2@22", I: "~@2 c#2@24 a1@21 ~",
  J: "~@2 g#1@21 ~@3 f#1@12 a1@10", K: "[~@2 e1@44 ~ f#2@3 e1@9 e2@37]/2",
  L: "[~@2 e2@12 ~@6 c#2@24 b1@2 ~ a#1@3 a1@23 ~ f#1@12 b1@10]/2", M: "~ e1@6 d#1@3 c#1@9 c#3@5",
  N: "[~@2 b1@17 ~ e1@23 ~ f#1@3 e1@3 a1@8 ~ a2@3 e2@3 a1@3 g#1@28]/2", O: "~ f#1@7 ~@2 g#1@9 d2@5",
  P: "~@2 a1@15 ~@3 g#1@23 ~ b1@4",
  Q: "[~@2 f#1@19 ~@2 f#1@3 b1@12 b2@6 a1@3 b1@3 c2@5 ~@4 g1@3 c2@2 ~ c#2@3 d2@25 ~@2 b1@2 ~ e1@45 g1@3 c2@7 ~@2 g1@2 ~ c2@3 c#2@3 d2@7 ~@11 a1@10]/4",
  R: "~@2 e1@14 ~ b1@3 f#2@3 e2@25",
  S: "[~@2 c2@5 ~@4 g1@3 c2@2 ~ c#2@3 d2@26 ~ b1@2 ~ e1@45 g1@3 c2@7 ~@2 g1@2 ~ c2@3 c#2@3 d2@9 ~@9 a1@10]/3",
  T: "~@2 e1@20 ~ b0@3 e1@2 ~ e1@3 c#1@3 b0@3 e1@10", U: "~@2 e2@45 ~",
  V: "[~@2 e2@17 ~ f#3@9 e1@2 ~ e1@14 ~ a1@2 ~ e2@26 ~ e1@2 ~ e1@14 ~ a1@2 ~ e2@20 ~ e3@5 ~ b1@3 e1@15 b1@2 ~ e2@20 ~ e2@2 ~@4 e1@2 ~ e1@15 b1@3 e2@17 ~ f#3@9 e1@2 ~ e1@14 ~ a1@2 ~ e2@26 ~ e1@2 ~ e1@14 ~ a1@2 ~ e2@20 ~ e2@5 ~ b1@3 e1@2 ~@13 b1]/7",
  W: "[~@2 e2@9 f#2@8 ~ c#2@24 b1@2 ~ a#1@3 a1@23 ~ f#1@12 b1@10]/2", X: "~ e1@6 d#1@3 c#1@14",
  Y: "[~@2 b1@11 ~ b1@6 c#2@6 c4@12 e1@9 e1@3 a1@8 ~ a2@3 e2@3 a1@3 g#1@28, ~@26 f#2 ~@69]/2",
  Z: "[~@2 f#1@19 ~@2 f#1@3 b1@12 b2@6 a1@3 b1@3 c2@2 ~@7 g1@3 c2@3 c#2@3 d2@25 ~@2 b1@2 ~ e1@45 g1@3 c2@7 ~@2 g1@2 ~ c2@3 c#2@3 d2@7 ~@11 a1@10]/4",
  AA: "~@2 c2@7 ~@2 g1@2 ~ c2@3 c#2@3 d2@7 ~@11 a1@10", AB: "[~@2 c2@5 ~@4 g1@3 c2@2 ~ c#2@3 d2@26 ~ b1@2 ~ e1@46]/2",
})).s("gm_electric_bass_finger").gain(0.51)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~ A B A B ~@25 A B A B A B ~@18 A B A B A B A B A C ~>".pickRestart({
  A: "~@20 d5@11 ~@7 d5@10, ~@3 d6@5 d6@4", B: "~@2 d5@3 ~@7, ~ d6@9 ~@14", C: "~ d5@5, ~ d6@23",
})).s("gm_lead_2_sawtooth").gain(0.1).pan(0.8)

// other · lead 2 sawtooth
const lead_2_sawtooth_2 = note("<A@6 ~@23 B@8 ~@16 C@7 D@5>".pickRestart({
  A: "[~@26 g#3@6 a3@3 b3@6 f#4@6 e4@21 e3@53 ~ g#4@6 a4@3 b4@6 f#5@6 e5@21 e4@77 ~@47]/6",
  B: "[~@26 g#3@6 a3@3 b3@6 f#4@6 ~@21 e3@53 ~ g#4@6 a4@3 b4@6 f#5@6 e5@21 ~@54 g#3@6 a3@3 b3@6 f#4@6 ~@21 e3@53 ~@71, ~@47 e4@99 ~@18 e4@75 e4@99 ~@46]/8",
  C: "[~@26 g#3@6 a3@3 b3@6 f#4@6 ~@21 e3@53 ~ g#4@6 a4@3 b4@6 f#5@6 e5@21 ~@54 g#3@6 a3@3 b3@6 f#4@6 ~@21 e3@53 ~ g#4@6 a4@3 b4@6 f#5@6 e5, ~@47 e4@99 ~@18 e4@75 e4@97]/7",
  D: "[~@20 e4@54 g#3@6 a3@3 b3@6 f#4@6 e4@21 e3@78 ~@46]/5",
})).s("gm_lead_2_sawtooth").gain(0.27).pan(0.7)

// other · synth strings 1
const synth_strings_1 = note("<~ A@6 ~@7 B@3 C D@2 E@3 F G@8 H@4 I@8 E@3 F J@4 K@8 L@3 M ~>".pickRestart({
  A: "[~ d4@42 b3@54 d4@41 ~ b3@54 ~ e2@72 ~@22]/6", B: "[~@2 e4@119 c#4@23]/3", C: "b3@13 a3@11",
  D: "[~ b3@23 a3@23 ~, ~ e4@93 ~@2]/2", E: "[~ g#3@17 c#4@79 d#4@19 c#4@28]/3", F: "~ d4@47",
  G: "[g#3@20 f#3@48 g#3@47 ~@48 c#4@30 d4@42 b3@54 d4@41 ~ b3@53, ~@115 f#3@78 ~@191]/8",
  H: "[~ d4@42 b3@54 d4@41 ~ b3@53]/4", I: "[~ e2@191]/8",
  J: "[g#3@20 f#3@48 g#3@47 ~@48 c#4@27 ~@2, ~@115 f#3@75 ~@2]/4",
  K: "[~ d4@42 b3@54 d4@41 ~ b3@54 d4@42 b3@54 d4@41 ~ b3@53]/8", L: "[~ d4@41 ~ b3@54 d4@47]/3",
  M: "~ [b3,d#4,g#4]@47", // G#m
})).s("gm_synth_strings_1").gain(0.15).pan(0.7)

// chords · string ensemble 2
const string_ensemble_2 = note("<~ A@4 B@8 C@4 D@5 E@6 F@8 B@8 G@2 E@6 F@8 H@5>".pickRestart({
  A: "[~@2 b5@42 g#5@54 b5@42 g#5@51 ~, ~ e4@95]/4",
  B: "[~@2 [b3,d#4,g#4,a#5]@48 [a3,c#4,f#4,a4,a5]@96 ~@96 [a3,c#4,f#4,a4,a5]@95 ~ [b3,d#4,g#4,b4]@46, ~@2 e3@191 ~ e3@190, ~@146 [b3,d#4,g#4,b4,b5]@97 ~@94 b5@47]/8", // G#m F#m G#m
  C: "[~@2 [b3,b4]@11 f#3@12 g3@12 ~ [g#3,b3,b4]@11 ~ a3@48 [f#3,a5]@23 [g#3,b5]@24 [b3,f#5]@25 d#5@9 e5@9 d#5@4, ~ e3@12 [c#4,c#5]@26 ~@106 [g#4,b4]@47, ~ e5@72 ~@23, ~@2 g#4@45 ~@3 [f#4,c#5]@96 ~@24 g#3@22]/4", // B G#m F#m G#m B5 C# G#m F#5
  D: "[~@2 [f#4,c#5]@47 ~ [b4,d#5,g#5]@47 ~ [a4,c#5]@47 b5@18 ~@30 e4@25 c#5@11 [d#5,f#5]@11, ~@2 [f#3,f#5]@143 ~@18 e5@55 f#4@22, ~@49 b3@48 c#4@47 ~ [g#4,g#5]@48 b5@37 ~@10]/5", // F#5 G#m A D#m F# G#
  E: "[~ b5@18 e5@28 ~@2 f#4@18 ~ g4@17 [f4,f5]@12 g#4@18 [f#4,b5]@30 [e4,a5]@17 ~@79 [a4,a5]@18 b4@6 b4@22 ~, ~ [g#4,g#5]@46 d5@50 e5@190 ~, ~@47 a5@18 ~@2 a5@19 ~@11 c#5@145 ~@46, ~@162 f#4@29 g#4@19 ~ f#4@76 ~, ~@163 b5@31 c#6@48 ~@17 b5@29]/6", // F B5 A5 A G#
  F: "[~@2 b5@42 g#5@54 b5@42 g#5@53 ~ b5@42 g#5@54 b5@42 g#5@51 ~, ~ e4@96 e4@95]/8",
  G: "[~ g#5@18 ~@30 e4@25 c#5@11 [d#5,f#5]@11, ~ g#4@48 b5@37 ~@10, ~@19 e5@55 f#4@22]/2", // D#m
  H: "[~@2 b5@42 g#5@53 ~ b5@48 g#5@48 ~@46, ~@49 e4@48 ~@23]/5",
})).s("gm_string_ensemble_2").gain(0.2)

// drums · kick
const kick = s("bd").struct(`<
  A B@3 C D@8 E F@4 G@2 B H B C B C B I B@3 C B@3 C D@8 B H B C B C B H B@3 C B@3 C B C J K ~
>`.pickRestart({
  A: "~@2 x", B: "~@2 x ~@17 x ~@26 x", C: "~ x ~@8 x ~@13", D: "~@2 x ~@26 x ~@2 x ~@15",
  E: "~ x ~@5 x ~@5 x ~@5 x ~@4", F: "~@2 x ~@8 x ~@8 x ~@8 x ~@2 x ~@15", G: "~@2 x ~@20 x ~@5 x ~@2 x ~@15",
  H: "~ x ~@8 x ~@2 x ~@10", I: "~ x ~@8 x ~@2 x ~@2 x ~@7", J: "~@2 x ~@8 x ~@8 x ~@8 x ~@18", K: "~ x ~@22",
})).gain(0.57)

// drums · snare
const snare = s("sd").struct(`<
  A B C@2 D E F E F E F E F ~ G@3 H G H G H G I G I G J B C@2 K B C@3 E F E F E F E F G H G I G I G H B C@2 K B C@4 K L
  ~@2
>`.pickRestart({
  A: "~@35 x ~@5 x ~@2 x ~@3", B: "~@7 x ~@8 x ~@2 x ~@4", C: "~@5 x ~@8 x ~@17 x ~@5 x ~@9",
  D: "~@5 x ~@8 x ~@17 x ~@15", E: "~@14 x ~@32 x", F: "~@7 x ~@16", G: "~@7 x ~@11 x ~@4",
  H: "~@14 x ~@23 x ~@5 x ~@2 x", I: "~@14 x ~@23 x ~@8 x", J: "~@14 x ~@20 x ~@2 x ~@2 x ~@2 x ~@2 x",
  K: "~@5 x ~@8 x ~@17 x ~@5 x ~@5 x ~@2 x", L: "~@14 x ~@2 x ~@14 x ~@5 x ~@2 x ~@2 x ~@2 x",
})).gain(0.45)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A@4 B C B C B C B C ~@15 A@8 B C B C B C B C ~@8 A@10 ~@3>".pickRestart({
  A: "~@29 x ~@18", B: "~@23 x ~@24", C: "~@23 x ~@23 x",
})).gain(0.28)

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

// drums · open hat
const open_hat = s("oh").struct("<~ A B A B@10 C D C D C D C D@3 C D@11 B@8 D@4 C D@13 E ~@2>".pickRestart({
  A: "~@5 x ~@5 x", B: "~@11 x", C: "~@2 x ~@11 x ~@11 x ~@11 x ~@8 x", D: "~@14 x ~@11 x ~@11 x ~@8 x",
  E: "~@14 x ~@14 x ~@18",
})).gain(0.28)

// drums · ride
const ride = s("rd").struct("<~@13 [~ x ~@5 x ~@5 x ~@5 x ~@4] ~@51>").gain(0.28)

// drums · splash
const splash = s("cr").struct(`<
  ~ A ~ A ~ A ~@8 A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~@3 A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ B A ~
>`.pickRestart({
  A: "~ x ~@22", B: "~ x ~@8 x ~@13",
})).gain(0.45)

// drums · splash · soft notes
const splash_soft = s("cr").struct("<~@5 A ~@12 A ~@17 A ~@3 A ~@24>".pickRestart({
  A: "~ x ~@22",
})).gain(0.23)

// drums · congas
const congas = s("conga:13").struct("<~@36 [~@11 x ~@26 x ~@2 x ~@6]!8 [~@11 x ~@23 x ~@2 x ~@9]!8 ~@13>").gain(0.91)

stack(
  bass, lead_2_sawtooth, lead_2_sawtooth_2, synth_strings_1, string_ensemble_2, kick, snare, snare_soft, hihat,
  open_hat, ride, splash, splash_soft, congas
)

More by Giorgia