Strudelify

Tu puoi

Nomadi

KeyD minorTempo127 bpm
0:00/0:00
// Tu puoi — Nomadi
// 127 bpm, 4/4, key D minor. 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 126 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(127/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 pick
const bass = note(`<
  A B C D A B C D E F E G E H E G E F E G I J I G I J I K I J I K I J I K I J E G I J I L I J I M I J I L A B C D A B C
  D E F E G E H E G E F E G I J I G I J I K I J I K I J I K I J E G I J I L I J I M I J I L A B C D A B C D I J I K I J
  I K A B C N ~@2
>`.pickRestart({
  A: "d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2 ~@3", B: "g1 ~ g1 ~@3 g1 ~ g1@2 ~@2 g1@2 ~@2",
  C: "d2 ~ d2@2 ~@2 d2 ~ d2@2 ~@2 d2@2 ~@2", D: "c2 ~ c2@2 ~@2 c2 ~ c2@2 ~@2 c2@2 ~@2", E: "d2@2 f2@2 d2 f2 d2@2",
  F: "g1@5 ~ d2@2 g2@2 g2@2 a2@4", G: "c2@6 a1@2 c2 ~ c2@2 a1@4", H: "g1@3 d2 g2!2 a2@2", I: "d2@2 f2@2 a2 f2 d2@2",
  J: "g1@3 d2@2 g2 a2@2", K: "c2@3 a1@2 c2 a1@2", L: "c2@3 a1 c2!2 a1@2", M: "c2@3 a1 c2!2 a1 c2", N: "c2",
})).s("gm_electric_bass_pick").gain(0.64)

// other · electric guitar muted
const electric_guitar_muted = note(`<
  ~@8 A B C D A B C D A B C D A B C D A B C D A E C D A E C D A E C D A E C D A E C D ~@4 F ~@7 A B C D A B C D A B C D
  A B C D A B C D A E C D A E C D A E C D A E C D A E C D ~@12 A B C D A E C D F ~@5
>`.pickRestart({
  A: "c4 ~ d4 ~ d4 ~@5 c4 ~ d4 ~ f4 ~", B: "g4 ~ g4 ~ g4 ~@5 f4 ~ g4 ~ f4 ~", C: "c4 ~ d4 ~ d4 ~@5 d4 ~ f4 ~ d4 ~",
  D: "c4 ~ c4 ~ c4 ~@3 c5!5 ~ c4 ~", E: "g4 ~ g4 ~ f4 ~@5 f4 ~ g4 ~ f4 ~", F: "c4 ~ d4 ~@13",
})).s("gm_electric_guitar_muted").gain(0.45).pan(0.1)

// other · pad choir
const pad_choir = note(`<
  ~@7 A@2 B C ~@2 D@3 ~ E@2 F ~ G@3 ~ H I@2 ~ J K@2 ~ L M N ~ O P Q ~ R@2 S ~ T U N ~ T V N ~@7 W@2 X Y Z ~ AA AB AC ~
  AD@3 ~ AE AF F ~ AG AH ~@2 AI AJ ~@2 AK AL ~@2 AM AN Q ~ AO@2 N ~ AP V N ~ AQ AR@2 ~@9 AQ AS@2 ~ AQ AS@2 ~@6
>`.pickRestart({
  A: "[~@6 c5@3 a4@2 ~@5]/2", B: "~@2 a4 ~ a4 ~ a4@2 g4 ~ g4@2 c5 ~ c5@2", C: "a4 ~ a4 ~ a4 ~ a4 ~ a4 ~ a4@3 ~ a4@2",
  D: "[~@2 a4@2 a4@2 a4 ~ g4@2 g4@2 c5@2 c5 a4@3 a4@2 a4@2 a4 a4@3 a4@2 a4@3 a4@2 ~@15]/3",
  E: "[~@2 a4 ~ a4 ~ a4 ~ g4 ~ g4 ~ c5 ~ c5 a4@3 a4 ~ a4 ~ a4 ~ a4 ~ a4 a4@2 ~ a4@2]/2", F: "~ a4@10 ~@5",
  G: "[~@2 a4 ~ a4 ~ a4 ~ g4 ~ g4@2 c5 ~ c5@6 ~@2 a4@2 ~ a4 ~@2 a4 ~ a4@6 ~ a4@10 ~, ~@7 a4@2 ~@39]/3",
  H: "~@2 d5 ~ d5 ~ d5 ~ f5 ~ f5 ~ f5@2 g5@2", I: "[f5@2 d5!3 ~ d5 ~ d5@2 d5 ~ d5 ~ d5 d5@2 ~ d5@2 ~@12]/2",
  J: "~@2 d5 ~ d5 ~ d5@2 f5 ~ f5!2 f5@2 g5@2", K: "[f5@2 d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5 d5@2 ~ d5@2 ~@12]/2",
  L: "~@2 d5 ~ d5 ~ d5@2 f5 ~ f5 ~ f5@2 g5@2", M: "f5@2 d5!3 ~ d5 ~ d5@2 d5@2 ~ d5@2 ~", N: "d5@2 ~ d5@2 ~@11",
  O: "~ d5 c5@3 ~ c5 ~ bb4 ~ bb4@2 a4 g4@3", P: "a4@2 d4@2 a4 ~ a4@2 a4 ~ a4@2 a4 ~ a4@2", Q: "~ a4@3 ~ a4@3 ~@8",
  R: "[~@2 d5@6 f5 ~ f5 ~ f5@2 g5 f5@3 d5@2 d5 ~ d5 ~ d5 ~ d5 ~ d5 d5@2 ~]/2", S: "d5@3 d5@2 ~@11",
  T: "~@4 d5 ~ d5@2 f5 ~ f5 ~ f5@2 g5@2", U: "f5@2 d5@3 ~ d5@2 d5 ~ d5 ~ d5 ~ d5 ~",
  V: "f5@2 d5@2 ~@2 d5 ~ d5 ~ d5 ~ d5 ~ d5 ~", W: "[~@12 c5@6 a4@5 ~@9]/2", X: "~@2 a4 ~ a4 ~ a4 ~ g4 ~ g4 ~ c5 ~ c5 ~",
  Y: "a4 ~ a4 ~ a4 ~ a4 a4@3 ~@3 a4@2 ~", Z: "a4@3 ~@13", AA: "~@2 a4 ~ a4 ~ a4@2 g4 ~ g4@2 c5@2 c5 ~",
  AB: "a4 ~ a4 ~ a4 ~ a4 a4@2 ~ a4@2 ~@2 a4@2", AC: "~ a4@4 ~@11",
  AD: "[~@2 a4 ~ a4 ~ a4 ~ g4 ~ g4 ~ c5 ~ c5 a4@2 a4@2 ~@5 a4 ~ a4 ~ a4 ~ a4 a4@2 ~ a4@3 ~ a4@9 ~]/3",
  AE: "~@2 a4 ~ a4 ~ a4!2 g4 ~ g4@2 c5 ~ c5 ~", AF: "~ a4@2 g4 a4 a4@3", AG: "~@2 d5 ~ d5@2 d5 f5@2 f5@2 f5@2 g5@2 ~",
  AH: "f5@2 d5 ~ d5 ~ d5 d5@3 d5@2 ~@4", AI: "~@2 d5 ~ d5 ~ d5 f5@2 ~ f5@2 f5@2 g5 ~",
  AJ: "f5@2 d5 ~ d5@2 ~ d5@3 d5 d5@3 d5@2", AK: "~@2 d5 ~ d5 ~ d5 f5@2 ~ f5 ~ f5@2 g5 ~",
  AL: "~ d5@2 d5@2 ~ d5@2 ~ d5@2 d5 ~@2 d5@2, f5 ~@7", AM: "~@2 c5@4 bb4@3 ~ bb4@2 a4@2 g4 ~",
  AN: "a4@2 d4@2 a4 ~ a4 ~ a4 ~ a4 ~ a4@2 a4@2",
  AO: "[~@4 d5@4 f5 ~ f5 ~ f5 g5@2 f5@2 d5@2 ~ d5 ~ d5 ~ d5 ~ d5!2 ~ d5@2 ~]/2", AP: "~@4 d5 ~ d5@2 f5 ~ f5 ~ f5 g5@3",
  AQ: "~@4 d5 ~ d5@2 [f5,g5] ~ f5 ~ f5@2 g5@2", AR: "[f5@2 d5@2 ~@2 d5 ~ d5 ~ d5 ~ d5 ~ d5 d5@2 ~ d5@2 ~@12]/2",
  AS: "[f5@2 d5@2 ~@2 d5 ~ d5 ~ d5 ~ d5 ~ d5 d5@3 ~ d5@2 ~@11]/2",
})).s("gm_pad_choir").gain(0.31)

// chords · piano
const piano = note(`<
  A B C D E F G H I J I K L M N O I M P Q R S T U ~@12 V W N X Y Z AA AB V AC AA AD ~@4 A B C D E F G H I J I K L M N O
  I M P Q R S T U ~@12 V W N X Y Z AA AB V AC AA AD ~@4 A B C D E F G H ~@8 A B C AE@3
>`.pickRestart({
  A: "[d4,f4] ~ [d4,f4] ~@3 [d4,f4,a4] ~ [d4,f4,a4] ~@3 [f4,a4]@4, a4 ~@5 d4 ~", // Dm F
  B: "[d4,g4,bb4] ~ [d4,g4,bb4] ~@3 [d4,g4,bb4] ~ [d4,g4,bb4] ~@3 [d4,g4,bb4]@3 ~", // Gm
  C: "[d4,f4,a4] ~ [d4,f4,a4] ~@3 [d4,f4,a4] ~ [d4,f4,a4] ~@3 [d4,a4]@4, ~@6 f4 ~", // Dm D5
  D: "[c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4]@2 ~@2, ~@3 g4", // C
  E: "[d4,f4,a4] ~ [d4,f4,a4] ~@3 [d4,f4,a4] ~ [d4,f4,a4] ~@3 [d4,f4,a4]@4", // Dm
  F: "[d4,g4,bb4] ~ [g4,bb4] ~@3 [d4,g4,bb4] ~ [d4,g4,bb4] ~@3 [d4,g4]@4, ~ d4 ~@4 bb4 ~", // Gm G5
  G: "[d4,f4,a4] ~ [d4,f4,a4] ~@3 [d4,f4,a4] ~ [d4,a4]@2 ~@2 [d4,a4]@4, ~@8 f4 ~@3 f4@2 ~@2", // Dm D5
  H: "[c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4,g4] ~ [c4,e4,g4] ~@3 [c4,e4,g4]@3 ~", // C
  I: "~ [d4,f4,a4] ~ [d4,f4,a4] d2 [f2,d4,f4,a4] ~ [d4,f4,a4], d2 f2 ~ d2", // Dm
  J: "g1@2 [d4,g4,bb4]@2 ~@2 [d4,g4,bb4]@3 ~ [d4,g4,bb4]@2 ~@2 [d4,g4,bb4]@2", // Gm
  K: "~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2 [c4,e4] ~, c2@2 ~@5 g4", // C
  L: "~ [d4,f4,a4] ~ [d4,f4,a4] d2 [f2,d4,f4] ~ [d4,f4,a4], d2@4 f2@4 ~@2 a4 ~ d2@4", // Dm
  M: "~@2 [d4,g4,bb4]@2 ~@2 [d4,g4,bb4]@3 ~ [d4,g4,bb4]@3 ~ [d4,g4,bb4]@2, g1 ~@3", // Gm
  N: "~ [d4,f4,a4] ~ [d4,f4,a4] d2 [f2,d4,f4,a4] ~ [d4,a4], d2 f2 ~ d2, ~@14 f4 ~", // Dm D5
  O: "~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4] ~, c2@5 ~@9 g4@2", // C
  P: "~ [d4,f4,a4] ~ [d4,f4,a4] d2 [f2,d4,f4] ~ [d4,a4], d2@4 f2@4 ~@2 a4 ~ d2@4, ~@14 f4 ~", // Dm D5
  Q: "c2@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@2 [c4,e4]@2 ~@2 [c4,e4] ~, ~@10 g4 ~@3 g4@2", // C
  R: "~ [d4,f4] ~ [d4,f4] a2 [f2,d4,f4,a4] ~ [d4,f4,a4], d2 f2 ~ d2, ~@2 a4 ~@3 a4 ~@9", // Dm
  S: "~@2 [d4,g4,bb4]@3 ~ [d4,g4,bb4]@3 ~ [d4,g4,bb4]@3 ~ [d4,g4,bb4]@2, g1 ~@3", // Gm
  T: "~ [d4,f4,a4] ~@3 [d4,f4,a4] d2 [d4,a4], d2@4 ~@10 f4 ~", // Dm D5
  U: "~@2 [c4,e4,g4] ~@7 [c4,e4,g4]@2 ~@2 [c4,e4,g4] ~, c2 ~@3", // C
  V: "~ [d4,f4,a4] ~ [d4,f4,a4] a2 [f2,d4,f4,a4] ~ [d4,f4,a4], d2 f2 ~ d2", // Dm
  W: "~@2 [d4,g4,bb4]@2 ~@2 [d4,g4,bb4]@3 ~ [d4,g4,bb4]@2 ~@2 [d4,g4,bb4]@2, g1 ~@3", // Gm
  X: "~@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2 ~@4 [c4,e4,g4]@3 ~, c2 ~@3", // C
  Y: "~ [d4,a4] ~ [d4,f4,a4] a2 [f2,d4,f4,a4] ~ [d4,f4,a4], d2 f2 ~ d2, ~@2 f4 ~@13", // D5 Dm
  Z: "~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4], g1 ~@3", // Gm
  AA: "~ [d4,f4,a4] ~ [d4,f4,a4] a2 [f2,d4,f4,a4] ~ [d4,a4], d2 f2 ~ d2, ~@14 f4 ~", // Dm D5
  AB: "~ [c4,e4] ~ [c4,e4,g4] ~ [c4,e4,g4] ~ [c4,e4,g4], c2 ~@3, ~@2 g4 ~@13", // C
  AC: "g1 [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4] ~ [d4,g4,bb4]", // Gm
  AD: "c2@2 [c4,e4,g4]@2 ~@2 [c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~@2 [c4,e4,g4]@2", // C
  AE: "[~@16 e7@31 ~, c2@5 c4@5 g5@5 c7@32 ~, ~ c3@5 g4@5 c6 e6@32 ~@4, ~@2 g3@5 c5 e5@5 c6@32 ~@3, ~@3 c4 e4@5 c5@5 g6@32 ~@2]/3",
})).s("gm_piano").gain(0.64).pan(0.4)

// chords · percussive organ
const percussive_organ = note(`<
  ~@11 A B ~@2 A B ~@2 A B ~@3 C@3 D E@2 F D G@2 F D H ~@2 A B ~@2 A B ~@3 I@3 J ~@11 A B ~@2 A B ~@2 A B ~@3 C@3 D E@2
  F D G@2 F D H ~@2 A B ~@2 A B ~@3 I@3 J ~@8 C@3 D E@2 F D ~@6
>`.pickRestart({
  A: "~@3 [g4,c5,e5]", B: "[a4,d5,f5] ~@3", C: "[[a4,f5]@15 ~ [bb4,g5]@16 [a4,f5]@16, d5]/3", D: "[g4,c5,e5]",
  E: "[[a4,d5,f5]@11 ~ [a4,f5]@4 [bb4,g5]@11 ~ [bb4,d5,g5]@4, ~@12 d5@15 ~@5]/2", F: "[a4,d5,f5]@3 [a4,d5,f5]",
  G: "[[a4,d5,f5]@11 ~ f5@4 [bb4,g5]@11 ~ [bb4,d5,g5]@4, ~@12 d5@15 ~@5, ~@6 a4 ~@9]/2", H: "[a4,d5,f5] ~@15",
  I: "[[a4,d5,f5]@11 ~ [a4,f5]@4 [bb4,g5]@11 ~ [bb4,g5]@4 [a4,f5]@12 [a4,d5,f5]@4, ~@12 d5@15 ~ d5@16 ~@4]/3", // Dm Eb Dm
  J: "[g4,c5,e5]@11 ~ [g4,c5,e5]@3 ~", // C
})).s("gm_percussive_organ").gain(0.29).pan(0.4)

// other · overdriven guitar
const overdriven_guitar = note(`<
  A B@2 C D E F@2 G ~@43 A B@2 C D E H I J ~@43 K L@2 M@3 N@3 ~@7 O@2 P Q@3
>`.pickRestart({
  A: "c5 a4 c5 a4 [a4,c5] c5 a4 c5 [a4,c5] a4 c5 [a4,c5] a4 c5 [a4,c5] a4", // Am
  B: "[c5 a4 c5 [a4,c5] a4 c5 a4 c5 [a4,c5] a4 ~ g5@14 g5@7, ~@5 c5 ~@10]/2", // Am
  C: "c5@2 f5 c5@2 f5 c5@2 f5 c5@2 f5 [c5,f5]@2 c5@2", // F5
  D: "d5 ~ e5 ~ f5@2 d5 c5 ~ d5@3 db5 [bb4,b4,c5] [gb4,g4,ab4,a4] [e4,f4]", E: "[d5,f5] a5@5 d6@2 ~ g5@7",
  F: "[~@2 f5 [c5,d5] a4 g4 [g4,a4] a4 f4 e4 [c4,d4] e4 d4@2 g4@12 f4@2 g4@3 [f4,gb4]]/2", G: "[eb4,e4] [db4,d4] ~@14",
  H: "f5 d5 [a4,c5] d5 c5 a4 [a4,d5] g4 a4 g4 [e4,f4] d4 a4 g4 [e4,f4] c4", I: "c4@2 g4@12 [f4,gb4] [eb4,e4]",
  J: "[db4,d4] ~@15", K: "c5 a4 c5 [a4,c5] a4 [a4,c5] c5 a4 [a4,c5] c5 a4 [a4,c5] c5 a4 c5 [a4,c5]",
  L: "[a4 c5 [a4,c5] a4@2 ~ g5@8 g5@12 [ab3,a3] [f3,gb3,g3] [d3,eb3,e3] db3 ~@2]/2", // Am Amaj7
  M: "[c5 d5 f5 c5 ~ f5 [c5,d5] f5 c5 d5 [c5,f5] d5@2 ~@9 d5 c5 d5@4 d5 a5@8 d6 a5 g5@7 ~ f5, ~@4 d5@2 ~@7 e5@11 ~@24]/3", // Csus2 F5
  N: "[d5!2 [c5,d5] c5 a4!2 [g4,a4] g4 f4 e4 [d4,g4] c4 f4 ~ g4@16 f4@18]/3", // Csus2 Gsus2 G5
  O: "[~@11 g5@9 f5 [c5,e5] a4 g4 a4@6 g4 ~]/2", P: "~@2 [e4,f4] d4 a4 c5 [f4,a4] d4 c5@6 d5@2", Q: "c5/3",
})).s("gm_overdriven_guitar").gain(0.48).pan(0.4)

// drums · kick
const kick = s("bd").struct("<A@8 B@44 A@8 B@44 A@8 B@8 A@3 C ~@2>".pickRestart({
  A: "x ~ x!2", B: "x!2", C: "x",
})).gain(0.8)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<[~ x ~ x ~@4]!8 ~@44 [~ x ~ x ~@4]!8 ~@44 [~ x ~ x ~@4]!8 ~@8 [~ x ~ x ~@4]!3 ~@3>")
  .gain(0.48)

// drums · snare
const snare = s("sd").struct("<A@8 B@44 A@8 B@44 A@7 C B@8 A@2 C D ~@2>".pickRestart({
  A: "x ~ x!2", B: "~ x ~ x", C: "x ~@7 x ~@3 x ~ x!2", D: "x",
})).gain(0.72)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<A B@7 ~@44 A B@7 ~@44 A B@7 ~@8 A B@2 ~@3>".pickRestart({
  A: "~@2 x ~@3 x ~@7 x!2", B: "~ x ~ x ~@4",
})).gain(0.32)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<A ~@7 B@16 ~@12 B@12 ~@4 A ~@7 B@16 ~@12 B@12 ~@4 A ~@15 A ~@5>".pickRestart({
  A: "x", B: "~ x ~ x ~ x ~ x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@47 [~ x] ~@51 [~ x] ~@26>").gain(0.72)

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

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

// drums · lt
const lt = s("lt").struct("<~@4 [x!2 ~ x!2 ~ x ~]!4 ~@48 [x!2 ~ x!2 ~ x ~]!4 ~@48 [x!2 ~ x!2 ~ x ~]!4 ~@14>").gain(0.64)

stack(
  bass, electric_guitar_muted, pad_choir, piano, percussive_organ, overdriven_guitar, kick, kick_soft, snare,
  snare_soft, hihat, hihat_soft, mid_tom, crash, ride, lt
)

More by Nomadi