Strudelify

Starman

David Bowie

KeyF majorTempo96 bpm
0:00/0:00
// Starman — BOWIE DAVID
// 96 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 5 electric bass pick (copy of ch 4 electric bass finger)
// note: Full arrangement: all 96 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): guitar program 24.
setcpm(96/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 · overdriven guitar
const overdriven_guitar = note(`<
  ~@34 A B C B A B D ~@26 A B C B A B C B E F C G E F C G E F C G E F C G E F C H@2
>`.pickRestart({
  A: "d4@3 d4@2 c4@2 bb3", B: "a3@3 a3@2 bb3@2 c4", C: "e4@3 e4@2 d4@2 c4", D: "e4@3 e4@2 d4 c4 a3",
  E: "d4@2 d4@2 d4 c4@2 bb3", F: "a3 f3@3 ~ bb3@2 c4", G: "c3 d3 e3 f3 g3 a3 bb3 c4", H: "[f4@5 ~@3]/2",
})).s("gm_overdriven_guitar").gain(0.72).pan(0.4)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  A B C D A B C D E F G H I J K E F G H I J L M N O P Q N O P Q R S T U V W X U V W E F G H I J K E F G H I J L M N O P
  Q N O P Q R S T U V W X U V W X U V W X U V W X U V W X U V W X U V W Y ~
>`.pickRestart({
  A: "[e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,g3,d4,e4]@2 [e2,bb2,f3,g3,d4,e4]!2 [e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,g3,d4,e4]@2 [e2,bb2,f3,g3,d4,e4]!2", // Bbmaj7 Em7b5 Bbmaj7 Em7b5
  B: "[e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,g3,d4,e4]@2 [e2,bb2,f3,g3,d4,e4]!2 [e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,a3,d4,f4]@2 [e2,bb2,f3,a3,d4,f4]@2 [e2,a2,d3,g3,b3,e4]@2", // Bbmaj7 Em7b5 Bbmaj7 Em7
  C: "[f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]!2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]!2", // Fmaj7
  D: "[f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]!2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [f2,c3,f3,a3,c4,e4]@2 [e2,a2,d3,g3,b3,e4]@2", // Fmaj7 Em7
  E: "[g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]!4 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]!2", // Gm
  F: "[g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4] [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4] [g2,d3,g3,bb3,d4,g4]@2 [g2,d3,g3,bb3,d4,g4]@4", // Gm
  G: "[f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4] [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2", // F
  H: "[f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!4 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2", // F
  I: "[g2,c3,e3,g3,c4,e4]@2 [g2,c3,e3,g3,c4,e4]@2 [g2,c3,e3,g3,c4,e4]@2 [g2,c3,e3,g3,c4,e4] [g2,c3,e3,g3,c4,e4]@2 [g2,c3,e3,g3,c4,e4] [g2,c3,e3,g3,c4,e4]@2 [g2,c3,e3,g3,c4,e4]@2 [g2,c3,e3,g3,c4,e4]!2", // C
  J: "[e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4] [e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4] [e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4]@2", // C7
  K: "[f2,c3,f3,a3,c4,f4]@4 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2 [ab2,eb3,ab3,c4,eb4,ab4]!3 [bb2,f3,bb3,d4,f4,bb4] [bb2,f3,bb3,d4,f4,bb4]@4", // F Ab Bb
  L: "[a2,e3,a3,db4,e4]", M: "[g2,b2,d3,g3,b3,g4]", N: "[f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!6",
  O: "[d3,a3,d4,f4]@2 [d3,a3,d4,f4]!6", P: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2 [g2,c3,e3,g3,c4,e4]!4",
  Q: "[e2,c3,e3,bb3,c4,e4]@2 [e2,c3,e3,bb3,c4,e4]!6", R: "[bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]!2 [bb2,f3,bb3,db4]!4",
  S: "[f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!2 [gb2,a2,d3,a3,c4,gb4]!4", // F D7
  T: "[g2,d3,bb3,d4]@2 [g2,d3,bb3,d4]!2 [e2,c3,e3,bb3,c4,e4]@4", // Gm C7
  U: "[bb2,f3,bb3,d4]!3 [bb2,f3,bb3,d4]@2 [bb2,f3,bb3,d4]!3", // Bb
  V: "[f2,c3,f3,a3,c4,f4]!3 [f2,c3,f3,a3,c4,f4]@2 [f2,c3,f3,a3,c4,f4]!3", // F
  W: "[g2,c3,g3,c4,e4]!3 [g2,c3,g3,c4,e4]@2 [g2,c3,g3,c4,e4]!3", // C
  X: "[f2,c3,f3,a3,c4,f4]!3 [f2,c3,f3,a3,c4,f4]@2 [g2,d3,g3,bb3,d4,g4]!2 [f2,c3,a3,c4,f4]", Y: "[f2,c3,f3,a3,c4,f4]",
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.6)

// chords · piano
const piano = note(`<
  A@2 B@2 A@2 B@2 C D ~@5 C D ~@4 E@2 ~@11 F G H I F G H C D ~@5 C D ~@4 E@2 ~@11 F G H I F G H I F G H I F G H I F G H
  I F G H I F G H J ~
>`.pickRestart({
  A: "bb2/2", B: "f2/2", C: "g2@7 d3", D: "g2",
  E: "[a3,a4] [a3,a4]@2 [a3,a4] [a3,a4]@2 [a3,a4] [a3,a4]@2 [a3,a4] [a3,a4]@2 [a3,a4]!2 [a3,a4]@2", // A
  F: "[bb2,f3]!2 [bb2,g3] [bb2,f3]!2 [bb2,g3] [bb2,f3] e2", G: "[f2,c3]!2 [f2,d3] [f2,c3]!3 [f2,d3] c3",
  H: "[c3,g3]!2 [c3,a3] [c3,g3]!3 [c3,a3] e2", I: "[f2,c3]!5 [g2,d3]@2 [a2,e3]", J: "[f2,c3,f3]",
})).s("gm_piano").gain(0.41)

// bass · electric bass finger
const bass = note(`<
  ~@8 A B C D E F G A B C D E F H I J K L M J K L N O P Q R S T U V W X A B C D E F G A B C D E F H I J K L M J K L N O
  P Q R S T U R S T U R S T U R S T U R S T U R S T U R S T Y ~
>`.pickRestart({
  A: "g2@2 g2!2 g2@2 d2 g2 g2@2 g2@2 g2@2 d2@2", B: "g2@2 g2@2 g2@2 d3@3 bb2 d3@3 bb2 g2@2",
  C: "f2@2 f2!2 f2@2 c2 e2 f2@2 f2@2 f2@2 c2@2", D: "f2@2 f2@2 f2@2 f2!2 f2@2 e2@2 f2@2 g2@2",
  E: "c2@2 c2!2 c2@2 g1@2 c3@2 c3@2 c2@2 c2@2", F: "c2@2 c2@4 c2@3 c2 c2@2 c2@2 e2@2",
  G: "f2@4 f2@2 f2!2 ab2!2 ab2@2 bb2@4", H: "a2", I: "g2", J: "f2@3 f2!2 e2 f2 g2",
  K: "d2@4 a2@2 d3@3 a2 d3@2 a2@2 g2@2", L: "a2@2 a2!2 g2@2 g2!2", M: "c2@2 c2 c2@2 b1 c2 d2",
  N: "c2@2 c2 c2@2 b1 c2 a1", O: "bb1@2 bb1!3 f2 bb2 g2", P: "f2@2 f2!2 gb2@2 d2 f2", Q: "g2@2 g2!2 c2@3 ~",
  R: "bb1!2 ~ bb1@2 f1 bb1 e2", S: "f2!2 ~ f2 ~ e2 f2 e2", T: "c2!2 ~ c2@2 g2 e2@2", U: "f2!3 f2@2 g1@2 a1",
  V: "bb1!6 a1 g1", W: "f2!2 e2 f2@2 e2 f2 g2", X: "c2!2 ~ c2@2 c2 e2@2", Y: "f2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@8 A ~@14 B@2 C D B@2 C E F G H I J K L I M N A ~@14 B@2 C D B@2 C E F G H I J K L I J K L I J K L I J K L I J K L I
  J K L I J K ~@2
>`.pickRestart({
  A: "g5", B: "[f2 g2 a2 c3 f3 g3 a3 c4 d4@8, [a4,c5,f5]]/2", C: "[a3,c5,e5,a5] [g3,e5,g5,c6]",
  D: "c4@8 ~ d4 e4 g4!2 bb4 a4 g4, [g5,c6,e6], ~ c4", // C
  E: "[g5,c6,e6]@8 [c4,c5] [d4,d5] [e4,e5] [f4,f5] [g4,g5] [a4,a5] [b4,bb5] [c5,c6], c3", // C D E F G A Bmaj7 C
  F: "[bb3,d5] [bb3,db5], [f5,bb5]", G: "[f3,f4,c5,f5,a5] [gb3,gb4,a4,d5,gb5]", H: "[g3,bb4,d5,g5]@4 [c3,c5,e5]@3 ~",
  I: "[bb3,d5,f5,bb5]", J: "[f4,c5,f5,a5]", K: "[c4,e5,g5,c6]",
  L: "[f4,c5,f5,a5]@3 [f4,c5,f5,a5]@2 [d4,bb4,f5,g5]@2 [f4,c5,f5,a5]", M: "a5@5 bb5 c6 d6, [f4,c5,f5]",
  N: "[e5,g5,c6]@5 d6 c6 a5", // C
})).s("gm_string_ensemble_1").gain(0.32)

// other · epiano2 · A
const epiano2 = note(`<
  ~@21
  [[a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6]!2 [a4,a5,a6]@2]!2
  ~@31
  [[a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6] [a4,a5,a6]@2 [a4,a5,a6]!2 [a4,a5,a6]@2]!2
  ~@40
>`).s("gm_epiano2").gain(0.32).pan(0.7)

// chords · electric guitar muted
const electric_guitar_muted = note(`<
  ~@34 A B C D A B C ~@26 A B C D A B C D A B C D A B C D A B C D A B C D A B C E ~
>`.pickRestart({
  A: "[bb2,f3]!2 [bb2,g3] [bb2,f3]!2 [bb2,g3] [bb2,f3] e2", B: "[f2,c3]!2 [f2,d3] [f2,c3]!3 [f2,d3] c3",
  C: "[c3,g3]!2 [c3,a3] [c3,g3]!3 [c3,a3] e2", D: "[f2,c3]!5 [g2,d3]@2 [a2,e3]", E: "[f2,c3,f3]",
})).s("gm_electric_guitar_muted").gain(0.57).pan(0.7)

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

// drums · snare
const snare = s("sd").struct("<~@7 A B C@5 D B C@5 ~@2 C@10 D C@7 B C@5 D B C@5 ~@2 C@10 D C@27 ~@2>".pickRestart({
  A: "~@5 x ~@2", B: "x!2 ~ x", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.48)

// drums · clap
const clap = s("cp").struct("<~@34 [~ x ~ x]!7 ~@26 [~ x ~ x]!27 ~@2>").gain(0.54)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B@2 C B@2 D E B@2 C B@2 F@2 E B@9 G B@7 A B@2 C B@2 D E B@2 C B@2 F@2 E B@9 G B@27 ~@2
>`.pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!5 ~ x!2", D: "x!5 ~ x ~", E: "~@2 x!6", F: "~ x ~@14", G: "x!4 ~@4",
})).gain(0.48)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 [~@12 x!2 ~@2] ~@6 [~@12 x!4] ~@32 [~@12 x!4] ~@48>").gain(0.48)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A ~@2 B ~@6 B ~@2 A@2 ~@18 A ~@2 B ~@6 B ~@2 A@2 ~@40>".pickRestart({
  A: "x", B: "~@5 x ~@2",
})).gain(0.48)

// drums · high tom
const high_tom = s("ht").struct("<~@7 [~@14 x!2] ~@6 [~@8 x!4 ~@4] ~@32 [~@8 x!4 ~@4] ~@48>").gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@15 A ~@7 A ~@9 B ~@14 A ~@7 A ~@9 B ~@27 A ~>".pickRestart({
  A: "x", B: "~ x",
})).gain(0.48)

stack(
  overdriven_guitar, acoustic_guitar_steel, piano, bass, string_ensemble_1, epiano2, electric_guitar_muted, kick, snare,
  clap, hihat, mid_tom, open_hat, high_tom, crash
)

More by David Bowie