Strudelify

Utopia

Nomadi

KeyB♭ majorTempo125 bpm
0:00/0:00
// Utopia — Nomadi
// 125 bpm, 4/4, key Bb major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 17, 4/4 at bar 17, 2/4 at bar 26, ...) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 117 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 29.
setcpm(125/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.

// other · music box · "untitled"
const music_box = note(`<
  A@8 ~@7 B C D ~@7 A@2 ~@7 B C D ~@7 A@2 ~@7 B C D ~@7 A@2 ~@7 B C D ~@7 A@2 ~@7 B C D ~@7 A@2 ~@7 B C@3 E@3
>`.pickRestart({
  A: "[bb4,bb5] [f4,f5] [bb4,bb5] [d5,d6] [c5,c6]@2 [f5,f6]@2", B: "~@4 [bb4,bb5] [f4,f5] [bb4,bb5] [d5,d6]",
  C: "[c5,c6]@2 [f5,f6]@2 [bb4,bb5] [f4,f5] [bb4,bb5] [d5,d6]", D: "[c5,c6] [f5,f6] ~@2",
  E: "[[c5,c6]@2 [f5,f6]@2 [bb4,bb5]@13 ~@7]/3", // C F Bb
})).s("gm_music_box").gain(0.57)

// bass · fretless bass
const bass = note(`<
  A@4 B@8 C D E F G@5 H I J K B@6 C D E F G@5 H I J K B@6 C D E F G@5 H I J K B@6 C D E F G@5 H I J K B@2 L@4 M N O F G
  P Q@3 R I J K B@6 C D E F G@3 S@3
>`.pickRestart({
  A: "bb1@3 bb1 f1@2 c2@2", B: "bb1@3 bb1 f1 g1 a1 c2", C: "eb2@3 eb2 d2@3 d2", D: "bb1 c2 d2 eb2 bb1@4",
  E: "eb2@3 eb2 f2@4", F: "~ f1 g1 a1 bb1@3 bb1", G: "f1 g1 a1 c2 bb1@3 bb1", H: "f1 g1 a1 c2 eb2@3 eb2",
  I: "d2@3 d2 bb1 c2 d2 eb2", J: "bb1@4 eb2@3 eb2", K: "f2@4 ~ f1 g1 a1", L: "bb1 f1", M: "eb2 d2", N: "g1 bb1",
  O: "eb2 f2", P: "f1 g1 a1 c2 bb1@4", Q: "f1 bb1", R: "f1@4 eb2@3 eb2", S: "[f1 g1 a1 c2 bb1@13 ~@7]/3",
})).s("gm_fretless_bass").gain(0.61)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A@12 B C D@2 E@5 F G H I A@6 B C D@2 E@5 F G H I A@6 B C D@2 E@5 F G H I A@6 B C D@2 E@5 F G H I A@6 B C D@2 E@5 F G H
  I A@6 B C D@2 E@3 J@3
>`.pickRestart({
  A: "[f3,bb3,d4] [f3,a3,c4]", B: "[g3,bb3,eb4] [f3,bb3,d4]", C: "[g3,bb3,d4] [f3,bb3,d4]",
  D: "[[g3,bb3,eb4] [f3,a3,c4,f4]@2 [f3,bb3,d4]]/2", E: "[f3,a3,c4] [f3,bb3,d4]", F: "[f3,a3,c4] [g3,bb3,eb4]",
  G: "[f3,bb3,d4] [g3,bb3,d4]", H: "[f3,bb3,d4] [g3,bb3,eb4]", I: "[f3,a3,c4,f4]",
  J: "[[f3,a3,c4]@4 [f3,bb3,d4]@13 ~@7]/3", // F Bb
})).s("gm_string_ensemble_1").gain(0.24)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@4 A@8 B C D@2 E@5 F G H I A@6 B C D@2 E@5 F G H I A@6 B C D@2 E@5 F G H J A@6 B C K@2 E@5 F G H J A@2 ~@13 L G H J
  A@6 B C K@2 E@3 M@3
>`.pickRestart({
  A: "[bb2,f3]!2 [bb2,f3,bb3,d4,f4]@2 [c4,f4]!4, [bb3,d4,f4] ~ [f3,a3]!2", // Bb5 Bb F5 Bb F
  B: "[g3,bb3]!2 [g3,bb3,eb4,g4]@2 [d4,f4]!4, [eb4,g4] ~ [f3,bb3]!2", // Gm Eb Dm Eb Bb5
  C: "[g3,bb3]!2 [g3,bb3,d4,g4]@2 [d4,f4]!4, [d4,g4] ~ [f3,bb3]!2", // Gm Dm G5 Bb5
  D: "[[g3,bb3]!2 [eb4,g4]!2 [f3,a3,c4]!2 [f3,a3,c4,f4]@3 [f3,a3,c4,f4]!3 [bb2,f3]!2 [bb2,f3,bb3,d4,f4]@2, [eb4,g4] [g3,bb3] f4 ~@3 [bb3,d4,f4] ~]/2", // Gm Eb F Bb5 Bb Eb Gm Bb
  E: "[c4,f4]!4 [bb2,f3]!2 [bb2,f3,bb3,d4,f4]@2, [f3,a3]!2 [bb3,d4,f4] ~", // F5 Bb5 Bb F Bb
  F: "[c4,f4]!4 [g3,bb3]!2 [g3,bb3,eb4,g4]@2, [f3,a3]!2 [eb4,g4] ~", // F5 Gm Eb F Eb
  G: "[d4,f4]!4 [g3,bb3]!2 [g3,bb3,d4,g4]@2, [f3,bb3]!2 [d4,g4] ~", // Dm Gm Bb5 G5
  H: "[d4,f4]!4 [g3,bb3]!2 [eb4,g4]!2, [f3,bb3]!2 [eb4,g4] [g3,bb3]", // Dm Gm Eb Bb5 Eb Gm
  I: "[f3,a3,c4]!2 [f3,a3,c4,f4]@3 [f3,a3,c4,f4]!3, f4 ~@3", J: "[f3,a3,c4]!2 [f3,a3,c4,f4]@3 ~@3, f4 ~@3",
  K: "[[g3,bb3]!2 [eb4,g4]!2 [f3,a3,c4]!2 [f3,a3,c4,f4]@3 ~@3 [bb2,f3]!2 [bb2,f3,bb3,d4,f4]@2, [eb4,g4] [g3,bb3] f4 ~@3 [bb3,d4,f4] ~]/2", // Gm Eb F Bb5 Bb Eb Gm Bb
  L: "~@4 [g3,bb3]!2 [g3,bb3,eb4,g4]@2, ~@2 [eb4,g4] ~", M: "[[c4,f4]!4 [f3,bb3,d4,f4]@13 ~@7, [f3,a3]!2 ~@10]/3",
})).s("gm_acoustic_guitar_steel").gain(0.18)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@4 A@8 ~@4 B@6 ~@3 A@6 ~@4 B@6 ~@3 A@6 ~@4 B@6 ~@3 A@6 ~@4 B@6 ~@3 A@2 ~@17 A@6 ~@4 B@4 ~@2
>`.pickRestart({
  A: "~@10 a3@4 a3 ~", B: "~@2 a3@4 a3 ~@9",
})).s("gm_overdriven_guitar").gain(0.29)

// other · music box
const music_box_2 = note(`<
  ~@8 A B A B ~@5 C D E D F ~@5 A B A B ~@5 C D E D F ~@5 A B A B ~@5 C D E D F ~@5 A B A B ~@5 C D E D F ~@5 A B A B G
  H I@2 ~ C D E D J K L M ~@2 A B A B ~@10
>`.pickRestart({
  A: "d6 c6", B: "bb5 c6", C: "~ d6", D: "c6 bb5", E: "c6 d6", F: "c6 ~", G: "eb6 d6", H: "d6 bb5", I: "[bb5 c6@2 ~]/2",
  J: "c6 eb6", K: "d6!2", L: "bb5!2", M: "c6",
})).s("gm_music_box").gain(0.53)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@12 A B C@2 ~@5 D E F G ~@6 A B C@2 ~@5 D E F G ~@6 A B C@2 ~@5 D E F G ~@6 A B C@2 ~@5 D E F G ~@15 D E F G ~@6 A B
  C@2 ~@6
>`.pickRestart({
  A: "[eb4,eb5,g5,bb5] [d4,d5,f5,bb5]", B: "[bb3,d5,g5,bb5] [d4,d5,f5,bb5]",
  C: "[[bb3,eb5,g5,bb5] [c4,f5,a5,c6]@2 ~]/2", D: "~ [eb4,eb5,g5,bb5]", E: "[d4,d5,f5,bb5] [bb3,d5,g5,bb5]",
  F: "[d4,d5,f5,bb5] [bb3,eb5,g5,bb5]", G: "[c4,f5,a5,c6]",
})).s("gm_drawbar_organ").gain(0.24)

// other · overdriven guitar
const overdriven_guitar_2 = note("<~@112 A B C@3>".pickRestart({
  A: "~@4 d4@3 d4", B: "c4@3 c4 bb3@3 bb3", C: "[c4@4 bb3@13 ~@7]/3",
})).s("gm_overdriven_guitar").gain(0.64)

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

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@3 C B@7 D B E B@6 F B C B@7 D B E B@6 F B C B@7 D B E B@6 F B C B@7 D B E B@6 F B C ~@13 B@3 F B C B@7 D B@3 G
  ~@2
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "~@2 x ~@3 x!2", D: "~ x!2 ~@3 x ~", E: "~@2 x!2 ~@2 x ~", F: "~@2 x ~@2 x!2 ~",
  G: "~@2 x!2 ~@4",
})).gain(0.6)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@11 A ~@3 B ~@5 B ~@2 A ~@5 A ~@3 B ~@5 B ~@2 A ~@5 A ~@3 B ~@5 B ~@2 A ~@5 A ~@3 B ~@5 B ~@2 A ~ C ~@13 B ~@2 A ~@5
  A ~@3 B ~@6
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~@4", C: "~@15 x",
})).gain(0.6)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~@4 A B@3 A B@3 ~@3 C B D B@3 E ~@3 A B A B@3 ~@3 C B D B@3 E ~@3 A B A B@3 ~@3 C B D B@3 E ~@3 A B A B@3 ~@3 C B D
  B@3 E ~@3 A B F G@3 H ~@2 I J@5 K ~@3 A B A B@3 ~@3 C B@3 E ~@2
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~@5 x!3", D: "x!4 ~ x!3", E: "x!4 ~@4", F: "~@7 x", G: "x ~@6 x", H: "x", I: "x!2",
  J: "~@3 x!2 ~@3", K: "~@3 x ~@4",
})).gain(0.6)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@11 A ~@9 B ~@8 A ~@9 B ~@8 A ~@9 B ~@8 A ~@9 B ~@4 A ~@13 B ~@8 A ~@10
>`.pickRestart({
  A: "~@13 x ~@2", B: "~@5 x ~@10",
})).gain(0.6)

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

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@84 [~ x ~ x]!5 ~@2 [~ x ~ x] [x ~@2 x] [~ x ~ x]!4 [~ x ~@2] ~@19>").gain(0.3)

// drums · splash
const splash = s("cr").struct(`<
  ~@4 A ~@3 A ~@3 A ~@2 B ~ C ~@3 C ~@2 C A ~ A ~@3 A ~@2 B ~ C ~@3 C ~@2 C A ~ A ~@3 A ~@2 B ~ C ~@3 C ~@2 C A ~ A ~@3
  A ~@2 B ~ C ~@3 C ~@2 C A ~ A ~@12 C ~@2 C A ~ A ~@3 A ~@2 B ~@3 D ~@2
>`.pickRestart({
  A: "x", B: "x!2", C: "~ x", D: "~ x!2 ~",
})).gain(0.6)

stack(
  music_box, bass, string_ensemble_1, acoustic_guitar_steel, overdriven_guitar, music_box_2, drawbar_organ,
  overdriven_guitar_2, kick, snare, low_tom, pedal_hat, mid_tom, ride, ride_soft, splash
)

More by Nomadi