Strudelify

This Is Not America

David Bowie

KeyF minorTempo118 bpm
0:00/0:00
// This Is Not America — David Bowie
// 118 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// 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.
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 · fretless bass
const bass = note(`<
  ~ A B C D E B F B G B F B G B F H I J C B K H L M N E O P Q@3 R S@2 F T G B F B G D F B K B F B K B F B K B F U A B S
  M V W X P Q@3 Y Z@2 F AA K B F B E B F B E B F B G B F B E B AB B G B F B G B F B G B C B G B F B G B AC B AD@4
>`.pickRestart({
  A: "f2@5 ~ f2 ~ f2@7 ~", B: "eb2@4 ~@2 eb2 ~ eb2@7 ~", C: "db2@5 ~ db2 ~ db2@7 ~", D: "eb2@5 ~ eb2 ~ eb2@7 ~",
  E: "f2@5 ~ f2 ~ f2@8", F: "db2@4 ~@2 db2 ~ db2@7 ~", G: "f2@4 ~@2 f2 ~ f2@8", H: "eb2@4 ~@2 eb2 ~ eb2@6 ~@2",
  I: "f2@5 ~ f2 ~ f2@6 ~@2, e2 ~@15", J: "eb2@5 ~ eb2 ~ eb2@6 ~@2", K: "f2@4 ~@2 f2 ~ f2@7 ~",
  L: "d2@4 ~@2 d2 ~ d2@7 ~, ~@8 b2 ~@7", M: "g2@4 ~@2 g2 ~ g2@7 ~", N: "ab2@3 eb2 ab2@2 g2@2", O: "db3@5 ~ db3 ~ db3@8",
  P: "bb2@6 f2@2 bb2@7 ~", Q: "c3@6 g2@2 c3@7 ~", R: "c3@6 g2@2 c3@4 g2@3 ~", S: "d2@4 ~@2 d2 ~ d2@7 ~",
  T: "db2@3 ~ db2@3 ~ c3@3 ~ c3@3 ~", U: "eb2@4 ~@2 eb2 ~ eb2@8", V: "ab2@6 eb2@2 ab2@3 ~ g2@4", W: "f2@3 c2 f2@4",
  X: "db3@6 ab2 ~ db3@8", Y: "c3@6 g2 ~ c3@3 ~ c3@4", Z: "d2@4 ~@2 d2 ~ d2@6 ~@2", AA: "db2@3 ~ db2@3 ~ c2@3 ~ c2@3 ~",
  AB: "db2@4 ~@2 db2 ~ db2@6 ~@2", AC: "db2@4 ~@2 db2 ~ db2@8", AD: "[f2@59 ~@5]/4",
})).s("gm_fretless_bass").gain(0.76).pan(0.6)

// chords · pad warm
const pad_warm = note(`<
  ~ A@4 B@4 C@2 D@2 E@4 F@2 G H I@2 J@2 K@3 L M@3 N@7 O@6 P@4 Q@4 R@3 S T@2 U@2 V@8 W@5 X D@2 Y@4 Z@4 AA@4 AB@2 D@2 AC@4
  AD@4 AE@8 AF@4 AG@3 ~
>`.pickRestart({
  A: "[f3@16 bb3@16 f3@16 [g3,bb3]@15 ~, c4@63 ~, ab3@14 ~@2 g3@15 ~ ab3@14 ~@18]/4", // Gm
  B: "[f3@16 bb3@16 [f3,ab3]@16 [g3,bb3]@15 ~, c4@63 ~, ab3@7 ~ g3@7 ~@17]/4", C: "[[f3,ab3] [g3,bb3], c4]/2",
  D: "[[f3,ab3]@16 [g3,bb3]@15 ~, c4@31 ~]/2", E: "[f3@16 [g3,bb3]@15 ~, c4@31 ~, ab3@7 ~@9]/2",
  F: "[[f3,ab3]@16 ~@10 db4@3 c4@3, c4@29 ~@3, ~ [g3,bb3]]/2", G: "[ab3,eb4]@7 db4, [f3,c4]", H: "bb3@7 bb3, [g3,c4]",
  I: "[[f3,ab3,c4]@15 ~ [g3,bb3,c4]@15 ~, ~@15 f3@17]/2", // Fm C7
  J: "[[f3,ab3]@15 ~ [g3,bb3]@11 bb3@5, c4@7 ~, ~@16 f3@15 ~]/2", // Fm Gm
  K: "[~@9 bb3@2 ~@21 g4@4 f4@8 g4@4, c4@47 ~, ab3@11 ab3@36 ~, ~@7 ab4@9 ~@8, ~@16 f3@31 ~]/3",
  L: "f4@11 ab4@5, [f3,ab3,bb3,db4]@15 ~", M: "[g4 eb4 c4, [g3,bb3], c4@2 ~, ab3 ~@47]/3",
  N: "[eb4@8 ~@5 ab4@2 ~ c5@6 bb4@2 ab4@48 [g3,bb3,g4]@8 [f3,ab3]@16 ~@8 eb4@8, ~@8 [g3,g4]@6 ~ f3@57 ~@24 [g3,bb3]@16, ~@12 bb3@3 c4@97, ~@15 ab3@55 ~@10 f4@25 ~@7]/7", // Gm Fm G Gm
  O: "[ab3@16 [g3,bb3]@16 ab3@16 bb3@16 ab3@16 [g3,bb3]@15 ~, c4@95 ~, f3@7 ~@9 f3@7 ~ g3@7 ~ f3@7 ~@9]/6", // Gm
  P: "[[f3,ab3] bb3 [f3,ab3] [g3,bb3], c4@63 ~, ~@8 g3@7 ~@17]/4", // Fm Gm
  Q: "[ab3@16 bb3@16 ab3@16 [g3,bb3]@15 ~, c4@63 ~, f3@14 ~@2 g3@15 ~ f3@14 ~@18]/4", // Gm
  R: "[[f3,ab3]@16 ~@10 db4@3 ~@3 f3@14 db4@2, c4@29 c4@19, ~@16 [g3,bb3]@15 ~ [ab3,eb4]@16]/3", S: "[g3,bb3,c4]@7 bb3",
  T: "[ab3 [f3,g3,bb3], c4, f3@7 ~@9]/2", U: "[ab3@7 ~ [g3,bb3]@6 bb3@2, f3, c4@7 ~]/2",
  V: "[~@4 ab4@4 g4 f4@2 g4 f4@3 ab4 g4@4 eb4@4 ~ eb4 g4 ab4 c5 bb4 ab4 f4, ab3@32 g3@31 ~, c4@48 bb3@79 ~, ~@8 f3@23 ~ c4@16 c4@15 ~]/8",
  W: "[c5@3 bb4 ab4@4 f4@3 g4 ab4@11 bb4 ab4@2 g4@2 ~@2 eb4@2 [f3,ab3,f4]@8, c4, f3@28 [g3,f4]@3 ~@9, ab3@27 ~ bb3@4 ~@8]/5", // Fm G7
  X: "bb3@3 bb3, c4, g3@7 ~", Y: "[[f3,ab3]@16 bb3@16 ab3@16 [g3,bb3]@15 ~, c4, ~@16 g3@14 ~@2 f3@15 ~@17]/4",
  Z: "[ab3@16 [g3,bb3]@16 [f3,ab3]@15 ~ [g3,bb3]@15 ~, c4@63 ~, f3@7 ~@25]/4", // Gm Fm Gm
  AA: "[[f3,ab3] bb3 ab3 [g3,bb3], c4, ~@8 g3@7 ~ f3@7 ~@9]/4", AB: "[ab3 [g3,bb3], c4, f3@7 ~@9]/2",
  AC: "[ab3@16 bb3@16 [f3,ab3]@16 [g3,bb3]@15 ~, c4@63 ~, f3@7 ~ g3@7 ~@17]/4", // Fm Gm
  AD: "[ab3@16 [g3,bb3]@15 ~ [f3,ab3]@16 [g3,bb3]@15 ~, c4@63 ~, f3@7 ~@25]/4", // Gm Fm Gm
  AE: "[[f3,ab3]@16 bb3@16 ab3@16 [g3,bb3]@15 ~, c4@63 ~, ~@8 g3@7 ~ f3@7 ~@9]/4", // Fm Gm
  AF: "[ab3@16 bb3@15 ~ f3@14 ~@2 [g3,bb3]@15 ~, c4, f3@14 ~@2 g3@14 ~ ab3@17 ~@16]/4", AG: "[[f3,ab3,c4]@47 ~]/3",
})).s("gm_pad_warm").gain(0.57)

// other · electric guitar muted
const electric_guitar_muted = note("<~@32 A B ~ C D E@8 ~@23 A B ~ C D E@35 F E G@2 E ~@4>".pickRestart({
  A: "eb4 ~@3 f4 ~@3 ab4 ~@3 bb4 ~@3", B: "c5 ~@5 bb4 ~ ab4 ~@7", C: "~@14 bb4 ~", D: "ab4 ~@3 g4 ~@3 f4 ~@3 eb4 ~@3",
  E: "f3 ~ f3 ~ f4 f3 ~ f4 f3 ~ f3 ~ f4 ~ f3 ~", F: "f3 ~ f3 ~ f4 f3 ~ f4 f3 ~ f3 ~ f4 ~ f3!2",
  G: "f3 ~ f3 ~ f4 f3 ~ f4 f3 ~ f3 ~ f4 ~@3",
})).s("gm_electric_guitar_muted").gain(0.36).pan(0.7)

// other · pad new age
const pad_new_age = note("<~@28 A B C D E@3 ~@2 F@8 ~@19 A B C G H@2 I@3 J@8 ~@36>".pickRestart({
  A: "~@3 ab4", B: "g4", C: "eb4", D: "c4", E: "[eb4@8 ab4@4 bb4@3 c5@7 bb4@2 ab4@22 ~@2]/3", F: "[ab4@31 ~]/8",
  G: "c4 eb4", H: "[g4 ab4 bb4 c5@3 ab4@2]/2", I: "[f4@5 g4]/3", J: "f4/8",
})).s("gm_pad_new_age").gain(0.39).pan(0.7)

// drums · kick
const kick = s("bd").struct("<~ A@24 B@8 A@7 C A@20 B@8 A@43 C D ~@3>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@6 x", C: "x ~@2 x!2 ~ x!2", D: "x",
})).gain(0.7)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!112 ~@4>").gain(0.7)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~ [~@13 x ~@2]!112 ~@4>").gain(0.14)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4] ~@16 x ~@99>").gain(0.7)

// drums · open hat
const open_hat = s("oh").struct("<~ [~@2 x ~@10 x ~@2]!112 x ~@3>").gain(0.56)

// drums · crash
const crash = s("cr").struct("<~@33 [~ x ~@2] ~@35 [~ x ~@2] ~@47>").gain(0.7)

// drums · ride
const ride = s("rd").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@9 A ~ A
  ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B ~@3
>`.pickRestart({
  A: "~@13 x ~@2", B: "x",
})).gain(0.7)

// drums · tambourine
const tambourine = s("tb").struct("<~ [~@3 x]!112 ~@4>").gain(0.7)

// drums · congas
const congas = s("conga:18").struct("<~ [~@4 x!2 ~@4 x ~@5]!112 ~@4>").gain(2.02)

// drums · congas · soft notes
const congas_soft = s("conga:18").struct("<~ [~@11 x ~@4]!112 ~@4>").gain(0.67)

// drums · congas
const congas_2 = s("conga:33").struct("<~ [~@7 x]!112 ~@4>").gain(2.02)

// drums · congas · soft notes
const congas_soft_2 = s("conga:33").struct("<~ [~@3 x]!112 ~@4>").gain(0.67)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~ [x!16]!112 ~@4>").gain(1.42)

// drums · woodblocks
const woodblocks = s("woodblock:4").struct("<~ [~ x ~ x]!112 ~@4>").gain(0.71)

// drums · lt
const lt = s("lt").struct("<~@32 [~ x ~@2] ~@35 [~ x ~@2] ~@48>").gain(0.7)

stack(
  bass, pad_warm, electric_guitar_muted, pad_new_age, kick, rim, rim_soft, pedal_hat, open_hat, crash, ride, tambourine,
  congas, congas_soft, congas_2, congas_soft_2, cabasa, woodblocks, lt
)

More by David Bowie