Strudelify
China Girl cover art

1983 · Let's Dance

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, A@4 for four bars: 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 E F G H E F G H I J K L M N O P Q@2 R@2 S@2 T@2 Q@2 R@2 S@2 T@2
  U@2 V W X@2 Y Z U@2 V W X@2 Y Z U@2 V W X@2 Y Z U@2 V W X@2 Y Z U@2 V W X@2 Y Z Q@2 R@2 S@2 T@2 U@2 V W X@2 Y Z U@2 V
  W X@2 Y Z U@2 V W X@2 Y Z A B C D A B C D A B C D A B C D ~
>`.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!8", R: "f1!8", S: "e1!8", T: "d1!8", U: "e1 f#1 g1 b1 e1 ~ e1 ~",
  V: "d2 ~ d2 ~ d2 ~ d2 ~", W: "d2@2 ~@2 d2@2 ~@2 d2@4 c#2@3 ~", X: "c2 d2 e2 g2 c2 ~ c2 ~",
  Y: "b1@2 ~@2 b1@3 ~ b1@2 ~@2 b1@3 ~", Z: "b1 ~ b1 ~ b1 ~ b1 ~",
})).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 M N O P I J K L M N O P ~@15 Q R@3 S T U@2 V ~@7 A F C G H F
  C G H F C G W ~@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 ~", M: "[c3,e3]@4 [c3,f#3]@3 ~ [c3,e3]@3 ~ [c3,f#3]@3 ~",
  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 ~", Q: "~@5 b3 d4 e4",
  R: "[e3@21 ~@5 d4@2 e4@20]/3", S: "[c4,d4] b3 a3@10 g3@2 a3 ~", T: "b3@14 a3 g3",
  U: "[d3@9 ~ d3@2 e3 ~ e3@17 ~, e3 ~@31]/2", V: "f#3@7 ~", W: "[e4,a4] ~@7",
})).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 C@2 F@2 G@2 C@2 D@2 C@2 D@2 E@2 C@2 F@2 G@2 A@2 H@2 I@2 J@2 A@2 H@2 I@2 J@2
  E@2 K@2 L@2 M@2 N@2 O@2 P@2 G@2 N@2 O@2 P@2 G@2 N@2 O@2 P@2 G@2 N@2 O@2 P@2 G@2 A@2 H@2 I@2 J@2 E@2 K@2 L@2 M@2 N@2
  O@2 P@2 G@2 N@2 O@2 P@2 G@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: "[c4,e4,a4]/2",
  G: "[d#4,f#4,b4]/2", H: "[[c4,f4,a4]@31 ~]/2", I: "[b3,e4,g4,b4]/2", J: "[[d4,f#4,a4]@31 ~]/2", K: "[a3,d4,e4,f#4]/2",
  L: "[c4,d4,e4,g4]/2", M: "[b3,d#4,f#4]/2", N: "[e4,g4,b4]/2", O: "[d4,e4,f#4,a4]/2", P: "[d4,e4,g4,c5]/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@2 B@2 A@2 B@2 C@2 A@2 B@2 D@2 A@2 B@2 A@2 B@2 C@2 A@2 B@2 D@4 E@2 D@2 B@2 D@2 E@2 D@2 B@2 C F G H I J K@2 C F G
  H I J K@2 C F G H I J K@2 C F G H I J K@2 C F G H I J K@2 D@2 E@2 D@2 B@2 C F G H I J K@2 C F G H I J K@2 C F G H I J
  K@2 ~@17
>`.pickRestart({
  A: "g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~ g3 ~", B: "a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~",
  C: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~", D: "b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~ b3 ~",
  E: "c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~ c4 ~", F: "e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3 ~ e3@2",
  G: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~", H: "d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3 ~ d3@2",
  I: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~", J: "c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3 ~ c3@2",
  K: "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 A@2 D@2 E@2 ~@8 C@2 A@2 D@2 E@2 F@2 G@2 H@2 I@2 F@2 G@2 H@2 I@2 C@2 J@2 K@2 L@2 C@2 J@2
  K@2 L@2 C@2 J@2 K@2 L@2 C@2 J@2 K@2 L@2 C@2 J@2 K@2 L@2 F@2 G@2 H@2 I@2 C@2 J@2 K@2 L@2 C@2 J@2 K@2 L@2 C@2 J@2 K@2
  L@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: "[c5,e5,a5]/2",
  E: "[d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~ [d#5,f#5,b5] ~", F: "[d5,g5,b5]/2", G: "[[c5,f5,a5]@31 ~]/2",
  H: "[b4,e5,g5,b5]/2", I: "[[d5,f#5,a5]@31 ~]/2", J: "[a4,d5,e5,f#5]/2", K: "[c5,d5,e5,g5]/2", L: "[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 D A B C D E F G H I J K@2 ~@16 L M N O P Q R S L M N O P Q R S L M N O P Q
  R S L M N O P Q R S L M N O P Q R S ~@8 L M N O P Q R S L M N O P Q R S L M N O P Q R S ~@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: "~@2 [e3,g3] ~ [e3,g3]@2 ~@2 g3 ~ [e3,g3]@2 ~@2 [e3,g3]@2", M: "~@4 [e3,g3]@3 ~@3 [e3,g3]@2 ~@2 [e3,g3]@2",
  N: "[d3,f#3] ~@3 [d3,f#3]@2 ~@2 [d3,f#3]@2 ~@2 [d3,f#3]@2 ~@2", O: "[d3,f#3] ~ [d3,f#3] ~ [d3,f#3] ~ [d3,f#3] ~",
  P: "[c3,g3] ~ [c3,g3] ~ [c3,g3]@3 ~@3 [c3,g3]@2 ~@2 [c3,g3]@2", Q: "~@4 [c3,g3]@2 ~@4 [c3,g3]@2 ~@2 [c3,g3] ~",
  R: "[b2,f#3] ~@3 [b2,f#3]@2 ~@2 [b2,f#3]@2 ~@2 [b2,f#3]@2 ~@2", S: "[d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~ [d#3,f#3] ~",
})).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