Strudelify

Cast No Shadow

Oasis

KeyG majorTempo85 bpm
0:00/0:00
// Cast No Shadow — Oasis
// 85 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: ch 9 "Rock Drums Set" Harpsi 1 -> harpsichord; ch 11 "Room Drums Set" Elec Org 1 -> drawbar organ
// note: ch 6 "GrandPiano" named as a piano, played on piano (its fretless bass patch is not one)
// note: duplicate parts dropped: ch 5 "Choir" pad choir (copy of ch 4 "String2" string ensemble 2)
// note: Full arrangement: all 90 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(85/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.

// chords · acoustic guitar steel · "SteelGuitar"
const acoustic_guitar_steel = note(`<
  A@2 B@2 C@2 D@2 C@2 E@2 C@2 F@2 G H I H J H K L@2 M N O P M N O P M N O P Q R@2 S@2 E@2 T@2 U@2 C@2 E@2 C@2 F@2 G H I
  H J H K L@2 M N O P M N O P M N O P ~@13
>`.pickRestart({
  A: "[[a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] ~ [a3,d4,e4] ~@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 a2@2, a2@4 ~@3 a2@6 ~ a2@7 ~@11]/2", // Asus4
  B: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] ~@2 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 g2@2, g2@4 ~@5 g2@3 ~@2 g2@7 ~@11]/2", // G
  C: "[[a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 a2@2, a2@4 ~@10 a2@7 ~@11]/2", // Asus4
  D: "[[g3,b3,d4]@3 ~ [g3,b3,d4,e4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g2,g3,b3,d4] ~ [g3,b3,d4] g2@2 [g3,b3,d4]@2 g2@2, g2@4 ~@10 g2@7 ~@11]/2", // G Em7 G
  E: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 g2@2, g2@4 ~@10 g2@7 ~@11]/2", // G
  F: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 g2 ~, g2@4 ~@10 g2@7 ~@11]/2", // G
  G: "e3 ~ e3@2 [e4,g4,b4,d5]@2 e3 [e4,g4,b4] d3 [g4,a4] d3@2 [d4,g4,a4]@2 d3 [d4,g4,a4]", // Em7 Em Gsus2 Dsus4
  H: "c3 ~ c3@2 [c4,e4,g4]@2 c3 [c4,e4,g4] g3 ~ g3@2 [g4,b4,d5]@2 g3 [g4,b4,d5]", // C G
  I: "e3 ~ e3@2 [e4,g4,b4,d5]@2 e3 [e4,g4,b4,d5] d3 ~ d3@2 [d4,g4,a4]@2 d3 [d4,g4,a4], ~@10 c3 ~@5", // Em7 Dsus4
  J: "e3 ~ e3@2 [e4,g4,b4,d5]@2 e3 [e4,g4,b4,d5] d3 ~ d3@2 [d4,g4,a4]@2 d3 [d4,g4,a4]", // Em7 Dsus4
  K: "e3 ~ e3@2 [e4,g4,g#4,b4,d5]@2 e3 [e4,g4,b4] d3 ~ d3@2 [d4,g4,a4]@2 d3 ~", // E7 Em Dsus4
  L: "[c3 ~ c3@2 [c4,e4,g4]@2 c3 [c4,e4,g4] c3 [c4,e4,g4] c3@2 ~@2 c3@18, ~@3 [c4,e4,g4]@5]/2", // C
  M: "[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 g2@2, g2 ~@3", // G
  N: "[a3,d4,e4]@3 ~ [a3,d4,e4]@2 ~ [a3,d4,e4] ~ [a3,d4,e4] a2@2 [a3,d4,e4]@2 a2@2, a2@4 ~@2 a2@3 ~@7", // Asus4
  O: "[c3,c4,e4,g4]@3 ~ [c4,e4,g4]@2 ~ [c4,e4,g4] ~ [c4,e4,g4] c3@2 [c4,e4,g4]@2 c3@2, ~@3 c3@2 ~@3", // C
  P: "[e4,g4,b4,d5]@3 ~ [e4,g4,b4,d5]@2 e3 [d3,d4,g4] ~ [d4,g4,a4] d3@2 [d4,g4,a4]@2 d3@2, e3 ~@3", // Em7 G5 Dsus4
  Q: "[e3,e4,g4,b4,d5]@6 ~@2 [d3,d4]@7 ~, ~@8 [g4,a4]@5 ~@3", R: "[c3,c4,e4,g4]/2",
  S: "[[a2,a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 a2@2, ~@14 a2@7 ~@11]/2", // Asus4
  T: "[[a3,d4,e4]@3 ~ [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 ~@2 [a3,d4,e4]@2 a2 [a3,d4,e4] a2 [a3,d4,e4] a2@2 [a3,d4,e4]@2 a2@2, a2@4 ~@10 a2@7 ~@11]/2", // Asus4
  U: "[[g3,b3,d4]@3 ~ [g3,b3,d4]@2 g2 [g3,b3,d4] g2 [g3,b3,d4] g2@2 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 ~ [g3,b3,d4]@2 ~ [g3,b3,d4] ~ [g3,b3,d4] g2@2 [g3,b3,d4]@2 g2 ~, g2@4 ~@10 g2@7 ~ g2@4 ~@6]/2", // G
})).s("gm_acoustic_guitar_steel").gain(0.43)

// bass · electric bass finger · "FingerBass"
const bass = note(`<
  A@2 B C D@2 B E F G H I F G J@2 K L K L K L K M@2 C N O P C N O P C N O P Q R@2 ~@8 F G H I F G J@2 K L K L K L K M@2
  C N O P C N O P C N O P S T U S T U S T U V T W ~
>`.pickRestart({
  A: "[~@7 a1@17 ~ a1 ~@2 a1 ~ a1@2]/2", B: "g1@13 ~ g1 ~", C: "g1@13 ~ g1@2", D: "a1@13 ~ a1 ~", E: "g1@7 ~",
  F: "a1 ~ a1@13 ~", G: "a1 ~ a1@12 ~@2", H: "g1 ~ g1@13 ~", I: "g1 ~ g1@12 ~@2", J: "[g1 ~ g1@29 ~]/2", K: "e1 d1",
  L: "c1 g1", M: "c1/2", N: "a1", O: "c2", P: "e2@3 e2 d2@4", Q: "e2 ~ e2 ~ e2 ~ e2@2 d2 ~ d2 ~ d2 ~ d2@2",
  R: "[c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2 ~ c2@20]/2", S: "e1 ~ e1 ~ e1 ~ e1 ~ d1 ~ d1 ~ d1 ~ d1@2",
  T: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~", U: "c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1 ~ c1@2",
  V: "e1 ~ e1 ~ e1 ~ e1@2 d1 ~ d1 ~ d1 ~ d1@2", W: "c1@13 ~@3",
})).s("gm_electric_bass_finger").gain(0.3)

// other · acoustic guitar nylon · "NaylonGuitar"
const acoustic_guitar_nylon = note(`<
  ~ A B C ~ C D E ~ F@2 ~@2 F@2 ~@13 G@2 ~@2 G@2 ~@2 G@2 ~@11 F@2 ~@2 F@2 ~@13 G@2 ~@2 G@2 ~@2 G@2 ~@12
>`.pickRestart({
  A: "~@3 a3", B: "e4", C: "~@12 e4@3 ~", D: "e4@5 ~@3", E: "~@4 g4@3 ~", F: "[~@14 e4@7 ~@11]/2",
  G: "[e5@2 d5@2 a4@2 g4@15 ~@11]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.31)

// chords · string ensemble 2 · "String2"
const string_ensemble_2 = note(`<
  ~@4 A@2 B@2 C@2 D@2 C@2 D@2 E F E F E F E G@2 H I J K H I J K H I J K L M@2 C@2 D@2 C@2 D@2 C@2 D@2 C@2 D@2 E F E F E
  F E G@2 H I J K H I J K H I J K L M@2 L M@2 L M@2 L M@2 ~
>`.pickRestart({
  A: "[[a4,e5]@29 ~@3]/2", B: "[[g4,d5]@15 ~]/2", C: "[[a4,e5]@31 ~]/2", D: "[[g4,d5]@31 ~]/2",
  E: "[e4,g4,b4,d5]@3 ~ [d4,g4,a4]@3 ~", F: "[c4,e4,g4]@3 ~ [g4,b4,d5]@3 ~", G: "[c4,e4,g4]/2", H: "[g4,b4,d5]@7 ~, g3",
  I: "[a3,d5], [a4,e5]@7 ~", J: "[c5,e5,g5]@7 ~, c4", K: "[e5,g5,b5,d6]@6 ~@2 [d4,d5,g5,a5]@7 ~, e4 ~",
  L: "[g5,b5,d6]@3 ~ [d5,g5,a5]@3 ~, [e4,e5] d4", M: "[c4,c5,e5,g5]/2",
})).s("gm_string_ensemble_2").gain(0.25)

// bass · piano · "GrandPiano"
const bass_2 = note("<~@40 A B C D E F C G ~@29 H I J K I J H I J K I J ~>".pickRestart({
  A: "a1 ~ a1 ~ a1 ~@2 a1!4 ~ a1 ~@2 a1", B: "a1!3 ~ a1 ~@2 a1!4 ~ a1 ~ a1!2", C: "g1 ~ g1 ~ g1 ~@2 g1!4 ~ g1 ~@2 g1",
  D: "g1!3 ~ g1 ~@2 g1!4 ~ g1 ~ g1!2", E: "a1 ~ a1 ~ a1 ~@2 a1!4 ~ a1@2 ~ a1", F: "a1!3 ~ a1@2 ~ a1!4 ~ a1 ~ a1!2",
  G: "g1!3 ~ g1 ~@2 g1!4 ~ g1 ~@3", H: "[e1,f1] ~ e1 ~ e1 ~ e1!2 d1!3 ~ d1 ~ d1!2",
  I: "c1 ~ c1 ~ c1 ~ c1!5 ~ c1 ~ c1!2", J: "c1 ~ c1 ~ c1 ~ c1!7 ~ c1!2", K: "e1 ~ e1 ~ e1 ~ e1!2 d1 ~ d1 ~ d1 ~ d1!2",
})).s("gm_piano").gain(0.25)

// chords · harpsichord · "Piano(Vocles)"
const harpsichord = note("<~@28 A ~@3 B ~@3 C ~@5 D ~@3 E ~@43>".pickRestart({
  A: "[d3,d4,d5]@3 ~", B: "[d3,d4,d5]@9 ~@7", C: "[d3,d4,d5]@6 [d3,d5] ~@9, c5 ~@15", D: "[a2,d3,d4,d5]@7 ~",
  E: "[a2,d3,d4,d5]@13 ~@3", // D5
})).s("gm_harpsichord").gain(0.64)

// other · harpsichord · "Rock Drums Set"
const harpsichord_2 = note("<~@2 A B C D@10 E F@6 ~@2 C D@12 ~@2 C G@8 D@7 E F@6 ~@2 C D@24 ~>".pickRestart({
  A: "f#3@9 ~@7", B: "f#3 ~", C: "f#3 ~ f#3!3 ~ f#3!5 ~ f#3 ~ f#3!2", D: "f#3 ~ f#3!3 ~ f#3!7 ~ f#3!2",
  E: "[f#3,g3] ~ [f#3,g3] f#3 [f#3,g3] ~ [f#3,g3] f#3 [f#3,g3] f#3 [f#3,g3] f#3 [f#3,g3] ~ [c#3,b3] ~", // Gmaj7 C#7
  F: "f#3 ~ f#3!5 ~ f#3 ~ f#3!5 ~", G: "f#3 ~ f#3!3 ~ f#3!3 ~ f#3!3 ~ f#3!2",
})).s("gm_harpsichord").gain(0.15)

// other · drawbar organ · "Room Drums Set"
const drawbar_organ = note(`<
  ~@3 A ~@11 A ~@6 B C D ~@12 B C E ~@15 A ~@6 B C D ~@12 F G H I@2 J I@2 J I H K@2
>`.pickRestart({
  A: "~@10 e2 ~@5", B: "b3 ~@2 b3 c#1@2 ~@2 b3 ~ b3!2 c#1@2 b3!2, ~@4 b3 ~@7 b3 ~@3",
  C: "b3 ~ b3!2 [c#1,b3] ~ b3!3 ~ b3!3 ~ b3!2", D: "g3 ~@3 g3 ~@3 g3 ~ e2 ~ [c#3,a3] ~@3",
  E: "g3 ~@3 g3 ~@3 g3 ~@3 [c#3,a3] ~@3", F: "~ c#3 ~ c#3", G: "~@2 c#3@2 ~@2 c#3 ~", H: "~@4 c#3@3 ~@5 c#3@2 ~@2",
  I: "~@2 c#3 ~@3 c#3 ~", J: "~@4 c#3@2 ~@6 c#3 ~@3", K: "[~@2 c#3 ~@3 c#3@3 ~@7]/2",
})).s("gm_drawbar_organ").gain(0.48)

// other · drawbar organ · "Room Drums Set" · soft notes
const drawbar_organ_soft = note(`<
  ~@22
  [~@2 b3 ~@3 b3!2 ~@8]
  ~@14
  [~@2 b3 ~@3 b3!2 ~@8]
  ~@24
  [~@2 b3 ~@3 b3!2 ~@8]
  ~@27
>`).s("gm_drawbar_organ").gain(0.24)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@40 [~@5 x ~@2] [x!2 ~@3 x ~@2] ~@4 [x!2 ~@3 x ~@2] [~ x] ~@42>").gain(0.12)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B@2 C B@8 A B@2 C B@3 ~@2 A B@2 C B@9 ~@2 A D E F E G@2 H I B@7 A B@2 C B@3 ~@2 A B@2 C B@11 C B@9 ~
>`.pickRestart({
  A: "x", B: "~@4 x ~@2 x ~ x ~@2 x ~@3", C: "~@4 x ~@2 x ~@4 x ~@3", D: "~@4 x ~@4 x ~@6", E: "~@3 x",
  F: "~@4 x ~@4 x ~@2 x ~@2 x", G: "~ x ~ x", H: "~ x ~@2", I: "x!3 ~ x ~ x ~@5 x ~@3",
})).gain(0.24)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@6 A ~@11 A ~@8 A ~@12 B C D C E F G H ~@10 A ~@8 A ~@11 A ~@10>".pickRestart({
  A: "~@9 x ~@6", B: "~@7 x ~@4 x ~@2 x", C: "~ x ~@2 x ~@2 x ~ x ~@6", D: "~@7 x ~@8", E: "~@7 x ~ x ~@5 x",
  F: "~ x ~@5 x ~ x ~@6", G: "~@7 x ~ x ~@2 x ~@2 x", H: "~@7 x ~ x ~@6",
})).gain(0.12)

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

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@11 A ~@8 A ~@14 A ~@15 A ~@8 A ~@25>".pickRestart({
  A: "~@13 x!2 ~",
})).gain(0.31)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@11 A ~@8 A ~@14 A ~@7 B ~@7 A ~@8 A ~@25>".pickRestart({
  A: "~@4 x ~@2 x ~@2 x ~ x ~@3", B: "~@10 x!3 ~ x ~",
})).gain(0.31)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@4 A ~ A B ~@2 A ~ A ~@3 A ~ A B ~@5 A ~ A B ~@2 A ~ A ~ A ~@14 A ~ A ~@3 A ~ A B ~@5 A ~ A B ~@2 A ~ A ~ A ~ A ~ A B
  ~@2 A ~ A ~@4
>`.pickRestart({
  A: "x", B: "~@7 x",
})).gain(0.28)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@11 A ~@8 A ~@14 A ~@7 B ~@7 A ~@8 A ~@25>".pickRestart({
  A: "~ x", B: "~@7 x ~ x ~@3 x ~@2",
})).gain(0.31)

// drums · crash
const crash = s("cr").struct("<~@48 x ~@41>").gain(0.28)

// drums · ride
const ride = s("rd").struct(`<
  ~@22
  [~@2 x!3 ~ x ~ x ~@2 x!2 ~@2 x]
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]
  ~@38
  [~@2 x!3 ~ x ~ x ~@2 x!2 ~@2 x]
  [x ~ x!3 ~ x!3 ~ x!3 ~ x!2]
  ~@26
>`).gain(0.08)

// drums · ride · soft notes
const ride_soft = s("rd").struct("<~@22 [~@7 x ~@2 x ~@3 x ~] ~@39 [~@7 x ~@2 x ~@3 x ~] ~@27>").gain(0.04)

stack(
  acoustic_guitar_steel, bass, acoustic_guitar_nylon, string_ensemble_2, bass_2, harpsichord, harpsichord_2,
  drawbar_organ, drawbar_organ_soft, kick, kick_soft, snare, snare_soft, hihat, low_tom, mid_tom, open_hat, high_tom,
  crash, ride, ride_soft
)

More by Oasis