Strudelify

Bitter Sweet Symphonie

The Verve

KeyA majorTempo85 bpm
0:00/0:00
// Bitter Sweet Symphonie — The Verve
// 85 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 acoustic bass (copy of ch 1 fretless bass); ch 8 tremolo strings (copy of ch 6 string ensemble 1)
// 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(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.

// bass · fretless bass
const bass = note(`<
  ~@6 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 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 B A B A B A B A B A B A B A B A B A B ~@5
>`.pickRestart({
  A: "e2@8 b1@7 ~", B: "a1@5 ~ a1!2 a1@5 ~ a1 ~",
})).s("gm_fretless_bass").gain(0.72).pan(0.3)

// other · tremolo strings
const tremolo_strings = note(`<
  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 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 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 C
>`.pickRestart({
  A: "e4 d4", B: "e4", C: "e4@15 ~",
})).s("gm_tremolo_strings").gain(0.48)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B A B A C D@20 A B A B A B A B A B A B A B A B D@12 A B A B A B A B A B A B A B A B D@4 A B A B A B A B D@4 E F G H
  I
>`.pickRestart({
  A: "e3 b2", B: "d3 a2", C: "d3@8 ~ b4 c#5 d#5 e5 f#5 g#5 a5, ~ a2", D: "[e3 b2 d3 a2 e3 b2 d3 a2, b5]/4",
  E: "e3@8 [c#5,c#6] [d5,d6] [c#5,c#6] ~@3 [b4,b5] [c#5,c#6], ~ b2", // C# D C# B C#
  F: "[b4,b5]@4 [f#4,f#5] [g#4,g#5] ~@4 [f#4,f#5] [g#4,g#5] [a4,a5]@4, d3 a2, ~@3 [a4,a5]@2 ~@3", // B F# G# F# G# A
  G: "[g#4,g#5] [a4,a5] [g#4,g#5] [e4,e5] [d4,d5] ~@5 [d4,d5] [c#4,c#5] [d4,d5]@3 ~, e3 b2", // G# A G# E D C# D
  H: "[d4,d5] [c#4,c#5] [d4,d5] [c#4,c#5] [b3,b4] [a3,a4] [b3,b4] [a3,a4], d3 a2", // D C# D C# B A B A
  I: "~ [g#3,g#4] [g#3,g#4]@13 ~, [e2,e3]@15 ~", // G# E
})).s("gm_string_ensemble_1").gain(0.48).pan(0.2)

// other · string ensemble 1
const string_ensemble_1_2 = note(`<
  A B A B A B A B A B ~@16 A B A B A B A B A B A B ~@16 A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B C
>`.pickRestart({
  A: "~@2 g#5 ~ b5 ~ g#5 ~ a5 ~ f#5 ~ a5@4", B: "d6 ~ a5 ~ d6@4 c#6 ~ a5 ~ c#6@4", C: "b5@15 ~",
})).s("gm_string_ensemble_1").gain(0.64).pan(0.2)

// chords · distortion guitar
const distortion_guitar = note("<~@34 A@5 ~@23 B@5 ~@15 B@5 ~@4>".pickRestart({
  A: "[~@2 e5@5 ~ e5!8 e5!5 e5@2 e5!9 e5!4 d5@3 d5!9 d5!6 ~ d5!2 ~ d5!6 d5 [g4,d5] [e4,f4,f#4,g#4,a#4,b4,d5] [d4,d#4,f#4,g4,a4] [c4,c#4,e4,f4] [a#3,b3,d4,d#4] [g#3,a3,c4,c#4] g3 ~@8, ~@2 b4@34 f#5@31 ~@13, ~@36 e5 ~@43]/5", // G5 E7 D C#maj7 D#maj7 C#maj7
  B: "[~ e5@5 ~ e5!9 e5!4 e5@2 e5!10 e5!3 d5@3 d5!10 d5!5 ~ d5!2 ~ d5!7 [g4,d5] [e4,f4,f#4,g#4,a#4,b4,d5] [d4,d#4,f#4,g4,a4] [c4,c#4,e4,f4] [a#3,b3,d4,d#4] [g#3,a3,c4,c#4] g3 ~@9, ~ b4@34 f#5@31 ~@14, ~@35 e5 ~@44]/5", // G5 E7 D C#maj7 D#maj7 C#maj7
})).s("gm_distortion_guitar").gain(0.48)

// other · string ensemble 2
const string_ensemble_2 = note("<A@90 B>".pickRestart({
  A: "[g#4 a4@3]/2", B: "g#4@15 ~",
})).s("gm_string_ensemble_2").gain(0.48).pan(0.8)

// chords · distortion guitar
const distortion_guitar_2 = note("<~@15 A B ~@16 C@3 D E F ~@22 C@3 D E F ~@14 C@3 D E F ~@4>".pickRestart({
  A: "~@12 c#5 ~ c#5 ~", B: "~@2 c#5 ~ c#5 a5 ~ a5!2 ~@2 a5 ~@2 a5@2",
  C: "[~@12 e5@5 ~ e5!13 e5@2 e5!14 ~, ~@6 b4@17 ~]/3", D: "~ d5!15",
  E: "~ d5!11 [e4,f#4,g4,g#4,a#4,b4,d5] [d4,d#4,f4,f#4,g4,a4] [c4,c#4,e4,f4] [a#3,b3,d4,d#4]", // E7 D C#maj7 D#maj7
  F: "[g#3,a3,c4,c#4] g3 ~@14", // C#maj7
})).s("gm_distortion_guitar").gain(0.64).pan(0.3)

// chords · distortion guitar · soft notes
const distortion_guitar_soft = note("<~@15 A B C@3 ~@15 D@3 ~@25 D@3 ~@17 D@3 ~@5>".pickRestart({
  A: "~@13 c5 ~@2", B: "~@3 c5 ~@6 a5 ~@2 a5 ~@2", C: "[a5!2 ~ a5 a5@2 a5 a5@41]/3",
  D: "[~@14 f#5@31 ~@3, ~@14 d5@3 ~@31]/3",
})).s("gm_distortion_guitar").gain(0.32).pan(0.3)

// chords · overdriven guitar
const overdriven_guitar = note("<~@33 A@5 B ~@22 C@3 D@2 E ~@14 C@3 D@2 E ~@4>".pickRestart({
  A: "[~@15 e5@5 ~ e5!11 e5!2 e5@2 e5!12 e5 d5@3 d5!12 d5!3 ~ d5!2 ~ d5!8 [e4,f#4,g4,g#4,a#4,b4,d5], ~@15 b4@34 f#5@31, ~@49 e5 ~@30]/5", // E7
  B: "[d4,d#4,f4,f#4,g4,a4] [c4,c#4,e4,f4] [a#3,b3,d4,d#4] [g#3,a3,c4,c#4] g3 ~@11", // D C#maj7 D#maj7 C#maj7
  C: "[~@14 e5@5 ~ e5!12 e5 e5@2 e5!13, ~@7 b4@17]/3",
  D: "[d5@3 d5!13 d5!2 ~ d5!2 ~ d5!8 [e4,f#4,g4,g#4,a#4,b4,d5] [d4,d#4,f4,f#4,g4,a4], f#5@31 ~, e5 ~@31]/2", // E7 D
  E: "[c4,c#4,e4,f4] [a#3,b3,d4,d#4] [g#3,a3,c4,c#4] g3 ~@12", // C#maj7 D#maj7 C#maj7
})).s("gm_overdriven_guitar").gain(0.48).pan(0.7)

// chords · electric guitar clean
const electric_guitar_clean = note("<~@10 A@16 ~@12 A@16 ~@12 A@8 ~@17>".pickRestart({
  A: "[~@12 a3@6 ~@2 d4@6 a3 ~ c#4@4, ~ e3@2 ~@2 f#3@3 ~@8, ~@2 g#3@4 ~@3 a3@2 ~@5]/2",
})).s("gm_electric_guitar_clean").gain(0.72)

// chords · electric guitar clean · soft notes
const electric_guitar_clean_2 = note(`<
  ~@10 A B A B A B A B A B A B A B A B ~@12 A B A B A B A B A B A B A B A B ~@12 A B A B A B A B ~@17
>`.pickRestart({
  A: "~@3 e3@2 ~@3", B: "~@3 a3@2 ~@2 a3",
})).s("gm_electric_guitar_clean").gain(0.32)

// chords · guitar harmonics
const guitar_harmonics = note("<~ A@6 B@8 ~@5 C@2 ~@18 D@3 ~@26 E@5 ~@17>".pickRestart({
  A: "[~@5 [b5,e6], ~@4 b4@39 ~@5]/6", B: "[e6@119 ~@9, b5@47 ~@81]/8", C: "[~@3 f#4@3 a4@2, ~@3 d4@5]/2",
  D: "[~@8 [d5,g5,b5]@29 ~@11]/3", E: "[b4@7 d5@6 g5@12 f#5@6 d5@4 b4@7 ~@12 d5@26, ~@21 g4@19, ~@47 b4@33]/5",
})).s("gm_guitar_harmonics").gain(0.16)

// chords · piano
const piano = note("<~@46 A@5 ~@40>".pickRestart({
  A: "[~@63 b5@4 ~@13, c#6@3 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@4 ~@14, ~ c#5@4 c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 ~@17, ~@2 e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~ c#5@2 c#5@2 b5@4 ~ e5@2 e5@2 c#6@4 ~@16]/5",
})).s("gm_piano").gain(0.22).pan(0.4)

// drums · kick
const kick = s("bd").struct("<~@6 [x ~@2 x ~@2 x ~ x ~@5 x ~]!80 ~@5>").gain(0.8)

// drums · snare
const snare = s("sd").struct("<~@6 [~@2 x ~@2 x!3]!80 ~@5>").gain(0.64)

// drums · clap
const clap = s("cp").struct("<~@6 [~@5 x!3]!80 ~@5>").gain(0.32)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@46 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@13 x!2 ~",
})).gain(0.64)

// drums · hihat
const hihat = s("hh").struct("<~@6 [x!8]!80 ~@5>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@46 A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~@6
>`.pickRestart({
  A: "~@10 x ~ x!2 ~@2",
})).gain(0.48)

// drums · ride bell
const ride_bell = s("rd").struct("<~@6 [~ x ~ x ~ x ~ x]!80 ~@5>").gain(0.4)

// drums · tambourine
const tambourine = s("tb").struct("<~@6 [x!5 ~@7 x ~@3]!80 ~@5>").gain(0.48)

stack(
  bass, tremolo_strings, string_ensemble_1, string_ensemble_1_2, distortion_guitar, string_ensemble_2,
  distortion_guitar_2, distortion_guitar_soft, overdriven_guitar, electric_guitar_clean, electric_guitar_clean_2,
  guitar_harmonics, piano, kick, snare, clap, low_tom, hihat, mid_tom, ride_bell, tambourine
)

More by The Verve