Strudelify

Il viaggiatore

Nomadi

KeyB♭ majorTempo150 bpm
0:00/0:00
// Il viaggiatore — Nomadi
// 150 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 27.
setcpm(150/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 B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C E F C G H F C I J A B C D A B C D A B C
  D A B C D A B C D A B C D A B C D A B C D A B C G A B C I F C G H F C I J A B C D A B C D A B C G A B C I A B C D A B
  C D K
>`.pickRestart({
  A: "g1@5 ~ g1 ~ g1@7 ~", B: "db2@5 ~ eb2 ~ eb2@4 bb1@2 eb2@2", C: "bb1@5 ~ bb1 ~ bb1@8",
  D: "eb2@5 ~ f2 ~ f2@2 c2@2 f1@3 ~", E: "eb2@5 ~ f2 ~ f2@2 c2@2 f1@4", F: "eb2@5 ~ eb2 ~ eb2@4 bb1@2 eb2@2",
  G: "eb2@5 ~ f2 ~ f2@2 c2@2 f2@3 ~", H: "g1@5 ~ g1 ~ g1@2 f1@2 g1@2 bb1 ~", I: "eb2@5 ~ f2 ~ f2@2 c2@2 f2@4",
  J: "e2@5 ~ d2 ~ d2@2 a1@2 d2@2 a1@2", K: "g1@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.54)

// other · electric guitar jazz
const electric_guitar_jazz = note(`<
  A B C D A B E@2 A B F G H B E@2 ~@8 A B C D A B E@2 ~@8 I J K L I J M@2 A B C D A B E@2 A B F G H B E@2 ~@8 A B F G H
  B E@2 ~@8 I J N@2 I J K O A B C D A B E@2 ~@8 A B C D A B E@2 ~
>`.pickRestart({
  A: "~@4 f3@2 g3 ~ bb3@2 g3@2 ~@2 d4@2", B: "eb4@13 ~ eb4@2", C: "~ bb3@3 c4@2 ~ d4, d4@9 ~@7", D: "c4 ~",
  E: "[~@2 bb3@6 c4@4 eb4@17 ~@3, d4 ~@3]/2", F: "~@2 bb3@6 c4@4 bb3 ~ d4@2, d4@7 ~@9", G: "c4@15 ~",
  H: "g3@4 f3@2 g3 ~ bb3@2 g3@2 ~@2 d4@2", I: "bb4@2 g4@2 eb4@3 ~ bb4@2 g4@2 eb4@2 g4@2", J: "bb4 g4 f4 ~ bb4 g4 f4 g4",
  K: "c5 a4 f4 ~ c5 a4 f4 a4", L: "c5@7 ~@9", M: "[c5 a4 f4 ~ c5 a4 f4 c5@8 ~]/2",
  N: "[c5@2 a4@2 f4@2 ~@2 c5@2 a4@2 f4@2 c5@7 ~@11]/2", O: "c5",
})).s("gm_electric_guitar_jazz").gain(0.48).pan(0.4)

// other · electric guitar jazz · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@2 A ~@3 B ~@3 A ~@3 B ~@11 A ~@3 B ~@10 C D ~@2 C D ~@3 A ~@3 B ~@3 A ~@3 B ~@11 A ~@3 B ~@10 C D ~@2 C D ~@3 A ~@3
  B ~@11 A ~@3 B ~@2
>`.pickRestart({
  A: "~@4 f3@5 ~@7", B: "~ f3 ~@2", C: "~@3 g4 ~@4", D: "~@3 a4 ~@4",
})).s("gm_electric_guitar_jazz").gain(0.28).pan(0.4)

// other · pad choir
const pad_choir = note(`<
  ~@16 A B C@2 A D E F G ~@7 H I J K H L M N O P Q R O S T U V ~@15 W X Y Z A L AA AB AC ~@7 AD AE AF AG AD AH AI@2 O AJ
  AK AL AM P AN U AO ~@7 AD AP AQ@2 W AR AS@2 AT ~@8
>`.pickRestart({
  A: "~@4 d4@2 ~@2 g3@2 ~@2 g3 ~ g3 ~", B: "eb4 ~ d4@2 c4 ~ bb3@2 ~@8",
  C: "[~@4 bb3 ~ bb3 ~ bb3 ~ bb3 ~ g3 ~@2 a3@4 ~ a3 ~ a3@3 ~ a3 ~ f3 ~ g3@2, ~@7 g3 ~@8]/2",
  D: "eb4 ~ d4 ~ c4 ~ bb3@2 ~@8", E: "~@2 bb2 ~ bb3 ~ bb3 ~ bb3@2 ~@2 bb3@2 g3@2",
  F: "a3@3 ~ a3@2 ~ a3@2 ~ a3@3 f3@2 ~", G: "g3 ~", H: "~@4 d4 ~ d4 ~ g3@2 ~@2 g3 ~ g3 ~",
  I: "eb4@2 d4 ~ c4 ~ bb3@2 ~@8", J: "~@2 f3 ~ bb3 ~ bb3 ~ bb3@2 ~@2 bb3@2 g3@2", K: "a3@4 a3 ~ a3@3 ~ a3@2 f3@2 g3@2",
  L: "eb4@2 d4 ~ c4 ~ bb3@3 ~@7", M: "~@4 bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3@2 g3@2", N: "a3@3 ~ a3 ~ a3@3 ~ a3 ~ f3 ~ g3@2",
  O: "~@4 f4 ~ f4 ~ g3 ~ g3 ~ g3 ~ g3 ~", P: "f4 ~ f4@2 d4 ~ bb3@4 ~@2 bb3 ~ bb3 ~",
  Q: "c4@3 ~ c4 ~ c4@3 d4 ~@2 d4 ~ d4 ~", R: "d4@2 c4@2 bb3 ~ g3@3 ~@7", S: "f4 ~ f4 ~ d4 ~ bb3@3 ~@3 bb3 ~ bb3 ~",
  T: "c4@3 ~ d4 ~ c4@5 ~ d4 ~ d4@2", U: "~@2 d4 ~ d4 ~ d4 ~ d4@2 ~ c4@2 bb3@2 ~", V: "bb3@2 g3@5 ~@9",
  W: "~@4 d4@3 ~ g3@3 ~ g3 ~ g3 ~", X: "eb4@2 d4@2 c4 ~ bb3@4 ~@6",
  Y: "~@2 bb2@2 bb3 ~ bb3 ~ bb3@3 ~@2 g3@2 ~, ~@6 bb3 ~", Z: "a3@3 ~ a3 ~ a3@3 ~ a3@2 f3 ~ g3@2",
  AA: "~@2 bb2 ~ bb3!2 ~@2 bb3@2 ~ bb3@2 ~ g3@2", AB: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~@2 bb3@2 a3@2 ~", AC: "a3@3 ~ g3@2 ~@10",
  AD: "~@4 d4@2 ~@2 g3@3 ~ g3 ~ g3 ~", AE: "eb4@2 d4@2 c4 ~ bb3@2 ~@8", AF: "~@2 f3 ~ bb3 ~ bb3 ~ bb3@3 bb3 ~@2 a3@2",
  AG: "~@4 a3 ~ a3@3 ~ a3@2 f3 ~ g3@2", AH: "eb4 ~ d4 ~ c4 ~ bb3@4 ~@6",
  AI: "[~@2 f3 ~ bb3 ~ bb3 ~ bb3@3 ~ bb3 ~ a3@4 ~@2 a3 ~ a3 ~ a3 ~ a3 ~ f3 ~ g3@2]/2",
  AJ: "f4 ~ f4@2 d4 ~ bb3@3 ~@3 bb3 ~ bb3@2", AK: "c4@3 ~ c4 ~ c4@4 d4 ~ d4 ~ d4 ~", AL: "d4@2 c4@2 bb3 ~ g3@4 ~@6",
  AM: "~@4 f4 ~ f4@2 g3@2 g3 ~ g3 ~ g3@2", AN: "c4@3 ~ d4 ~ c4@4 ~ d4 ~@2 d4@2", AO: "bb3 g3@4 ~@3",
  AP: "eb4@2 d4 ~ c4 ~ bb3@4 ~@6", AQ: "[~@4 bb3 ~ bb3 ~ bb3 ~ bb3 ~ bb3 ~ a3@5 ~ a3 ~ a3@4 a3 ~ f3 ~ g3@2]/2",
  AR: "eb4@2 d4@2 c4 ~ bb3@5 ~@5", AS: "[~@2 bb3 ~ bb3 ~ bb3 ~ bb3@2 ~@2 bb3 ~ a3@5 ~ a3@2 a3@3 ~ bb3@2 ~ a3@2 ~]/2",
  AT: "a3@2 ~ g3@9 ~@4",
})).s("gm_pad_choir").gain(0.32)

// other · lead 2 sawtooth
const lead_2_sawtooth = note(`<
  A B C D A B C D A B C D A B C D ~@8 A B C D A B C D ~@16 A B C D A B C D A B C D A B C D ~@8 A B C D A B C D ~@16 A B
  C D A B C D ~@8 A B C D A B C D E
>`.pickRestart({
  A: "g4", B: "eb5", C: "d5", D: "c5", E: "g4 ~@3",
})).s("gm_lead_2_sawtooth").gain(0.47)

// chords · piano
const piano = note(`<
  A B C D A B C D A B C D A B C D A B E F A B E F A B C D A B C D A B E F A B E F G H I J K L M N A B C D A B C D A B C
  D A B C D A B E F A B E F A B C D A B C D A B E F A B E F G H I J K L M N A B C D A B C D A B E F A B E F A B C D A B
  C D O
>`.pickRestart({
  A: "g2@4 [g3,bb3,d4] ~@3 g2@4 [g3,bb3,d4] ~@3", B: "eb3@4 [g3,bb3,eb4] ~@3 eb3@4 [g3,bb3,eb4]@2 ~@2",
  C: "bb2@4 [bb3,d4,f4] ~@3 bb2@4 [bb3,d4,f4] ~@3", D: "f2@4 [c4,a4] ~ [c4,a4] ~ [f2,c4,a4]@4 [d4,bb4]@3 ~",
  E: "bb2@4 [f3,bb3,d4] ~@3 bb2@4 [f3,bb3,d4] ~@3", F: "f2@4 [a3,c4,f4] ~@3 f2@4 [a3,c4,f4] ~@3",
  G: "eb2@4 [g3,bb3,eb4]@3 ~ eb2@4 [g3,bb3,eb4]@2 ~@2", H: "bb2@4 [f3,bb3,d4]@3 ~ bb2@4 [f3,bb3,d4]@3 ~",
  I: "f2@4 [f3,a3,c4]@3 ~ f2@4 [f3,a3,c4]@3 ~", J: "g2@4 [g3,bb3,d4]@4 g2@4 [g3,bb3,d4]@2 g2 ~",
  K: "eb2@4 [g3,bb3,eb4]@3 ~ eb2@4 [g3,bb3,eb4]@3 ~", L: "bb2@4 [f3,bb3,d4]@4 bb2@4 [f3,bb3,d4]@3 ~",
  M: "f2@4 [a3,c4,f4]@4 f2@4 [a3,c4,f4]@3 ~", N: "d2@4 [a3,d4,gb4]@3 ~ d2@4 [a3,d4,gb4]@3 ~",
  O: "[g3,bb3,d4] ~@15, g2@5 ~@11", // Gm
})).s("gm_piano").gain(0.54).pan(0.3)

// chords · percussive organ
const percussive_organ = note("<A@40 B@3 C@5 A@40 B@3 C@5 A@24 D>".pickRestart({
  A: "[d6 eb6 d6 [a5,c6], bb5@3 ~, g5 f5]/4", B: "[[g5,eb6] d6 [a5,c6], bb5@2 ~, ~ f5@2]/3",
  C: "[d6 eb6 d6 c6 [gb5,d6], bb5@3 a5@2, g5@2 f5@2 ~]/5", D: "[g5,bb5,d6] ~@3",
})).s("gm_percussive_organ").gain(0.14).pan(0.6)

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

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!47 [~@4 x ~@7 x ~ x!2] [~ x ~ x]!47 [~@4 x ~@7 x ~ x!2] [~ x ~ x]!24 ~>")
  .gain(0.78)

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

// drums · tambourine
const tambourine = s("tb").struct("<A B@15 C@8 B@8 C@16 B@16 C@8 B@8 C@16 B@8 C@8 B@8 D>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x ~ x!6", D: "x",
})).gain(0.39)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct("<~@16 A@8 ~@8 A@16 ~@16 A@8 ~@8 A@16 ~@8 A@8 ~@9>".pickRestart({
  A: "~ x ~@6",
})).gain(0.23)

// drums · crash
const crash = s("cr").struct(`<
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A
  ~@3 A ~@7 A ~@3 A ~@3 A
>`.pickRestart({
  A: "x",
})).gain(0.47)

// drums · ride
const ride = s("rd").struct(`<
  A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 ~@8 C D@7 A B@3 A B@3 A B@3 A B@3 ~@8 A B@3 A B@3 ~@8 C D@7 A B@3 A B@3 ~@8 A
  B@3 A B@3 ~
>`.pickRestart({
  A: "~ x!3", B: "x!4", C: "~ x", D: "x!2",
})).gain(0.62)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<[x!8]!120 x>").gain(1.96)

stack(
  bass, electric_guitar_jazz, electric_guitar_jazz_2, pad_choir, lead_2_sawtooth, piano, percussive_organ, kick, snare,
  hihat, tambourine, tambourine_soft, crash, ride, cabasa
)

More by Nomadi