Strudelify

L'uomo di Monaco

Nomadi

KeyC minorTempo166 bpm
0:00/0:00
// L'uomo di Monaco — Nomadi
// 166 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 154 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(166/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.

// chords · electric guitar jazz · "giutrar steel aco"
const electric_guitar_jazz = note(`<
  ~ A B C@2 D E F G A@2 H@2 D I J G K G@5 L M N O P G B A M Q R S G@2 J@4 S M N O J G B A T M R M G J@3 U M V K W X Y Z
  N O V J AA AB@2 AC AD AE J@2 S M N O J G B A T M R M G J@3 AF G L M N O P G B A M Q R S G@2 J@2 U M V K W X Y Z N O V
  J AA AB@2 AC AD AE J@2 S M N O J G B A T M R M G J AG ~@8
>`.pickRestart({
  A: "~@2 eb5 g5@2 f5 eb5@2, bb4@13 ~@3", B: "~@2 eb5 g5@2 f5 eb5@2, bb4@7 ~", C: "~@2 eb5 g5@2 f5 eb5@2, c5@13 ~@3",
  D: "~@2 d5 f5@2 eb5 d5@2, bb4@7 ~", E: "~@2 d5 f5@2 ~ d5@2, bb4@13 ~@3, ~@5 eb5@2 ~",
  F: "~@2 c5 eb5@2 d5 c5@2, g4@3 ~", G: "~@2 c5 eb5@2 d5 c5@2, g4@13 ~@3", H: "~@2 eb5 g5@2 f5 eb5@2, c5@7 ~",
  I: "~@2 d5 f5@2 ~ d5@2, bb4@13 ~@3, ~@10 eb5@5 ~", J: "~@2 c5 eb5@2 d5 c5@2, g4@7 ~",
  K: "~@2 c5 ~@2 d5 c5@2, g4@13 ~@3, ~@3 eb5@3 ~@2", L: "~@4 bb4 ~ d5@4 c5@2 bb4@4, g4@7 ~",
  M: "~@2 bb4 d5@2 c5 bb4@2, g4@13 ~@3", N: "~@2 ab4 c5@2 bb4 ab4@2, f4@7 ~", O: "~@2 ab4 c5@2 bb4 ab4@2, f4@13 ~@3",
  P: "~@2 c5 eb5@2 d5 c5@2, g4@15 ~", Q: "~@2 bb4 ~@2 c5 bb4@2, g4@13 ~@3, ~@3 d5@3 ~@2",
  R: "~@2 d5 f5@2 eb5 d5@2, bb4@13 ~@3", S: "~@2 bb4 d5@2 c5 bb4@2, g4@15 ~",
  T: "~@2 bb4 ~@2 c5 bb4@2, g4@7 ~, ~@3 d5@3 ~@2", U: "~@2 c5 eb5@2 d5 c5@2, ab4@13 ~@3",
  V: "~@2 c5 ~@2 d5 c5@2, g4@7 ~, ~@3 eb5@3 ~@2", W: "~@2 c5 eb5@2 d5 c5@2, ab4@7 ~",
  X: "~@2 bb4 d5@2 c5 bb4@2, f4@13 ~@3", Y: "~@2 g4 bb4@2 ab4 g4@2, eb4@7 ~",
  Z: "~@2 g4 bb4@2 ~ g4@2, eb4@13 ~@3, ~@5 ab4@2 ~", AA: "~@2 bb4 ~@2 c5 bb4@2, f4@7 ~, ~@3 d5@3 ~@2",
  AB: "[~@2 bb4 ~@2 c5 ~@4 g4 b4@2 a4 g4@2, f4@6 bb4@3 ~@7, ~@6 d5@7 ~@3 d4@14 ~@2]/2",
  AC: "~@2 g4 b4@2 ~ g4@2, d4@13 ~@3, ~@10 a4@5 ~", AD: "~@2 g4 b4@2 a4 g4@2, d4@7 ~",
  AE: "~@4 g4@2 b4@4 a4@2 g4@3 ~, d4@15 ~", AF: "c5 ~@3 c5@2 eb5@4 d5@2 c5@4, g4@13 ~@3", AG: "eb5",
})).s("gm_electric_guitar_jazz").gain(0.05)

// bass · acoustic bass · "basso"
const bass = note(`<
  ~ A B C D E@2 F D A B C G@2 H I J@2 D C@3 K L M N O P C Q R S T U V C@4 W X Y Z AA AB AC AD AE R Y Z AF V AC AG AC AG
  AH AI AJ AD AH AK AL R AM AN AC AG AO AK AP@4 AC X Y Z AA AB AC AD AE R Y Z AF V AC AG AC AG C K L M N O W C Q R S T U
  V C@4 AH AI AJ AD AH AK AL R AM AN AC AG AO AK AP@4 AC X Y Z AA AB AC AD AE R Y Z AF V AC AG AQ ~@8
>`.pickRestart({
  A: "eb2@2 ~@2 eb2@2 ~@2 eb2@7 ~", B: "eb2 ~ eb2 ~ eb2@4", C: "c2@2 ~@2 c2@2 ~@2 c2@7 ~", D: "c2 ~ c2 ~ c2@4",
  E: "bb1 ~ bb1 ~ bb1@4", F: "[b1,c2]@2 ~@2 c2@2 ~@2 c2@7 ~",
  G: "[c2@2 ~@2 c2@2 ~@10 bb1 ~@3 bb1@2 ~@2 bb1@7 ~, ~@8 c2@13 ~@11]/2", H: "bb1@2 ~@2 bb1@2 ~@2 bb1@5 ~ bb1@2",
  I: "c2@2 ~@2 c2@2 ~@2 c2@7 ~, ~@8 db2 ~@7", J: "[c2@2 ~@2 c2@2 ~@2 c2@7 c2@2 ~@3 c2@2 ~@2 c2@7 ~]/2",
  K: "c2@2 ~@2 c2 ~@3 c2@8", L: "g1@2 ~@2 g1@2 ~@2 g1@5 ~ g1 ~", M: "g1 ~ g1 ~ g1@4", N: "f1@2 ~@2 f1@2 ~@2 f1@7 ~",
  O: "f1@2 ~@2 f1@2 ~@2 f1@5 ~ f1@2", P: "c2@2 ~@2 c2@3 ~ c2@7 ~, db2 ~@15", Q: "eb2@3 ~ eb2@2 ~@2 eb2@8",
  R: "eb2@3 ~ eb2@3 ~ eb2@8", S: "g1 ~@3 g1@3 ~ g1@7 ~", T: "g1@2 ~@2 g1@3 ~ g1@5 ~ g1@2", U: "bb1@2 ~@2 bb1@3 ~ bb1@8",
  V: "g1@3 ~ g1@3 ~ g1@5 ~ g1@2", W: "c2@2 ~@2 c2@3 ~ c2@7 ~", X: "c2@3 ~ c2@2 ~@2 c2@8", Y: "g1@3 ~ g1@2 ~@2 g1@7 ~",
  Z: "g1@3 ~ g1@3 ~ g1@8", AA: "f1@3 ~ f1@3 ~ f1@7 ~", AB: "f1@3 ~ f1@3 ~ f1@8", AC: "c2@3 ~ c2@3 ~ c2@7 ~",
  AD: "c2@3 ~ c2@3 ~ c2@5 ~ c2@2", AE: "eb2@2 ~@2 eb2@3 ~ eb2@7 ~", AF: "bb1@3 ~ bb1@3 ~ bb1@8",
  AG: "c2@3 ~ c2@3 ~ c2@8", AH: "ab2@3 ~ ab2@3 ~ ab2@8", AI: "g2@3 ~ g2@3 ~ g2@8", AJ: "eb2@4 c2@3 ~ c2@7 ~",
  AK: "bb2@3 ~ bb2@3 ~ bb2@5 ~ bb2@2", AL: "eb2@3 ~ eb2@3 ~ eb2@7 ~", AM: "f2@3 ~ f2@3 ~ f2@6 ~@2",
  AN: "f2@3 ~ f2@3 ~ f2@8", AO: "bb2@3 ~ bb2@3 ~ bb2@7 ~", AP: "g2@3 ~ g2@3 ~ g2@7 ~", AQ: "eb2@3 ~",
})).s("gm_acoustic_bass").gain(0.47)

// other · flute · "flauto"
const flute = note("<A B C D E F G H@2 I C D E F G J@4 ~@73 K L M N@2 O P Q@2 I C D R@2 G S@3 ~@44>".pickRestart({
  A: "~@2 bb4 c5", B: "eb5@11 f5@4 ~", C: "g5@3 bb5", D: "g5@3 f5", E: "eb5", F: "d5@3 eb5", G: "d5 bb4@2 g4",
  H: "[bb4 c5@5 bb4 c5]/2", I: "eb5@3 f5", J: "[d5@3 c5@52 ~@9]/4", K: "~@2 g4 bb4", L: "c5@3 bb4", M: "c5@3 eb5",
  N: "[d5@2 c5@2 bb4@2 c5 g4@5 c4@2 eb4@2]/2", O: "f4@11 eb4@5", P: "f4@11 ab4@5",
  Q: "[g4@4 f4@4 eb4@4 f4@2 c4@9 bb4@4 ~ c5@4]/2", R: "[eb5@15 d5@13 eb5@4]/2", S: "[d5@2 c5@21 ~]/3",
})).s("gm_flute").gain(0.4)

// other · pad warm · "tappetto"
const pad_warm = note(`<
  A@5 B@3 C@7 D@8 E@7 F@4 G H@8 I@8 J G K@4 L G M@3 N@3 O@5 P@5 Q@4 R@2 S@7 T@6 U@3 R@2 V@2 W@2 X@4 Y@5 Z@5 AA@6 AB@6
  AC@3 AD@7 AE@3 G AF@2 AG ~@5 AH@3
>`.pickRestart({
  A: "[~@15 eb4@32 c4@33]/5", B: "[~@31 c4@17, bb3@11 ~@5]/3",
  C: "[~@16 eb3@31 [c3,c4]@32 [bb2,bb3]@33, ~@15 eb4@32 ~@65]/7", // C Bb
  D: "[~@63 g4@10 ~@6 c5@16 ~ c4@32, c3@127 ~, c4@95 ~@33, ~@48 eb4@49 ~@31, ~@75 g4@22 ~@31]/8",
  E: "[[g3,g4]@31 [f3,f4]@32 ~@2 c3@30 [eb3,eb4]@17, ~@63 c4@33 ~@16]/7", // G F Eb
  F: "[~@15 [g3,g4]@32 ~ bb4@16, ~@47 bb3@16 ~]/4", G: "[g3,g4]",
  H: "[~@56 c5@7 c4@34 [g3,g4]@31, c4@61 ~@67, ~ c3@98 ~@29, ~@39 eb4@23 ~@66, ~@24 g4@7 ~@33]/8", // G
  I: "[~@31 [c3,c4]@32 [eb3,eb4]@32 [g3,g4]@32 bb4, [f3,f4]@33 ~@95]/8", J: "bb3",
  K: "[~@3 c5, c3, c4@15 ~, ~@8 eb4@7 ~, ~@20 g4@11 ~]/4", L: "[ab3,ab4]", M: "[[eb3,eb4]@8 [c3,c4]@23 [ab3,ab4]@17]/3",
  N: "[bb3@16 ~@2 ab4 ~@11 eb3@16 ~@2, bb4 eb4, ~@17 bb3@9 ~@22]/3",
  O: "[[f3,f4]@31 ~ c3@31 [bb3,bb4]@17, ~@31 c4@33 ~@16]/5", P: "[~@3 [g3,g4]@13]/5", Q: "[[c3,c4]@31 [g3,g4]@33]/4",
  R: "[f3,f4]/2", S: "[~@31 [eb3,eb4]@32 [g3,g4]@32 [bb3,bb4]@16 ~, ~ [c3,c4]@32 ~@79]/7",
  T: "[[g3,g4]@15 ~@65 c3@16, ~@5 c3@21 ~@6, ~ c4@5]/6", U: "[~ g4@2, ~@5 g3@11]/3", V: "[c3,c4]/2", W: "[eb3,eb4]/2",
  X: "[[g3,g4]@32 [bb3,bb4]@15 ~ g3@16, ~@47 g4@17]/4", Y: "[~@7 g4 [ab3,ab4]@2, [c3,c4]@13 ~@3, ~@3 eb4 ~]/5",
  Z: "[[g3,g4]@15 eb3@12 c3 ~ [c3,c4]@18 ~ ab3@15 ~ bb4@16, ~@15 eb4@15 ~@17 ab4@16 bb3@17]/5", // G C
  AA: "[~@31 [f3,f4]@32 ~ c3@32, [eb3,eb4]@11 ~@10 c4@11]/6", AB: "[[bb3,bb4]@31 [g3,g4]@65]/6",
  AC: "[~@2 g3, [c3,c4]@11 ~@5, ~@31 g4@17]/3", // C
  AD: "[~@15 f3@32 ~ c3@31 [eb3,eb4]@33, ~@15 f4@34 ~@63, ~@47 c4@33 ~@32]/7", AE: "[[g3,g4]@31 [bb3,bb4]@17]/3",
  AF: "[~ c3@31, c4]/2", AG: "eb3 ~", AH: "[[c3,c4]@11 ~@5]/3",
})).s("gm_pad_warm").gain(0.31)

// other · string ensemble 1 · "strings"
const string_ensemble_1 = note(`<
  A B@3 C D@2 E@2 F@3 C G H I@4 ~@19 J@8 ~ K@5 L@5 ~@15 M N O@8 ~ K@5 P@5 Q@2 R@8 S C T@2 U@4 ~@15 M V@2 W@8 K@5 X@3 ~@4
  Y Z@4
>`.pickRestart({
  A: "~@8 bb4@3 ~ c5@4", B: "[eb5@12 ~@3 g5@13 bb5@3 g5@12 f5@5, ~@12 f5@5 ~@31]/3", C: "eb5",
  D: "[d5@11 eb5@4 d5@5 bb4@8 g4@4]/2", E: "[bb4@4 c5@20 bb4@3 c5@5]/2", F: "[eb5@11 f5@4 g5@12 bb5@4 g5@12 f5@5]/3",
  G: "d5@11 eb5@5", H: "d5@3 bb4@9 g4@4", I: "[d5@3 c5@49 ~@12]/4", J: "[~@15 c6@113]/8", K: "[eb6@4 d6]/5",
  L: "[bb5@8 g5@7 c6@64 ~]/5", M: "~@15 f6, ~@7 eb6", N: "g6",
  O: "[~@3 f6@2 ~@4 eb6@2 d6@2 eb6@2 c6@113, ~@3 g6@2 ~@59, ~@4 f6 ~@59]/8",
  P: "[bb5@8 g5@7 ~@57 g4@4 bb4@4, ~@15 c6@64 ~]/5", Q: "[c5@11 bb4@4 c5@13 eb5@4]/2",
  R: "[d5@4 c5@4 bb4@4 c5@2 g4@10 c4@3 eb4@4 f4@12 eb4@4 f4@12 ab4@4 g4@4 f4@5 eb4@3 f4@3 c4@9 bb4@4 c5@4 eb5@12 f5@4 g5@13 bb5@4]/8",
  S: "g5@11 f5@5", T: "[d5@11 eb5@4 d5@4 ~ bb4@6 ~@2 g4@4]/2", U: "[bb4@3 c5@47 ~@14]/4",
  V: "[g6@19 f6@2 ~@4 eb6@2 d6@2 eb6@2 c6, ~@11 g6@2 ~@3, ~@12 f6 ~@3]/2", W: "c6/8", X: "[bb5@8 g5@7 c6@33]/3",
  Y: "d6", Z: "[bb5@8 g5@7 c6@48 ~]/4",
})).s("gm_string_ensemble_1").gain(0.27)

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

// drums · clap
const clap = s("cp").struct("<~@145 [~ x ~ x]!7 [~ x ~@2] ~>").gain(0.67)

// drums · snare
const snare = s("sd").struct("<~ A@19 B A@17 B A@17 C A@17 D A@17 C A@17 B A@17 D A@15 D A@7 D ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x!2 ~@2 x!2", C: "~ x ~ x ~@2 x ~", D: "~@2 x ~@2 x ~ x",
})).gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<~ [x!8]!152 x>").gain(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@152 [~@3 x ~ x ~@2] x>").gain(0.6)

// drums · open hat
const open_hat = s("oh").struct("<[x!4] ~@153>").gain(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@152 x ~>").gain(0.67)

// drums · crash
const crash = s("cr").struct("<~@9 A ~@11 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@17 A ~@15 A ~@7 A>".pickRestart({
  A: "x",
})).gain(0.53)

stack(
  electric_guitar_jazz, bass, flute, pad_warm, string_ensemble_1, kick, clap, snare, hihat, low_tom, mid_tom, open_hat,
  high_tom, crash
)

More by Nomadi