Strudelify

Il saggio

Nomadi

KeyD majorTempo142 bpm
0:00/0:00
// Il saggio — Nomadi
// 142 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 175 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(142/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(`<
  ~ A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H I J K L M N O P A B C D E F G H A B C D E F G H A B
  C D E F G H I J K L M N O Q F R S T F R U V W X Y Z F AA A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G
  H I J K L M N O P F R S T F R U V W X Y Z F AA A B C D E F G H A B C D E F G H A B C D E F G H A B C D E F G H AB@2
>`.pickRestart({
  A: "d2@4 ~@2 d2 ~ a1@5 ~@3", B: "d2@4 ~@2 d2 ~ a1@3 ~ d2@3 ~", C: "b1@4 ~@2 b1 ~ b1@4 ~@4", D: "b1@5 ~ b1 ~ b1@6 ~@2",
  E: "a1@5 ~ a1 ~ a1@6 ~@2", F: "g1@4 ~@2 g1 ~ g1@6 ~@2", G: "d2@4 ~@2 d2 ~ a1@6 ~@2", H: "d2@2 ~ d2 a1@2 g2 a2",
  I: "e2@4 ~@2 e2 ~ b1@6 ~@2", J: "e2@5 ~ e2@2 b1@4 e2@3 ~", K: "d2@5 ~ d2 ~ a1@7 ~", L: "d2@4 ~@2 d2 ~ a1@4 d2@3 ~",
  M: "e2@5 ~ e2 ~ b1@7 ~", N: "e2@4 ~@2 e2@2 e2@4 e1@3 ~", O: "b1@5 ~ b1 ~ b1@5 ~@3", P: "b1@5 ~ b1 ~ b1@3 ~ c#2@3 ~",
  Q: "b1@5 ~ b1 ~ b1 ~ f#1@2 b1@2 a1@2", R: "a1@4 ~@2 a1 ~ a1@6 ~@2", S: "d2@5 ~ d2@2 a1@4 c#2@3 ~",
  T: "b1@4 ~@2 b1 ~ b1@4 a1@3 ~", U: "b1@4 ~@2 b1 ~ b1@5 ~@3", V: "b1@4 ~@2 b1 ~ b1@3 ~ a1@3 ~",
  W: "g1@5 ~ g1 ~ g1@5 ~@3", X: "a1@4 ~@2 a1 ~ a1@5 ~ a1 ~", Y: "b1@5 ~ b1 ~ a1@6 ~@2", Z: "g1@5 ~ g1 ~ g1@3 ~ g1@3 ~",
  AA: "a1@4 ~@2 a1 ~ a1@5 ~@3", AB: "[d2@23 ~@9]/2",
})).s("gm_fretless_bass").gain(0.56)

// chords · electric guitar clean
const electric_guitar_clean = note(`<
  ~ A@2 B@4 A@4 B@4 A@4 B@4 A@4 B@4 C D@2 E@8 F B@4 A@4 B@4 A@4 B@4 C D@2 G@8 H I@3 H J@3 H K L M H A@2 B@4 A@4 B@4 A@4
  B@4 A@4 B@4 C D@2 N@8 H I@3 H J@3 H K L M H A@2 B@4 A@4 B@4 A@4 B@4 O@2 A@2 B@4 P@4
>`.pickRestart({
  A: "[~@4 f#4@2 d4 c#4 d4@2 ~@2 f#4@2 d4 c#4, d3@5 ~@3 d3@5 ~@3, ~@2 a3@3 ~ a3@3 ~ a3@3 ~ a3@2, ~@3 d4@2 ~@6 d4@2 ~@3]/2",
  B: "[~@4 d4@2 b3 a#3 b3@2 ~@2 d4@2 b3 ~@7 a3!2 g3@2 ~@2 g4 ~@2 b3, b2@5 ~@3 b2@5 ~@3 a2@5 ~@3 g2@5 ~@3, ~@2 f#3@3 ~ f#3@3 ~ f#3@3 ~ f#3@3 ~ e3@3 ~ e3@3 ~ d3@4 [d3,d4]@2, ~@6 b3@4 ~@12 b3@4 ~@4 a3@5 ~@3 a3@4 b3@4 ~@8 g3@10, ~@20 e4@2 ~@7 g4@3]/4", // D
  C: "~@4 f#4@2 d4 c#4, d3@5 ~@3, ~@2 a3@3 ~ a3@2, ~@3 d4@2 ~@3",
  D: "[d4@4 ~@4 f#4@4 d4@2 ~ [b2,e3]@17, d3@5 ~@2 [g3,b3]@9, ~@2 a3@3 ~ a3@2 ~@8, ~@3 d4@2 ~@11]/2", // E5 G
  E: "[~@60 f#4@2 d4 c#4, ~@7 [d4,f#4]@16 [b3,e4]@16 [d4,f#4]@16 [d4,f#4]@2 ~@2 d4@2 ~@3, ~@15 a3@32 g3@32 a3@32 a3@3 ~@2 a3@6 ~@2 a3@4, ~@8 d3@16 e3@16 f#3@16 d3@5 ~@3]/8", // D E5 D
  F: "d4@2 ~@2 f#4@2 d4 c#4, d3@5 ~@3, ~@2 a3@3 ~ a3@2, ~@3 d4@2 ~@3",
  G: "[~@56 g3@2 ~@2 d4 ~@2 b3, ~@7 [d4,f#4]@16 [b3,e4]@16 [d4,f#4]@16 [d4,g4]@2 ~@2 g3@5, ~@15 a3@32 g3@32 a3@32 b3@3 ~@2 d3@8 [d3,d4]@4, ~@8 d3@16 e3@16 f#3@16 g2@5 g4@3]/8", // D E5 D G5 D
  H: "a3@2 ~@2 e4 ~@2 c#4, a2@5 a4@3, ~ e3@2 [e3,e4], ~@3 a3@5", // E
  I: "[~@4 f#4@2 d4 c#4 ~@4 d4@2 b3 a3 g3@2 ~@2 d4 ~@2 b3, d3@5 ~@3 b2@5 ~@3 g2@5 g4@3, ~@2 a3@3 ~ a3@3 ~ f#3@3 ~ f#3@3 ~ d3@4 [d3,d4]@2, ~@3 d4@2 ~@6 b3@2 ~@6 g3@5]/3", // D
  J: "[~@4 d4@2 b3 a3 ~@4 d4@2 b3 a3 g3@2 ~@2 d4 ~@2 b3, b2@5 ~@3 b2@5 ~@3 g2@5 g4@3, ~@2 f#3@3 ~ f#3@3 ~ f#3@3 ~ f#3@3 ~ d3@4 [d3,d4]@2, ~@3 b3@2 ~@6 b3@2 ~@6 g3@5]/3", // D
  K: "~@3 d4 c#4 b3 a3 f#3, b2 a2, ~@2 f#3@5 ~", L: "~@5 g3 ~ g3, g2@15 ~, d3@4 b3@3 ~, ~@3 g3@2 ~ d3@2",
  M: "g3@2 ~@2 d4 ~@2 b3, g2@5 g4@3, ~ d3@2 [d3,d4], ~@3 g3@5", // D
  N: "[~@56 [d3,g3]@2 ~@2 d4 ~@2 b3, ~@7 [d4,f#4]@16 [b3,e4]@16 [d4,f#4]@16 [d4,f#4]@2 ~@2 g3@5, ~@15 a3@32 g3@32 a3@32 a3@3 ~@2 d3@8 [d3,d4]@4, ~@8 d3@16 e3@16 f#3@16 g2@5 g4@3]/8", // G5 D E5 D
  O: "[~@4 f#4@2 d4 c#4 d4@2 ~@2 f#4@2 a3@2, d3@5 ~@3 d3@5 ~@3, ~@2 a3@3 ~ a3@3 ~ a3@3 ~@3, ~@3 d4@2 ~@6 d4@2 ~ d4 ~]/2",
  P: "[~@8 f#4@4 d4@2 c#4@2 d4@4 ~@4 f#4@4 [a3,d4]@2 ~@2 [a3,d4,f#4]@25 ~@7, d3@10 ~@6 d3@10 ~@5 d3@25 ~@8, ~@2 a3@3 ~ a3@3 ~ a3@3 ~@19, ~@3 d4@2 ~@6 d4@2 ~@2 c#4 ~@16]/4", // D5 D
})).s("gm_electric_guitar_clean").gain(0.4).pan(0.7)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  A@7 B@8 C@3 ~@23 D@8 ~@38 D@16 E@6 F@8 G@3 ~@21 D@8 E@6 H@8 I@8 C@3 ~
>`.pickRestart({
  A: "[~@7 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5]]/7", // D Bm A G D
  B: "[~@7 [f#4,a4]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5], ~@7 d5@6 ~@51]/8", // F#m D Bm A G D
  C: "[~@7 [f#4,a4]@5 ~@3 [f#4,a4,d5]@5 ~@4, ~@7 d5@6 ~@11]/3", // F#m D
  D: "[~@7 [f#4,a4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,a4]@5 ~@3 [f#4,a4,d5], ~@55 d5@6 ~@3]/8", // D Bm A G D F#m D
  E: "[~@7 [f#4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5], ~@7 a4@2 ~@39]/6", // D Bm A G D
  F: "[~@7 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,d5]@5 ~@3 [b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5], ~@46 a4@4 ~@12 f#4@3 ~@29 e4@14 ~@20]/8", // D Bm A G D
  G: "[~@7 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@4]/3", // D
  H: "[~@7 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5], ~@23 a4@2 ~@39]/8", // D Bm A G D
  I: "[~@7 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,a4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [f#4,b4,d5]@5 ~@3 [e4,a4,c#5]@5 ~@3 [d4,g4,b4]@5 ~@3 [f#4,a4,d5]]/8", // D Bm A G D
})).s("gm_electric_guitar_muted").gain(0.3).pan(0.3)

// other · harmonica
const harmonica = note(`<
  ~ A@2 B@6 A@2 B@6 ~@24 A@2 C@6 ~@38 A@2 B@6 A@2 B@6 ~@38 A@2 B@6 ~@16 A@2 B@6 ~@2
>`.pickRestart({
  A: "[~@4 a5@16 g5@4 f#5@4 e5@3 ~]/2",
  B: "[e5@2 f#5@16 ~@2 f#5@3 ~ g5@2 f#5@3 ~ e5@21 ~ d5@3 ~ e5@2 d5@4 f#5@4 d5@24 ~@6]/6",
  C: "[e5@2 f#5@16 ~@2 f#5@3 ~ g5@2 f#5@3 ~ e5@21 ~ d5@4 e5@2 d5@4 f#5@4 d5@24 ~@6]/6",
})).s("gm_harmonica").gain(0.64).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~ [x ~@2 x!2 ~@3]!172 x ~>").gain(0.64)

// drums · snare
const snare = s("sd").struct("<~ A@31 B A@31 C A@7 B A@7 C A@5 B A@31 B A@15 C A@5 B A@23 B A@8 ~@2>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@7 x ~ x!2", C: "~@2 x ~@2 x!2 ~",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@17 A B@7 A B@7 A B@7 ~@8 A B@7 A B@6 C A B@7 ~@30 A B@7 A B@7 A B@7 ~@22 A B@7 A B@7 ~@10
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "x!4 ~ x!3",
})).gain(0.24)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@6 B A ~@6 B A ~@7 A ~@7 A ~@7 A ~@6 B A ~@7 A ~@7 A ~@7 A ~@2 B A ~@2 C A ~ D A ~ A@2 ~@6 B A ~@6 B A ~@7 A ~@7
  A ~@7 A ~@2 B A ~@2 C A ~ D A ~ A@2 ~@6 B A ~@7 A ~@7 A ~@7 A ~
>`.pickRestart({
  A: "x", B: "~@7 x", C: "~@15 x", D: "x!2",
})).gain(0.56)

// drums · ride bell
const ride_bell = s("rd").struct(`<
  ~ A B@6 C A B@6 C ~@24 A B@6 C ~@24 A B@2 C A B@2 C A B D A B E A B@6 C A B@6 C ~@24 A B@2 C A B@2 C A B D A B E A B@6
  C ~@16 A B@7 ~@2
>`.pickRestart({
  A: "~@2 x ~ x ~ x!2", B: "x ~ x ~ x ~ x!2", C: "x!4", D: "~@2 x ~@3 x!2", E: "~ x!3",
})).gain(0.56)

// drums · congas
const congas = s("conga:13").struct("<~ [~ x ~@2]!172 [x!16] ~>").gain(2.3)

// drums · congas
const congas_2 = s("conga:18").struct(`<
  ~ A B A B A B A B A B@7 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A@5 B A B A B A B A B@7 A B A B A B A B A B A B A B A B A B A B A B A B A B A B
  A B A B A B A@5 B@7 A B A B A B A B A B A B A B A B A B@7 ~@2
>`.pickRestart({
  A: "x ~@2 x ~@2 x!2", B: "x ~@2 x ~@4",
})).gain(2.3)

// drums · congas
const congas_3 = s("conga:33").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A@7 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~ A@7 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A
  ~ A ~ A ~ A ~@5 A@7 ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A@7 ~@2
>`.pickRestart({
  A: "~@6 x!2",
})).gain(2.3)

stack(
  bass, electric_guitar_clean, electric_guitar_muted, harmonica, kick, snare, hihat, crash, ride_bell, congas, congas_2,
  congas_3
)

More by Nomadi