Strudelify
Unbelievable cover art

1991 · Schubert Dip

Unbelievable

EMF

KeyA minorTempo110 bpm
0:00/0:00
// Unbelievable — EMF
// 110 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 100 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(110/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · piano
const piano = note(`<
  ~@4 A B A C ~@8 D E F G H I J K ~@4 A B A C D E F G H I J K H I J K ~@4 A B A C D E F G H I J K H I J K ~@4 A B A C D
  E F G H I J K H I J K H I J K H I J K H I J K H I J L
>`.pickRestart({
  A: "[a1,a2,a3]", B: "[d2,d3,d4] [e2,e3,e4]", C: "[d2,d3,d4]@8 [e2,e3,e4]@7 ~",
  D: "~@2 [a3,a4] ~ [a3,a4]@2 ~@4 [a3,a4] ~ a4@2 ~@2, [a1,a2]@7 ~ [a1,a2]@4 a3 ~@3", // A
  E: "[d2,d3,d4,d5]@3 ~ [e2,e3,e4,e5]@2 ~@2", // D E
  F: "~@2 [a3,a4] ~ [a3,a4]@2 ~@4 [a3,a4] ~ a4@2 ~@2, [a1,a2]@6 ~@2 [a1,a2]@4 a3 ~@3", G: "[d2,d3,d4,d5] ~@15",
  H: "[a1,a3]@3 ~ [a1,a3]@2 ~@2 [c2,c4] [a1,a3] ~ [c2,c4] ~ a3 c2 ~", // A C A C
  I: "[c#2,c#4] ~ [d2,d4] ~ [d2,d4]@2 ~@2 [c2,c4]@2 ~ [c2,c4] ~ [c2,c4] [a#1,a#3] ~, ~@8 c#2 ~@7", // C# D C A#
  J: "[a#1,a#3]@2 [a1,a3] ~ [a1,a3]@3 ~ [c2,c4] [a1,a3] ~ [c2,b3,c4] ~ [a1,a3] c2 ~", // A# A C A Cmaj7 A
  K: "[c#2,c#4] ~ [d2,d4] ~ [d2,d4]@2 ~@2 c4!2 ~ [c2,c4] ~ [c2,c4] [a#1,a#3] ~, ~@4 c2 ~@3", L: "d4 ~@15",
})).s("gm_piano").gain(0.56)

// other · piano · soft notes
const piano_soft = note(`<
  ~@7 A ~@12 B ~ C ~@8 A ~@4 B ~ C ~ B ~ C ~@8 A ~@4 B ~ C ~ B ~ C ~@8 A ~@4 B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~ C ~ B ~
  C ~
>`.pickRestart({
  A: "~@8 d4 ~@7", B: "g4 ~@12 c4@2 ~, ~@13 a1 ~@2", C: "~@5 g4 ~@7 c4@2 ~",
})).s("gm_piano").gain(0.32)

// other · lead 7 fifths · "synth lead"
const lead_7_fifths = note(`<
  ~ A B C D E D E ~@12 F G F H ~@12 F G F H F G F H ~@12 F G F H F G F H ~@12 F G F H F G F H F G F H F G F H F G F H F
  G F I
>`.pickRestart({
  A: "~@15 a1", B: "a1 ~ a1 ~@2 a1 a2 a1!3 ~@6, ~ a2@2 ~@13", C: "a1!2 a2 a1 ~ a1 a2 a1!3 ~@6",
  D: "a2!8 c3 a2!3 c3 a2 c#3!2", E: "d3!9 c3!5 a#2!2", F: "a2!8 c3!6 c#3!2", G: "d3!9 c3!4 ~ a#2!2",
  H: "d3!8 c3!6 a#2!2", I: "d3 ~@15",
})).s("gm_lead_7_fifths").gain(0.24)

// other · drawbar organ · "organ"
const drawbar_organ = note(`<
  ~@20 A B C D ~@12 A B C D A B C D ~@12 A B C D A B C D ~@12 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: "[a4,a6]@3 ~ [a4,a6]@2 ~@2 [c5,c7] [a4,a6] ~ [c5,c7] ~ [a4,a6] c5 ~, g7 ~@12 c7@2 ~", // A C A C A
  B: "[c#5,c#7] ~ [d5,d7] ~ [d5,d7]@2 ~@2 [c5,c7]@2 ~ [c5,c7] ~ [c5,c7] [a#4,a#6] ~, ~@8 c#5 ~@7", // C# D C A#
  C: "[a#4,a#6]@2 [a4,a6] ~@2 g7 ~@2 [c5,c7] [a4,a6] ~ [c5,b6,c7] ~ [a4,a6] c5 ~, ~@4 [a4,a6]@3 ~@6 c7@2 ~", // A# A C A Cmaj7 A
  D: "[c#5,c#7] ~ [d5,d7] ~ [d5,d7]@2 ~@2 c7!2 ~ [c5,c7] ~ [c5,c7] [a#4,a#6] ~, ~@4 c5 ~@3", // C# D C A#
  E: "[c#5,c#7] ~ [d5,d7] ~@13", // C# D
})).s("gm_drawbar_organ").gain(0.16)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@8 A B A B A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A B ~@4 A B A B A B A C A B A B A B A B A B A
  B A B A B A B A C A B A B A B A B A B A B A B A B A B A B A B A D
>`.pickRestart({
  A: "a2@3 g2@3 a2 ~ a2@2 e2@2 g2@2 a2 ~", B: "d3@3 c3@3 d3 ~ e3@2 e2@2 g2@2 e2 ~", C: "d3 ~@7", D: "d3@3 ~@13",
})).s("gm_electric_bass_finger").gain(0.56)

// 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 C ~ A B A B A B A B A B A B A B C ~ A B A B A B A B D E D E D E D E D E ~@2 A B A
  B A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B A B A B A B A B A F
>`.pickRestart({
  A: "x ~@6 x ~ x!2 ~@3 x ~", B: "x ~@8 x!3 ~ x!2 ~", C: "x ~@2 x!2 ~@3", D: "x ~@2 x ~@2 x ~@3 x ~@5",
  E: "x ~@2 x ~@2 x ~@3 x!2 ~@2 x ~", F: "x",
})).gain(0.48)

// drums · snare
const snare = s("sd").struct("<A@19 ~ A@15 ~ A@19 ~ A@19 B A@23 B>".pickRestart({
  A: "~ x ~ x", B: "x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct(`<
  A B A B A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B C ~ A B A B A B A B ~@12 A B A B A B A B A B A B A
  B A B A B C ~ A B A B A B A B A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "~@14 x!2", B: "~@6 x!2 ~@6 x ~", C: "~@2 x ~@6 x ~@2 x ~ x ~",
})).gain(0.4)

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

// drums · low tom
const low_tom = s("lt").struct("<~ A ~@5 B ~@35 C D@11 ~@25 E ~@19>".pickRestart({
  A: "~@5 x ~ x ~ x ~ x!3 ~@2", B: "~@7 x ~@4 x ~ x!2", C: "~@4 x ~@6 x ~ x!2 ~", D: "~ x ~ x", E: "x",
})).gain(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  A B A B A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B C ~ A B A B A B A B ~@12 A B A B A B A B A B A B A
  B A B A B C ~ A B A B A B A B A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "~ x ~@5 x", B: "~@6 x ~@2 x ~@2 x ~ x ~", C: "~ x ~ x ~ x ~ x",
})).gain(0.32)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~@5 B ~@8 C ~ C ~@13 C ~ C ~@8 A ~@8 C ~ C ~@17 C ~ C ~@25>".pickRestart({
  A: "~@2 x ~ x ~@2 x ~ x ~@6", B: "~@4 x ~@2 x ~@2 x ~ x ~@3", C: "~ x!2 ~@2 x!2 ~",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@4 B ~ B ~@8 B ~ B@2 ~@12 B ~ B@2 ~@3 B ~@3 B ~@8 B ~ B@2 ~@3 B ~@12 B ~ B@2 ~@3 B ~@18 B
>`.pickRestart({
  A: "~@15 x", B: "x",
})).gain(0.32)

// drums · high tom
const high_tom = s("ht").struct("<~ [~ x ~@6] ~@5 [~@4 x ~@4 x ~@6] ~@35 [~ x ~ x ~@4] ~@56>").gain(0.48)

// drums · cabasa
const cabasa = s("cabasa:4").struct(`<
  A B A B A B A B A B A B A B A B A B C ~ A B A B A B A B A B A B A B C ~ A B A B A B A B ~@12 A B A B A B A B A B A B A
  B A B A B C ~ A B A B A B A B A B A B A B A B A B A B A B A ~
>`.pickRestart({
  A: "x!2 ~@4 x!2 ~ x!2 ~@5", B: "~@6 x!2 ~@6 x!2", C: "~@2 x ~@3 x ~@7 x!2",
})).gain(2.03)

stack(
  piano, piano_soft, lead_7_fifths, drawbar_organ, bass, kick, snare, clap, hihat, low_tom, open_hat, mid_tom, crash,
  high_tom, cabasa
)