Strudelify

Caledonia Swing

Van Morrison

KeyD majorTempo180 bpm
0:00/0:00
// Caledonia Swing — Van Morrison
// 180 bpm, 12/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 8 "Piano" named as a piano, played on piano (its rock organ patch is not one)
// note: duplicate parts dropped: ch 2 "Alto Saxophone" alto sax (copy of ch 4 "Bb Trumpet" trumpet)
// note: Transcription provider: pdmx. https://musescore.com/score/5982431; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 80 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/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 · tenor sax · "Tenor Saxophone"
const tenor_sax = note(`<
  ~@8 A B A C A B A C D E D F D E D F G@3 H G@3 I D E D F D E D F ~@16 G@3 H G@3 J A B A C A B A C D E D F D E D K
>`.pickRestart({
  A: "~@4 a3@2 g3@4 e3@8 d3 e3 ~ d3 c3 ~", B: "a2@5 g2 a2@2 c3 ~@2 e3", C: "a2@5 g2 a2@2 c3 ~@2 c3",
  D: "~@4 f4@2 e4@4 c4@8 b3 c4 ~ b3 a3 ~", E: "f3@5 e3 f3@2 a3 ~@2 c4", F: "f3@5 e3 f3@2 a3 ~@2 g3",
  G: "[~@8 c4 d4@2 e4@4 d4@2 c4 d4@2 e4 ~@2 e4@4 d4@2 c4 d4@2 e4 ~@3]/3", H: "c4@9 b3@2 c4", I: "c4@5 b3@6 d4",
  J: "c4@5 b3@6 c4", K: "f3@5 e3 f3@2 a3 ~@2 g4",
})).s("gm_tenor_sax").gain(0.48).pan(0.7)

// other · trumpet · "Bb Trumpet"
const trumpet = note(`<
  ~@8 A B A C A B A C A B A C A B A C D@3 E D@3 F A B A C A B A G ~@16 D@3 E D@3 F A B A C A B A C A B A C A B A H
>`.pickRestart({
  A: "~@4 a4@2 g4@4 e4@8 d4 e4 ~ d4 c4 ~", B: "a3@5 g3 a3@2 c4 ~@2 e4", C: "a3@5 g3 a3@2 c4 ~@2 c4",
  D: "[~@8 e4 g4@2 a4@4 g4@2 e4 g4@2 a4 ~@2 a4@4 g4@2 e4 g4@2 a4 ~@3]/3", E: "e4@9 d4@2 e4", F: "e4@5 d4@6 g4",
  G: "a3@3 a3@2 g3 a3@2 c4 ~@2 c4", H: "a3@5 g3 a3@2 c4 ~@2 c5",
})).s("gm_trumpet").gain(0.22).pan(0.3)

// other · trombone
const trombone = note(`<
  ~@8 A B A C A B A C D E D E D E D E F@3 G F@3 H D E D E D E D E ~@16 F@3 G F@3 H A B A C A B A C D E D E D E D I
>`.pickRestart({
  A: "~@4 a3@2 g3@4 e3@8 d3 e3 ~ d3 c3 ~", B: "a2@5 g2 a2@2 c3 ~@2 e3", C: "a2@5 g2 a2@2 c3 ~@2 c3",
  D: "~@2 c4 b3@2 c4@3 c4 g3@3", E: "c4@5 b3 c4@2 b3 ~@2 g3",
  F: "[~@8 a3 g3@2 a3@4 b3@2 g3 b3@2 c4 ~@2 a3@4 b3@2 g3 b3@2 c4 ~@3]/3", G: "c4@9 b3@2 c4", H: "c4@5 b3@6 d4",
  I: "c4@5 b3 c4@2 b3 ~@2 e4",
})).s("gm_trombone").gain(0.72).pan(0.4)

// chords · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~ A B A C A B D ~ B A B A B A B A B A B A B A B A E B A@2 E 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 A E B
  A@2 E B C ~ B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4]", // C
  B: "~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4] ~@2 [a3,c4,f4]", // F
  C: "~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~@2 [g3,b3,d4]", // G
  D: "~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,c4,e4] ~@2 [g3,b3,d4]", // C G
  E: "~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4] ~@2 [a3,c4,e4]", // Am
})).s("gm_electric_guitar_muted").gain(0.27).pan(0.4)

// chords · piano
const piano = note(`<
  ~ A B A C A B D ~ B A B A B A B A B A B A B A B A E F G H E F I J B A B A B A B K L M N O@2 P Q R S A B A B A B A E F
  G H E F I T B A B A B A B A B A B A B A B
>`.pickRestart({
  A: "~ [c5,e5,g5]!2 ~@2 [c5,e5,g5] ~ [c5,e5,g5]!2 ~@2 [c5,e5,g5]", // C
  B: "~ [c5,f5,a5]!2 ~@2 [c5,f5,a5] ~ [c5,f5,a5]!2 ~@2 [c5,f5,a5]", // F
  C: "~ [b4,d5,g5]!2 ~@2 [b4,d5,g5] ~ [b4,d5,g5]!2 ~@2 [b4,d5,g5]", // G
  D: "~ [c5,e5,g5]!2 ~@2 [c5,e5,g5] ~ [c5,e5,g5]!2 ~@2 [b4,d5,g5]", E: "[a4,c5,e5]", F: "[a4,c5,f5]",
  G: "[g4,e5]@3 d5 ~ d5 ~ d5 ~ d5 ~ d5, c5@2 c5!4", H: "~ d5 ~ d5 ~ d5 ~ d5 ~ d5 ~ d5, c5!6",
  I: "[g4,b4,d5]@22 ~ [f5,g5], ~@11 d5", J: "[b5,d6] ~@23", K: "~ [c5,g5] [c5,c6] [c5,d6]",
  L: "e6 d6 c6 a5 c6@6 d6@2 c6@4 a5@2 e6@4 [g5,e6]@2, f5@6 c5@5 ~", M: "e6@3 e6@2 d6 c6 d6 c6 d6 c6 d6, g5 e5",
  N: "c6 d6 c6 d6 c6 d6 c6 d6 c6 d6 c6 d6, f5 d5",
  O: "[e6@3 d6 c6 d6 c6@2 g5 c6@2 ~@2 c6 a5 c6@2 d6 c6@3 a5@2 a5, e5 c5 f5 c5, ~@11 d6@2 ~@11]/2",
  P: "[e5,g5]@2 [c5,g5] [e5,c6]@2 [f5,d6] [e5,c6]@2 d6 c6 g4 g#4, c4 e4 g4 c4", // Em C5 C Dm C
  Q: "a4 c5 c#5 d5 ~ f#5 g5 g#5 a5 c6 d6 d#6, f5@2 f5 c5@3", R: "e6 d6 ~ c6 a5 ~ c6@4 d6@2 c6@6 b5@6, e5 c5",
  S: "[c5,f5,a5]@5 [c5,f5,a5] ~ [c5,f5,a5]!2 ~@2 [c5,f5,a5]", T: "b5 ~@23",
})).s("gm_piano").gain(0.32).pan(0.7)

// bass · acoustic bass · "Bass Guitar"
const bass = note(`<
  ~ A B C D A B E ~ B A B A B A B F G H I J K L M N O P Q R O P S@2 B C B A B A B T U V W X Y Z AA F U V AB J K AC AD N
  O P Q R O P S@2 B C B A B A B F AE AF AG AH AI AJ AK
>`.pickRestart({
  A: "c2@3 c2@3 c2@3 c2@2 e2", B: "f2@3 f2@3 f2@3 f2@2 f2", C: "c2@3 c2@3 c2@3 c2@2 a1", D: "g1@3 g1@3 g1@3 g1@2 b1",
  E: "c2@3 c2@3 c2@3 c2@2 g1", F: "c2@3 c2@3 d2@3 e2@2 f2", G: "f2@3 g2@3 a2@3 a1@2 b1", H: "c2@2 c2 g1@3 e2@3 d2@2 e2",
  I: "f2@3 c2@3 f2@3 e2@2 d2", J: "c2@3 b1@3 a1@3 g1@2 f#1", K: "f1@3 a1@3 c2@3 e2@2 d2", L: "c2@3 e2@3 g2@3 e2@2 g2",
  M: "f2@3 c2@3 a1@3 f2@2 d2", N: "c2 d2 e2 b1", O: "a1@3 a1@3 a1@2 a1 g1@3", P: "f1@3 f1@3 f1@2 f1 f#1@3",
  Q: "c2 g1 e2 d2", R: "c2!2 e2 g2", S: "[g1@3 g1@3 g1@3 g1@2 g1@2 ~@11]/2", T: "c2!2 d2 e2",
  U: "f2@3 g2@3 a2@3 c3@2 f2", V: "c2@2 c2 g1@3 c2@3 e2@3", W: "f2@3 c2@3 a2@3 f2@2 b1", X: "c2@3 d2@3 e2@3 g2@2 c2",
  Y: "f2@3 g2@3 a2@3 c3@2 e2", Z: "c2@2 c2 b1@3 a1@4 d2 e2", AA: "f2@3 c2@3 a2@3 f2@2 d2", AB: "f2@3 c2@3 c3@3 a2@2 f2",
  AC: "c2@3 e2@3 g1@3 c2@2 e2", AD: "f2@3 e2@3 d2@3 c#2@2 b1", AE: "f2@3 g2@3 a2@3 c3@2 d2",
  AF: "c2@2 c2 g1@3 c2@3 d2@2 e2", AG: "f2@3 c2@3 f2@3 d2@2 b1", AH: "c2@3 g1@3 e2@3 a2@2 g2",
  AI: "f2@3 c2@3 a1@3 b1@2 b1", AJ: "c2@3 e2@3 g2@3 g1@2 e2", AK: "f2@3 e2@3 d2@2 c2 ~@2 c2",
})).s("gm_acoustic_bass").gain(0.41).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~ A@6 B ~ A@22 B ~ A@30 B ~ A@14 C>".pickRestart({
  A: "x!4", B: "x ~@2 x ~@2 x ~@2 x ~ x", C: "x ~@2 x ~@2 x ~ x ~@2 x",
})).gain(0.26).pan(0.7)

// drums · rim
const rim = s("rim").struct("<[x!4] ~@79>").gain(0.26).pan(0.7)

// drums · snare
const snare = s("sd").struct("<A B@6 C ~ B@18 C B@3 C ~ B@26 C B@3 C ~ B@14 D>".pickRestart({
  A: "~@7 x!3 ~ x", B: "~ x ~ x", C: "~@3 x ~@5 x ~ x", D: "~@3 x ~@4 x ~@2 x",
})).gain(0.26).pan(0.7)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!7
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!23
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!31
  ~
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!15
>`).gain(0.26).pan(0.7)

// drums · open hat
const open_hat = s("oh").struct("<~@79 [~@2 x]>").gain(0.44).pan(0.7)

// drums · crash
const crash = s("cr").struct("<~@79 [~@11 x]>").gain(0.44).pan(0.7)

// drums · ride
const ride = s("rd").struct(`<
  ~@24
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]
  ~@16
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!8
  ~@24
  [x ~ x!2 ~ x!2 ~ x!2 ~ x]!6
  ~
>`).gain(0.44).pan(0.7)

// drums · tambourine
const tambourine = s("tb").struct("<~@49 [x!4]!8 ~@23>").gain(0.26).pan(0.7)

stack(
  tenor_sax, trumpet, trombone, electric_guitar_muted, piano, bass, kick, rim, snare, pedal_hat, open_hat, crash, ride,
  tambourine
)

More by Van Morrison