Strudelify
Don't Look Back in Anger cover art

1995 · (What's the Story) Morning Glory?

Don't Look Back in Anger

Oasis

KeyC majorTempo84 bpm
0:00/0:00
// Don't Look Back in Anger — Oasis
// 84 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 98 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
// note: Guitar parts that double another keep only their own notes (fills, solos): OVERDRGITR, STEELSTRGT.
setcpm(84/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 · piano
const piano = note("<A@4 ~@94>".pickRestart({
  A: "[f4 ~@61 c4@2, [e4,g4,c5]!4 [f4,a4,c5]!4 [e4,g4,c5]!4 [f4,a4,c5]!4, ~ c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 c4@2 ~]/4", // C F C F
})).s("gm_piano").gain(0.25)

// chords · acoustic guitar steel · "STEELSTRGT"
const acoustic_guitar_steel = note(`<
  ~ A ~ B C D E F C D G H I J I J I J K L M N O P C D E F C D E C D E F C D E F C D E F I J I J I J K L M N O P C D E F
  C D E F I J I J I J K L M N O Q C D E F C D E F C D E F R S T U@2 C D V@4
>`.pickRestart({
  A: "~@8 c3@2 e3 f3 g3@2 c4@2", B: "~@3 g3 [a3,c4]@2 [g3,c4]@3 d3!2 e3 d3@2 g3@2, ~ c3 ~@6",
  C: "[c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!2 [g2,d3,g3,b3,g4]@2 [g2,d3,g3,b3,g4]!2", // C G
  D: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2 [e2,b2,e3,g#3,b3,e4]@2 [e2,b2,e3,g#3,b3,e4]!2", // Am E
  E: "[f2,c3,f3,a3,c4]@2 [f2,c3,f3,a3,c4]!2 [g2,d3,g3,b3,d4]!4", // F G
  F: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 [a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2 [g2,d3,g3,b3,g4]@2 [g2,d3,g3,b3,g4]@2", // C Am G
  G: "[f2,c3,f3,a3,c4]@2 [f2,c3,f3,a3,c4,e4]!2 [g2,d3,g3,b3,d4] [g2,d3,g3,b3,d4,e4]!3", // F Fmaj7 G Em7
  H: "[c3,e3,g3,c4,e4]@4 [c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]@2 [a2,c3,e3,a3,c4,e4]@2 [a2,c3,e3,a3,c4,e4]!2 [g2,d3,g3,b3,g4]@2 [g2,d3,g3,b3,g4]@2", // C Am G
  I: "[f2,c3,f3,a3,c4]@2 [f2,c3,f3,a3,c4]!2 [f2,c3,f3,g#3,c4,f4]@2 [f2,c3,f3,g#3,c4,f4]!2", // F Fm
  J: "[c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!6", // C
  K: "[g2,d3,g3,b3,g4]@4 [g2,b2,d3,g3,b3,g4]@3 [g2,b2,d3,g3,b3,g4] [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]@2", // G
  L: "[d3,g#3,b3,f4]@4 [d3,g#3,b3,f4]@3 [d3,g#3,b3,f4] [d3,g#3,b3,f4]@2 [d3,g#3,b3,f4]@2 [d3,g#3,b3,f4]@2 [d3,g#3,b3,f4]@2", // Ddim
  M: "[a2,e3,a3,c4,e4]@2 [a2,e3,a3,c4,e4]!2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]!2", // Am G
  N: "[f2,c3,f3,a3,c4]!2 [f2,c3,f3,a3,c4]@2 [f2,c3,f3,a3,c4]@2 [f2,c3,f3,a3,c4]@2", // F
  O: "[g2,d3,g3,b3,g4]!2 [g2,d3,g3,b3,g4]@2 [g2,d3,g3,b3,g4]!4", // G
  P: "[g2,d3,g3,b3,g4]@2 [g2,d3,g3,b3,g4]@2 [g2,d3,g3,b3,g4]!4", Q: "[g2,b2,g3,d4,g4] ~@15",
  R: "[c3,e3,g3,c4,e4]@2 [c3,e3,g3,c4,e4]!2 [g2,b2,d3,g3,b3,g4]@2 [g2,b2,d3,g3,b3,g4]!2", S: "[a2,e3,a3,c4,e4]",
  T: "[f3,a3,c4,g4]", U: "[[c4,d#4,g#4] ~, [f3,c5]]/2",
  V: "[[f2,c3,f3,a3,c4]@4 [f2,c3,f3,a3,c4]@2 ~ [f2,c3,f3,a3,c4]@2 [f2,c3,f3,g#3,c4]@6 [f2,c3,f3,g#3,c4]@7 [c3,e3,g3,c4]@35 ~@7]/4", // F Fm C
})).s("gm_acoustic_guitar_steel").gain(0.25).pan(0.3)

// other · overdriven guitar · "OVERDRGITR"
const overdriven_guitar = note(`<
  ~@13 A B C B D E F G H I J K ~@7 L M N K ~ O P K Q R@2 ~ S T U V W E F G H X Y K ~@6 Z AA@2 AB@2 AC AD AE AF AG AH AI
  AJ ~@6 AK AL AM@3 AN AO AP ~@9
>`.pickRestart({
  A: "~ g3 [a3,c4,e4,f4]@2 [g3,c4,e4]@2 ~ d3 e3@2 a3@2 e3 d3 c3!2", B: "c3@3 ~@5",
  C: "~@7 g3 [a3,c4]@2 [g3,c4]@2 e3@2 [d3,g3]@2", D: "~@7 c4 d#4 ~ [g4,c5]@4 g3@2, ~@9 e4@5 ~@2",
  E: "g2@4 g2@3 g2 g2@2 g2@2 g2@2 g2@2", F: "g#2@6 g#2!2 g#2@2 g#2@4 g#2@2", G: "[a2,e3,a3] [g2,d3,g3]",
  H: "f2 e2 f2 e2 f2 e2 f2 e2", I: "g2!7 a2", J: "[a3,c4]@2 [g3,c4]@4 d4@3 d#4 e4@2 d4 c4 d4 ~", K: "c4",
  L: "~@8 g3 a3 c4 d4 d4@2 c4 a3", M: "c4@7 d4 ~@6 d4@2, ~@4 e4@3 ~, ~@3 g4", N: "c4@8 g3@2 c4 d4 g3@2 c4 d4",
  O: "~ g3 [a3,c4]@2 [g3,c4]@3 d3!2 e3 g3@2 [g3,a3]@2 c4 d4", P: "c4@8 d4@2 d4 c4 c4@2 d4 ~",
  Q: "d3 e3 g3 a3 c4 d4 c4@2 d4@2 d4@2 c4@2 d4@2", R: "[c4@8 ~@2 g3 a3 c4@2 d4 c4@16 ~]/2",
  S: "~@7 g3 [a3,c4]@2 ~ d3 e3@2 g3@2, ~@5 [g3,c4] ~@2", T: "c3 ~", U: "~@8 e4@4 d4 c4 a3@2", V: "c4 ~",
  W: "~@8 d#4 ~ [g4,c5]@4 ~@2, ~@9 e4@5 ~@2", X: "g2@2 g2@2 g2@2 g2@2 g3@2 g3 a3 c4@2 d4!2",
  Y: "d4@2 c4 a3 c4@2 d4 d4@4 c4 d4 c4 d4@2", Z: "~@15 c4",
  AA: "[d4@4 d4@4 d4@4 c4@2 g3@4 g3 a3 c4 g3 a3 c4 e4 g4 c4 g3 c4@2 d4 c4]/2",
  AB: "[d4@4 d4@4 d4@4 c4@2 g3@4 [g3,a3,c4]@2 [a3,c4]@3 d3 e3 g3 e3 d3 c3@3 b2, ~@20 g3 ~@11]/2", // Am7 Am
  AC: "g2 a2 c3 d3 e3 g3 a3 c4@2 c4 d4@3 c4 a3 c4", AD: "[d4,e4]@2 g4@2 g4@2 a4 c5@2 c5!2 d5 c5@2 ~@2",
  AE: "g4 a4 c5 g4 a4 c5 g4 a4 c5 g4 a4 c5 g4 a4 c5@2", AF: "c5 d5 c5 g4 a4 c5 g4 a4 c5 g4 a4 c5 [g4,c5]@2 e4!2",
  AG: "e4@2 e4@2 e4@2 e4@2 e4@2 e4!2 e4@2 e4!2", AH: "d4@2 c4 d4 c4@2 c4 e4@2 a4 d4@2 d4 e4 d4 e4",
  AI: "e5!3 d5 e5!2 d5 e5@2 d5 e5!6", AJ: "b4 ~@15", AK: "~@7 d4 [e4,g4]@3 d4 d4@2 d4 ~",
  AL: "c4@2 d4@2 e4@4 d4 c4 a3@2 c4@2 c4 d4",
  AM: "[c4@6 c4!2 c4@2 d4@2 e4@2 g4@8 c4!2 c4@2 d4@2 e4@2 g4@6 e4@2 e4!2 d4@2 c4 ~ d4@2 c4@2]/3",
  AN: "e4@2 f4@2 e4@2 [c4,g4]@3 e4@2 c4 f4@2 e4@2", AO: "f4 e4 ~ e4@3 e4 g4, ~ c4@2 ~", AP: "e4",
})).s("gm_overdriven_guitar").gain(0.44).pan(0.6)

// chords · acoustic guitar steel · "STEELSTRGT"
const acoustic_guitar_steel_2 = note(`<
  ~@19 A ~ B C D ~@16 E@2 ~@8 A ~ B C D ~@15 A ~ B F ~@18 G H I@2 ~@2
>`.pickRestart({
  A: "~@6 g#2 ~@9", B: "~ e2 ~ e2 ~ e2 ~ e2", C: "~@3 g2 ~@3 a2", D: "~@2 g2 g2@2 ~ g2!2 ~@8", E: "~ e5@3 ~@4",
  F: "~@3 g2 ~@4", G: "~@2 d3 e3 ~ a3 ~ d4 ~@2 c4 a3 c4@2 ~ c4", H: "d4@6 ~@4 c4 d4 c4@4",
  I: "[~@2 g3@5 ~ d3!2 e3 ~ g3@6 d3@4 ~@10, ~@18 e3 ~@13]/2",
})).s("gm_acoustic_guitar_steel").gain(0.64).pan(0.6)

// other · cello
const cello = note("<~@12 A B A C A D ~@25 A E A C F G ~@49>".pickRestart({
  A: "c4@7 c4 d4@7 d4", B: "g4 ~@7", C: "g4@3 ~@5", D: "g4@7 ~@9", E: "g4 ~", F: "c5@7 c5 d5@7 d5", G: "g5@7 ~@9",
})).s("gm_cello").gain(0.19)

// bass · electric bass finger · "FINGERBAS"
const bass = note(`<
  ~@4 A B C D A B C E F G F G F G H I J K L M A B C D A B C N B C E A B C D A B C E F G F G F G H I J K L M A B C D A B
  C E F G F G F G H I J K L O A B C D A B C D A B C D A P Q R@2 ~@3 S@3
>`.pickRestart({
  A: "c2@4 c2@2 b1@2 g1@2 g1@2 g1@2 g1 g#1", B: "a1@4 a1@2 g1@2 e1@2 e1@2 e1@2 e1!2", C: "f1!3 f#1 g1!3 b1",
  D: "c2@2 c2!2 a1!2 g1 b1", E: "c2@2 c2!2 a1!2 g1!2", F: "f1@2 f1@2 f1@2 f1!4 f1@2 f1@2 g1 a1",
  G: "c2@2 c2@2 c2@2 c2 a1 c2 a1 g1 c2@2 b1 c2 b1", H: "g1@4 g1@3 g1 g1@2 g1@2 g1@2 g1!2",
  I: "g#1@2 g#1@2 g#1@2 g#1!2 g#1@2 g#1!2 g#1@2 g#1@2", J: "a1@2 a1@2 a1@2 a1!2 g1@2 g1@2 g1@2 g1@2",
  K: "f1 e1 f1 e1 f1 e1 f1 f#1", L: "g1 f#1 g1 f#1 g1 f#1 g1 f#1", M: "g1@2 f#1@2 g1@2 f#1@2 g1@2 f#1@2 g1@2 a1 b1",
  N: "c2@2 c2 b1 g1!3 g#1", O: "g1 ~@7", P: "a1", Q: "f1", R: "[f1@3 ~]/2", S: "[~@6 c2@35 ~@7]/3",
})).s("gm_electric_bass_finger").gain(0.4).pan(0.7)

// drums · kick
const kick = s("bd").struct(`<
  ~@4 A@8 B@4 C B D E A B@2 F A@3 F A@6 G A@8 B@6 H I A B@2 J A K A F K A K F B@3 L B L M N A B@2 O B A P F A K A F A@2
  K F Q G ~@5 G ~@3
>`.pickRestart({
  A: "x ~@3 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2", C: "x ~ x!2 ~@4 x ~ x ~@5", D: "x ~@6 x ~@2 x ~@5",
  E: "x ~ x ~@4 x ~@2 x ~@5", F: "x!2 ~@2 x ~@3", G: "x", H: "x ~@7 x ~ x ~@4 x", I: "~@2 x ~@4 x ~@2 x ~@5",
  J: "x ~ x!2 ~@4 x ~@7", K: "x ~@7 x ~ x!2 ~@4", L: "x ~ x ~@5 x ~ x!2 ~@4", M: "x ~@6 x ~@2 x ~@4 x",
  N: "~@2 x!2 ~@3 x ~@2 x ~@5", O: "x ~@14 x", P: "x ~ x ~ x!2 ~@2", Q: "x ~ x ~ x ~@2 x!2 ~ x ~ x ~ x ~",
})).gain(0.24)

// drums · snare
const snare = s("sd").struct(`<
  ~@3 A B C D E B C D F G H G H G I J K B L C F C@3 M C@6 N B C D E B C D F G H G H G I J K B L C F C@3 M C@3 O G H G H
  G I J K B L C P C@3 Q C@3 M C@3 Q C ~@5 R ~@4
>`.pickRestart({
  A: "~@7 x ~@2 x ~ x ~@3", B: "~@4 x ~@2 x ~@4 x ~@2 x", C: "~@4 x ~@2 x ~ x ~@2 x ~@2 x",
  D: "~ x ~@2 x ~@2 x ~ x ~@2 x ~@2 x", E: "~ x ~@2 x ~@2 x ~ x ~@2 x!2 ~ x", F: "~ x ~@2 x ~@2 x ~@2 x ~ x ~@3",
  G: "~ x ~ x", H: "~@4 x ~@7 x ~@2 x", I: "~@4 x ~@7 x!2 ~ x", J: "~ x!3", K: "x ~@3 x ~@3 x ~@3 x ~@2 x",
  L: "~ x ~@2 x ~@2 x ~@4 x ~@2 x", M: "~ x ~@2 x ~@2 x ~ x!2 ~@5", N: "~@2 x ~ x ~@2 x ~@2 x ~@5",
  O: "~ x ~@2 x ~@2 x ~ x!2 ~@2 x!3", P: "~@4 x ~@2 x!4 ~@5", Q: "~ x ~@2 x ~@2 x ~ x!3 ~@4", R: "~@5 x ~@2",
})).gain(0.24)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@3 A ~@7 B C@6 ~@5 B ~@3 D ~@6 E ~@7 B C@6 ~@5 B ~@3 D ~@3 F C@6 ~@5 G ~@7 H ~@10 A ~@4
>`.pickRestart({
  A: "~@7 x", B: "~@5 x ~ x", C: "x!8", D: "~@12 x!4", E: "~@2 x ~@10 x!3", F: "~@3 x", G: "~@2 x ~@2 x ~@2 x ~@4 x!3",
  H: "~@15 x",
})).gain(0.24)

// drums · hihat
const hihat = s("hh").struct("<~@4 A B@6 C ~@23 A B@4 D@2 C ~@55>".pickRestart({
  A: "~ x!7", B: "x!8", C: "x!3 ~@5", D: "~@2 x!6",
})).gain(0.24)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@3 A ~@7 B C@5 D ~@5 E ~@3 F ~@6 G ~@7 H C@6 ~@5 E ~@3 F ~@3 F C@6 ~@5 I ~@3 J ~@3 K ~@3 J ~@6 B ~@4
>`.pickRestart({
  A: "~@8 x ~@4 x ~@2", B: "~@12 x!2 ~@2", C: "~@7 x ~ x ~@6", D: "~@7 x ~ x!3 ~@4", E: "~@13 x ~ x", F: "~@11 x ~@3 x",
  G: "~@5 x ~@2 x ~@3 x ~@2 x", H: "~@12 x!2 ~ x", I: "~@10 x!3 ~@3", J: "~@12 x!4", K: "~@11 x!4 ~",
})).gain(0.24)

// drums · open hat
const open_hat = s("oh").struct("<~@11 [~@3 x!2 ~@3] ~@28 [x!2 ~@6]!2 [~@3 x!2 ~@3] ~@55>").gain(0.24)

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

// drums · ride
const ride = s("rd").struct(`<
  ~@18 A B A B C D A B@2 D A B@5 E ~@14 A B A B C D A B@2 D A B@2 D ~@6 A B A B C ~ A B@2 D A B@2 D A B@2 D A ~@10
>`.pickRestart({
  A: "~ x!7", B: "x!8", C: "~@2 x!6", D: "x!5 ~@3", E: "x",
})).gain(0.24)

// drums · tambourine
const tambourine = s("tb").struct("<~@24 A@11 ~@16 A@12 ~@6 A@5 B A@13 ~@3 A@3 ~@4>".pickRestart({
  A: "x!16", B: "x",
})).gain(0.24)

// drums · shaker
const shaker = s("sh").struct("<~@63 [x ~ x!3 ~ x!3 ~ x!6]!11 ~@24>").gain(0.24)

stack(
  piano, acoustic_guitar_steel, overdriven_guitar, acoustic_guitar_steel_2, cello, bass, kick, snare, low_tom, hihat,
  mid_tom, open_hat, crash, ride, tambourine, shaker
)

More by Oasis