Strudelify
Where It's At cover art

1996 · Odelay

Where It's At

Beck

KeyA majorTempo97 bpm
0:00/0:00
// Where It's At — Beck
// 97 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 109 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(97/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 · epiano1 · "Rhodes"
const epiano1 = note(`<
  A@2 B@2 A@2 C@2 A@2 B@2 D@2 C@2 A@2 B@2 D@2 E@2 F@4 ~@7 G A@2 B@2 D@2 E@2 F@4 H@2 I@2 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2
  F@4 H@2 I@2 ~ J ~@14 F@4 A@2 B@2 A@2 B@2 A@2 K@2 ~
>`.pickRestart({
  A: "[~@4 [c4,e4] ~ g3 ~ [c4,e4] ~ [d4,f#4] ~@3 d#4 ~@5 g3@2 ~@2 e3@2 f#3@2 ~@2 a2 ~, a2@9 ~@7, ~@7 g4@9, ~@15 e4@17]/2", // C D
  B: "[~@4 [e4,g4]@3 ~ [d4,f#4]@2 ~@2 [b3,d4] ~ [b3,d4]@2 ~@2 [c#4,e4] ~@5 e3@2 f#3@2 ~@2 a2 ~, a2@21 ~@11, ~@4 d#4 ~@15 [c#4,e4]@12]/2", // Em D Bm C#m
  C: "[~@4 [e4,g4]@2 ~@2 [d4,f#4]@3 ~ [b3,d4] ~ [b3,d4]@2 ~@2 [c#4,e4] ~@5 e3@2 f#3@2 ~@2 a2@2, a2@21 ~@11, ~@4 d#4 ~@15 [c#4,e4]@8 ~@4]/2", // Em D Bm C#m
  D: "[~@4 [c4,e4]@2 g3 ~ [c4,e4] ~ [d4,f#4]@2 ~@2 d#4 ~@5 g3@2 ~@2 e3@2 f#3@2 ~@2 a2 ~, a2@17 ~@15, ~@7 [e4,g4]@9]/2", // C D Em
  E: "[~@4 [e4,g4]@3 ~ [d4,f#4]@3 ~ [b3,d4] ~ [b3,d4]@3 ~ [c#4,e4]@2 [c#4,e4]@2 ~@2 e3@2 f#3@2 ~@2 a2@2, a2@5 ~@3, ~@4 d4 ~@27]/2", // Em D Bm C#m
  F: "[~@8 [g3,b3] e3 ~@6, ~@11 e3@2 e3@2 e3@2 ~@15, ~@6 [a3,c#4]!2 ~@8]/2", // G A
  G: "[a4,a5] ~ [a4,a5]!2 [a4,a5]@4 [g4,g5]@3 ~@5", // A G
  H: "[~@2 d3@2 [f3,g3,b3]@2 d3 ~ [d3,f3,g3,c4] ~ [d3,f3,g3,b3]@2 g2@2 e3@2 ~@2 e3 ~ [e3,g3,b3] g#3 [e3,c#4] ~ [e3,b3,d4] ~ e3 ~ [e3,a3] ~ e3 ~, g2@5 ~ g2@5 ~@3 [g#3,b3]@5 ~@3 a3@2 ~@4 c#4@2 ~@2, ~@14 g3 ~ e2@14 ~@2]/2", // G7 Dm7 G7 Em C#m E7 A5 G#m
  I: "[g2@2 d3 ~ [d3,f3,g3,b3]@2 ~ d3 [d3,f3,g3,c4] ~ [d3,f3,b3]@2 g2@2 g3 ~@3 e3 ~ [e3,g#3,b3] ~ [e3,a3,c#4] ~ [e3,d4] ~ e3 ~ [e3,a3,c#4] ~@3, ~@3 g2@2 ~ g2@4 [g3,g#3] ~@3 [e3,g#3,b3]@4 ~@6 b3@2 ~@6, ~@16 e2@13 ~@3]/2", // G7 Dm7 Bdim E A E7 A G#maj7 …
  J: "~ a3@2 ~ a3 ~ e3!4 ~@6",
  K: "[~@4 [e4,g4]@3 ~ [d4,f#4]@2 ~@2 [b3,d4] ~ [b3,d4]@2 ~@2 [c#4,e4] ~@13, a2@21 ~@11, ~@4 d#4 ~@27]/2", // Em D Bm C#m
})).s("gm_epiano1").gain(0.2)

// other · rock organ · "B3"
const rock_organ = note("<~@7 A@3 B@4 C@2 ~@44 D E F E D@2 E@2 ~@34 G H ~@5>".pickRestart({
  A: "[~@14 d#5 e5@26 d#5 e5@2 g5@2 a5@2]/3", B: "[a5@29 ~ d#5 ~@7 a4@17 ~@2 d#5 e5@2 g5@2 a5 ~, g5 ~@30 e5@26 ~@7]/4",
  C: "[a5@7 ~@7 a4@12 g4 a4@4 ~, g5 ~@13 g4 ~@17]/2", D: "a3 ~ a3 ~ a3!5 ~ a3 a3@2 ~@3", E: "a3 ~ a3 ~ a3!5 ~ a3!2 ~@4",
  F: "a3 ~ a3 ~ a3 ~ a3!6 ~@4", G: "~@6 d#5 ~ a5!2 ~ a5 ~@4", H: "~@6 d#6 g6 [d#6,g6] d#6 g6!3 ~ d#6 g6",
})).s("gm_rock_organ").gain(0.14).pan(0.6)

// other · rock organ · "B3" · soft notes · D#
const rock_organ_soft = note("<~@62 [~@5 a3 ~@10] ~@39 [~@7 e5!2 ~ e5 ~ e5@3 ~] [~@10 d#6 ~ d#6 [d#6,g6] ~@2] ~@5>")
  .s("gm_rock_organ").gain(0.08).pan(0.6)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@8 A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 I J I J K J I ~@5 E@2 F@2 G@2 H@2 I J I J L M N M ~@8 E@2 F@2 G@2 H@2 I J I J L M
  N M ~@16 I J I J A@2 B@2 A@2 B@2 A@2 O@2 ~
>`.pickRestart({
  A: "[a1@4 ~@2 a1@2 c2 ~ d2 ~ e2 ~ a2@8 ~@2 g2@2 a2@2 ~@2 a2@2]/2",
  B: "[a1@5 ~ a1@2 c2 ~ d2 ~ e2 ~ a2@6 ~@2 g2@2 ~@2 f#2@2 ~@4]/2",
  C: "[a1@4 ~@2 a1@2 c2 ~ d2 ~ e2 ~ a2@6 ~@4 g2@2 a2@2 ~@2 a2@2]/2",
  D: "[a1@4 ~@2 a1@2 ~@2 d2 ~ e2 ~ a2@6 ~@2 g2@2 ~@2 f#2@2 ~@4]/2",
  E: "[a1@5 ~ a1@2 c2 ~ d2 ~ e2 ~ a2@7 ~@3 g2@2 a2@2 ~@2 a2@2]/2",
  F: "[a1@8 c2 ~ d2 ~ e2 ~ a2@6 ~@2 g2@2 ~@2 f#2@2 ~@4]/2",
  G: "[a1@5 ~@3 c2 ~ d2 ~ e2 ~ a2@8 ~@2 g2@2 a2@2 ~@2 a2@2]/2",
  H: "[a1@5 ~ a1@2 c2 ~ d2 ~ e2 ~ a2@6 ~@2 g2@2 ~@2 f#2@2 ~@2 d1@2]/2", I: "e1@2 ~@5 e1 e1@2 ~@6",
  J: "e1@2 ~@5 e1 e1@2 e1@2 ~@4", K: "e1 ~@3 e1 ~@3", L: "g1@3 ~ g2@2 ~ g2 d2 ~ f2@2 ~@4",
  M: "e1@3 ~ e2@2 ~@2 b1 ~ d2@2 ~@2 e2@2", N: "g1@3 ~ g2@2 ~@2 d2 ~ f2@2 ~@2 g2@2",
  O: "[a1@5 ~ a1@2 c2 ~ d2 ~ e2 ~ a2@6 ~@12]/2",
})).s("gm_electric_bass_finger").gain(0.54)

// bass · electric bass finger · "Bass" · soft notes
const bass_soft = note(`<
  ~@14 A B ~@3 B C ~@3 D ~ D ~ D ~ D ~@8 B C ~@3 D ~ D ~ E F G F ~@11 B C ~@3 D ~ D ~ E F G F ~@16 D ~ D ~@14
>`.pickRestart({
  A: "~@8 c2 ~@7", B: "~@14 a1 ~", C: "~@3 a1 ~@4", D: "~@5 e1 ~@2", E: "~@14 f2 g2", F: "~@7 e2 ~@8", G: "~@7 g2 ~@8",
})).s("gm_electric_bass_finger").gain(0.3)

// other · electric guitar jazz · "Jazz Guitar"
const electric_guitar_jazz = note("<~@43 A ~@9 B C ~@5 D E F G H I J K ~@8 L@2 M@2 N@2 O@2 ~@25>".pickRestart({
  A: "~@8 d4 ~ c4 c#4 ~@4", B: "~@8 d3 ~@3 d3 ~ d3 ~", C: "d3 ~@3 a2 ~ a2@2 ~@8", D: "b4@2 c5@2 b4@2 c5@2 b4 ~@5 g4@2",
  E: "~@2 e4 ~ e4@2 ~@2 d4 ~ a3 ~ c4@3 ~", F: "a3@3 ~ c4 ~@3 c#4@2 e4 ~ f#4 ~@3", G: "g4@2 ~@2 e4 ~@3 a4 ~@3 g4 ~@3",
  H: "c5@3 ~ b4@3 ~ b4 ~@3 g4 ~@3", I: "g4@3 ~ e4 ~@3 d4 ~ c4@2 a3@2 ~@2", J: "~@2 a3 ~ c4 ~ e4 ~ e4 ~@3 e4@2 ~@2",
  K: "g4 ~@3 a4 ~ a4@5 ~@5", L: "[a1@4 ~@2 a1@2 c2 ~ e2@3 ~ g2@4 ~@2 e2@4 d2@4 ~@2 c2@2]/2",
  M: "[a1@3 ~ a1 ~@5 a1 ~@3 a1@4 ~@4 e2@5 ~@5]/2", N: "[a1@5 ~ a1@2 c2 ~ e2@3 ~ g2@4 ~@2 e2@3 ~ d2@4 ~@2 c2@2]/2",
  O: "[a1@3 ~ a1 ~@5 a1 ~@3 a1@5 ~@3 e2@5 ~@5]/2",
})).s("gm_electric_guitar_jazz").gain(0.36)

// other · electric guitar jazz · "Jazz Guitar" · soft notes
const electric_guitar_jazz_2 = note("<~@60 A ~ B C D E ~ F ~@41>".pickRestart({
  A: "~@10 e4 ~@5", B: "~@6 a3 ~@9", C: "~@6 g4 ~@7 e4 ~", D: "~@14 e4 ~", E: "~@6 d#4 ~@9", F: "~@2 e4 ~@13",
})).s("gm_electric_guitar_jazz").gain(0.18)

// other · electric guitar clean · "Clean Electric"
const electric_guitar_clean = note(`<
  ~@8 A@2 B@2 C@2 D@2 E ~@11 F@3 ~@5 G H I J K L M@2 ~@4 N ~@7 O@3 ~@13 N ~@3 P@2 Q@2 R@2 S@2 ~@12 N ~@12
>`.pickRestart({
  A: "[a2@4 ~@2 a2@2 c3 ~ e3@3 ~ g3@4 ~@2 e3@3 ~ d3@5 ~ c3@2]/2",
  B: "[a2@3 ~ a2 ~@5 a2@2 ~@2 a2@4 ~@4 e3@5 ~@3 a2 ~]/2", C: "[a2@3 ~@3 a2 ~ c3 ~ e3@3 ~ g3@5 ~ e3@3 ~ d3@5 ~ c3@2]/2",
  D: "[a2@2 ~@2 a2@2 ~@4 a2 ~@3 a2@5 ~@3 e3@5 ~@3 a2 ~]/2", E: "a2 ~", F: "[e1,e2]@2 ~@5 [e1,e2]!2 ~ [e1,e2] ~@5",
  G: "a1@3 ~@5 c2 ~ e2@3 ~ g2@2, ~@10 f#2 ~@5", H: "~@2 e2 ~ c2@2 ~ c2", I: "a1@2 ~@3 a1 ~ a1",
  J: "~@6 d2@2 e2@2 ~@4 a1 ~", K: "a1@4 ~@2 a1@2 c2 ~ e2@3 ~ g2@2", L: "~@4 e2@3 ~ c2@4 ~@2 c2@2",
  M: "[a1@7 ~@3 a1 ~@3 a1@4 ~@4 e2@5 ~@5]/2", N: "[e1,e2] ~@7", O: "[~@12 a4@23 ~@13]/3",
  P: "[a1@4 ~@2 a1@2 c2 ~ e2@3 ~ g2@4 ~@2 e2@4 d2@4 ~@2 c2@2]/2", Q: "[a1@3 ~ a1 ~@5 a1 ~@3 a1@4 ~@4 e2@5 ~@5]/2",
  R: "[a1@5 ~ a1@2 c2 ~ e2@3 ~ g2@4 ~@2 e2@3 ~ d2@4 ~@2 c2@2]/2", S: "[a1@3 ~ a1 ~@5 a1 ~@3 a1@5 ~@3 e2@5 ~@5]/2",
})).s("gm_electric_guitar_clean").gain(0.22).pan(0.4)

// other · overdriven guitar · "FX Right"
const overdriven_guitar = note(`<
  ~@24 A B C D E F G H ~@12 I J K L ~@20 M N O P ~ Q@2 R@2 ~@6 S ~@8 M N O P ~@13
>`.pickRestart({
  A: "~@4 f#3@3 ~@5 c3@4", B: "~ b2 ~ g2", C: "~@4 e2@3 ~@5 d#3@3 ~", D: "~@4 g#3@4 ~@4 c#4@3 ~", E: "~ a2 ~ f#3",
  F: "~ f3 ~ f#2", G: "~@4 d2@3 ~@5 a#2@2 ~@2", H: "[g1,f2] ~@15", I: "~@2 a#6 ~@3 a#6 ~", J: "~@4 b6@3 ~@5 a#7@3 ~",
  K: "~ a#7 ~ a#7", L: "~@4 a#7@3 ~@4 a#7@4 ~", M: "a0@2 a#6 ~ a#0@2 a#6 ~", N: "c1@4 b6@3 ~ d#1@4 a#7@3 ~",
  O: "f1 a#7 g1 a#7", P: "a#1@4 a#7@3 ~ e1@3 a#7@4 ~", Q: "[~@12 e2@5 g2@9 ~@6]/2",
  R: "[g#3 ~ a3 ~ a3@3 ~ a3@2 a3@3 ~ a3@12 ~@6]/2", S: "~@6 e2 g2 a2 ~ g2 a2@4 ~",
})).s("gm_overdriven_guitar").gain(0.08).pan(0)

// other · distortion guitar · "FX Left"
const distortion_guitar = note("<~@24 A B C D E F G H ~@77>".pickRestart({
  A: "e4@3 ~@5 c#5@4 ~@4", B: "f#5 ~ g#5 ~", C: "~@2 a#4 ~", D: "d4 ~ f#4 ~", E: "g4 ~ a#4 ~", F: "d#5@4 ~@4 a#4@3 ~@5",
  G: "d#4@3 ~@5 f4@2 ~@4 g3 ~", H: "[g2,g3] ~ [g2,a2,g3] ~ [g2,g3]!5 ~ [g2,g3] [g2,g3]@2 ~@3",
})).s("gm_distortion_guitar").gain(0.07).pan(1)

// other · distortion guitar · "FX Left" · soft notes · Gsus2
const distortion_guitar_soft = note("<~@24 [~@8 d5@2 ~ d5 ~@4, ~@8 d#5 ~@7] ~ [a#5 ~@3] ~@3 [~@13 [g3,a3] ~@2] ~@78>")
  .s("gm_distortion_guitar").gain(0.04).pan(1)

// other · taiko drum · "FX 2 Right"
const taiko_drum = note("<~@28 A@4 ~@12 B@3 C ~@20 B@3 C ~@20 B@3 C ~@13>".pickRestart({
  A: "[~@2 e5 e5@2 ~ e6 e6@2 ~ e5 e5@2 ~ e6 e6@2 ~ e5 e5@2 ~ e6 e6@2 ~ e5 e5@2 ~ e6 e6@2 ~ e5 e5@2 ~ e6 e6@2 ~ e5 e5@2 ~ e6 e6@2 ~@15, ~ b4@2 ~@2 b5@2 ~@2 b4@2 ~@2 b5@2 ~@2 b4@2 ~@6 b4@2 ~@6 b4@2 ~@6 b4@2 ~@21, ~@14 d6@2 ~@5 b5@2 ~@6 b5@2 ~@6 b5@2 ~@6 b5@2 ~@17]/4",
  B: "e5 e6 e5 e6 e5 e6 e5 e6 e5 e6 e5 e6 e5 e6 e5 e6", C: "~@8 g5 g6 g5 g6 g5 g6 g5 g6",
})).s("gm_taiko_drum").gain(0.07)

// other · distortion guitar · "Dist Guitar"
const distortion_guitar_2 = note(`<
  ~@32 A B@2 C ~@8 D E F@2 ~@10 G@3 ~@5 H@2 D E F@2 ~@20 D E F@2 ~@7 I@5 ~
>`.pickRestart({
  A: "a1@7 ~ a1@7 ~", B: "a1@6 ~@2 a1@7 ~", C: "a1@7 ~ a1@6 ~@2", D: "c1@5 ~@3 g#1@5 ~@3", E: "a#1 ~ c#2 ~",
  F: "[f1@5 ~@2 f#1@11 ~@3 g#1@6 ~@5]/2", G: "[~@14 [a3,d#4,a4]@23 ~@11]/3",
  H: "[~@14 a3 a3@2 ~ a3 g3 e3 d#3 d3 c3 a#2 ~@7]/2",
  I: "[a2 ~@4 a4@8 ~@6 b4@21 ~@5 [f3,g3]@26 ~@9, ~@5 [a3,d#4]@38 ~@2 [d#3,e3]@2 ~@33, ~@13 g4@28 ~@39]/5", // Fsus2 Adim Emaj7
})).s("gm_distortion_guitar").gain(0.16)

// other · pad poly · "Poly Synth"
const pad_poly = note("<~@35 A@6 B@3 ~@52 C@8 ~@5>".pickRestart({
  A: "[~@12 a4@30 ~@2 g4@15 ~ a3@14 ~@2 a4@20]/6", B: "[~@12 g4@15 ~ a3@18 ~@2]/3", C: "[d5@58 ~@4 a4@26 d5@35 ~@5]/8",
})).s("gm_pad_poly").gain(0.23)

// chords · trumpet · "Horns"
const trumpet = note("<~@48 A@2 B C D@3 ~@17 A@2 B C E@2 ~@31>".pickRestart({
  A: "[[f4,b4]@13 ~ [e4,g#4]@17 ~]/2", B: "[f4,b4]@7 ~ f4@2 [f4,b4]@3 ~ [e4,g4]@2, ~@8 c5 ~@7",
  C: "~@2 [e4,g#4] ~ [e4,g#4]@12", D: "[a4@5 ~]/3", E: "[~ a4@28 ~@3]/2",
})).s("gm_trumpet").gain(0.48)

// other · alto sax · "Sax"
const alto_sax = note("<~@55 A ~@20 B@2 C D ~ E@2 F ~@25>".pickRestart({
  A: "~@8 c4 d4 ~@2 c4 d4 ~@2", B: "[~@14 b4@7 ~ a4@8 c5 d5, ~@14 a4 ~@17]/2", C: "c5 ~@3",
  D: "e5 d#5 a4 g#4 d#5 d5 g#4 g4 c#5 c5 g#4 f#4 c5 b4 f#4 f4",
  E: "[~@6 d4 ~ d4 ~ c4 ~ a3@7 ~@3 a3 ~ c4 ~ d4 ~ d4@3 ~]/2", F: "~ c4 a3 ~@5",
})).s("gm_alto_sax").gain(0.11).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@8 A@15 ~ A@7 B C@3 D A@16 ~@8 A@2 E A@13 ~@8 A@3 F@3 A ~ A@16 ~>".pickRestart({
  A: "x!2 ~@2 x!2 ~@2", B: "x ~@2 x ~@2 x ~@3 x ~@5", C: "x ~@3 x ~@3 x ~@2 x!3 ~@2", D: "x ~@7 x ~@2 x ~@4",
  E: "x ~@3 x!2 ~@2", F: "x ~ x ~@5 x ~ x ~@4 x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~@31 [~@2 x ~@2 x ~@2 x ~ x ~@2 x ~ x] ~@77>").gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@8 A@15 ~ B@7 C@4 D A@16 ~@8 A@16 ~@8 C@5 E C F A@16 ~>".pickRestart({
  A: "~@4 x ~@2 x ~@4 x ~@2 x", B: "~@4 x ~@2 x ~@4 x ~@3", C: "~ x ~ x", D: "~@2 x ~@3 x!2", E: "~@4 x ~@7 x ~@2 x",
  F: "~@3 x",
})).gain(0.4)

// drums · clap
const clap = s("cp").struct("<~@22 A@9 ~ A@4 ~@8 A@8 ~@14 A@10 ~@8 A@7 ~ A@4 ~@13>".pickRestart({
  A: "~ x ~ x",
})).gain(0.45)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@34 [~@5 x ~@7 x ~@2] [~@13 x ~@2] ~@73>").gain(0.25)

// drums · low tom
const low_tom = s("lt").struct("<~@32 [~@3 x]!3 ~@49 [~@15 x]!3 [~@13 x ~@2]!4 [~@7 x] ~@17>").gain(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@31 A B@3 C ~@24 D@2 E D@5 ~@16 F@5 B F ~@18>".pickRestart({
  A: "x!16", B: "x!5 ~ x!2", C: "x!5 ~ x ~", D: "x!8", E: "~ x!7", F: "x!3 ~ x ~ x ~ x ~@3 x ~ x ~",
})).gain(0.4)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@15 x] ~@55 [~@7 x] ~@17>").gain(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@32 [~@5 x ~@2]!4 ~@26 x ~@21 [~@5 x ~@2]!7 ~@18>").gain(0.3)

// drums · crash
const crash = s("cr").struct("<~@32 [x!3 ~@3 x ~] [~ x ~ x]!3 ~@73>").gain(0.45)

// drums · cowbell
const cowbell = s("cb").struct("<~@34 [~@5 x ~ x ~@8]!2 ~@73>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@8 A@15 ~ A@7 ~@5 A@7 ~ A@8 ~@16 A@8 ~@16 A@16 ~>".pickRestart({
  A: "x!8",
})).gain(0.3)

// drums · bongos
const bongos = s("bongo:18").struct("<~@35 [~@9 x ~ x ~@4] ~@48 [~@4 x ~@7 x!2 ~@2]!7 ~@18>").gain(0.78)

// drums · bongos · soft notes
// … 31 more lines

More by Beck