Strudelify

China Girl

David Bowie

KeyE minorTempo134 bpm
0:00/0:00
// China Girl — BOWIE DAVID
// 134 bpm, 4/4, key E minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 151 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(134/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 · "Bass"
const bass = note(`<
  ~@6 A B C D A B C D E F G H E F G H I J K L M N O P Q F G H Q F G H I J R L M N S P T@2 U@2 V@2 W@2 T@2 U@2 V@2 W@2 X
  Y Z AA AB AC AD AE X Y Z AA AB AC AD AE X Y Z AA AB AC AD AE X Y Z AA AB AC AD AE X Y Z AA AB AF AD AE T@2 U@2 V@2 W@2
  X Y Z AA AB AC AD AE X Y Z AA AB AC AD AE X Y Z AA AB AC AD AE A B C D A B C D A B C AG A B C AG ~
>`.pickRestart({
  A: "g1 b1 a1 g1 g2@2 a1 b1", B: "g1 b1 a1 g1 g2@2 g1 g#1", C: "a1@2 g1@2 a1@2 ~@2 a1@3 ~@5",
  D: "a1@2 g1@2 a1@3 ~ a1@2 ~@2 b1@2 d2@2", E: "g1@4 ~@2 g1 ~ g1@4 ~@4", F: "g1@4 ~@2 g1 ~ g1@3 ~ g1@2 g#1@2",
  G: "a1@5 ~ a1 ~ a1@4 ~@4", H: "a1@4 ~@2 a1 ~ a1 ~ a1@2 b1@2 d2@2", I: "e1@5 ~ e1@9 ~", J: "e1@3 e2@3 b1 a1",
  K: "g1@6 g1@9 ~", L: "g1@6 g1@5 ~ g1@2 g#1@2", M: "a1@5 ~ a1@9 ~", N: "a1@3 a1@3 a1 a#1", O: "b1@6 b1@9 ~",
  P: "b1@6 b1@5 ~ b1@2 ~@2", Q: "g1@4 ~@2 g1 ~ g1@5 ~@3", R: "g1@5 ~ g1@9 ~", S: "b1@5 ~ b1@9 ~", T: "g1!8", U: "f1!8",
  V: "e1!8", W: "d1!8", X: "e1 f#1 g1 b1 e1 ~ e1 ~", Y: "e1@2 f#1@2 g1@2 b1@2 e1@2 ~@2 e1@3 ~",
  Z: "d2 ~ d2 ~ d2 ~ d2 ~", AA: "d2@2 ~@2 d2@2 ~@2 d2@4 c#2@3 ~", AB: "c2 d2 e2 g2 c2 ~ c2 ~",
  AC: "c2@2 d2@2 e2@2 g2@2 c2@3 ~ c2@3 ~", AD: "b1@2 ~@2 b1@3 ~ b1@2 ~@2 b1@3 ~", AE: "b1 ~ b1 ~ b1 ~ b1 ~",
  AF: "c2@2 d2@2 e2@2 g2@2 c2@2 ~@2 c2@3 ~", AG: "a1@2 g1@2 a1@3 ~ a1@3 ~ b1@2 d2@2",
})).s("gm_electric_bass_finger").gain(0.47)

// chords · electric guitar clean · "Ovd Guita"
const electric_guitar_clean = note(`<
  ~ A B C D E F C G H F C G@2 ~@64 I J K L M N O P I J K L Q N O P I J K L Q N O P ~@15 R S@3 T U V@2 W ~@7 A F C G H F
  C G H F C G X ~@5
>`.pickRestart({
  A: "~@6 [f#4,b4]!2", B: "[e4,a4]!2 [f#4,b4]!2 [e4,a4]@2 [f#4,b4]!2", C: "[e4,a4]!2 [f#4,b4]!2 [e4,a4]!2 [d4,g4]!2",
  D: "[e4,a4]!2 [e4,a4]@2 [e4,a4] ~@3", E: "[e4,a4]!2 [e4,a4]@2 [e4,a4] ~ [f#4,b4]!2",
  F: "[e4,a4]!2 [f#4,b4]!2 [e4,a4] ~ [f#4,b4]!2", G: "[e4,a4]!3 ~ [e4,a4] ~@3", H: "[e4,a4]!3 ~ [e4,a4] ~ [f#4,b4]!2",
  I: "[e3,g3]@3 ~ [e3,a3]@3 ~ [e3,g3]@3 ~ [e3,a3]@3 ~", // Em A5 Em A5
  J: "[e3,g3]@3 ~ [e3,a3]@3 ~ [e3,g3] ~ [e3,g3] ~ [e3,a3]@3 ~, ~@4 g#3 ~@11", // Em A5 Em A5
  K: "[d3,f#3]@3 ~ [d3,g3]@3 ~ [d3,f#3]@3 ~ [d3,g3]@3 ~", // D G5 D G5
  L: "[d3,f#3]@3 ~ [d3,g3]@3 ~ [d3,f#3] ~ [d3,f#3] ~ [d3,g3]@3 ~", // D G5 D G5
  M: "[c3,e3]@3 ~ [c3,f#3]@3 ~ [c3,e3]@3 ~ [c3,f#3]@3 ~", // C Cdim C Cdim
  N: "[c3,e3]@3 ~ [c3,f#3]@3 ~ [c3,e3] ~ [c3,e3] ~ [c3,f#3]@3 ~", // C Cdim C Cdim
  O: "[d#3,f#3]@3 ~ [d#3,g3]@3 ~ [d#3,f#3]@3 ~ [d#3,g3]@3 ~", // D#m D# D#m D#
  P: "[d#3,f#3]@3 ~ [d#3,g3]@3 ~ [d#3,f#3] ~ [d#3,f#3]@2 [d#3,g3]@3 ~", // D#m D# D#m D#
  Q: "[c3,e3]@4 [c3,f#3]@3 ~ [c3,e3]@3 ~ [c3,f#3]@3 ~", R: "~@5 b3 d4 e4", S: "[e3@21 ~@5 d4@2 e4@20]/3",
  T: "[c4,d4] b3 a3@10 g3@2 a3 ~", U: "b3@14 a3 g3", V: "[d3@9 ~ d3@2 e3 ~ e3@17 ~, e3 ~@31]/2", W: "f#3@7 ~",
  X: "[e4,a4] ~@7", // A5
})).s("gm_electric_guitar_clean").gain(0.25)

// chords · electric guitar clean · "Ovd Guita" · soft notes · A5 B5 A5 B5 A5 B5 A5 B5 …
const electric_guitar_clean_2 = note(`<
  ~@145
  [~ [e4,a4]!2 ~ [e4,a4] ~ [f#4,b4]!2]
  [[e4,a4]!2 [f#4,b4]!2 [e4,a4] ~ [f#4,b4]!2]
  [[e4,a4]!2 [f#4,b4]!2 [e4,a4]!2 [d4,g4]!2]
  [[e4,a4]!3 ~ [e4,a4] ~@3]!2
  ~
>`).s("gm_electric_guitar_clean").gain(0.09)

// chords · synth strings 1 · "Syn Strin"
const synth_strings_1 = note(`<
  ~@6 A@2 B@2 A@2 B@2 C@2 D@2 C@2 D@2 E@2 F@2 G@2 H@2 C@2 D@2 C@2 D@2 E@2 F@2 G@2 H@2 A@2 I@2 J@2 K@2 A@2 I@2 J@2 K@2
  E@2 L@2 M@2 N@2 O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 R@2 A@2 I@2 J@2 K@2 E@2 L@2 M@2 N@2 O@2
  P@2 Q@2 R@2 O@2 P@2 Q@2 R@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~
>`.pickRestart({
  A: "[d4,g4,b4]/2", B: "[e4,g4,c5]/2", C: "[b3,d4,g4]/2", D: "[c4,e4,g4,a4]/2", E: "[b3,e4,g4]/2",
  F: "[[b3,d4,g4]@31 ~]/2", G: "[c4,e4,a4]/2", H: "[[d#4,f#4,b4]@31 ~]/2", I: "[[c4,f4,a4]@31 ~]/2",
  J: "[b3,e4,g4,b4]/2", K: "[[d4,f#4,a4]@31 ~]/2", L: "[a3,d4,e4,f#4]/2", M: "[c4,d4,e4,g4]/2", N: "[b3,d#4,f#4]/2",
  O: "[e4,g4,b4]/2", P: "[d4,e4,f#4,a4]/2", Q: "[d4,e4,g4,c5]/2", R: "[d#4,f#4,b4]/2",
})).s("gm_synth_strings_1").gain(0.17)

// chords · marimba
const marimba = note("<~@5 A B C D E B C D@2 ~@119 F B C D E B C D E B C D G ~@5>".pickRestart({
  A: "a4 ~ a4 ~ a4 ~@3 a4@2 ~@2 [f#4,b4] ~ [f#4,b4] ~", // B5
  B: "[e4,a4] ~ [e4,a4] ~ [f#4,b4] ~ [f#4,b4] ~ [e4,a4] ~@3 [f#4,b4] ~ [f#4,b4] ~", // A5 B5 A5 B5
  C: "[e4,a4] ~ [e4,a4] ~ [f#4,b4] ~ [f#4,b4] ~ [e4,a4] ~ [e4,a4] ~ [d4,g4] ~ [d4,g4] ~", // A5 B5 A5 G5
  D: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~@3 [e4,a4] ~@7", // A5
  E: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~@3 [e4,a4] ~@3 [f#4,b4] ~ [f#4,b4] ~", F: "~@12 [f#4,b4] ~ [f#4,b4] ~",
  G: "[e4,a4] ~@15", // A5
})).s("gm_marimba").gain(0.46)

// chords · marimba · soft notes · A5 B5 A5 B5 A5 B5 A5 B5 …
const marimba_soft = note(`<
  ~@145
  [~@2 [e4,a4] ~ [e4,a4] ~@3 [e4,a4] ~@3 [f#4,b4] ~ [f#4,b4] ~]
  [[e4,a4] ~ [e4,a4] ~ [f#4,b4] ~ [f#4,b4] ~ [e4,a4] ~@3 [f#4,b4] ~ [f#4,b4] ~]
  [[e4,a4] ~ [e4,a4] ~ [f#4,b4] ~ [f#4,b4] ~ [e4,a4] ~ [e4,a4] ~ [d4,g4] ~ [d4,g4] ~]
  [[e4,a4] ~ [e4,a4] ~ [e4,a4] ~@3 [e4,a4] ~@7]!2
  ~
>`).s("gm_marimba").gain(0.17)

// other · electric guitar muted · "Mut Guita"
const electric_guitar_muted = note(`<
  ~@14 A B C@2 A B C@2 D E A@2 C F G@2 A B C@2 A B C@2 D E A@2 C F G@3 H I@2 G H C@2 G H I@2 G H C@2 D E J K L M N@2 D E
  J K L M N@2 D E J K L M N@2 D E J K L M N@2 D E J K L M N@2 G H I@2 G H C@2 D E J K L M N@2 D E J K L M N@2 D E J K L
  M N@2 ~@17
>`.pickRestart({
  A: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~", B: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3@2",
  C: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~", D: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~",
  E: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3@2", F: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3@2",
  G: "b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~", H: "b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3@2",
  I: "c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~", J: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~",
  K: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3@2", L: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~",
  M: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2", N: "b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~ b2 ~",
})).s("gm_electric_guitar_muted").gain(0.29)

// chords · percussive organ · "Organ 2"
const percussive_organ = note(`<
  ~@6 A@2 B@2 A@2 B@2 ~@8 C@2 D@2 E@2 F@2 ~@8 C@2 D@2 E@2 F@2 G@2 H@2 I@2 J@2 G@2 H@2 I@2 J@2 C@2 K@2 L@2 M@2 C@2 K@2
  L@2 M@2 C@2 K@2 L@2 M@2 C@2 K@2 L@2 M@2 C@2 K@2 L@2 M@2 G@2 H@2 I@2 J@2 C@2 K@2 L@2 M@2 C@2 K@2 L@2 M@2 C@2 K@2 L@2
  M@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~
>`.pickRestart({
  A: "[b4,d5,g5]/2", B: "[c5,e5,g5]/2", C: "[b4,e5,g5]/2", D: "[[b4,d5,g5]@31 ~]/2", E: "[c5,e5,a5]/2",
  F: "[d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~", G: "[d5,g5,b5]/2", H: "[[c5,f5,a5]@31 ~]/2",
  I: "[b4,e5,g5,b5]/2", J: "[[d5,f#5,a5]@31 ~]/2", K: "[a4,d5,e5,f#5]/2", L: "[c5,d5,e5,g5]/2", M: "[b4,d#5,f#5]/2",
})).s("gm_percussive_organ").gain(0.2)

// chords · electric guitar clean · "Cle Guita"
const electric_guitar_clean_3 = note(`<
  ~@14 A B C D A B C D E F G H I J K@2 A B C L A B C L E F G H I J K@2 ~@16 M N O P Q R S T M N O P Q R S T M N O P Q R
  S T M N O P Q R S T M N O P Q R S T ~@8 M N O P Q R S T M N O P Q R S T M N O P Q R S T ~@17
>`.pickRestart({
  A: "~@4 g3 ~@3 g3@4 e3@2 d3@2", B: "e3@2 g3 ~@5 g3@4 e3@2 g3 ~", C: "~@4 a3 ~@3 a3@4 g3@2 e3 ~",
  D: "g3@2 a3 ~@5 a3@4 b3@2 d4 ~", E: "[e4,g4]@2 ~@2 [e4,g4]@2 ~@2 [e4,g4]@2 ~@2 [e4,g4] ~@3",
  F: "[e4,g4]@2 ~@4 [e4,g4]@2 ~@2 [e4,g4]@2 ~@2 e4 ~", G: "[d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~",
  H: "[d4,g4]@2 ~@4 [d4,g4]@2 ~@2 [d4,g4]@2 ~@2 [d4,g4] ~", I: "[e4,a4]@2 ~@2 [e4,a4]@2 ~@2 [e4,a4]@2 ~@2 [e4,a4] ~@3",
  J: "[e4,a4]@2 ~@4 [e4,a4]@2 ~@2 [e4,a4]@2 ~@2 e4 ~", K: "[d#4,b4] ~ [d#4,b4] ~ [d#4,b4] ~ [d#4,b4] ~",
  L: "g3@2 a3 ~@5 a3@4 b3 ~ d4 ~", M: "~@2 [e3,g3] ~ [e3,g3]@2 ~@2 g3 ~ [e3,g3]@2 ~@2 [e3,g3]@2",
  N: "~@4 [e3,g3]@3 ~@3 [e3,g3]@2 ~@2 [e3,g3]@2", O: "[d3,f#3] ~@3 [d3,f#3]@2 ~@2 [d3,f#3]@2 ~@2 [d3,f#3]@2 ~@2",
  P: "[d3,f#3] ~ [d3,f#3] ~ [d3,f#3] ~ [d3,f#3] ~", Q: "[c3,g3] ~ [c3,g3] ~ [c3,g3]@3 ~@3 [c3,g3]@2 ~@2 [c3,g3]@2",
  R: "~@4 [c3,g3]@2 ~@4 [c3,g3]@2 ~@2 [c3,g3] ~", S: "[b2,f#3] ~@3 [b2,f#3]@2 ~@2 [b2,f#3]@2 ~@2 [b2,f#3]@2 ~@2",
  T: "[d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~", // D#m
})).s("gm_electric_guitar_clean").gain(0.21)

// chords · electric guitar clean · "Cle Guita" · soft notes
const electric_guitar_clean_4 = note(`<
  ~@23 A ~@3 B ~@11 A ~@3 B ~@19 C ~@2 D E ~@3 C ~@2 D E ~@3 C ~@2 D E ~@3 C ~@2 D E ~@3 C ~@2 D E ~@11 C ~@2 D E ~@3 C
  ~@2 D E ~@3 C ~@2 D E ~@19
>`.pickRestart({
  A: "~@14 g4 ~", B: "~@14 a4 ~", C: "~@2 [e3,g3] ~@5 g3 ~@7", D: "~@8 g3 ~@7", E: "~@2 g3 ~@13",
})).s("gm_electric_guitar_clean").gain(0.12)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@29 A ~@15 A ~@23 A ~@15 A ~@7 A ~@7 B ~@15 A ~@33>".pickRestart({
  A: "~@7 x", B: "~@6 x!2",
})).gain(0.37)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@5 B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3
  C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C B@3 C ~
>`.pickRestart({
  A: "x!4", B: "x!8", C: "x!7 ~",
})).gain(0.37)

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

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@9 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "~@7 x",
})).gain(0.31)

// drums · high tom
const high_tom = s("ht").struct("<~@29 A ~@15 A ~@23 A ~@15 A ~@7 A ~@7 B ~@15 A ~@33>".pickRestart({
  A: "~@5 x ~@2", B: "~ x ~@6",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@6 A ~@3 A ~@3 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@7
  A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "x",
})).gain(0.56)

stack(
  bass, electric_guitar_clean, electric_guitar_clean_2, synth_strings_1, marimba, marimba_soft, electric_guitar_muted,
  percussive_organ, electric_guitar_clean_3, electric_guitar_clean_4, kick, snare, low_tom, hihat, mid_tom, open_hat,
  high_tom, crash
)

More by David Bowie