Strudelify

A Place in the Sun

Stevie Wonder

KeyB♭ majorTempo106 bpm
0:00/0:00
// A Place in the Sun — Wonder Stevie
// 106 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 8 "Strings" cello (copy of ch 6 "Melody 2" acoustic guitar steel)
// note: Full arrangement: all 91 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(106/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 C D E F G H F I J K A F G H F I C D E F G H F L J K A F G H F I J K E F G H F L J K A F G H F L J K A F G H F L
  C D E B G H B F J K E B C D A F G H F L J K A F G H F I C D M ~
>`.pickRestart({
  A: "c2@7 ~ g2@6 ~@2", B: "f1@7 ~ c2@8", C: "bb1 f1", D: "bb1@8 f1@2 bb1 ~ bb1@2 b1@2", E: "c2@7 ~ g1@7 ~", F: "f1 c2",
  G: "bb1@7 ~ f1@6 ~@2", H: "g1@7 ~ d2@6 ~@2", I: "f1@8 c2@2 f1 ~ f1@2 c2 ~", J: "bb1@7 ~ f2@6 ~@2", K: "bb1@8 f2@7 ~",
  L: "f1@8 c2 ~ c2@2 d2@2 c2@2", M: "c2@7 ~@9",
})).s("gm_fretless_bass").gain(0.31)

// chords · piano
const piano = note(`<
  ~ A B C@3 B D E@3 F@2 G@4 H@4 I B J K L@2 M@2 N@3 K O@2 P@3 Q D R S@2 T@2 U@2 D V W@2 X@2 I Y Z@2 AA@2 AB@2 A Q D AC
  O@2 F@2 AD B F@2 I B AE AF AG@2 T@2 I B AE AH@3 X@2 AI ~
>`.pickRestart({
  A: "[bb3,c4,eb4,g4]", B: "[a3,c4,eb4,f4]",
  C: "[f3@10 ~@4 bb4 [c3,bb3,c4,eb4,g4]@9, f4@5 ~@3, d4@13 d4@2 ~@9, bb3@11 bb3@4 ~@9, ~@10 f3@5 ~@9]/3", // Cm7
  D: "[f3,bb3,d4,f4]", E: "[[d3,g3,bb3,d4]@7 [a3,c4,eb4,f4]@17]/3",
  F: "[f3@5 ~@2 bb4, f4, d4@13 d4@3, bb3@11 bb3@5, ~@5 f3@3]/2",
  G: "[~@3 c5@4 [a3,c4,eb4,f4]@8 [f3,bb3,d4]@8 [d3,g3,bb3,d4]@8 ~, ~ bb3@6 ~@25, ~@2 eb4@5 ~@25]/4", // F7 Bb Gm
  H: "[~@12 c4@3 ~@13 bb4@4, ~@4 [eb4,f4,a4]@11 d4@17, ~@17 f4@15, ~@19 f3@13]/4", I: "~@3 c5@5, ~ bb3@7, ~ eb4@3",
  J: "[f3,bb3,d4,f4]@7 ~", K: "~@3 g4@5, ~ d3@7, ~ bb3@3", L: "[~@3 c4, ~ [eb4,f4,a4]@3]/2",
  M: "[~@3 bb4, d4, ~ f4@15, ~@3 f3@13]/2", N: "[[bb3,c4,eb4,g4]@7 [f2,a3,c4,eb4,f4]@8 [bb2,bb3,d4,f4]@9]/3",
  O: "[~@3 c5, eb4, ~ a4@15, ~ f4@7, ~@3 a3@13]/2",
  P: "[bb3@13 ~ bb3 [c3,bb3,c4,eb4,g4]@9, [bb2,f4]@5 ~@3, d4@7 ~@5, ~@13 f3@2 ~@9]/3", Q: "~@3 c5@5, ~ a3@7, ~ eb4@3",
  R: "[g3,bb3,d4]", S: "[a3@26 ~@2 a3@3 c4, [f2,eb4,f4], c4@7 ~, ~@13 f3@3]/2",
  T: "[~@3 f4, ~ f3@15, ~ d4@7, ~@3 bb4@13]/2", U: "[[bb3,c4,eb4,g4]@7 [f2,a3,c4,eb4,f4]@9]/2", V: "[g2,g3,bb3,d4]",
  W: "[~@12 f4@3 ~, ~ a3@14 ~, ~@2 eb4@13 ~, ~@3 c5@12 ~]/2", X: "[~@3 bb3, ~ [d4,f4,bb4]@3]/2",
  Y: "~@3 c5@4 ~, ~ a3@6 ~, ~@2 eb4@5 ~", Z: "[~@3 bb4@4 [g3,bb3,d4]@9, ~ f3@6 ~@9, ~@2 d4@5 ~@9]/2",
  AA: "[a3@5 ~@2 c5, f4, eb4@13 eb4@3, c4@11 c4@5, ~@5 a3@3]/2",
  AB: "[bb3@26 ~@2 bb3@3 d4, [bb2,f4], d4@7 ~, ~@13 f3@3]/2", AC: "[d3,g3,bb3,d4]", AD: "[c3,bb3,c4,eb4,g4]",
  AE: "[f3,bb3,d4]@7 ~", AF: "~@3 g4@4 ~, ~ d3@6 ~, ~@2 bb3@5 ~", AG: "[~@3 f4, ~ a3@15, ~ eb4@7, ~@3 c5@13]/2",
  AH: "[~@6 g4@8 [a3,c4]@28 ~@2 a3@3 c4, ~ d3@6 [f2,eb4,f4]@17, ~@2 bb3@5 ~@14 f3@3]/3", AI: "~ eb4@3, ~ bb3@7",
})).s("gm_piano").gain(0.18).pan(0.3)

// chords · electric guitar jazz · "Guitar"
const electric_guitar_jazz = note(`<
  ~ A@2 B@2 C D E F@5 G H I J K@2 B@2 L M I N@5 O P Q R S@2 T@2 L M I U V@4 W@2 X@2 S@2 B@2 Y@2 E Z AA@2 AB@2 AC AD I AE
  K@2 AF@3 AG@3 L AH AI R AJ@2 AB@2 AK@3 AE K@2 AL@2 G ~
>`.pickRestart({
  A: "[~ eb3 ~@3 c3 eb3 ~@4 a3@5, c3@3 bb3@4 ~@2 eb3@7, ~@4 g3@7 ~@3 f2@18, ~@5 f3@3]/2",
  B: "[~@15 bb3, bb2@17 ~ bb2@14, ~@2 d3@17 ~@3 d3@10, ~@2 f3@9 ~@2 f3@3, ~@3 bb3@11 ~@2]/2",
  C: "[bb3,eb4]@2 bb3 ~@4 g3, c3, ~@2 eb4@2 eb3@3 ~, ~@3 g3@4 ~, ~@3 bb3@2 [bb3,eb4]@3", D: "~@3 a3@5, f2@7 ~, ~ f3@3",
  E: "~ d3 ~@3 bb3@3, bb2, ~ f3@3, ~@3 d3@5",
  F: "[~@3 g3@4 ~@14 a3@2 ~@16 bb3, g2@14 ~@4 eb3@8 eb3@8 eb3@2 a3@4 f3@6 ~@4 d3@17 ~@3 d3@10, ~@4 d3@10 a3@6 f3@8 f3@10 eb3@8 bb2@19 ~ bb2@14, ~@11 a3@4 a3@3 eb4@5 ~@3 f3@9 ~@2 f3@3, ~@16 f2@7 ~@4 bb3@11 ~@2]/5",
  G: "~@7 bb3, bb3@3 eb4@5, eb3@2 eb3@3 eb3@3, ~ c3@7, ~@3 bb3@3 g3@2",
  H: "[a3,eb4]@2 a3 ~@4 f3, f2, ~@2 eb4@2 eb3@3 ~, ~@3 f3@4 ~, ~@3 a3@2 [a3,eb4]@3", // Adim
  I: "~@3 bb3@5, bb2, ~ d3@7, ~ f3@3", J: "~ bb2 ~@3 g3@3, g2, ~ d3@3, ~@3 bb2@5",
  K: "[~ eb3 ~@9 f3@2 ~@2 a3, f2@17 ~ f2@14, ~@4 f3@15 ~@9 f3@4, ~@6 eb3@13 ~ eb3@4 ~@2 eb3@6, ~@10 a3@19 ~@3]/2",
  L: "~ eb3 ~@3 bb3@3, c3, ~ g3@3, ~@3 eb3@5", M: "~@7 a3, a3@3 eb4@5, eb3@2 eb3@3 eb3@3, ~ f2@7, ~@3 a3@3 f3@2",
  N: "[~@3 g3@4 ~@14 f3@2 ~@2 d3 ~@9 f3@2 ~@2 bb3, g2@14 f2@19 ~ f2@12 bb2@19 ~ bb2@14, ~@4 d3@10 ~@4 eb3@17 ~@3 eb3@8 ~@8 d3@13 ~ d3@4 ~@2 d3@6, ~@20 f3@18 ~@14 f3@15 ~@9 f3@4, ~@22 a3@22 ~@14 bb3@19 ~@3]/5",
  O: "~@7 bb3, bb3 g3@2 g3, ~ eb3@4 eb3@3, ~@3 bb3@4 ~", P: "~@7 a3, a3 f3@2 f3, ~ eb3@4 eb3@3, ~@3 a3@4 ~",
  Q: "~ d3 ~@3 bb2 d3@2, bb2@3 bb3@5, ~@4 f3@7 ~@5",
  R: "[g3,bb3]@2 g3 ~@4 d3, g2, ~@2 bb3@2 bb2@3 ~, ~@3 d3@4 ~, ~@3 g3@2 [g3,bb3]@3", // Gm
  S: "[~@15 eb3, eb4, f2@7 f3@4 eb3@2 a3@3, a3@2 f3 a3@6 eb3 a3@2 f3@4, ~ eb3@7 f2@8]/2",
  T: "[~@15 d3, bb3@2 f3@4 f3@5 d3@2 bb3@3, ~ d3@4 d3@4 d3 bb3@2 f3@4, ~@3 bb3@4 bb3@3 d4@6, ~ bb2]/2",
  U: "~ bb2 ~@3 g2 bb2@2, g2@3 g3@5, ~@4 d3@7 ~@5",
  V: "[~@2 eb3@2 ~@6 f2@2 eb3@6 ~@4 f3@3 ~ f2@4 ~@32 bb3@2, f2@6 a3@24 ~@4 d3@17 ~@3 d3@10, ~@4 f3@7 ~@7 f2@7 ~@5 bb2@19 ~ bb2@14, ~@18 f3@9 ~@2 f3@3, ~@19 bb3@11 ~@2]/4",
  W: "[[bb3,eb4]@2 bb3 ~@2 [bb3,eb4]@2 [a3,eb4]@3 a3 ~@4 f3, c3@7 f2@9, ~@2 eb4@2 eb3@3 ~@4 f3@4 ~, ~@3 g3@4 ~@4 a3 eb3@3 ~, ~@3 bb3@2 ~@5 eb4@3 [a3,eb4]@3]/2", // Eb5 Adim
  X: "[~@6 f3 ~@4 g3@5, bb3@3 [bb3,d4]@4 ~@3 d3@6, d3@2 d3@3 d3@2 ~@2 bb2@7, ~ bb2@6 g2@9]/2", // Bb
  Y: "[~@3 bb3@4 ~@2 eb3 ~@3 f2 eb3@2, c3@7 f2@4 a3@5, ~@4 g3@10 ~@6 f3@7 ~@5]/2", Z: "~@3 g3@5, g2@7 ~, ~ d3@3",
  AA: "[[a3,eb4]@2 a3 ~@10 a3@3, f2 f2, ~@2 eb4@2 eb3 a3@5 a3@2 f3@4, ~@3 f3@4 f3@4 eb3@5, ~@3 a3@2 eb4@11]/2", // Adim
  AB: "[~@15 f3, bb2@13 bb2@3, ~@2 d3@25 ~@5, ~ f3@6 ~, ~@3 bb3@12 ~]/2", AC: "~@3 bb3@5, c3, ~ eb3@7, ~ g3@3",
  AD: "~@7 f3, [f2,eb4], a3@3 a3@5, ~ eb3@7, ~@2 f3@5 ~", AE: "~@3 g3@5, g2, ~ bb2@7, ~ d3@3",
  AF: "[~@13 bb3@2 ~@2 eb3 ~@3 bb3@3, d4@5 ~@3, bb2@7 f3@4 d3@4 c3@9, bb3@2 f3 bb3@6 d3 bb3@2 f3@3 ~@3 g3@6, ~ d3@7 bb2@7 ~@4 eb3@5]/3",
  AG: "[[a3,eb4]@2 a3 ~@2 [a3,eb4]@2 ~@16 bb3, f2@14 bb2@19 ~ bb2@14, ~@4 eb4@4 eb3@6 ~@4 d3@17 ~@3 d3@10, ~@3 f3@4 ~@3 f3@9 ~@2 f3@3, ~@3 a3@2 ~@6 bb3@11 ~@2]/3", // Adim
  AH: "~@3 a3@5, f2, ~ eb3@7, ~ f3@3", AI: "~@7 bb3, bb3 f3@2 f3, ~ d3@4 d3@3, ~@3 bb3@4 ~",
  AJ: "[~@15 eb3, a3@2 f3@4 f3@5 eb3@2 a3@3, ~ eb3@4 eb3@4 eb3 a3@2 f3@4, ~@3 a3@4 a3@3 eb4@6, ~ f2]/2",
  AK: "[~ eb3 ~@3 c3 eb3 ~@7 f3 ~@2 d3 ~@3 bb2 d3@2, c3@6 bb3@8 a3@8 [a3,eb4]@8 ~@6 f3@7 ~@5, ~@4 g3@7 ~@3 eb3@6 eb3@6 eb3@4 bb2@9 ~@9, ~@9 f2@6 ~@4 bb3@5]/3", // Adim
  AL: "[~@2 d3@2 ~@6 bb2@2 d3@6 ~@4 f3@3 ~@5 f3@2, bb2@3 bb3@13, ~@4 f3@7 ~@7 bb2@7 ~ bb2@6, ~@7 d3]/2",
})).s("gm_electric_guitar_jazz").gain(0.22).pan(0.6)

// chords · electric guitar jazz · "Guitar" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~ A ~@3 B C ~ D ~@5 B ~@9 D ~@6 E F ~@7 G H@2 ~@3 B ~@6 I J ~ K L@2 ~ M ~@15 F ~@3 M A ~ E ~@3 N@2 ~@2
>`.pickRestart({
  A: "~@4 eb3@7 ~@5", B: "~@7 eb3", C: "~@2 eb3@11 ~ eb3@2", D: "~@2 bb2@11 ~@3", E: "~@4 d3@7 ~@3 f3@2", F: "~@7 bb2",
  G: "~@4 bb2@7 ~@3 d3@2", H: "[~@4 eb3@7 ~@3 f3@4 ~@2 eb3@5 ~@7]/2", I: "~@2 eb3@11 ~@3", J: "~@4 eb3@7 ~@3 f3@2",
  K: "~@2 bb2@11 ~ bb2@2", L: "[~@7 eb3@2 eb3@2 ~@5]/2", M: "~@3 d3", N: "[~@4 d3@7 ~@3 f3@4 ~@2 d3@5 ~@7]/2",
})).s("gm_electric_guitar_jazz").gain(0.11).pan(0.6)

// other · vibraphone · "Extra"
const vibraphone = note("<~@11 A ~ B C D E ~@26 A ~ B C D E ~@42>".pickRestart({
  A: "bb4@3 c5@2 d5@11", B: "~@8 eb5@3 f5@2 d5@3", C: "c5@3 ~", D: "f5@3 d5@2 c5@7 d5@4", E: "bb4",
})).s("gm_vibraphone").gain(0.17).pan(0.2)

// bass · electric bass finger · "Bass"
const bass_2 = note(`<
  ~ A B C D E F G H I J C D E F G H I J C D E K L M I N C D E N L H I N C D E F G H I J C D E F G H I J C D E K L M I N
  C D E N L H I N C D E K C D E K L M I N C D E K L M I N C D O ~
>`.pickRestart({
  A: "c2 d2 eb2 e2", B: "f2 f1 c2 f2", C: "bb1 f2", D: "bb1@2 bb1 b1", E: "c2 d2 eb2 g2", F: "f2 d2 f1 a1", G: "bb1!2",
  H: "g2@2 g2 gb2", I: "f2 c2", J: "f2@2 f2 c2", K: "f2 c2 f1 a1", L: "bb1@2 bb2 a2", M: "g2@2 g2!2", N: "f2 f1 g1 a1",
  O: "c2 d2 eb2 ~",
})).s("gm_electric_bass_finger").gain(0.31).pan(0.7)

// 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 A B A B A@3 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 B A@3 B 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 x!2 ~@3", B: "x ~@2 x!2 ~@2 x",
})).gain(0.31).pan(0.4)

// drums · snare
const snare = s("sd").struct(`<
  ~
  [~ x ~ x]!31
  [~@4 x ~@5 x!3 ~ x ~]
  [~ x ~ x]!31
  [~ x ~@2]
  [~ x ~ x]!24
  [~@4 x ~@3 x!4 ~@4]
  ~
>`).gain(0.36).pan(0.4)

// drums · low tom
const low_tom = s("lt").struct("<~@64 [~@7 x] ~@26>").gain(0.36).pan(0.4)

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@64 [~@3 x ~ x!2 ~] ~@24 [~@12 x!4] ~>").gain(0.36).pan(0.4)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@2 A ~@3 A ~ A ~@7 A ~ A ~@5 A ~@5 A ~@9 A ~ A B ~@4 A ~@7 A ~ A ~@5 C ~@11 A ~@3 D ~@5 A ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~@2", C: "~ x ~@2", D: "~@15 x",
})).gain(0.27).pan(0.4)

// drums · high tom
const high_tom = s("ht").struct("<~@64 [~ x] ~@26>").gain(0.36).pan(0.4)

// drums · crash
const crash = s("cr").struct("<~ x ~@31 x ~@31 x ~@25>").gain(0.31).pan(0.4)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@2 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
  A ~ A ~@3 A ~ A ~ A ~ A ~ A ~ A ~ A ~@3 A ~ A ~ A ~ A ~@2
>`.pickRestart({
  A: "~@3 x",
})).gain(0.4).pan(0.4)

stack(
  bass, piano, electric_guitar_jazz, electric_guitar_jazz_2, vibraphone, bass_2, kick, snare, low_tom, hihat, mid_tom,
  open_hat, high_tom, crash, tambourine
)

More by Stevie Wonder