Strudelify

Dove sei

Nomadi

KeyE♭ majorTempo75 bpm
0:00/0:00
// Dove sei — Nomadi
// 75 bpm, 4/4, key Eb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 75 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(75/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(`<
  ~@21 A B@2 C D@2 B E B@2 C D F G D H I J@2 K L M N O P Q R S T U V W X Y Z AA AB V W X Y AC AD Z AE AF AG AH AI AJ AK
  AL@3
>`.pickRestart({
  A: "~@3 g1", B: "c2@6 ~ c2 c2@7 ~", C: "f1@6 ~ f1 f1@7 ~", D: "g1@6 ~ g1 g1@7 ~", E: "g1@6 ~ g1 g1@3 a1@2 b1@3",
  F: "g1@6 ~ g1 g1@5 d2 g2 f2", G: "eb2@7 c2 c2@5 ~ f1 gb1", H: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~",
  I: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ f1 g1", J: "c2@2 ~@5 c2!2 ~@7", K: "f1@2 ~@5 f1 f1@2 ~@6",
  L: "f1@2 ~@5 f1 f1@2 ~ c2 f2 g2 ab2@2", M: "bb1@2 ~@5 bb1!2 ~@4 f2 bb2 f2", N: "bb1@2 ~@5 bb1 bb1@2 ~@2 eb3@2 bb2@2",
  O: "eb1@2 ~@5 eb1!2 ~@7", P: "d1@2 ~@5 d1 g1@8", Q: "ab1@4 ~@3 ab1 ab1@6 ~ ab1", R: "g1@6 ~ g1 c2@6 d2 eb2",
  S: "e2@6 ~ e2 f2@4 f1@4", T: "d1@6 ~ d1 g1@6 ~ g1", U: "g1@6 ~ g1 ab1@8", V: "db2@6 ~ db2 db2@7 ab1",
  W: "db2@6 ~ db2 db2@8", X: "gb1@6 ~ gb1 gb1@7 ~", Y: "ab1@6 ~ ab1 ab1@7 ~", Z: "ab1@6 ~ ab1 ab1@8",
  AA: "db2@7 db2 db2@7 ~", AB: "ab1@6 ~ ab1 ab1@3 bb1@2 c2@3", AC: "ab1@6 ~ ab1 ab1@7 gb1", AD: "e1@7 db1 db1@7 ~",
  AE: "eb2 bb1 eb1@3 ~@5 db1 eb1@2 ~@3", AF: "eb1@5 ~@2 eb1 eb1@6 ~ eb1", AG: "ab1@5 ~@2 ab1 ab1@6 ~ ab1",
  AH: "bb1@6 ~ bb1 bb1@6 ~ bb1", AI: "bb1@6 ~ bb1 bb1@7 ~", AJ: "eb1@6 ~ eb1 eb1@7 ~",
  AK: "bb1@6 ~ bb1 bb1@3 f2@2 bb2@3", AL: "[eb1@35 ~@13]/3",
})).s("gm_electric_bass_finger").gain(0.56)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  A B A C D E F G H I J K@2 L@2 M N O@3 P@2 I J K E F G H I J K E F G H ~@39
>`.pickRestart({
  A: "eb4@3 d4@2 f4@3 eb4@3 eb4@5", B: "eb4@3 d4@2 f4@3 eb4@3 d4@3 c4@2, ~@11 c4 ~@4",
  C: "eb4@3 d4@2 f4@3 eb4@3 d4@3 c4@2", D: "ab3@2 ~ c4@2 g4@2 ab3 f4@3 ab3@2 c4@2 ab3",
  E: "~@2 d3 g3@2 c4@3 b3@2 d3 g3@2 b3@3, g4 ~@3", F: "g4@3 g3@2 ab3@3 g4@3 g3@2 b3@3",
  G: "eb3@2 g3 [eb3,d4]@2 ~ eb3@2 [eb3,c4]@3 g4@2 c4@3, ~@5 g4@3 ~@3 eb3@5", // Ebmaj7 Cm
  H: "c4@2 ~@11 b3@3, ~@3 c4@5 b3@5 ~@3, ~@5 g4@5 ~ g4@5", I: "eb4@3 d4@2 g4@3 eb4@3 eb4@5",
  J: "eb4@3 d4@2 g4@3 eb4@3 d4@3 c4@2", K: "ab3@2 ~ c4@2 g4@2 ab3 f4@3 ab3@2 c4@3",
  L: "~@5 eb4@3 d4@2 ~@3 d4@3, bb2@7 ~ bb2@8, ~@2 f3@7 ~ f3@6, ~@3 ab3@5 ~@3 ab3@5",
  M: "bb4@2 bb3 d4@2 bb4@3 bb4@2 bb3 d4@2 bb4@3", N: "ab4@2 ~ f4@2 ab4@2 ~ g4@3 ~@2 g4@3, ~@2 c4@5 ~@4 b3@5",
  O: "[c4@2 ~@3 c4@3 d4@2 ~@3 d4@3 ~@21 e4@3 ~@5 f4@3, ab2@7 ~@9 g2@7 ~ c3@7 ~ c3@7 ~ f2@7 ~, ~@2 eb3@6 ~@2 f3@6 d4@5 d4@6 bb3@6 ~@2 bb3@6 ~@2 c4@5, ~@3 ab3@5 ~@3 bb3@7 f3@5 ~@3 g3@7 ~ g3@7 ~ ab3@6, ~@19 bb3@5 eb4@4 ~ eb4@5 ~@14]/3",
  P: "[~@5 f4@3 ~@19 b3@4 ~, d3@8 g2@7 ~ g2@7 ~ g2@7 ~, ~@2 ab3@6 ~@2 g3@6 ~@2 g3@7 ~ g3@5 ~, ~@3 c4@5 ~@3 c4@5 ~@3 b3@7 ~@6, ~@13 d4@6 ~@2 d4@10 ~]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.48).pan(0.3)

// chords · acoustic guitar nylon · soft notes
const acoustic_guitar_nylon_2 = note("<~@4 A ~@6 B@2 ~@4 C ~@6 B ~@6 B ~@43>".pickRestart({
  A: "~@2 ab3 ~@7 ab3 ~@5", B: "~@2 ab3 ~@7 ab3 ~@4 ab3", C: "~@8 ab2@7 ~",
})).s("gm_acoustic_guitar_nylon").gain(0.24).pan(0.3)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon_3 = note(`<
  A B A C D E F G H A C D@2 ~@2 I J ~@5 A C D E F G H A C D E F G H ~@39
>`.pickRestart({
  A: "g3@3 f3@2 ~ c3@2 g3@3 eb3@2 ~ c3 ~, c3@5 bb3@2 ~ c3@5 g3@2 ~",
  B: "g3@2 ~ f3@2 ~ c3 ~ g3@3 f3@3 [c3,eb3]@2, c3@5 bb3@3 c3@6 ~@2, ~@11 eb3 ~@4", // Cm
  C: "g3@2 ~ f3@2 ~ c3 ~ g3@3 f3@3 [c3,eb3]@2, c3@5 bb3@3 c3@6 ~@2", // Cm
  D: "~@3 f3@2 bb3@3 [f2,ab3]@3 f3@2 [f2,ab3]@3, f2@3 ~@5", E: "g2@3 d3@2 ab3@3 g3@3 d3@2 g3@3, ~@8 g2@5 ~@3",
  F: "~@7 g2, g2@7 ~ g2@6 ~@2, ~@3 d3@8 d3@5, ~@5 g3@8 g3@3",
  G: "~@11 g3@2 ~ g3@2, ~@2 g3@2 ~ g3@5 ~@6, ~@3 d4@5 c4@5 c4@3",
  H: "~@5 c4@3 ~@5 b3@3, g2!2, ~ d3@3 ~ d3@3, ~@3 g3@5 b3@3 g3@5",
  I: "g4@2 ~@3 g4@2 ~@6 g4@3, eb3@7 ~ eb3@8, ~@2 bb3@6 g4@3 d4@5, ~@3 d4@7 bb3@6",
  J: "~@13 b3@3, d3@7 ~ g2@8, ~ f3@3 ~ d3@3, ~@3 ab3@6 ~@2 g3@5, ~@5 c4@6 ~@5",
})).s("gm_acoustic_guitar_nylon").gain(0.4).pan(0.7)

// chords · piano
const piano = note("<~@17 A B C D E F@2 G ~@3 H I ~ J ~@3 K L@2 M ~@36>".pickRestart({
  A: "[ab3,c4]@2 ~@6 [f3,bb3,d4]@3 f3@2 ~ f3@2, [ab2,eb4]@4 ab2@3 ab2@8 ~, ~ ab3@2 ab3 ~@4, ~@3 c4@2 [c4,eb4]@3 ~@5 d4@2 ~", // Ab Bb Ab5 Cm
  B: "bb3@2 ~ bb3@2 [bb3,d4]@2 ~ c2@2 ~@3 [eb4,g4]@2 c3, g2@7 ~ [c3,eb4]@4 c3@3 ~, d4@5 ~@5 c2@6, ~@2 f3@5 ~ [g3,bb3]@8, ~@11 [d4,f4]@5", // Bb Eb Cm Gm Dm
  C: "[e2,g3]@2 ~ e2@2 ~ e2@2 ab3@2 ~ ab3@2 [ab3,c4,f4]@3, [c4,g4]@5 ~@3 [c4,f4]@5 ~@3, ~@2 g3@3 [g3,c4,g4]@3 f2 ~ f2@6", // Em Fm C5 F5 C5
  D: "[d3,ab3]@2 ~@3 [ab3,c4,f4]@3 g3@2 ~ g3@2 ~@2 g2, [c4,f4]@5 ~@3 [c4,d4]@5 [g3,c4,d4]@3, ~@2 ab3@3 ~@5 d3@4 d3@2, ~@3 d3@5 g2@7 ~", // Ddim Fm F5 Csus2 Gsus4
  E: "g3@2 ~@4 d4@7 ~@3, g2@13 ~@3, [b3,d4]@5 b3@8 ~@3, ~@2 d3@11 ~@3, ~@3 g3@10 ~@3", // Bm
  F: "[~@5 g4 eb5 d5@2 eb5!2 eb5@8 ~@13]/2", G: "~@10 [c4,ab4] [c4,g4]@2 [c4,f4]@3",
  H: "~@8 [g3,b3]@3 [g3,c4]@2 [g3,d4]@3", I: "~@6 eb5 d5@3 ~ eb5@5, ~@5 g4@5 g4@6",
  J: "~@10 [c4,g4] [c4,f4]@2 c4@3, ~@11 g4 ~@4", K: "~@8 [g3,b3]@3 c4@2 d4@3, ~@11 g3@4 ~",
  L: "[c2,eb3,g3,c4]@7 ~ [c2,f3,ab3,c4]@7 ~", M: "[eb3,g3,c4]@7 ~@9, c2 ~@7",
})).s("gm_piano").gain(0.56).pan(0.4)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@38
  [~@7 c4 ~@3 c4 ~@4]
  [~@2 g3 c4 ~@2 c4!2 ~ c4 ~@2 c4!2 ~@2]
  [~@3 c4 ~ c4 bb3 c4 ~@3 c4 ~ c4 bb3 c4]!2
  [~@3 eb4 ~ eb4 ~@5 d4 ~ d4 ~@2]!2
  [~@3 d4 ~ d4 ~@7 f4@3, ~@11 bb4@5]
  [~@3 c4 ~ c4 ~@5 c4 ~ d4@3]
  ~@29
>`).s("gm_electric_guitar_muted").gain(0.32)

// chords · epiano1
const epiano1 = note("<~@38 A B C@2 D@2 E F G H I J@2 K L M N O P Q K L M N O P R S T U V W X Y Z@2 ~>".pickRestart({
  A: "[g3,c4,eb4]@3 [bb3,d4,f4]", B: "[c4,eb4,g4]",
  C: "[~@16 [f3,c4,eb4,ab4]@15 ~, [f3,c4,eb4,ab4]@15 ~@17, ~@7 [eb6,ab6]@10 ~@15, ~@4 c6@5 ~@7]/2", // Fm7 Ab5
  D: "[c4,eb4,ab4] [d4,f4,bb4], bb2@15 ~", E: "~@8 d6@7 ~, [eb3,d4,g4,bb4]@15 ~, ~@7 [g6,bb6]@8 ~",
  F: "[d3,c4,f4,ab4] [g3,d4,g4,b4]", G: "[ab3,c4,eb4]@7 ~ [bb3,d4,f4]@8, ab2@15 ~", H: "[g2,bb3,d4,f4] [c2,g3,bb3,eb4]",
  I: "[g3,bb3,c4]@6 ~@2 [f2,ab3,c4,f4]@7 ~, [e2,e4] ~", // C7 Fm E
  J: "[[d2,c4]@8 c4@8 b3@7 ~ [ab3,c4,eb4]@8, [ab3,f4]@3 ~ [g2,g3,d4,g4]@8 ~@4]/2", K: "[db4,e4,ab4]@15 ~",
  L: "db4@6 ~ db4@4 [db4,e4,ab4]@5, [e4,ab4]@11 ~@5", M: "a4@6 ~ a4@8 ~, [db4,gb4]@15 ~", N: "db4@8 c4@7 ~, [eb4,ab4]",
  O: "[c4,eb4,ab4]@11 ~ [c4,eb4,ab4]@3 ~", P: "db4@6 ~ db4@2 ~ [db4,e4,ab4]@5 ~, [e4,ab4]@5 ~@3",
  Q: "[db4,eb4,ab4]@7 ~ [ab3,c4]@3 [ab3,db4]@2 [ab3,eb4]@3", R: "[db4,eb4,ab4]@7 ~ [ab3,c4]@8",
  S: "[eb4,gb4,bb4]@10 [db4,f4,ab4] [eb4,gb4,bb4] ~@4", T: "eb4@6 ~ eb4@4 [eb4,gb4,bb4]@5, [gb4,bb4]@11 ~@5",
  U: "b4@6 ~ b4@8 ~, [eb4,ab4]@15 ~", V: "eb4@8 d4@7 ~, [f4,bb4]", W: "[d4,f4,bb4]@11 ~ [d4,f4,bb4]@3 ~",
  X: "eb4@6 ~ eb4@2 ~ [eb4,gb4,bb4]@5 ~, [gb4,bb4]@5 ~@3", Y: "[eb4,f4,bb4]@9 [bb3,d4]@2 [bb3,eb4]@2 [bb3,f4]@3",
  Z: "[[bb3,eb4,gb4]@31 ~]/2", // Ebm
})).s("gm_epiano1").gain(0.48).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@8 A B@2 C@2 D@3 E F@5 G@2 H I@2 J K G@2 H I@2 L M N@2 O P ~@6 Q@5 R@2 S T@2 U V R@2 S T@2 W X Y Z AA AB@2 AC AD AE@2
  ~
>`.pickRestart({
  A: "g3 g4, [c4,d4]", B: "[d4@3 c4@5 d4@11 c4@5 d4@4 c4@3 ~, [g3,eb4]]/2", C: "[f3,ab3,c4]/2",
  D: "[eb4 d4 eb4 ~ [eb2,g3]@2, bb3, [bb2,f3]@2 ~, ~ d4]/3", E: "[d2,f3,ab3,c4] [g2,g3,b3,d4], a3 ~@15",
  F: "[[ab3,c4,eb4]@8 ~@8 g2@8 [c2,eb4]@8 [e1,c4,g4]@8 ~@8 d1@8 ~@8 b3@15 ~, ab2@16 ~@40 [g1,g3,d4]@23 ~, ~@8 bb3@23 ~@9 c4@24 ~@16, ~ [f3,d4]@2 g3@2 [f3,ab3]@2 ~@3]/5", // Ab Cm C G5 Dm Fm
  G: "[c3,g3,c4,eb4]/2", H: "[f2,ab3,c4,f4]", I: "[c4 b3@3, [g2,g3,d4]]/2", J: "[c3,g3,c4,eb4]",
  K: "[g2,g3,c4,d4]@8 [g2,b3]@3 [a2,c4]@2 [b2,d4]@3, ~ g3", L: "eb3 c3, [g3,c4,eb4]", M: "c4 b3, [g2,g3,d4]",
  N: "[[g3,eb4] [ab3,f4] [g3,eb4] [ab3,f4], [c3,c4]]/2", O: "~@3 [bb3,d4,f4]", P: "[c4,eb4,g4] ~",
  Q: "[[ab3,c4,eb4] ~ g2 [c2,eb4] [e1,c4,g4] ~ d1 ~ b3 [ab1,ab3,c4,eb4], ab2@2 ~@5 [g1,g3,d4]@2 ~, ~@8 bb3@23 ~@9 c4@24 ~@16, ~ [f3,d4]@2 g3@2 [f3,ab3]@2 ~@3]/5", // Ab Cm C Ab G5 Dm Fm
  R: "[db3,ab3,db4,e4]/2", S: "[gb2,a3,db4,gb4]", T: "[db4 c4@3, [ab2,ab3,eb4]]/2", U: "[db3,ab3,db4,e4]",
  V: "[ab2,ab3,db4,eb4]@8 [ab2,c4]@3 [bb2,db4]@2 [c3,eb4]@3, ~ ab3", W: "e3 db3, [ab3,db4,e4]",
  X: "db4 c4, [ab2,ab3,eb4]", Y: "[eb3,bb3,eb4,gb4]@3 ~", Z: "[eb3,bb3,eb4,gb4]", AA: "[ab2,b3,eb4,ab4]",
  AB: "[eb4 d4@3, [bb2,bb3,f4]]/2", AC: "gb3 eb3, [bb3,eb4,gb4]", AD: "eb4 d4, [bb2,bb3,f4]", AE: "[eb3,bb3,eb4,gb4]/2",
})).s("gm_synth_strings_1").gain(0.24)

// other · distortion guitar
const distortion_guitar = note("<~@65 A B C@2 D E F@2 ~@2>".pickRestart({
  A: "~@10 db4 eb4@4 ~", B: "eb5@5 eb5 bb4 db5 bb4@7 [gb4,ab4]",
  C: "[ab4 gb4 ab4@5 gb4 ab4 bb4 ab4@3 bb4 ~@2 bb4@6 ~ bb4 f5 bb4 bb4@5 bb4, ~@15 b4@2 ~@15]/2",
  D: "f5 bb4 gb5 bb4 ab5@9 ab5@2 gb5", E: "[eb5,gb5] eb5@6 [bb4,db5] eb5@5 gb5 eb5@2, ~ db5 ~@14",
  F: "[[bb4,db5] a4 [bb4,db5] [a4,bb4] [eb4,ab4,bb4] [eb4,gb4] [bb3,db4] [ab3,a3] [eb3,gb3] ab3 [eb3,gb3] [db3,eb3] [a2,bb2] [gb2,ab2] ~@18, ~@13 eb2@19]/2", // Bbm Bbmaj7 Ebsus4 Ebm Bbm Amaj7 Ebm Dbsus2 …
})).s("gm_distortion_guitar").gain(0.56)

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

// drums · rim
const rim = s("rim").struct("<~@22 [~ x ~ x]!13 [~ x ~@2] ~@39>").gain(0.8)

// drums · snare
const snare = s("sd").struct(`<
  ~@37
  [~@14 x!2]
  [~ x ~ x]!26
  [~@4 x ~@4 x ~@2 x ~@3]
  [~@4 x ~@2 x!2 ~@7]
  [~ x ~ x]!6
  ~@3
>`).gain(0.8)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@21 A B@2 C B@2 C D C@3 B@3 E F@2 B@3 C B C B G C@4 H C B@2 C B C B C B@2 C B C I J C B@3 C B ~@3
>`.pickRestart({
  A: "~@11 x ~@4", B: "x!16", C: "x!14 ~@2", D: "x!11 ~ x!4", E: "x!12 ~@4", F: "x!12 ~@2 x!2", G: "x!13 ~@3",
  H: "x!10 ~@2 x!4", I: "x!2 ~@2 x!6 ~@2 x!4", J: "x!4 ~@2 x!5 ~@5",
})).gain(0.64)

// drums · low tom
const low_tom = s("lt").struct("<~@45 [~@7 x] ~@29>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@50 [~@14 x!2] ~@13 [~@14 x!2] ~@6 [~@14 x!2] ~@3>").gain(0.56)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@21 A ~@2 B ~@2 B C B@3 ~@3 A@3 ~@3 B ~ B ~@2 B@4 D B ~@2 B ~ B ~ B ~@2 B ~ B E F B ~@3 B ~@4
>`.pickRestart({
  A: "~@3 x", B: "~@7 x", C: "~@11 x ~@4", D: "~@5 x ~@2", E: "~ x ~@3 x ~@2", F: "~ x ~@2",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@45 A ~@4 B ~@13 B ~@6 B ~@3>".pickRestart({
  A: "~@11 x ~@4", B: "~@13 x ~@2",
})).gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@22 A ~@5 B A ~@5 A ~@2 A ~@7 A ~@2 C@2 A ~@2 A ~@2 D A ~@5 A E A ~ A ~@2 F A ~@2
>`.pickRestart({
  A: "x", B: "~@13 x ~@2", C: "~ x", D: "~@11 x ~ x ~@2", E: "x ~@9 x!2 ~@4", F: "~@9 x ~ x ~@4",
})).gain(0.64)

// drums · bongos
const bongos = s("bongo:4").struct("<~@21 [~@9 x!7] x ~@52>").gain(0.63)

// drums · congas
const congas = s("conga:13").struct("<~@38 [~@9 x ~@6]!8 ~@5 [~@9 x ~@6]!14 ~ [~@9 x ~@6]!6 ~@3>").gain(1.54)

// drums · congas
const congas_2 = s("conga:18").struct("<~@38 [~ x ~@6]!8 ~@5 [~ x ~@6]!14 ~ [~ x ~@6]!6 ~@3>").gain(1.54)

// drums · congas
const congas_3 = s("conga:33").struct("<~@38 [~@10 x!2 ~@4]!8 ~@5 [~@10 x!2 ~@4]!14 ~ [~@10 x!2 ~@4]!6 ~@3>").gain(1.54)

stack(
  bass, acoustic_guitar_nylon, acoustic_guitar_nylon_2, acoustic_guitar_nylon_3, piano, electric_guitar_muted, epiano1,
// … 3 more lines

More by Nomadi