Strudelify

Giorni tristi

Nomadi

KeyA majorTempo118 bpm
0:00/0:00
// Giorni tristi — Nomadi
// 118 bpm, 6/8, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// 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(118/3)

// 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 · "fingered"
const bass = note(`<
  ~ A B A B C D ~ E F E G H I H I H I J K E L ~@2 E F E G H I H I H I J K E M N O P Q R S T U V W X Y X Z AA AB AC ~ E F
  E G H I H I H I AD AE E M N O P Q AF S T U V W X Y AG Z AA AB AC ~ E F E G H I H I H I AD AH AI AJ AK AL AM AN AO AP
  AJ@2 AQ AR AS AN AO AP ~
>`.pickRestart({
  A: "~@5 e2 ~@2 d2 ~@2 d2!3 ~ d2", B: "c#2 ~@15", C: "~@5 e2 ~@2 b2@7 e2", D: "a2 ~@15", E: "~@5 c#2@3 a1@4 ~@4",
  F: "~@2 a1 ~", G: "~@2 c#2 ~", H: "~@5 f#2@3 d2@4 ~@4", I: "~@2 d2 ~", J: "~@5 g#2@3 e2@4 ~@4", K: "~@2 e2 ~",
  L: "~ a1", M: "~ d2", N: "~@8 a1@3 ~@2 a1@2 ~", O: "a1@4 ~@4 a1@2 ~ b1@2 c#2@2 ~", P: "d2@8 f#2 ~@4 d2 ~@2",
  Q: "d2@7 ~ f#2 ~@2 d2@2 d#2@2 ~", R: "e2@8 g#2@2 ~ e2 ~ e2@2 ~", S: "e2@8 g#2@2 ~ e2@2 d#2 ~@2",
  T: "d2@7 ~ f#2 ~@4 d2 ~@2", U: "d2@8 f#2 ~@2 e2@2 d#2@3", V: "d2@8 f#2@2 ~@3 d2 ~@2", W: "d2@7 ~ f#2 ~@2 d2@2 d#2@3",
  X: "e2@8 g#2 ~@4 e2@2 ~", Y: "e2@8 g#2 ~@2 f#2@2 f2@3", Z: "e2@2 ~ g#2@2 e2@2 ~ d2@2 ~ b1@2 a#1@3",
  AA: "a1@8 c#2@3 ~@2 a1@2 ~", AB: "a1@4 ~ a1 ~@2 c#2@2 ~ b1@2 a1@2 ~", AC: "a1@3 ~@13", AD: "~@5 g#2@3 e2@5 ~@3",
  AE: "~@8 e2@5 ~@3", AF: "e2@8 g#2@2 ~ e2@2 e2@2 ~", AG: "e2@7 ~ g#2 ~@4 e2@2 ~", AH: "~@5 e2@2 ~ g#2@2 ~ e2@2 d2 ~@2",
  AI: "a1@5 ~@6 a1 ~ c#2 ~@2", AJ: "a1@6 ~@5 a1 ~ c#2 ~@2", AK: "d2@6 ~@5 d2 ~ f#2 ~@2",
  AL: "d2@6 ~@2 f#2 ~@2 d2 ~ c#2 ~@2", AM: "a1@6 ~@5 a1 ~ c#2@2 ~", AN: "a1@4 ~@7 a1@2 d2@2 ~",
  AO: "e2@5 ~@6 g#2@2 e2 ~@2", AP: "e2@2 ~ g#2@2 e2@2 ~ d2@2 ~ c#2@2 b1@2 ~", AQ: "d2@5 ~@6 d2 ~ f#2 ~@2",
  AR: "d2@4 ~@4 f#2 ~@2 d2 ~ c#2 ~@2", AS: "a1@4 ~@7 a1 ~ c#2@2 ~",
})).s("gm_electric_bass_finger").gain(0.47)

// other · drawbar organ · "organ 1"
const drawbar_organ = note(`<
  A B C@2 D E F ~ G H ~@2 I J ~@2 K J L M@2 ~@3 G H ~@2 I J ~@2 N O L P ~@3 Q R@2 S@2 R@4 S@4 T U V ~ G H ~@2 W J ~@2 N
  O L P ~@3 Q R@2 S@2 R@4 S@4 T U V ~ X Y ~@2 W J ~@2 N O L Z AA AB AC AD AE AF@2 AG AA AB AC AD AE AF@2 AG ~
>`.pickRestart({
  A: "~@5 e5 ~@2 a5@5 g#5 ~ g5", B: "e5 ~@4 [e5,a5,c#6] ~@2 [f#5,a5,d6]@7 ~",
  C: "[[e5,a5] ~@4 e5 ~@2 a5@4 g#5 [e5,f#5] ~@2 f#5@2 ~ e5 ~ [e5,a5,c#6] ~@2 [a5,d6]@8, c#6@2 ~@6 g#5 ~@6 c#5@2 ~@7 f#5@6 ~@2]/2", // A5 Esus2 A D5
  D: "[e5,a5,c#6]@2 ~@3 e5 ~@2 a5@5 g#5 ~ g5", E: "e5 ~@4 [b4,e5] ~@2 [e5,g#5,b5]@7 ~", F: "[c#5,e5,a5] ~@15",
  G: "~@5 e5@3 a5@5 e5 ~ [d5,d#5]", H: "c#5@2 ~ a4@6 ~@7", I: "~@5 f#5@3 a5@5 a5 ~ [g5,g#5]", J: "f#5@2 ~ d5@6 ~@7",
  K: "~@5 d5@3 g5 a5@4 a5 ~ [g5,g#5], ~@9 g#5 ~@6", // G#maj7
  L: "~@3 [c#5,d5] ~ [c#5,d5] ~@2 [c#5,d5] ~@2 [c#5,d5] ~ [c#5,d5] ~@2", // Dmaj7
  M: "[c#5!2 b4 ~ e4@5 ~ c#5 b4 e4@6 ~@14, d5@2 ~@7 d5@2 ~@21]/2",
  N: "~@5 [d5,f#5]@3 g5 a5@4 a5 ~ [g5,g#5], ~@9 g#5 ~@6", O: "f#5@5 ~@11",
  P: "c#5!2 b4 ~ e4@3 ~ c#5 ~ c#5 b4 e4@3 ~, d5@2 ~@7 d5@2 ~@5", Q: "~ g5@14 ~, [a4,c#5,e5]",
  R: "f#5 d5 ~ f#5 d5 a5 ~@2 d6 d5 ~ a5 d5 f#5 ~ d5, ~@7 d5@2 ~@7", S: "g#5 e5 ~ g#5 e5 b5 ~ e5 e6 e5 ~ b5 e5 g#5 ~ e5",
  T: "a5 e5 ~ a5 e5 c#6 e5 ~ e6 e5 ~ c#6 e5 a5 e5 ~", U: "a5 e5@2 a5 e5 c#6 e5 ~ e6 e5 ~ c#6 e5 a5 e5 ~", V: "a5 ~@15",
  W: "~@5 f#5@3 a5@5 a5 ~ g5", X: "~@5 e5@3 a5@5 e5 ~ d#5", Y: "c#5@2 ~ a4@6 ~@7, d5 ~@15",
  Z: "c#5!2 ~ b4 e4@3 ~ c#5!2 ~ b4 e4@3 a4, d5 ~@3 d5 ~@3", AA: "c#5 a4 ~ c#5 a4 e5 ~ a4 a5 a4 ~ e5 a4 c#5 ~ a4",
  AB: "[c#5,d#5] a4 ~ c#5 a4 e5 ~ a4 a5 a4 ~ e5 a4 c#5 ~ a4", AC: "d5 a4 ~ d5 a4 f#5 ~ a4 a5 a4 ~ f#5 a4 d5 ~ a4",
  AD: "d5 a4 ~ d5 a4 f#5 ~ a4 a5 a4 ~ f#5 a4 d5 ~@2", AE: "[a4,c#5] a4 ~ c#5 a4 e5 ~ a4 a5 a4 ~ [a4,e5] ~ c#5 ~ a4",
  AF: "[c#5 a4 ~ c#5 a4 e5 ~ a4 a5 a4 ~ [a4,e5] ~ c#5 ~@2 e5 b4 ~ e5 b4 g#5 ~ b4 b5 b4 ~ g#5 ~ e5 ~ b4, ~@15 a4@2 ~@11 b4@2 ~@2]/2", // A5
  AG: "e5 b4 ~ e5 b4 g#5 ~ b4 b5 b4 ~ g#5 b4 e5 ~@2",
})).s("gm_drawbar_organ").gain(0.12)

// chords · electric guitar clean · "clean"
const electric_guitar_clean = note(`<
  A B C D A B ~@2 E F@2 G H@6 I@2 E@2 J ~ E F@2 G H@6 I@2 E H E G K@2 L M N K N K L M L M O P Q ~ E F@2 G H@6 I@2 E H E
  G K@2 L M N K N K L M L M O P Q ~ E F@2 G H@6 I ~ R S T K R S U@2 V S T K R S U@2 ~
>`.pickRestart({
  A: "~@5 c#4 ~@2 e4@5 d#4 d4@2", B: "c#4 ~@15", C: "~@5 a3 ~@2 e4@2 ~ [d4,e4] [c#4,d4] ~ a3 ~", D: "d4@3 c#4 ~@12",
  E: "~@3 c#4@2 a3@3 ~@5 a3@3, e4@5 ~@3 e4@6 ~@2, ~@11 c#4@4 ~",
  F: "~@5 a3@3 ~@5 a3@2 ~, e4@6 ~@2 e4@7 ~, ~@3 c#4@4 ~@4 c#4@5",
  G: "~@3 c#4@2 a3@3 ~@5 a3@3, g4@6 ~@2 g4@7 ~, ~@11 b3@5", H: "~@3 d4@2 a3@3 ~@5 a3@3, e4@5 ~@3 e4@6 ~@2, ~@11 d4@4 ~",
  I: "~@3 d4@2 g#3@3 ~@5 g#3@3, e4@5 ~@3 e4@6 ~@2, ~@11 d4@4 ~", J: "e4 ~@15",
  K: "f#4@3 f#4 a3 ~ [a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 ~@2 a3 [d3,a3,d4,f#4]@2 ~, [d3,a3,d4]@5 d3@3 ~@3 [d3,a3,d4,f#4]@2 ~@3", // D D5 D
  L: "[e4,g#4]@3 g#4 [b3,e4] [e3,b3,e4]@3 [e3,b3,e4,g#4]@2 ~ e4@2 [e3,b3]@3, [e3,b3] g#4 ~@2", // E E5 E E5
  M: "g#4@3 g#4 b3 ~ [b3,e4,g#4]@2 [e3,b3,e4,g#4]@2 ~@2 b3 [e3,b3,e4,g#4]@2 ~, [e3,b3,e4]@5 e3@3 ~@3 [e3,b3,e4,g#4]@2 ~@3", // E E5 E
  N: "[d4,f#4]@3 f#4 [a3,d4] [d3,a3,d4]@3 [d3,a3,d4,f#4]@2 ~ d4@2 [d3,a3]@3, [d3,a3] f#4 ~@2", // D D5 D D5
  O: "e4@3 e4 [a3,c#4,e4] ~ e4@2 ~ [c#4,e4]@2 ~ a3 ~ [e3,a3,c#4,e4]@2, [e3,a3,c#4]@5 e3@3 [e3,a3]@3 e4@3 ~@2", // A C#m A A5
  P: "c#4@3 ~ a3 ~ [a3,c#4,e4]@2 [e3,a3,c#4,e4]@3 c#4 [a3,c#4,e4] ~ c#4 [a3,c#4], [e3,a3]@5 e3@3 ~@8, ~@3 c#4@3 ~@10", // A A5
  Q: "[e3,a3,c#4] ~@7", // A
  R: "[a3,c#4,e4]@3 e4 [a3,c#4,e4] ~ e4@2 ~ [c#4,e4]@2 ~ a3 ~ [e3,a3,c#4,e4]@2, ~@5 e3@3 [e3,a3]@3 e4@3 ~@2", // A C#m A A5
  S: "[a3,c#4,e4] ~@2 e4 [a3,c#4,e4] ~ e4@2 ~ [c#4,e4]@2 ~ a3 ~ [e3,a3,c#4,e4]@2, ~@5 e3@3 [e3,a3]@3 e4@3 ~@2", // A C#m A A5
  T: "f#4@3 f#4 a3 ~ [a3,d4,f#4]@2 [d3,a3,d4,f#4]@2 ~@2 a3 [d3,a3,d4,f#4]@2 ~, [d3,d4]@5 d3@3 ~@3 [d3,a3,d4,f#4]@2 ~@3, a3 ~@15", // D
  U: "~@3 g#4 [b3,e4] [e3,b3,e4]@3 [e3,b3,e4,g#4]@2 ~ e4@2 [e3,b3]@3, ~ g#4 ~@2", // E5 E E5
  V: "[a3,c#4]@3 e4 [a3,c#4,e4] ~ e4@2 ~ [c#4,e4]@2 ~ a3 ~ [e3,a3,c#4,e4]@2, e4 ~@4 e3@3 [e3,a3]@3 e4@3 ~@2", // A C#m A A5
})).s("gm_electric_guitar_clean").gain(0.15)

// chords · electric guitar clean · "clean" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@40 A@2 B C D A D A B C B C E F G ~@17 A@2 B C D A D A B C B C E F G ~@13 E@2 A@2 E@2 B@2 E@2 A@2 E@2 B@2 ~
>`.pickRestart({
  A: "~@4 f#4 ~@11", B: "~@3 e4 ~@7 g#4@2 [e4,g#4]@3", C: "~@4 g#4 ~@11", D: "~@3 d4 ~@7 f#4@2 [d4,f#4]@3",
  E: "~@6 [a3,c#4]@3 ~@2 c#4@3 ~@2", F: "~ e4@2 e4@3 ~@5 e4 ~@2 e4!2", G: "e4 ~@7",
})).s("gm_electric_guitar_clean").gain(0.09)

// chords · drawbar organ · "organ 1"
const drawbar_organ_2 = note(`<
  ~@24 A@4 B@8 C@3 ~ D@2 E@2 F@4 G@4 H@3 ~ A@4 B@8 C@3 ~ D@2 E@2 F@4 G@4 H@3 ~ A@4 B@8 I@2 J@2 K@4 L@2 J@2 K@4 ~
>`.pickRestart({
  A: "[a5@5 g5@3, [a4,c#5,e5]]/4", B: "[[f#4,a4,d5,f#5]@13 [g#4,b4,e5,g#5]@3]/8",
  C: "[[c#5,e5,a5]@16 [d5,f#5]@15 ~ [c#5,e5]@16, a4]/3", D: "[[a4,d5]@15 ~, f#5]/2", E: "[[b4,e5]@15 ~, g#5]/2",
  F: "[[a4,d5]@31 ~, f#5]/4", G: "[[b4,g#5], e5@31 ~]/4", H: "[~@16 a5 ~@7, [a4,c#5,e5]@17 ~@7]/3",
  I: "[a4,c#5,e5,a5]/2", J: "[[d5,f#5,a5]@31 ~]/2", K: "[[a4,c#5]@15 ~ [b4,g#5]@16, e5]/4",
  L: "[[a4,c#5,a5], e5 ~@31]/2", // A
})).s("gm_drawbar_organ").gain(0.07)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B ~@33 C B C B C B C B C B C B C B@2 ~@17 C B C B C B C B C B C B C B@2 ~@13 C B@2 C@2 B@2 C@2 B@2 C@2 B@2
  C ~
>`.pickRestart({
  A: "~@5 x ~@10", B: "x", C: "x ~@12 x ~@2",
})).gain(0.52)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@102 A ~@3 A ~@3 A ~@3 A ~@2>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.26)

// drums · rim
const rim = s("rim").struct("<~@8 A@15 ~ A@16 ~@16 A@16 ~@16 A@12 ~@17>".pickRestart({
  A: "x",
})).gain(0.52)

// drums · snare
const snare = s("sd").struct(`<
  ~ A ~ A ~ A B ~@32 C D@13 E ~@17 F D@13 G ~@14 H I J I H I J I H I J I H I J I ~
>`.pickRestart({
  A: "~@5 x ~@2 x ~@2 x!3 ~@2", B: "x", C: "~@8 x!2 ~@2 x!2 ~ x", D: "~ x", E: "~@8 x!2 ~@3 x ~@2",
  F: "~@8 x ~@3 x!2 ~ x", G: "x ~@2 x ~ x ~@2 x ~@3 x!2 ~@2", H: "~@8 x ~@6 x", I: "~@8 x ~@4 x ~@2",
  J: "~@8 x ~@3 x ~@2 x",
})).gain(0.46)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~ A ~ A ~ A ~@47 B ~@17 C ~@13 D ~@31>".pickRestart({
  A: "~@5 x ~@2", B: "x ~@2 x ~ x ~@6 x ~@2 x", C: "~@9 x ~@6", D: "~ x ~@2",
})).gain(0.2)

// drums · low tom
const low_tom = s("lt").struct("<~ A ~ A ~ A ~@33 B ~@13 B ~@17 B ~@45>".pickRestart({
  A: "~@15 x", B: "~@11 x ~@4",
})).gain(0.59)

// drums · hihat
const hihat = s("hh").struct("<~@8 A@14 B ~ A@16 C@14 ~@2 A@16 C@14 ~@2 A@12 C@16 ~>".pickRestart({
  A: "x ~@2 x!3 ~@2 x ~@2 x ~@4", B: "x", C: "~@3 x ~@7 x ~@4",
})).gain(0.33)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@14 ~@2 A@16 ~@16 A@16 ~@16 A@12 ~@17>".pickRestart({
  A: "~@13 x ~@2",
})).gain(0.39)

// drums · crash
const crash = s("cr").struct("<~ A B A B A B ~@47 B ~@17 B ~@13 B ~@30>".pickRestart({
  A: "~@5 x ~@10", B: "x",
})).gain(0.33)

// drums · ride
const ride = s("rd").struct(`<
  ~@38 A B C@2 D@11 E ~@16 A B C@2 D@11 E ~@14 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 ~
>`.pickRestart({
  A: "~@13 x ~@2", B: "x ~@2 x ~ x ~@10", C: "x ~@2 x ~ x ~@2 x ~@2 x ~ x ~@2", D: "x ~@2 x!3 ~@2 x ~@2 x ~ x ~@2",
  E: "x ~@2 x!3 ~@10",
})).gain(0.46)

stack(
  bass, drawbar_organ, electric_guitar_clean, electric_guitar_clean_2, drawbar_organ_2, kick, kick_soft, rim, snare,
  snare_soft, low_tom, hihat, open_hat, crash, ride
)

More by Nomadi