Strudelify
The Freshman cover art

2010 · NOW That's What I Call the 1990s

The Freshman

The Verve Pipe

KeyA majorTempo100 bpm
0:00/0:00
// The Freshman — The Verve Pipe
// 100 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 111 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(100/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 · electric guitar jazz · "guitar"
const electric_guitar_jazz = note(`<
  A B C D A B C D A B C D A B C D E@8 A B C D A B C D A B C D A B C D A B C D E@8 A B C D A B C D F G F G F G F H@2 A B
  C D A B C D E@8 A B C D A B C D A B C D A B I J A B C D A B C K@3
>`.pickRestart({
  A: "~@6 e4 f#4, e3@15 ~, ~@2 b3@4 b3@9 ~, ~ e4@2 ~, ~@4 f#4@3 ~", B: "~ a4, a2, ~ a3@2 a3@5, ~ c#4@3",
  C: "~@5 c#4 ~ f#3, c#3@3 b2, ~@2 c#4@3 ~@3, ~@2 e4 ~", D: "~ c#4, a2, ~ e3@2 e3@5, ~@4 a3@11 ~",
  E: "[~ g#3 ~ g#3 ~ f#3 ~ f#3 ~ e3 ~@2 c#4@4, c#3@3 ~ b2@3 ~ a2@8, ~@4 c#4@6 ~@2 b3@6 ~@2 a3@11 ~, ~@22 e3@9 ~]/2",
  F: "~@3 d#3 ~ e3 ~ e3, g#2@3 ~ a2@3 ~, ~@4 g#3@5 ~@3 a3@4", G: "~@2 b2@2 e3@2 b2 ~@3 f#3@2 b3@2 f#3@2, e2@7 ~ b2@7 ~",
  H: "[~@2 b2@2 e3@2 [b2,f#3,b3,d#4]@25 ~, e2@3 ~@13]/2", I: "~ g#3 c#4 ~@2 f#3 b3 ~, c#3@5 ~@3 b2@5 ~@3",
  J: "~ e3 a3 ~ a3@4, a2, ~@3 e3@5", K: "[~@2 e3@2 ~@4 c#4@37 ~@3, a2@15 ~, ~@4 a3@41 ~@3, ~@2 e3@13 ~]/3",
})).s("gm_electric_guitar_jazz").gain(0.27)

// chords · electric guitar jazz · "guitar" · soft notes
const electric_guitar_jazz_2 = note(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~ B ~ B ~ B ~ B ~@4 A ~@3 A ~@11 A ~@3 A ~@3 A ~@7
  A ~@3 A ~@3
>`.pickRestart({
  A: "~ g#3@2 g#3@3 ~@2", B: "~ d#3 ~@6",
})).s("gm_electric_guitar_jazz").gain(0.13)

// bass · electric bass finger · "bass"
const bass = note(`<
  A B C D A B C D A B C D A B C D E D E D E D E D F G H I F G H I F G H I F G H I F G H I J D J D J D J D F G H I F G H
  I K L K L M N O P@2 F G H I F G H I J D J D J D J D F G H I F G H I F G H I F G E B A B C D A B C Q@2 ~
>`.pickRestart({
  A: "e2", B: "a1", C: "c#2@3 b1", D: "a1@15 ~", E: "c#2 b1", F: "e2@4 ~@2 e2 ~ e2@8", G: "a1@4 ~@2 a1 ~ a1@6 g#1@2",
  H: "c#2@4 ~@2 c#2 ~ c#2@4 b1@4", I: "a1@5 ~ a1 ~ a1@6 b1@2", J: "c#2@5 ~ c#2@2 b1@4 ~@2 b1@2",
  K: "g#1@5 ~ g#1@2 a1@5 ~ a1@2, e3 ~@15", L: "~@2 e3@2 d#3 e3 d#3 e3, e2@3 ~@5", M: "g#1@4 ~@2 g#1@2 a1@5 ~ a1@2",
  N: "e2@2 e3@2 d#3 e3 d#3 e3", O: "g#1@5 ~ g#1@2 a1@5 ~ a1@2", P: "[e2@5 ~ [b1,d#3]@26]/2", Q: "a1/2",
})).s("gm_electric_bass_finger").gain(0.36)

// other · electric guitar clean · ""The Fres"
const electric_guitar_clean = note("<~@32 A@2 B@2 ~@65 A@2 B@2 A@2 B@2 ~@2>".pickRestart({
  A: "[b3@4 e4@25 ~@3]/2", B: "[b3@4 d4@2 d#4@25 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.64)

// chords · overdriven guitar
const overdriven_guitar = note(`<
  ~@44 A B A B A B A B ~@8 A B A B A B A C@8 ~@2 D@2 A B A B A B E F G H E F G H E F G H E F ~@2 E F G H E F G I@3
>`.pickRestart({
  A: "~ e4 d#4 e4 ~ e4 d#4 e4", B: "~ e4 d#4 e4@3 d#4 e4", C: "[~ e4 d#4 e4@61]/8",
  D: "[~@2 d#4 e4@2 ~ d#4 e4@2 ~ d#4 ~@3 d#4 e4, ~ e4@2 ~@2 e4@2 ~@2 e4@5 ~@2]/2",
  E: "~@6 e4 f#4, e3@15 ~, ~@2 b3@4 b3@9 ~, ~ e4@2 ~, ~@4 f#4@3 ~", F: "~ a4, a2, ~ c#4@3, ~@3 a3@5",
  G: "~@5 c#4 ~ f#3, c#3@3 b2, ~@2 c#4@3 ~@3, ~@2 e4 ~", H: "~ c#4, a2, ~ e3@2 e3@5, ~@4 a3@11 ~",
  I: "[[e3,b3,c#4]@23 ~]/3", // C#m7
})).s("gm_overdriven_guitar").gain(0.31)

// chords · overdriven guitar · soft notes
const overdriven_guitar_soft = note("<~@86 A B ~@2 A B ~@2 A B ~@2 A ~@3 A B ~@2 A B C@3>".pickRestart({
  A: "~ a3@2 ~@5", B: "~ g#3@2 g#3@3 ~@2", C: "[[a2,a3]@23 ~]/3",
})).s("gm_overdriven_guitar").gain(0.2)

// chords · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@52 A B C B A B C B D E D E D E D F@2 G H I J G H I J K L K L K L K L A B C B A B C B A B C B A B ~@2 A B C B M@2 C B
  ~@2
>`.pickRestart({
  A: "[e2,b2]", B: "[a2,e3]", C: "[c#3,g#3]@3 [b2,f#3]", D: "g#2 a2", E: "e3 b2", F: "[e3@3 b2@13]/2",
  G: "~@6 e4 f#4, e3@15 ~, ~ e4@2 ~, ~@4 f#4@3 ~", H: "~ a4, a2, ~ c#4@3",
  I: "~@5 c#4 ~ f#3, c#3@3 b2, ~@2 c#4@3 ~@3, ~@2 e4 ~", J: "~ c#4, a2, ~ e3@2 ~@5, ~@4 a3@11 ~", K: "c#3 b2", L: "a2",
  M: "[~@2 a4 ~@5 [a2,e3]@8, [e2,b2] ~, ~@6 g#4@13 ~@13]/2", // A5 E5
})).s("gm_distortion_guitar").gain(0.36)

// chords · distortion guitar · "DISTORTION" · soft notes
const distortion_guitar_soft = note("<~@69 A B C D A B C D ~@34>".pickRestart({
  A: "~@2 b3@4 b3@9 ~", B: "~ a3@2 a3@5", C: "~ g#3@2 g#3@3 ~@2", D: "~@3 e3@5",
})).s("gm_distortion_guitar").gain(0.2)

// chords · drawbar organ · "ORGAN1"
const drawbar_organ = note("<~@101 A@8 ~@2>".pickRestart({
  A: "[b4,e5,b5]/8", // E5
})).s("gm_drawbar_organ").gain(0.2)

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

// drums · snare
const snare = s("sd").struct("<~@32 A@12 B@7 C A@15 D ~ A@8 B@7 C A@23 E ~@2>".pickRestart({
  A: "x!3 ~ x!8 ~ x!3", B: "x!12 ~ x!3", C: "x!12 ~ x ~@2", D: "x!3 ~@13", E: "x!3 ~ x!2 ~@10",
})).gain(0.31)

// drums · clap
const clap = s("cp").struct("<~@32 A@12 B@7 C A@7 D A@7 E ~ A@8 B@5 F@2 G A@7 D A@7 D A@7 E ~@2>".pickRestart({
  A: "~@3 x ~@8 x ~@3", B: "~@3 x", C: "~@12 x ~ x!2", D: "~@3 x ~@4 x ~@2 x!2 ~ x!2", E: "~@3 x ~@12",
  F: "~@2 x!6 ~@2 x!3 ~@3", G: "~@2 x!6 ~@2 x!3 ~ x!2",
})).gain(0.41)

// drums · hihat
const hihat = s("hh").struct("<~@52 [~@7 x]!7 ~@26 [~@7 x]!7 ~ [~@7 x]!7 ~@11>").gain(0.41)

// drums · open hat
const open_hat = s("oh").struct("<~@52 [~@3 x]!7 ~@26 [~@3 x]!7 ~ [~@3 x]!7 ~@11>").gain(0.41)

// drums · crash
const crash = s("cr").struct(`<
  ~@32 A ~@11 A ~@7 A ~@3 A ~@3 A ~@3 A ~@2 B ~@9 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@9
>`.pickRestart({
  A: "x", B: "~@3 x ~@4",
})).gain(0.51)

// drums · ride
const ride = s("rd").struct("<~@108 [~@3 x!2 ~@3] ~@2>").gain(0.46)

stack(
  electric_guitar_jazz, electric_guitar_jazz_2, bass, electric_guitar_clean, overdriven_guitar, overdriven_guitar_soft,
  distortion_guitar, distortion_guitar_soft, drawbar_organ, kick, snare, clap, hihat, open_hat, crash, ride
)