Strudelify
Broken Wings cover art

1985 · Welcome To The Real World

Broken Wings

Mr. Mister

KeyB majorTempo97 bpm
0:00/0:00
// Broken Wings — Mr. Mister
// 97 bpm, 4/4, key B major. 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 123 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · fretless bass · "Bass"
const bass = note(`<
  A B A B C D E F A B A B C D E F A B A B C D E F E G H I E G H I E G A B A B A B C D E F A B A B C D E F E G H I E G H
  I J K J K L M N O J K J K L M N O A B A B C D E F E G H I E G H I E G H I E G H I J K P Q J K P Q J K P Q J K P Q J K
  P Q R ~@2
>`.pickRestart({
  A: "g#1@3 g#1@2 d#1 f#1 ~@9", B: "g#1@3 g#1@2 d#1 f#1 ~ g#1@7 ~", C: "f#1@3 f#1@2 c#1 e1 ~@9",
  D: "f#1@3 f#1@2 c#1 d#1 ~ f#1@7 ~", E: "c#2@3 c#2@2 g#1 a#1 ~@9", F: "c#2@3 c#2@2 g#1 a#1 ~ c#2@7 ~",
  G: "c#2@3 c#2@2 g#1 b1 ~ c#2@7 ~", H: "b1@3 b1@2 f#1 g#1 ~@5 b1@4", I: "a1@3 a1@2 e1 f#1 ~ a1@7 ~",
  J: "f#1@3 a1@3 c#2@2 f#2 ~@6 a1", K: "f#1@3 a1@3 c#2@2 f#2 ~@2 g#2 a2@2 g#2@2", L: "a2@3 e2@3 a2@2 a2 ~@6 e2",
  M: "a2@3 e2@3 a2 ~ a2 ~@6 a2", N: "e2@3 b1@3 e2 ~ e2 ~@6 e2", O: "d2@3 a1@3 d2 ~ d2 ~@3 c#2@3 ~",
  P: "f#1@3 a1@3 c#2@2 f#2 ~@6 f#2", Q: "e2@3 b1@3 e2 ~ d2@3 a1@3 g#1@2", R: "f#1",
})).s("gm_fretless_bass").gain(0.4)

// chords · synth strings 2 · "Strings"
const synth_strings_2 = note(`<
  A@3 ~ B@2 C@2 A@3 ~ B@2 C@2 A@3 ~ B@2 C@2 D@2 E F D@2 E F D@2 G@2 A@3 ~ B@2 C@2 A@3 ~ B@2 C@2 D@2 E F D@2 E H@4 ~ I@2
  J K L@4 M@2 N O A@3 ~ B@2 C@2 D@2 E F D@2 E F D@2 E F D@2 E F P@3 Q P@3 Q P@3 Q P@3 R P@3 Q P@3
>`.pickRestart({
  A: "[[g#3,a#3,d#4]@23 ~]/3", B: "[f#3,a#3,c#4]/2", C: "[g#3,c#4,d#4]/2", D: "[g#3,c#4,e4]/2", E: "[f#3,b3,d#4]",
  F: "[e3,a3,c#4]", G: "[g#3,a#3,d#4]/2", H: "[[a3,c#4]@16 [f#3,a3,c#4]@47 ~, e3@9 ~@23]/4", I: "[a3,c#4,e4]/2",
  J: "[g#3,b3,e4]", K: "[f#3,a3,d4]", L: "[[a3,c#4,f#4,a4]@29 ~@3]/4", M: "[a3,c#4,e4,a4]/2", N: "[g#3,b3,e4,g#4]",
  O: "[f#3,a3,d4,f#4]@15 ~", P: "[[f#3,a3,c#4]@19 ~@5]/3", Q: "[g#3,b3,e4] [f#3,a3,d4]",
  R: "[g#3,b3,e4]@8 [f#3,a3,d4]@7 ~", // E D
})).s("gm_synth_strings_2").gain(0.3)

// chords · string ensemble 1 · "Strings 2"
const string_ensemble_1 = note("<~@6 A@2 ~@14 A@2 ~@99>".pickRestart({
  A: "[~@7 [c#3,g#4,c#5,d#5]@8 ~]/2", // C#sus2
})).s("gm_string_ensemble_1").gain(0.18)

// chords · string ensemble 1 · "Strings 2" · soft notes
const string_ensemble_1_soft = note("<~@14 A@2 ~@107>".pickRestart({
  A: "[~@7 [c#3,g#4,c#5,d#5]@8 ~]/2", // C#sus2
})).s("gm_string_ensemble_1").gain(0.06)

// chords · electric guitar muted · "Mute Gutar" · G#sus2
const electric_guitar_muted = note(`<
  ~@34
  [[g#3,a#3] [g#4,a#4] [g#3,a#3] [g#4,a#4] a#3 [g#4,a#4] [g#3,a#3] [g#4,a#4] [g#3,a#3] [g#4,a#4] [g#3,a#3] [g#4,a#4] a#3 [g#4,a#4] a#3 [g#4,a#4]]!18
  ~@24
  [[g#3,a#3] [g#4,a#4] [g#3,a#3] [g#4,a#4] a#3 [g#4,a#4] [g#3,a#3] [g#4,a#4] [g#3,a#3] [g#4,a#4] [g#3,a#3] [g#4,a#4] a#3 [g#4,a#4] a#3 [g#4,a#4]]!8
  ~@39
>`).s("gm_electric_guitar_muted").gain(0.2)

// other · pad new age · "New Age"
const pad_new_age = note(`<
  ~@15 A B ~@4 A B ~@12 A B ~@4 A B A ~@5 A B ~ C ~ D E C ~ D E ~@21 A B ~ C ~ D E C ~ D E C ~ D E C ~ D E ~@23
>`.pickRestart({
  A: "~@2 c#5 ~@2 f#5 ~@2 d#5 ~@3 g#4 ~@3", B: "c#5 ~@15", C: "~@6 b5 ~ f#6 ~@3 e6 ~@3", D: "~@6 b5 ~ e6 ~@3 d#6 ~@3",
  E: "c#6 ~@15",
})).s("gm_pad_new_age").gain(0.44).pan(0.6)

// other · pad new age · "New Age" · soft notes
const pad_new_age_soft = note(`<
  ~@68
  [~@2 a6 ~ g#6 ~ a6 ~ f#6 ~ a6 ~ g#6 ~ a6 ~]
  [f#6 ~ a6 ~ g#6 ~ a6 ~ f#6 ~ a6 ~ g#6 ~ a6 ~]!3
  [e6 ~ a6 ~ g#6 ~ a6 ~ e6 ~ a6 ~ g#6 ~ a6 ~]!2
  [e6 ~ g#6 ~ f#6 ~ g#6 ~ e6 ~ g#6 ~ f#6 ~ g#6 ~]
  [d6 ~ f#6 ~ e6 ~ f#6 ~ d6 ~ f#6 ~ e6 ~ f#6 ~]
  ~@47
>`).s("gm_pad_new_age").gain(0.27).pan(0.6)

// drums · kick
const kick = s("bd").struct(`<
  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 B A B C B A B A B A B A B A B A B A B A B A B A B A B C B A B C
  B D E D E F G F B D E D E F G F B H I H I H I H I A B A B A B A B A B A B A B A B F G F B F G F B F G F B ~@11
>`.pickRestart({
  A: "x ~@2 x ~@4", B: "x ~@2 x!2 ~@3", C: "x ~@2 x ~@2 x ~", D: "x ~@14 x", E: "x", F: "x ~@5 x ~@8 x",
  G: "x ~@5 x ~ x ~@6 x", H: "x ~@4 x!2 ~@9", I: "x ~@4 x!2 ~ x ~@7",
})).gain(0.4)

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@112 A B A C A B A C D ~@2>".pickRestart({
  A: "x ~@5 x ~@8 x", B: "x ~@5 x ~ x ~@6 x", C: "x ~@2 x!2 ~@3", D: "x",
})).gain(0.2)

// drums · rim
const rim = s("rim").struct("<~@34 [~@3 x ~@12]!26 [~@3 x]!16 [~@3 x ~@12]!7 [~@3 x ~@8 x ~@3] [~@3 x]!28 ~@11>")
  .gain(0.5)

// drums · rim · soft notes
const rim_soft = s("rim").struct("<~@112 [~@3 x]!8 ~@3>").gain(0.25)

// drums · snare
const snare = s("sd").struct("<~@60 [~@3 x ~@8 x ~@3]!16 ~@7 [~@3 x] [~@3 x ~@8 x ~@3]!28 ~@11>").gain(0.4)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@60 [~@3 x]!16 ~@36 [~@3 x ~@8 x ~@3]!8 ~@3>").gain(0.25)

// drums · clap
const clap = s("cp").struct("<~@34 [~@12 x!2 ~@2]!49 ~ [~@12 x!2 ~@2]!36 ~@3>").gain(0.25)

// drums · open hat
const open_hat = s("oh").struct("<~@52 [~@3 x ~@12]!8 ~@63>").gain(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@60 [~@3 x ~@12]!23 [~@3 x ~@8 x ~@3] ~@17 [~@3 x ~@12]!11 ~@11>").gain(0.4)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@112 [~@3 x ~@12]!8 ~@3>").gain(0.25)

// drums · high tom
const high_tom = s("ht").struct("<~@61 A ~ A ~@5 A ~ A ~@29 A ~@3 A ~@3 A ~@13>".pickRestart({
  A: "~@11 x!2 ~ x ~",
})).gain(0.4)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@113 [~@11 x!2 ~ x ~] ~@3 [~@11 x!2 ~ x ~] ~@5>").gain(0.25)

// drums · ride bell
const ride_bell = s("rd").struct("<~@84 [~@3 x ~@12]!17 ~@22>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@60 [~@3 x]!16 ~@7 [~@3 x]!37 ~@3>").gain(0.2)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@83 [~@5 x ~@2] ~@39>").gain(2.26)

// drums · shaker
const shaker = s("sh").struct("<[x!16]!120 ~@3>").gain(0.2)

// drums · shaker · soft notes
const shaker_soft = s("sh").struct("<[~ x ~ x ~ x ~ x]!112 ~@11>").gain(0.1)

stack(
  bass, synth_strings_2, string_ensemble_1, string_ensemble_1_soft, electric_guitar_muted, pad_new_age,
  pad_new_age_soft, kick, kick_soft, rim, rim_soft, snare, snare_soft, clap, open_hat, mid_tom, mid_tom_soft, high_tom,
  high_tom_soft, ride_bell, crash, cabasa, shaker, shaker_soft
)