Strudelify

Greedy Fly

Bush

KeyC minorTempo116 bpm
0:00/0:00
// Greedy Fly — Bush
// 116 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 127 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(116/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 · acoustic guitar nylon · "Guitar 1"
const acoustic_guitar_nylon = note(`<
  A B A B A B A B C D C D C D C D C D C E F G H I C D C D C D J K ~@18 L M N O C D C D C D J K ~@65
>`.pickRestart({
  A: "c5 eb5 g5 eb5 c6 g5 eb5 g5", B: "b4 gb5 g5 gb5 c6 g5 gb5 g5", C: "~ c5!2 bb4 [c5,eb5] ~@2 ab4",
  D: "c5 bb4 [c5,eb5] ~@5", E: "c5 bb4 c5 ~ c5!4", F: "c5 c6 g5 eb5 c6 g5 eb5 g5", G: "b4 eb5 bb5 eb5 c6 bb5 eb5 bb5",
  H: "c5 eb5 g5 eb5 c6 g5 c5 g5", I: "b4 eb5 bb5 eb5 c6 bb5 eb5 g5", J: "~ c6 g5 eb5 c6 g5 c5 g5",
  K: "bb4 eb5 bb5 bb4 c6 bb5 eb5 bb5", L: "~ c5!2 bb4 c5 bb4 ~ ab4", M: "c5 bb4 c5 bb4 ~ c5!2 bb4",
  N: "~ c5!2 bb4 c5 bb4@2 ab4", O: "c5 bb4 c5 bb4@2 bb4 ~ ab4",
})).s("gm_acoustic_guitar_nylon").gain(0.26)

// chords · electric guitar clean · "Guitar 2"
const electric_guitar_clean = note(`<
  ~@4 A B C D A E A F G F G F H I J E H I J E G F G K L F C F ~@18 C M C K G F G K L F C F ~@65
>`.pickRestart({
  A: "~ [c4,g4]!4 ~ [ab3,eb4,ab4]!2", B: "[ab3,eb4,ab4]!3 ~ [ab3,eb4,ab4]!2 ~@2", C: "~ [c4,g4,c5]!4 ~ [ab3,eb4,ab4]!2",
  D: "[ab3,eb4,ab4]!3 ~ [ab3,eb4,ab4]!4", E: "[ab3,eb4,ab4]!8", F: "[ab3,eb4,ab4]!7 ~",
  G: "~ [c4,g4,c5]!5 ~ [ab3,eb4,ab4]", H: "~ [c4,g4,c5]!6 [ab3,eb4,ab4]", I: "~ [ab3,eb4,ab4]!6 ~",
  J: "~ [c4,g4,c5]!3 [c4,g4,c5]@3 [ab3,eb4,ab4]", K: "[ab3,eb4,ab4]!6 ~@2", L: "~ [c4,g4,c5]!5 [ab3,eb4,ab4] ~",
  M: "[ab3,eb4,ab4]!4 c4 c4@2 c4", // Ab5
})).s("gm_electric_guitar_clean").gain(0.26)

// chords · distortion guitar · "Guitar 3"
const distortion_guitar = note(`<
  ~@20 A B A C ~@8 D E F E G H@2 I J@6 K ~ L@2 ~@12 D E F E G H@2 I J@8 ~@2 J@8 K ~ M@2 N O N P Q R@3 S T S T S T U@3 V
  ~ V ~ V ~ J@10 V W
>`.pickRestart({
  A: "~ [c4,g4,c5]!4 ~ [ab3,eb4,ab4]!2", B: "[ab3,eb4,ab4]!4 c4 c4@2 c4", C: "[ab3,eb4,ab4]!7 ~", D: "c5!4 b4 c5!3",
  E: "c5!8", F: "c5!6 b4 c5", G: "[c4,g4,c5,eb5]@2 [b4,b5] [c5,c6]!5", H: "[c5,c6]!8", I: "[c5,c6]!6 ~@2",
  J: "[[bb3,f4,bb4,d5] [bb3,f4,bb4,d5]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [ab3,eb4,ab4] [ab3,eb4,ab4]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [ab3,eb4,ab4]@2 [f3,c4,f4,a4]@2]/2", // Bb F Ab5 F Ab5 F
  K: "[bb3,f4,bb4,d5] [bb3,f4,bb4,d5]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [ab3,eb4,ab4]!2", // Bb F Ab5
  L: "[[bb3,f4,bb4,d5] [bb3,f4,bb4,d5]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [ab3,eb4,ab4] [ab3,eb4,ab4]@9]/2", // Bb F Ab5
  M: "[[bb3,f4,bb4,d5] [bb3,f4,bb4,d5]@2 [f3,c4,f4,a4] [f3,c4,f4,a4]@2 [ab3,eb4,ab4] [ab3,eb4,ab4]@7 [ab3,eb4,ab4] ~]/2", // Bb F Ab5
  N: "[c4,g4,c5]@7 [c4,g4,c5]", O: "[eb4,bb4,eb5]@3 [ab3,eb4,ab4]@4 [ab3,eb4,ab4]",
  P: "[eb4,bb4,eb5]@3 [ab3,eb4,ab4]@3 [bb3,f4,bb4]@2", // Eb5 Ab5 Bb5
  Q: "[c4,g4,c5]@2 [c4,g4,c5]!2 [c4,g4,c5]@2 [c4,g4,c5]!2 [c4,g4,c5]@2 [c4,g4,c5]@2 [c4,g4,c5]@2 [c4,g4,c5]!2", // C5
  R: "[c4,g4,c5]/3", S: "[c4,g4,c5]!8", T: "[eb4,bb4,eb5]!3 [ab3,eb4,ab4]@2 [ab3,eb4,ab4]!3", U: "[[c4,c5]@5 ~]/3",
  V: "[bb3,f4,bb4] [bb3,f4,bb4]@2 [f3,c4,f4] [f3,c4,f4]@2 [ab3,eb4,ab4]!2", W: "[ab3,eb4,ab4]!3 ~@5",
})).s("gm_distortion_guitar").gain(0.25)

// chords · distortion guitar · "Guitar 4"
const distortion_guitar_2 = note(`<
  ~@32 A B A B A B C D ~@8 E F@2 ~@11 A B A B A B C D ~@8 G@2 ~@10 H I@2 J K L M@2 N@2 O@2 P@6 Q ~@18
>`.pickRestart({
  A: "[c5,eb5]!6 ab4!2", B: "ab4!8", C: "[c5,eb5]!8", D: "[c5,eb5]!6 [c5,eb5]@2", E: "b4@8 ~@2 b4!2 b4@2 c5@2",
  F: "[b4 ~ [c5,c6]@3 [c5,c6]@4 ~@7]/2", G: "~@2 ab4!2 ~@2 f4!2, ~ c5@3 ~ c5@3", H: "b4@3 b4@4 b4",
  I: "[~@14 [bb2,bb3]@14 ~@2 [c3,c4] [d3,d4]]/2", J: "[d3,d4]@2 [c3,c4] [ab2,ab3]@3 ~ ab4",
  K: "[c4,c5]@3 [c4,c5]@3 [c4,c5] [d4,d5]", L: "[d4,d5]@2 [ab3,ab4] [ab3,ab4]@3 [ab3,ab4]@2", M: "[~@7 f5@9]/2",
  N: "[~@7 b5@8 ~]/2", O: "[~@4 bb5@2 c6 bb5@2 c6 bb5 eb4@3 bb5 ~, c6@3 c6@3 ~@10, ~ bb5@3 ~@12]/2",
  P: "[~@8 bb5@4 c6@2 bb5@4 c6@2 bb5@2 eb4@6 c6@6 ~@4 c6@8 c6@10 ~@2 c6@24 ~@2 e6@8 e6!4, c6!2 ~@14, ~ bb5@3 ~@44]/6",
  Q: "e6@3 ~",
})).s("gm_distortion_guitar").gain(0.26)

// bass · electric bass pick · "Bass"
const bass = note("<~@108 [f1!3 e1 ab1 e1 f1@2] ~ [~ f1!2 e1 ab1 e1 f1@2] ~@16>").s("gm_electric_bass_pick").gain(0.26)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A B A B A B A B A B A B A B A B A B A B A B A B A B A B A C A C A@3 C A@7 ~ A ~ A B A B A B A B A B A B A C A C
  A@3 C A@8 ~@2 A@9 ~ A ~@9 A@6 ~@3 A ~ A ~ A ~ A@11 C
>`.pickRestart({
  A: "x!2 ~@3 x ~ x", B: "~ x ~@3 x ~ x", C: "x!2 ~@6",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@33 A ~ A ~@13 B ~@13 A ~ A ~@26 C@7 D ~@27>".pickRestart({
  A: "~@4 x!2 ~@2", B: "x!2 ~ x ~@4", C: "x!8", D: "x!4 ~@4",
})).gain(0.25)

// drums · snare
const snare = s("sd").struct(`<
  ~@4 A@29 B A B A@3 B A@7 ~ A ~ A@13 B A B A@3 B A@8 ~@2 A@9 ~ A ~@9 A@6 ~@3 A ~ A ~ A ~ A@11 B
>`.pickRestart({
  A: "~ x ~ x", B: "~ x ~@2",
})).gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@97 [x!8]!2 [x ~ x ~ x ~ x ~ x!8] ~@27>").gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@33 A ~ A ~@3 B ~@9 C ~@13 A ~ A ~@3 B ~@57>".pickRestart({
  A: "~@12 x ~@2 x", B: "~@4 x!4", C: "~@5 x ~@2",
})).gain(0.25)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@33 A ~ A ~@27 A ~ A ~@61>".pickRestart({
  A: "~@10 x!2 ~ x!2 ~",
})).gain(0.25)

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

// drums · open hat · soft notes
const open_hat_soft = s("oh").struct("<~@32 A B ~ B ~ A@10 ~ A ~@13 A B ~ B ~ A@11 ~@3 A@8 ~ A ~@28 A@8>".pickRestart({
  A: "x", B: "x!2",
})).gain(0.25)

// drums · crash
const crash = s("cr").struct("<~@34 A ~ A ~@12 B ~@14 A ~ A ~@13 A ~@19 C@6 A ~@2 C ~ C ~ C ~ C@4 ~@8>".pickRestart({
  A: "x", B: "~ x ~ x", C: "x!2",
})).gain(0.25)

stack(
  acoustic_guitar_nylon, electric_guitar_clean, distortion_guitar, distortion_guitar_2, bass, kick, kick_soft, snare,
  snare_soft, low_tom, hihat, mid_tom, open_hat, open_hat_soft, crash
)

More by Bush