Strudelify
(Sitin' on) The Dock of the Bay cover art

The Dock of the Bay

(Sitin' on) The Dock of the Bay

Otis Redding

KeyG majorTempo104 bpm
0:00/0:00
// (Sitin' on) The Dock of the Bay — REDDING OTIS
// 104 bpm, 4/4, key G 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 71 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(104/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 · "A.PIANO 1"
const piano = note(`<
  ~@4 A@2 B@2 A@2 B@2 C@2 D@2 E@2 F G A@2 B@2 A@2 B@2 C@2 D@2 E@2 F G H@2 I@2 J@2 K@2 A@2 B@2 A@2 B@2 C@2 D@2 E@2 F G L
  M N O P@2 Q R S@3
>`.pickRestart({
  A: "[[g2,g3,b3,d4]@8 d3 ~ [g3,b3,d4] ~@3 [b3,d#4]@6 ~@2 d#4@6 [b3,d#4,f#4] ~@3, ~@7 b2@7 ~@2, ~@7 f#4@4 ~@5, ~@5 b3@2 ~]/2", // G B
  B: "[[c3,g3,c4,e4]@6 ~@2 c3 ~ b2 ~ a#2 ~ [a2,a3]@8 ~@4 c#4@4 ~@2, ~@7 e4@8 ~, ~@7 c#4@5 a3@3 ~, ~@11 a2@4 ~]/2", // C A
  C: "[~@4 d3@3 [d3,g3] ~@2 [g3,b3,d4] ~@3 [g#3,b3,e4]@6 [e4,f#4] g#4 ~@2 e4@4 [g#3,b3,e4]@3 ~, g2@5 ~@2 e2@7 ~@2, [b3,d4]@2 ~@3 b4@2 ~, g3@3 ~@8 f#4@3 ~@2]/2", // G5 G E Esus2 E Bm
  D: "[~@6 g3@2 ~@4 g3@2 [g#3,b3,e4]@6 [g#3,b3,e4]@8 [e4,e5] ~@3, g2@7 e2@9, [b3,d4]@4 [a3,d4]@3 ~@9, g3@3 ~@2 b3@2 ~@9, ~ d3 ~@6]/2", // E Bm D5
  E: "[~@4 d3@2 g3@2 d3 ~ d4@2 [b3,d4]@2 [e3,a3,c#4,e4]@6 [a3,c#4,e4]@3 e3 [a3,c#4,e4] ~@5 [a3,c#4,e4]@2, d4 ~@3, b3@6 ~@4 a3 ~@15 [a3,c#4,e4]@4 ~@2, g3 ~@7, ~ g2@4 ~@2 a2@5 ~@2 [a2,e3]@2]/2", // Bm A A5
  F: "g3@4 d3 ~ g3@2 a3@2 ~@2 g3@4, g2@5 b3@3, [b3,d4] d4", G: "[g#3,b3,e4]@3 ~ e2@3 ~, e2 ~, ~@3 [g#3,b3,e4]@4 ~",
  H: "[[g3,b3,d4]@4 [g3,b3,d4]@4 [d3,a3,d4,f#4,a4] ~ [d3,a3,d4,f#4,a4]@4 ~@4 g3@2 [c4,e4,g4] ~ [c4,f4,a4] ~ [g4,a#4] ~ [c4,f4,a4]@2 [c4,e4,g4]@4, g2@4 ~@3 c3@8 ~, ~@7 [c4,e4,g4]@3 ~@2 c4 ~@3]/2", // G D C F Gm F C
  I: "[[g3,b3,d4]@2 ~@5 [d3,f#3] [a3,d4,f#4,a4] ~@3 g3@2 ~@4 g3@2 [c4,e4] ~ g3!2 a#3@2 g3@2 [c4,e4,g4]@2 ~@2, ~@2 g2@6 ~@6 c3@9 c3@6 ~@3, ~ [g3,b3,d4] ~@6, ~@3 a3 ~ [d4,f#4,a4]@2 [c4,e4,g4]@3 g4@2 [e4,g4]@2 ~@2]/2", // G D C G D C Em
  J: "[[g2,g3,b3,d4]@4 [g3,b3,d4] ~@3 [d3,a3,d4,f#4] ~ [d3,d4]@4 g3@2 ~@6 d3@2 [g3,b3,d4]@2 ~@2 d4@2 [b3,d4]@2, ~@5 [a3,f#4] ~ [c3,c4,e4]@5 g2@4, ~@9 g3@3 ~ d3@3, ~@5 [d4,g4] ~ a3]/2", // G D G Bm D C G5
  K: "[[f3,a3,c4]@4 [f3,a3,c4]@3 c3 [f3,a3,c4] ~ [f3,a3]@2 a3@2 d4@4 [d4,d5]!2 ~@6 [d3,a3]@2 [d3,a3,d4,d5]@2 ~@2, f2@4 ~ c4@2 d3@6 ~@3, ~@7 a3@4 a3@2 ~@3, ~@7 [f#4,a4]@3 [d4,d5]@2 [d4,d5]@2 ~@2]/2", // F D D5 F#m D
  L: "[g2,g3,b3,d4]@7 d3", M: "g2@7 ~", N: "[g2,g3,b3,d4]@3 ~", O: "[e3,g3,b3,e4]@3 ~",
  P: "[g2@12 ~@2 d3@2 g2@13 ~@3, [g3,b3,d4]@31 ~]/2", Q: "[g2,g3,b3,d4]@13 ~@3", R: "[e2,g3,b3]@15 ~, e4@13 ~@3",
  S: "[[g2,g3,b3,d4]@11 ~@5]/3", // G
})).s("gm_piano").gain(0.52)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A@4 B@2 C@2 B@2 C@2 D@2 E@2 F G H@2 B@2 C@2 B@2 C@2 D@2 E@2 F G H@2 I@2 J@2 K@2 L M B@2 C@2 B@2 C@2 D@2 E@2 F G H@2 A
  N A O A@3 P Q@2 ~
>`.pickRestart({
  A: "g1@5 ~ g1@2 d2@3 ~ d2@3 ~", B: "[g1@4 g2@3 g1!2 ~ a1@2 a#1@2 b1@6 b1@3 f#1 b1 ~ b1@2 f#1 ~ b1@2]/2",
  C: "[c2@3 ~ c2@3 ~ c2 ~ b1 ~ a#1 ~ a1@5 ~ a1@3 e1 a1 ~ a1@2 e1 ~ a1 ~]/2",
  D: "[g1@2 ~@2 g1@3 ~ g1@2 b1@2 d2@2 e2@5 ~ e2@3 b1 e2 ~ e2@2 b1@2 e2@2]/2",
  E: "[g1@2 ~@2 g1@3 ~ g1@2 b1@2 d2@2 e2@5 ~ e2@3 b1 e2 ~ e2@2 b1@2 e2 ~]/2", F: "g1@4 g2@3 g1 g2 ~ g2@2 g1@3 ~",
  G: "a1@7 e1 a1 ~ a1@2 e1@2 a1@2", H: "[g1@4 g2@3 ~ g1 ~ g1@2 f#1@2 e1@6 e2@3 e1 e2 ~ e2 ~ b1@2 e1@2]/2",
  I: "[g1@3 ~ g1@2 ~ g1 d2 ~ d2@3 ~ c2@4 c2 ~ c2@3 c2 c3@2 g2@2 c2@3 ~]/2",
  J: "[g1@3 ~ g1@3 ~ d2 ~ d2@2 ~@2 c2@5 ~ c2@3 g1 c2 ~ c2@2 b1@2 a1@2]/2",
  K: "[g1@3 ~ g1@3 ~ d2 ~ d2 ~@3 c2@4 ~@2 c2@2 ~ c2 g1 ~ g1@2 ~@2 g1 ~]/2", L: "f1@4 f2@3 f1 f2 ~ f2@2 f1@2 c2@2",
  M: "d2@4 d2@3 ~ d2@2 a1@2 d2@3 ~", N: "g1@4 ~@2 g1@2 d2@3 ~ d2@4", O: "e2@6 e2@2 b1@3 ~ e2@2 b1 ~",
  P: "e2@7 b1 e2 ~ e2@2 b1@2 e2@2", Q: "g1/2",
})).s("gm_acoustic_bass").gain(0.59)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  A B C D E@2 F@2 E@2 F@2 G@2 H@2 I@2 J K E@2 F@2 E@2 F@2 G@2 H@2 I@2 J K L@2 M@2 N@2 O P E@2 F@2 E@2 F@2 G@2 H@2 I@2 J
  K Q R S T U V@2 W X@2 ~
>`.pickRestart({
  A: "[b3,d4,g4] ~@2 [b3,d4,g4]!3 ~ g3, [g2,d3], g3@2 g3@5 ~, ~ [b3,d4,g4]@2 ~@3 [b3,d4,g4]@2", // G G5 G
  B: "d4 b3 ~ [d4,g4] ~@3 [g2,d3,g3], [g2,d3,g3]@5 [g2,d3,g3]@2 ~, g4@3 ~@5, b3 ~ d4@4 ~@10, ~ b3 [b3,d4,g4]!2", // G5 G
  C: "[b3,d4,g4] [b3,d4,g4]@2 [b3,d4,g4]!5, [d3,g3], g2@3 g2", // G G5
  D: "[b3,d4,g4]@2 [b3,d4,g4]@4 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4] ~ d4@2, [g2,d3,g3], ~@13 [b3,g4]@3", // G G5 Em
  E: "[[g2,g3,b3,d4]@6 ~ g2 ~@4 [g3,b3,d4]@2 [b3,d#4,f#4]@4 [b3,d#4,f#4]@2 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4] ~@5 [b3,d#4,f#4]@2, ~@3 [g3,b3,d4] [g3,b3,d4]@2 ~@7 [b3,d#4,f#4]@2 ~, ~@10 g2@4 b2@9 b2@2 ~@3 b2@4]/2", // G B G B
  F: "[[c3,c4,e4]@4 [c4,e4]@2 c3@2 [c4,e4] ~ [c3,c4,e4]@4 [a2,a3,c#4,e4]@6 ~@4 e4@2 [b3,d4,e4]@2 [a3,c#4,e4]@3 ~, ~@5 [a3,c#4,e4] [a3,c#4] ~, ~@22 a2@9 ~]/2", // C A E7 A
  G: "[[a#4,b4,d5]@2 ~@2 [b4,d5]@3 ~ b4@2 a4 ~ g4@2 [f#4,b4]@12 ~@6, ~@8 d5@5 ~@19]/2", // A# Bm B5
  H: "[[a#4,b4,d5]@2 ~@2 [b4,d5]@2 ~@2 b4@2 a4 ~ g4@2 [f#4,b4]@14 ~@4, ~@4 d5@3 ~@9]/2", // A# Bm B5
  I: "[[b4,d5]@3 ~ [b4,d5]@2 ~@2 [b4,d5]@2 a4 ~ g4 ~@2 c#5@2 e5 c#5@2 e5@5 ~ e5@2 c#5@2 b4 ~, a#4 ~@31]/2", // Bm
  J: "b4 d5 b4@2 ~@6 g4@2 b4@2 g4@2, ~@4 d5@11 ~", K: "~@3 e4@4 ~, g#4@7 ~, ~@2 b4@5 ~",
  L: "[[d4,b4]@7 ~ [d4,a4]@5 ~ g4@10 ~ c4 g4 ~ g4 ~ a4 ~, ~@14 c4@7 ~@11]/2", // G D5
  M: "[b4@5 ~@3 [d4,a4]@5 ~ [c4,g4]@11 c4@3 g4@2 c4 ~, d4@3 ~@29]/2", // D5 C5
  N: "[[d4,b4]@7 ~ [d4,a4] ~ [d4,a4]@3 ~ [c4,g4]@7 c4@3 g4@6 ~@2]/2", O: "~@7 d4",
  P: "~ f#4 d4 ~ f#4@2 d4@2 f#4@4 d4@2 ~@2",
  Q: "[g3,b3,d4]@2 [g3,b3,d4] ~@2 [g3,b3,d4] ~ g2, d3, g2@4 g2@3 ~, ~@3 [g3,b3,d4]@2 ~ [g3,b3,d4]@2", // G
  R: "[g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@2 [g3,b3,d4]@2 ~@6 g2@2, g2@2 [g3,b3,d4]!2, ~@5 g2@2 ~", // G
  S: "~@2 g3 [g3,b3,d4] ~@2 [g3,b3,d4]@2, [b3,d4]@3 ~@5, g3 ~ [g3,b3,d4] ~, ~@2 g2@7 ~ g2@6", // G Bm G
  T: "[g3,b3,e4]@2 [g3,b3,e4] ~@2 [g3,b3,e4]!3, e2, ~@3 [g3,b3,e4]@2 ~@3, ~ e3", // Em
  U: "[g3,b3,d4]@2 [g3,b3,d4] ~@2 [g3,b3,d4]!3, g2!2, ~@3 [g3,b3,d4]@2 ~@3", // G
  V: "[[g3,b3,d4]@4 ~@4 [g3,b3,d4]@2 ~@2 [g3,b3,d4]@3 [g3,b3,d4] [g3,b3,d4]@2 ~@4 [g3,b3,d4]@2 ~@4 [g3,b3,d4]@4, g2@6 g2@4 g2@9 ~ g2@6 g2@6, ~@2 [g3,b3,d4]@2 ~@5 [g3,b3,d4]@2 ~ [g3,b3,d4]@2 ~@2]/2", // G
  W: "[g3,b3,e4]@4 [g3,b3,e4]@3 ~ [g3,b3,e4]@2 [g3,b3,e4]@4 [g3,b3,e4]@2, e2@7 e2@9", X: "[[g2,d3,g3,b3,d4]@15 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.56)

// chords · brass section · "BRASS 1"
const brass_section = note("<~@20 A@2 B@2 C@2 D@2 ~@4 E@2 F@2 G@2 H@2 I@2 J@2 ~@12 E@2 F@2 ~@11>".pickRestart({
  A: "[[g3,g4]@9 ~ [a3,a4]@2 [a#3,a#4]@2 [b3,b4]@14 ~@4]/2", B: "[[c4,c5]@9 ~ [b3,b4] ~ [a#3,a#4] ~ [a3,a4]@10 ~@8]/2",
  C: "[[g3,g4,b4]@10 [a3,a4,c#5]@2 [a#3,a#4,d5]@2 [b3,b4]@13 ~ [a3,a4,d#5] ~ [b3,b4,d#5] ~, ~@7 d#5@5 ~@4]/2", // G A A# B Adim B
  D: "[[c4,c5]@8 e5 ~ [b3,b4,d#5] ~ [a#3,a#4,d5] ~ [a3,a4]@14 ~@4, e5@7 ~@7 c#5@10 ~@8]/2", // C B A# A
  E: "[g3@12 g#3@2 a3@10 ~@2 a3 ~ a3 ~ a3 ~]/2", F: "[g3@8 ~@2 g3 ~ f#3@2 e3@16 ~@2]/2",
  G: "[b4@8 a4@6 g4@13 ~ g4 ~ a4 ~]/2", H: "[[g4,b4]@7 ~ [f#4,a4]@5 ~ [e4,g4]@17 ~]/2",
  I: "[[d4,g4]@7 ~ [d4,f#4]@5 ~ [c4,e4]@8 [b3,d4]@9 ~]/2", J: "[[a3,c4]@13 ~ [a3,d4]@17 ~]/2",
})).s("gm_brass_section").gain(0.59)

// other · whistle
const whistle = note("<~@59 A B C D@2 E@2 F G ~@3>".pickRestart({
  A: "~@14 e7 ~", B: "g7 ~@3 e7 ~@3 d7 ~ b6 ~ a6 ~ b6@2", C: "~@2 d7 ~ e7 ~ d7 ~@3 a6 ~ g6 ~ a6 ~",
  D: "[~@2 b6 ~ b6 ~ g6 ~ b6 ~ g6 ~ a6 ~ a#6@4 a6@2 b6@2 ~@2 b6 ~ e6@2 ~@2 e7 ~]/2",
  E: "[g7 ~@3 e7 ~@3 d7 ~ b6 ~ a6 ~ b6@4 a6 ~ b6@2 ~@2 a6 ~ g6 ~@3 a6 ~]/2", F: "b6 ~@3 d7 ~@3 e7 ~ d7 ~ b6 ~ d7@2",
  G: "~@2 d7 ~ e7@2 ~@4 e7 ~@5",
})).s("gm_whistle").gain(0.33)

// drums · kick
const kick = s("bd").struct("<~@4 [x ~@6 x!2 ~ x ~@3 x ~]!64 x ~@2>").gain(0.71)

// drums · snare
const snare = s("sd").struct("<~@4 [~ x ~ x]!64 ~@3>").gain(0.71)

// drums · low tom
const low_tom = s("lt").struct("<~@67 [~@7 x] ~@3>").gain(0.71)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!4 [x!4]!64 ~@3>").gain(0.71)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@4 [~ x ~ x ~ x ~ x]!64 ~@3>").gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@67 [~@5 x!2 ~] ~@3>").gain(0.71)

// drums · open hat
const open_hat = s("oh").struct("<~@68 x ~@2>").gain(0.71)

// drums · ride
const ride = s("rd").struct("<~@68 x ~@2>").gain(0.71)

stack(
  piano, bass, acoustic_guitar_steel, brass_section, whistle, kick, snare, low_tom, hihat, hihat_soft, mid_tom,
  open_hat, ride
)

More by Otis Redding