Strudelify

L'eredita

Nomadi

KeyF majorTempo118 bpm
0:00/0:00
// L'eredita — Nomadi
// 118 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 153 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 30.
setcpm(118/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 E F C G H I J K L M N O A B P Q R S T U V W X Y Z S AA AB R AC L AD AE AF F AG AH AI AJ K AK AL AM AN A B C D
  E F C G H I J K L M N O A B P Q R S T U A B P Q R S T U V W X Y Z S AA AB R AC L AD AE AF F AG AH AI AJ K AK AL AM AN
  A B C D E F C G H AO AP AQ AR M N O R AC L AD AE AF F AG AH AI AJ K AK AL AM AN R AC L AD AE AF F AG AH AI AJ K AK AL
  AM AS@2
>`.pickRestart({
  A: "f2@3 f2 c2@2 f2@2", B: "bb1@6 f2@2 f2@2 bb2@5 ~", C: "f2@3 f2 f2@2 bb2@2", D: "f2@6 c2@2 c2@2 f2@2 e2@3 ~",
  E: "d2@3 d2 a1@2 d2@2", F: "bb1@6 bb1@2 a1@4 bb1@3 ~", G: "f2@6 c2@2 c2@2 f2@2 c2@3 ~", H: "g1@5 ~ g1 ~ g1@8",
  I: "d2@6 d2@2 a1@4 d2@3 ~", J: "c2@5 ~ c2 ~ c2@4 f2@4", K: "c2@5 ~ c2@2 g1@4 c2@3 ~", L: "bb1@3 bb1 a1@2 bb1@2",
  M: "c2@5 ~ c2 ~ c2@4 bb1@4", N: "f2@3 f2 f2@2 bb2 c3", O: "f2@3 c3@2 bb2@3", P: "f2@3 f2 f2@2 f2@2",
  Q: "c2@6 c2 ~ c2@4 bb1@2 c2@2", R: "d2@3 d2 a2@2 d2@2", S: "bb1@5 ~ bb1@2 a1@4 bb1@3 ~", T: "f2@3 f2 c2@2 g2@2",
  U: "f2@6 c3@2 c3@4 a2@3 ~", V: "f2@6 f2@2 c2@4 f2@3 ~", W: "bb1@6 f2@4 bb2@5 ~", X: "f2@5 ~ f2@5 ~ f2@4",
  Y: "c2@5 ~ c2@2 c2@2 bb1@2 a1@3 ~", Z: "d2@5 ~ d2@2 a1@4 d2@4", AA: "f2@5 ~ f2@2 c2@4 g2@4",
  AB: "f2@5 ~ f2 ~ f2@2 c2@2 f2@2 e2 ~", AC: "a1@6 e2@4 a2@2 g2@3 ~", AD: "f2@8 f2@5 ~ f2 ~", AE: "a1@3 a1 g1@2 a1@2",
  AF: "d2@3 d2 c2@2 d2@2", AG: "c2@5 ~ c2@3 ~ c2@2 g1@3 ~", AH: "f2@3 c2@2 f2 c2@2", AI: "bb1@5 ~ bb1@2 f1@4 bb1@3 ~",
  AJ: "f1@5 ~ f1@2 f1@3 ~ f1@4", AK: "a1@5 ~ a1@2 g1@4 a1@4", AL: "d2@5 ~ d2@2 a1@4 d2@2 c2@2",
  AM: "bb1@5 ~ bb1@2 c2@4 bb1@4", AN: "f2@7 ~ f2@3 ~ f2@4", AO: "c2@3 c2 g1@4", AP: "d2@7 ~ c2@8",
  AQ: "bb1@5 ~ bb1@2 bb1@4 a1@3 ~", AR: "f1@3 f1 c2@2 f1@2", AS: "[f2@7 ~]/2",
})).s("gm_electric_bass_finger").gain(0.49)

// other · string ensemble 1
const string_ensemble_1 = note(`<
  A B A C D B A E F G H I J H K@2 ~@32 A B A C D B A E F G H I J H K@2 ~@16 L M L N O M P Q ~@16 A B A C D B A E F R S C
  T H K@2 ~@16 U V B W X D B I A Y Z I X D AA AB@2
>`.pickRestart({
  A: "[f3,f4]@4 [a3,a4]@4 [c4,c5]@3 ~ [c4,c5]@4", B: "[bb3,bb4] [f3,f4] [bb3,bb4] [d4,d5]", C: "[f3,f4]",
  D: "[f3,f4]@4 [a3,a4]@4 [d4,d5]@3 ~ [d4,d5]@4", E: "[f3,f4]@15 ~", F: "[bb3,bb4] [d4,d5] [bb3,bb4] [g3,g4]",
  G: "[a3,a4] [d4,d5] [a3,a4] [f3,f4]", H: "[g3,g4] [c4,c5] [g3,g4] [e3,e4]", I: "[g3,g4]",
  J: "[bb3,bb4] [d4,d5] [bb3,bb4] [f3,f4]", K: "[f3,f4]/2", L: "f4 a4 c5@2", M: "bb4 f4 bb4 d5", N: "g4",
  O: "f4 a4 d5@2", P: "f4@3 a4@5 c5@8", Q: "f4", R: "[c4,c5] [g3,g4] [e3,e4] [g3,g4]",
  S: "[f3,f4] [a3,a4] [g3,g4] [e3,e4]", T: "[f3,f4] [a3,a4] [c4,c5]!2", U: "[f3,f4] [a3,a4] [d4,d5]@2",
  V: "[e3,e4] [a3,a4] [c4,c5]@2", W: "[c4,c5]", X: "[e3,e4]@4 [a3,a4]@4 [c4,c5]@3 ~ [c4,c5]@4",
  Y: "[f3,f4]@4 [bb3,bb4]@4 [d4,d5]@3 ~ [d4,d5]@4", Z: "[a3,a4] [f3,f4] [a3,a4] [c4,c5]",
  AA: "[bb3,bb4] [f3,f4] [c4,c5] [g3,g4]", AB: "[[f3,f4]@7 ~]/2",
})).s("gm_string_ensemble_1").gain(0.56).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note(`<
  A@8 B@2 C@2 D E@3 F@4 G@2 H@2 I@4 J@4 K@2 L@5 M N@8 A@8 B@2 C@2 D E@3 F@4 G@2 O@2 F@4 G@2 O@2 I@4 J@4 K@2 L@5 M N@8
  A@8 P M Q R S E@3 K@2 L@5 M N@8 K@2 L@5 M T@6 U@3
>`.pickRestart({
  A: "[[a3,c4] [bb3,d4] c4@2 ~ bb3 [a3,c4]@2, f3, ~@2 a3@3 ~@3, ~@2 d4 ~]/8", B: "[[g3,bb3] [f3,a3], d4]/2",
  C: "[e3,g3,c4]/2", D: "[f3,bb3,d4]", E: "[[e3,g3]@16 [f3,a3]@31 ~, c4]/3",
  F: "[[a3,c4]@16 [bb3,d4]@15 ~ a3@16 [e3,g3]@16, f3@3 ~, ~ c4]/4", G: "[a3@16 bb3@15 ~, [f3,d4]@31 ~]/2",
  H: "[[f3,a3] [e3,g3] [f3,a3]@2, c4]/2", I: "[[a3,c4] [bb3,d4] a3 [e3,g3], f3@47 ~@17, ~@32 c4@31 ~]/4",
  J: "[a3@2 bb3@2 [a3,c4] [e3,g3] [f3,a3]@2, f3@5 ~@3, d4@4 ~ c4@3]/4", K: "[[f3,d4] [e3,c4], a3@31 ~]/2",
  L: "[[bb3,d4]@16 ~@16 e3@16 ~@16 bb3@15 ~, f3@31 ~@17 [f3,d4]@31 ~, ~ a3@3 ~, ~ c4@2 ~@2]/5", M: "[e3,g3,c4]",
  N: "[[a3,c4]@16 [bb3,d4]@16 a3@16 g3@16 ~@32 bb3@7 ~ [e3,g3]@8 [f3,a3]@15 ~, f3@48 e3@31 ~ [f3,d4]@23 ~@25, ~@32 c4@48 ~@24 c4@23 ~, ~@64 a3@31 ~@33]/8", // Am Bb Em F Dm
  O: "[[f3,a3]@8 [e3,g3]@8 [f3,a3]@15 ~, c4@31 ~]/2", P: "[g3,bb3,d4]", Q: "[f3,a3,d4] [e3,g3,c4]",
  R: "[f3,bb3,d4]@15 ~", S: "[f3,a3,c4]",
  T: "[[a3,c4] [bb3,d4] a3 g3 ~ [f3,d4], f3@48 e3@31 ~@17, ~@2 c4@3 ~, ~@64 a3@31 ~]/6", // Am Bb Dm
  U: "[bb3@7 ~ [e3,g3]@8 [f3,a3]@28 ~@4, ~@2 c4@9 ~]/3", // Em F
})).s("gm_string_ensemble_2").gain(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B A@2 C B A@2 D C E@2 B E A@3 B A E C B F A@2 B A E C B F G C H B A H C B E A B A E H C I A@2 B A@2 C B A@2 D C E@2
  B E A@3 B A E C B F A@2 B A E C B F A@2 B A E C B F G C H B A H C B E A B A E H C I A@2 B A@2 C B A@2 D E J B A E A@2
  C H B A H C B E A B A E H C I A C H B A H C B E A B A E H C I K@2
>`.pickRestart({
  A: "[a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] ~ [a3,c4,f4]@2", // F
  B: "[bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4] ~ [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4] ~ [bb3,d4,f4]@2", // Bb
  C: "[a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4] ~ [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4] ~ [a3,d4,f4]@2", // Dm
  D: "[bb3,d4,g4]@2 [bb3,d4,g4]@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2 [bb3,d4,g4]@2 [bb3,d4,g4]@2 [bb3,d4,g4] ~ [bb3,d4,g4]@2", // Gm
  E: "[g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4] ~ [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4] ~ [g3,c4,e4]@2", // C
  F: "[a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] ~ [a3,c4,f4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4] ~ [g3,c4,e4]@2", // F C
  G: "[a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] ~ [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4]@2 [a3,c4,f4] ~ [a3,d4,f4]@2", // F Dm
  H: "[a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4] ~ [a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4]@2 [a3,c4,e4] ~ [a3,c4,e4]@2", // Am
  I: "[bb3,d4,f4]@2 [bb3,d4,f4]@2 [bb3,d4,f4] ~ [bb3,d4,f4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4] ~ [g3,c4,e4]@2", // Bb C
  J: "[a3,d4,f4]@2 [a3,d4,f4]@2 [a3,d4,f4] ~ [a3,d4,f4]@2 [g3,c4,e4]@2 [g3,c4,e4]@2 [g3,c4,e4] ~ [g3,c4,e4]@2", // Dm C
  K: "[[a3,c4,f4]@15 ~]/2", // F
})).s("gm_acoustic_guitar_steel").gain(0.22)

// chords · rock organ
const rock_organ = note(`<
  ~@31 A B C D E F@3 G E H E G C I J E ~@39 A B C D E F@3 G E H E G C I J E ~@15 K B C D E F@3 G E H E G C I J E B C D E
  F@3 G E H E G C I J L@2
>`.pickRestart({
  A: "~@12 [b3,c4,db4,d4] [e4,f4,g4,a4,b4] c5 f5", B: "[a5,d6,f6]", C: "[a5,c6,e6]", D: "[bb5,d6,f6]", E: "[a5,c6,f6]",
  F: "[[c6,e6] ~ bb5, a5@31 ~@17, ~@16 [d6,f6]@31 ~]/3", G: "[g5,c6,e6]", H: "[bb5,d6,f6]@15 ~", I: "[a5,d6,f6]@15 ~",
  J: "[bb5,d6,f6] [c6,e6,g6]", K: "~@12 [f1,g1,a1,b1,c2,d2,e2,f2,g2] ~ [c4,d4] a4", L: "[[a5,c6,f6]@7 ~]/2",
})).s("gm_rock_organ").gain(0.24).pan(0.7)

// chords · rock organ · soft notes · Am G7 Em
const rock_organ_soft = note(`<
  ~@31
  [~@14 d5 e5]
  ~@55
  [~@14 d5 e5]
  ~@31
  [~@13 [a2,b2,c3,d3,e3] [f3,g3,a3,b3] [e4,f4,g4]]
  ~@33
>`).s("gm_rock_organ").gain(0.12).pan(0.7)

// drums · kick
const kick = s("bd").struct("<[x ~@2 x!2 ~@3]!32 [x ~@2 x ~@4]!16 [x ~@2 x!2 ~@3]!40 [x ~@2 x ~@4]!63 x ~>").gain(0.8)

// drums · rim
const rim = s("rim").struct("<~@16 [~ x]!15 ~@33 [~ x]!23 ~@66>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@31 A B@7 A B@8 ~@39 C B@7 A B@17 C D B@4 E B@7 C B@7 F B@7 A B@7 ~@2>".pickRestart({
  A: "~@8 x!2 ~@2 x ~@3", B: "~ x", C: "~@8 x ~@3 x!2 ~@2", D: "x!2", E: "~@12 x!2 ~@2", F: "~@11 x!2 ~@3",
})).gain(0.8)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@15 A ~@7 B ~@7 C ~@7 C ~@7 B ~@15 D ~@7 B ~@7 B ~@7 C ~@7 C ~@7 B ~@7 E ~@7 C ~@7 F ~@7 G ~@7 C ~@9
>`.pickRestart({
  A: "~@5 x!2 ~", B: "~@6 x!2", C: "~@10 x ~@3 x!2", D: "~@5 x!3", E: "~@15 x", F: "~@5 x ~ x", G: "~@8 x ~@5 x!2",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  A B@7 A B@7 A B@6 C A B@7 ~@16 A B@7 A B@6 A@2 B@6 C A B@6 C A B@7 ~@16 A B@2 D A B@3 A B E A B@2 F B ~@33
>`.pickRestart({
  A: "~ x!6 ~", B: "x!7 ~", C: "x!5 ~ x ~", D: "x!4 ~ x!2 ~", E: "~ x!3 ~ x!2 ~", F: "~ x!5 ~@2",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<A@15 ~ A@7 ~ A@7 ~@17 A@15 ~ A@7 ~ A@7 ~ A@7 ~@17 A@14 ~@35>".pickRestart({
  A: "~@7 x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@7 B ~@23 B ~@15 A ~@7 B ~@7 B ~@23 B ~@7 C ~@7 A ~@33>".pickRestart({
  A: "~ x", B: "~@5 x ~@2", C: "~@6 x!2",
})).gain(0.56)

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

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

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@32 A B A C B A D A E D B A@3 F G ~@40 A B A C B A D A E D B A@3 F G A B A C B A D A E D B A@3 F G A B A C B A D A E
  D B A@3 F G A B A C B A D A E D B A@3 F H ~
>`.pickRestart({
  A: "x!8", B: "x!7 ~", C: "x!5 ~ x!2", D: "x ~ x!6", E: "x!6 ~ x", F: "x!3 ~ x!4", G: "x!5 ~ x ~", H: "x",
})).gain(0.32)

// drums · tambourine · soft notes
const tambourine_soft = s("tb").struct(`<
  ~@33 A ~ B A ~ C ~ D C A ~@3 E F ~@41 A ~ B A ~ C ~ D C A ~@3 E F ~ A ~ B A ~ C ~ D C A ~@3 E F ~ A ~ B A ~ C ~ D C A
  ~@3 E F ~ A ~ B A ~ C ~ D C A ~@3 E ~@2
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~ x ~@6", D: "~@3 x", E: "~@3 x ~@4", F: "~@5 x ~ x",
})).gain(0.16)

stack(
  bass, string_ensemble_1, string_ensemble_2, acoustic_guitar_steel, rock_organ, rock_organ_soft, kick, rim, snare,
  low_tom, hihat, open_hat, mid_tom, crash, ride, tambourine, tambourine_soft
)

More by Nomadi