Strudelify
This Is Not America cover art

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, A@4 for four bars: edit a riff to change every repeat.

// bass · fretless bass
const bass = note(`<
  ~ A B C B A B C B A B C B A B C B D B C B A B E F G A H I J@3 K L@2 C M A B C B A B C B A B C B A B C B A B C B A B L
  F G N O I J@3 P L@2 C Q A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B C B A B R B S@4
>`.pickRestart({
  A: "f2@4 ~@2 f2 ~ f2@8", B: "eb2@4 ~@2 eb2 ~ eb2@7 ~", C: "db2@4 ~@2 db2 ~ db2@7 ~",
  D: "f2@5 ~ f2 ~ f2@6 ~@2, e2 ~@15", E: "d2@4 ~@2 d2 ~ d2@7 ~, ~@8 b2 ~@7", F: "g2@4 ~@2 g2 ~ g2@7 ~",
  G: "ab2@3 eb2 ab2@2 g2@2", H: "db3@5 ~ db3 ~ db3@8", I: "bb2@6 f2@2 bb2@7 ~", J: "c3@6 g2@2 c3@7 ~",
  K: "c3@6 g2@2 c3@4 g2@3 ~", L: "d2@4 ~@2 d2 ~ d2@7 ~", M: "db2@3 ~ db2@3 ~ c3@3 ~ c3@3 ~", N: "f2@3 c2 f2@4",
  O: "db3@6 ab2 ~ db3@8", P: "c3@6 g2 ~ c3@3 ~ c3@4", Q: "db2@3 ~ db2@3 ~ c2@3 ~ c2@3 ~", R: "db2@4 ~@2 db2 ~ db2@8",
  S: "[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@8 D@2 E F G@2 H@2 I@3 J K@3 L@7 M@6 N@4 O@4 P@3 F Q@2 R@2 S@8 T@5 U V@2 W@4 O@8 X@4 N@12 O@4 Y@4 Z@3 ~
>`.pickRestart({
  A: "[f3@16 bb3@16 f3@16 [g3,bb3]@15 ~, c4@63 ~, ab3@7 ~ g3@7 ~ ab3@7 ~@9]/4", // Gm
  B: "[f3@16 [g3,bb3]@15 ~ f3@16 [g3,bb3]@15 ~, c4@63 ~, ab3@7 ~@9 ab3@7 ~@9]/4", // Gm
  C: "[[f3,ab3]@16 [g3,bb3]@15 ~, c4@31 ~]/2", D: "[[f3,ab3]@16 ~@10 db4@3 c4@3, c4@29 ~@3, ~ [g3,bb3]]/2",
  E: "[ab3,eb4]@7 db4, [f3,c4]", F: "bb3@7 bb3, [g3,c4]", G: "[[f3,ab3,c4]@15 ~ [g3,bb3,c4]@15 ~, ~@15 f3@17]/2",
  H: "[[f3,ab3]@15 ~ [g3,bb3]@11 bb3@5, c4@7 ~, ~@16 f3@15 ~]/2", // Fm Gm
  I: "[~@9 bb3@2 ~@21 g4@4 f4@8 g4@4, c4@47 ~, ab3@11 ab3@36 ~, ~@7 ab4@9 ~@8, ~@16 f3@31 ~]/3",
  J: "f4@11 ab4@5, [f3,ab3,bb3,db4]@15 ~", K: "[g4 eb4 c4, [g3,bb3], c4@2 ~, ab3 ~@47]/3",
  L: "[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
  M: "[ab3@16 [g3,bb3]@15 ~ ab3@16 [g3,bb3]@15 ~ ab3@16 [g3,bb3]@15 ~, c4@95 ~, f3@7 ~@9 f3@7 ~@9 f3@7 ~@9]/6", // Gm
  N: "[ab3@16 [g3,bb3]@15 ~ ab3@16 [g3,bb3]@15 ~, c4@63 ~, f3@7 ~@9 f3@7 ~@9]/4", // Gm
  O: "[ab3@16 bb3@16 ab3@16 [g3,bb3]@15 ~, c4@63 ~, f3@7 ~ g3@7 ~ f3@7 ~@9]/4", // Gm
  P: "[[f3,ab3]@16 ~@10 db4@3 ~@3 f3@14 db4@2, c4@29 c4@19, ~@16 [g3,bb3]@15 ~ [ab3,eb4]@16]/3", // Fm Gm Ab5
  Q: "[ab3 [f3,g3,bb3], c4, f3@7 ~@9]/2", R: "[ab3@7 ~ [g3,bb3]@6 bb3@2, f3, c4@7 ~]/2",
  S: "[~@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",
  T: "[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
  U: "bb3@3 bb3, c4, g3@7 ~", V: "[[f3,ab3] bb3, c4@31 ~, ~@8 g3@7 ~]/2",
  W: "[[f3,ab3]@16 bb3@16 ab3@16 [g3,bb3]@15 ~, c4, ~@8 g3@7 ~ f3@7 ~@9]/4", // Fm Gm
  X: "[ab3@16 [g3,bb3]@15 ~, c4, f3@7 ~@9]/2", // Gm
  Y: "[ab3@16 bb3@15 ~ f3@14 ~@2 [g3,bb3]@15 ~, c4@63 ~, f3@14 ~@2 g3@14 ~ ab3@17 ~@16]/4", Z: "[[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