Strudelify

shine on you crazy diamond

David Gilmour Roger Waters & Richard Wright

KeyG minorTempo130 bpm
0:00/0:00
// shine on you crazy diamond — David Gilmour Roger Waters & Richard Wright
// 130 bpm, 12/8, key G minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (6/4 at bar 1, 12/8 at bar 20) are rendered on a constant 12/8 grid of one bar per cycle
// note: Transcription provider: pdmx. https://musescore.com/score/4892395; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 44 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/6)

// 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 · synth strings 1 · "Effekt Synthesizer"
const synth_strings_1 = note("<~@36 A@2 B@2 C@2 D@2>".pickRestart({
  A: "[g4,g5]/2", B: "[[a4,a5]@3 [f4,g5]]/2", C: "[d4,d5]/2", D: "[[e4,e5]@3 [f4,f5]]/2",
})).s("gm_synth_strings_1").gain(0.12)

// other · baritone sax · "Bariton Saxophon"
const baritone_sax = note("<A@2 B@2 C D E F G@3 H I J@3 K@2 L M ~@24>".pickRestart({
  A: "[e4 d4@9 g3 g3@9 a3@2 g3@2]/2",
  B: "[bb3@4 a3@2 bb3@4 a3@2 bb3@6 a3@4 g3@14 ~@4 ab2 [a2,bb2] d3 [e3,f3] bb3 a3 g3 f3]/2", // Bbmaj7 Fmaj7
  C: "d4 c4 ~@2 f4@14 g4@2 bb3 d4 bb3@2", D: "d4@2 ~@4 g3 g3@3 g3@2",
  E: "bb3 a3 ~ bb3@8 g3 d4@2 c4 d4 d4@6 bb3 [c4,d4]", F: "e4@2 f4@6 d4@2 bb3@2 d4 bb3 ~ g3@9",
  G: "[~@8 bb3@2 c4@2 bb3@2 bb3@2 c4@2 bb3@2 a3@2 g3@18 a3@2 bb3@2 c4@2 d4 e4@3 g4@10 ~@2 d4@2 e4 c4 bb3@2 a3@2 g3@2]/3",
  H: "bb3@3 a3 bb3@6 a3@2 g3@8 ~@4", I: "~@4 bb3 ~@3 bb3@4 a3@2 g3@6 d3@4",
  J: "[bb2@2 ~@10 d3 [e3,f3] g3 a3 c4 d4 g4 f4 d4 c4 ~ f4@7 e4@7 d4@5 c4@2 d4@16 ~@12]/3", // Fmaj7
  K: "[~@8 db4@2 c4@2 bb3@2 g3@2 bb3@2 bb3@2 g3@2 db3@4 ~@14 g3 a3 bb3 c4 b3@2 d4@2]/2",
  L: "e4 gb4 gb4@7 c4 ~ d4 c4 d4@7 bb3 [g3,a3] e3 [d3,eb3]", M: "f3 db3 a2 ~@9",
})).s("gm_baritone_sax").gain(0.08)

// other · tenor sax · "Tenor Saxophon"
const tenor_sax = note(`<
  A@2 B@2 C D E F G@3 H I J@3 K@2 L M N O P Q R S T U V W X Y Z AA AB AC AD@2 AE AF AG AH AI ~
>`.pickRestart({
  A: "[e4 d4@9 g3 g3@9 a3@2 g3@2]/2",
  B: "[bb3@4 a3@2 bb3@4 a3@2 bb3@6 a3@4 g3@14 ~@4 ab2 [a2,bb2] d3 [e3,f3] bb3 a3 g3 f3]/2", // Bbmaj7 Fmaj7
  C: "d4 c4 ~@2 f4@14 g4@2 bb3 d4 bb3@2", D: "d4@2 ~@4 g3 g3@3 g3@2",
  E: "bb3 a3 ~ bb3@8 g3 d4@2 c4 d4 d4@6 bb3 [c4,d4]", F: "e4@2 f4@6 d4@2 bb3@2 d4 bb3 ~ g3@9",
  G: "[~@8 bb3@2 c4@2 bb3@2 bb3@2 c4@2 bb3@2 a3@2 g3@18 a3@2 bb3@2 c4@2 d4 e4@3 g4@10 ~@2 d4@2 e4 c4 bb3@2 a3@2 g3@2]/3",
  H: "bb3@3 a3 bb3@6 a3@2 g3@8 ~@4", I: "~@4 bb3 ~@3 bb3@4 a3@2 g3@6 d3@4",
  J: "[bb2@2 ~@10 d3 [e3,f3] g3 a3 c4 d4 g4 f4 d4 c4 ~ f4@7 e4@7 d4@5 c4@2 d4@16 ~@12]/3", // Fmaj7
  K: "[~@8 db4@2 c4@2 bb3@2 g3@2 bb3@2 bb3@2 g3@2 db3@4 ~@14 g3 a3 bb3 c4 b3@2 d4@2]/2",
  L: "e4 gb4 gb4@7 c4 ~ d4 c4 d4@7 bb3 [g3,a3] e3 [d3,eb3]", M: "f3@2 db3@2 a2@2 ~@11 d3 g3 bb3 d4 e4 g4 bb4",
  N: "d5@2 c5", O: "a4@4 g4@3 e4@4 d4", P: "~@8 g4@2 d4 g4 a4@8 g4 ~ d4 ~",
  Q: "c5 ~ c5@2 a4 ~ a4@4 g4@2 c5@2 a4@8 g4@2", R: "bb4@4 c5@5 a4 g4 f4 e4@6 ~@4 c4 [d4,e4]",
  S: "f4 e4 g4 a4 d5 a4!2 c5 a4 g4@5 e4@2 ~@8", T: "~ bb4@2 c5@2 bb4@5 g4 f4", U: "g4 f4 g4@4 f4@6 e4@2 ~@2 e4@2 d4@6",
  V: "~@4 g4@4 g4@2 g4@4 d4@4 ~@4 g3 bb3", W: "d4@2 c4@4 f4 g4 f4@4 a4 bb4 g4@4 c5@2 d5@2 ~@2",
  X: "~@2 f4 g4 d4@2 f4@4 eb4 f4 eb4@2 f4@2 d4@4 c4@2 bb3@2", Y: "c4@3 bb3@2 c4 bb3 g3 g3@4 ~@8 g4@2 bb4@2",
  Z: "db5@2 c5@2 bb4 g4@2 eb4@3 ~@2", AA: "eb5@4 db5@2 bb4 c5 bb4@2 g4@2 f4@6 ~@6",
  AB: "gb4@4 e4 gb4@7 d4@3 d3 b2@2 ~@2 d4@2 c4@2", AC: "c4@4 d4@6 c4 d4 c4@2 d4 c4@2 d4 c4@2 d4 c4@2 d4",
  AD: "[c4 d4 c4 bb3@2 g3@4 d3 ~ d3@4 ~@9]/2", AE: "bb2 gb3 ~ bb3 d4@6 g4 bb4 ~ c5@3 a4@6 g4@2, ~@13 bb4 ~@10",
  AF: "c5@8 d5@5 c5 ~ bb4 a4 ~ g4 ~ a4 g4 ~ a4", AG: "g4@6 d4@2 ~@12 bb3 d4@3",
  AH: "e4 f4@3 g4 a4@3 f4 g4@5 bb4@6 a4@4", AI: "d5@3 c5@3 f4@4 g4@2",
})).s("gm_tenor_sax").gain(0.08)

// bass · electric bass finger · "Elektrischer Bass"
const bass = note("<A B A C A B A B D E D F A B A G H I J K L M@3 N@3 O M@3 P Q R S T U ~@7>".pickRestart({
  A: "g1@12 ~@7 f1 g1@2 ~@2", B: "g1@3 ~ a1 bb1", C: "g1 ~", D: "c2@12 ~@7 bb1 c2@2 ~@2", E: "c2@3 ~@2 d2",
  F: "c2@3 ~ g2 ~", G: "g1@6 a1 bb1 b1 c2 db2 d2", H: "eb2@12 ~@7 d2 eb2@2 ~@2", I: "eb2@6 ~@2 bb1 ~ eb2 ~",
  J: "d2@12 ~@7 c2 d2@2 ~@2", K: "d2 ~ d2 ~@3 bb1 ~ bb1 ~ a1 ~", L: "g1 ~ g1 ~@3 g1 ~ g1 ~ f1 gb1",
  M: "g1 ~ g1 ~@3 g1@2 g1 ~ a1 bb1", N: "c2 ~ c2 ~@3 c2@2 c2 ~ d2 eb2", O: "c2 ~ c2 d2 eb2 c2 d2 eb2 c2 ~ c2 ~",
  P: "g1@2 ~@2 g1@2 ~@6 g1@2 ~@2 g1@2 g1 [ab1,a1] bb1 b1 [c2,db2] d2", Q: "eb2 ~ eb2 ~@2 db2 eb2 ~ eb2 ~@2 db2",
  R: "eb2 ~ eb2 ~@2 d2 eb2 ~ eb2 ~@3", S: "d2 ~ d2 ~@2 c2 d2 ~ d2 ~@3", T: "d2 c2 bb1 a1", U: "g1",
})).s("gm_electric_bass_finger").gain(0.3)

// drums · kick
const kick = s("bd").struct("<A B A B A B A B A B A@5 C A@3 ~ D E@2 F D F D F D E@2 D E F D ~ B ~@7>".pickRestart({
  A: "x ~@18 x!2 ~@3", B: "x", C: "x ~@4 x", D: "x ~@2 x!2 ~", E: "x!2 ~ x!2 ~", F: "x!2 ~ x ~@2",
})).gain(0.41)

// drums · snare
const snare = s("sd").struct("<A B A B A@3 B A@11 ~ C@3 D C D C D C@5 D C E ~@8>".pickRestart({
  A: "~ x", B: "~@12 x ~@6 x ~@4", C: "~ x ~ x", D: "~@3 x ~@4 x ~@3", E: "x",
})).gain(0.41)

// drums · low tom
const low_tom = s("lt").struct("<~@5 A ~@3 B ~@9 C ~@15 D ~@8>".pickRestart({
  A: "~@5 x", B: "~@9 x!2 ~", C: "~@4 x!3 ~ x ~ x!2", D: "~@3 x ~@2 x!2 ~@2 x ~",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<A B A B A B A C A D A@9 ~ E@15 ~@9>".pickRestart({
  A: "x!6", B: "x!5 ~", C: "x!4 ~@2", D: "x!2 ~@4", E: "x",
})).gain(0.41)

// drums · mid tom
const mid_tom = s("mt").struct("<~ A ~ A ~ B ~ A ~ C ~@9 D ~@3 E ~ E ~ E ~@5 E ~@10>".pickRestart({
  A: "~@5 x", B: "~@19 x ~@4", C: "~@7 x ~@4", D: "x!2 ~@4", E: "~@10 x!2",
})).gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@7 [~@2 x] ~ [~ x ~] ~@34>").gain(0.41)

// drums · ride
const ride = s("rd").struct("<~@20 A@3 B A B A B A@5 B A ~ C ~@7>".pickRestart({
  A: "~ x!3", B: "~ x!2 ~", C: "x",
})).gain(0.41)

stack(synth_strings_1, baritone_sax, tenor_sax, bass, kick, snare, low_tom, hihat, mid_tom, open_hat, ride)