Strudelify
Don't Look Back cover art

1978 · Don't Look Back

Don't Look Back

Boston

KeyC majorTempo100 bpm
0:00/0:00
// Don't Look Back — Boston
// 100 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 61 bars on a 16-step grid, each part at one level. 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, A@4 for four bars: edit a riff to change every repeat.

// chords · piano · "A.PIANO 1"
const piano = note(`<
  A B C D A E F E A E C D G H@2 I G J K L M E F E A E C D G H@2 I G J K L N O P Q R@2 S T G H@2 I G J K L U V W X U Y Z
  AA@2
>`.pickRestart({
  A: "[c3,g3,c4,e4]@3 ~ [c3,c4,e4]@2 g3 [a2,g3,b3,d4] ~@8, ~@4 g3 ~@11", // C G
  B: "[d3,a3,c4,f4]@3 ~ [d3,c4,f4]@2 a3 [g3,e4] ~@8, ~@4 a3 ~@2 c3@2 ~@7", // Dm7 C
  C: "[e3,b3,d4,g4]@3 ~ [e3,d4,g4]@2 b3 [f3,a3,c4,f4] ~@8, ~@4 b3 ~@11", // Em7 F
  D: "[a2,a3,c4,f4]@3 ~ [a2,c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@2 c3@2 ~@7", // F C
  E: "[d3,a3,c4,f4]@3 ~ [d3,c4,f4]@2 a3 [c3,g3,c4,e4] ~@8, ~@4 a3 ~@11", // Dm7 C
  F: "[e3,b3,d4,g4]@3 ~ [e3,d4,g4]@2 b3 [f3,a3,c4,f4] ~@8, f#4 ~@3 b3 ~@11", G: "[g3,b3,d4]@13 ~ [a3,c4,e4] [g3,b3,d4]",
  H: "[~ [f3,a3,c4]@12 ~ [f3,a3,c4] [g3,b3,d4]@13 ~@2 [c4,e4] [g3,b3,d4]]/2", I: "~ [f3,a3,c4]@14 ~",
  J: "~ [a3,c4]@14 ~", K: "[g3,b3,d4]@15 ~",
  L: "[f3,a3]@3 ~ [g3,b3,d4]@3 ~ [a3,c4,e4]@3 ~ [b3,d4,g4]@3 ~, c4@8 ~@4 f#4 ~@3", // F G Am G
  M: "~@4 [c3,c4,e4]@2 g3 [a2,g3,b3,d4] ~@8, ~@4 g3 ~@11", // C G
  N: "[a4,c5,d#5] ~ [d5,d#5] c5 a4 g4 e4 [d#4,e4] ~ d4 c4 a3 c4@2 d4 c4, e5 ~@7", // Adim D#maj7 Emaj7
  O: "[d#4,e4] a3 ~ c4@3 d4 c4@2 ~ c4 d4 d#4 ~ g4 ~", // Emaj7
  P: "a4 ~ c5 ~ c5@2 a4 [a4,c5]@2 ~ [a4,c#5,d#5] ~ [a4,d#5] [a4,e5]!3", // Am D#m7b5 Adim A5
  Q: "[a4,d#5] [a4,d5] ~@2 a5 [a4,g5] [a4,d#5] [a4,d5] ~ [a4,c5] ~ [a4,c5]@3 d5 c5, ~@2 c5@7 ~@7, ~@3 a4@2 ~@9 a4@2", // Adim D5 A7 Adim D5 Am
  R: "[[d#5,e5] [a4,g5] ~ [e5,a5] ~ [e5,c6] ~ [e5,c6]!2 ~ a5 ~ g5 e5 [d#5,e5] d5@2 c5 a4 [a4,c5]@3 d5 c5 [c5,d#5,e5] g5 ~ [a4,d#5,e5] ~ [a4,d#5] [a4,d5] c5, ~@9 e5@2 ~@11 a4@4 ~@6]/2", // Emaj7 A7 A5 C Emaj7 Am C A …
  S: "a4 g4 e4 [d#4,e4] ~ c4 a3 c4@3 d4 [c4,d#4] e4 a3 c4 ~, ~@2 d4 ~@5", T: "d4 d#4 e4 g4 a4 c5!3 ~@8",
  U: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [g3,b3,d4] ~@8, ~@4 g3 ~@11", // C G
  V: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [g3,e4] ~@8, ~@4 a3 ~@11", W: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4] ~@8, ~@4 b3 ~@11",
  X: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", Y: "[a3,c4,f4]@3 ~ f4@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11",
  Z: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4,f4] ~@8, ~@4 b3 ~@11", // G G5 F
  AA: "[[a3,c4,f4]@3 ~ [a3,c4,f4]@2 ~ [g3,c4,e4]@15 ~@10]/2", // F C
})).s("gm_piano").gain(0.42)

// bass · electric bass finger · "FINGERDBAS"
const bass = note(`<
  A B C D A E F E A E C D G H I H G J K L M E F E A E C D G H I H G J K L M E F E A E C D G H I H G J K L N O C P N Q R
  S@2
>`.pickRestart({
  A: "c2@4 c2@2 ~ a1@2 ~@7", B: "d2@3 ~ d2@2 ~ c2 ~@8", C: "e2@3 ~ e2@3 f2@2 ~@7", D: "a1@3 ~ a1@2 ~ c2@2 ~@7",
  E: "d2@3 ~ d2@3 c2@2 ~@7", F: "e2@3 ~ e2@2 ~ d2@2 ~@7", G: "g1@2 ~@4 g1!2 ~@6 g1@2", H: "f1@2 ~@4 f1 f1@2 ~@7",
  I: "g1@2 ~@4 g1 g1@2 ~@5 g1!2", J: "f1@2 ~@4 f1!2 ~@8", K: "g1@2 ~@4 g1!2 ~@6 g1 ~", L: "f1@4 e1@3 ~ d1@4 g1@3 ~",
  M: "~@4 c2@2 ~ a1 ~@8", N: "c2@3 ~ c2@3 a1 ~@8", O: "d2@3 ~ d2@2 ~ c2 ~@8, c2 ~@15", P: "c2@3 ~ c2@2 ~ c2 ~@8",
  Q: "d2@3 ~@4 c2 ~@8", R: "e2@3 ~ e2@2 ~ f2 ~@8", S: "[c2@3 ~ c2@2 ~ c2@15 ~@10]/2",
})).s("gm_electric_bass_finger").gain(0.6)

// chords · clavinet
const clavinet = note(`<
  A B C D E F C F G F C F H I J K L M@2 N O F P F E F Q F R S@3 T U@2 V E W C F E F X F Y Z@2 K J U@2 AA AB AC AD AE E
  AF C AG@2
>`.pickRestart({
  A: "~ c4@3 [c4,e4]@2 g3 [g3,b3,d4] ~@8, [g3,e4]@3 ~ g3 ~@11", B: "[a3,c4,f4]@4 [a3,f4]@2 ~ [g3,c4,e4] ~@8",
  C: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4,f4] ~@8, ~@4 b3 ~@11", D: "[a3,c4,f4]@3 ~ [a3,c4,f4]@2 ~ [g3,c4,e4] ~@8",
  E: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [g3,b3,d4] ~@8, ~@4 g3 ~@11", // C G
  F: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // F F5 C
  G: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [b3,d4] ~@8, ~@4 g3 ~@11", H: "[g3,b3,d4]@5 ~ [g3,b3,d4]!2 ~@8",
  I: "[f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@6 [f2,f3,a3,c4] f2", J: "[g2,g3,b3,d4]@6 [g2,g3,b3,d4]!2 ~@6 [g2,g3,b3,d4] ~",
  K: "[f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@8", L: "[g2,g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@6 [g2,g3,b3,d4] g2",
  M: "[[f2,f3,a3,c4]@5 ~ [f2,f3,c4] [f2,f3,a3,c4] ~@6 [f2,f3,a3,c4] f2 [g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@8, ~@15 g2@6 ~@11]/2", // F F5 F G
  N: "[f2,f3,a3,c4]@3 ~ [g2,g3,b3,d4]@4 [a2,g3,c4,e4]@3 ~ [b3,d4,g4]@3 ~", // F G Am7 G
  O: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [g3,d4] ~@8, ~@4 g3 ~@11", // C G5
  P: "[b3,d4,g4]@4 g4@2 b3 [a3,c4,f4] ~@8, ~ d4 ~@2, ~@4 b3 ~@11", // G F
  Q: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4] ~@8, ~@4 b3 ~@11", R: "[g2,g3,b3,d4]@2 ~@4 [g2,g3,b3,d4]!2 ~@8",
  S: "[[f2,f3,a3,c4]@4 ~@2 [f2,f3,a3,c4]!2 ~@6 [f2,f3,a3,c4] f2 [g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@6 [g2,b3,d4] ~ [f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@8, ~@5 g2@2 ~@3 g3@6]/3", // F G F
  T: "[g2,g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@8", // G
  U: "[[f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@6 [f2,f3,a3,c4] f2 [g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@8, ~@15 g2@6 ~@11]/2", // F G
  V: "[f3,a3,c4]@3 ~ [g3,d4]@3 ~ [a3,c4,e4]@3 ~ [b3,d4,g4]@3 ~", // F G5 Am G
  W: "[a3,c4,f4]@3 ~ [a3,c4,f4]@2 ~ [g3,c4,e4] ~@8, ~@3 a3 ~@4", // F C
  X: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,f4] ~@8, ~@4 b3 ~@11", Y: "[g3,b3,d4]@2 ~@4 [g3,b3,d4]!2 ~@8",
  Z: "[[f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@6 [f2,f3,a3,c4] f2 [g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@6 [g3,b3,d4] ~, ~@15 g2@6 ~@11]/2", // F G
  AA: "[f3,a3,c4]@3 ~ [g3,b3,d4]@3 ~ [a3,e4]@3 ~ [b3,d4,g4]@3 ~", // F G A5 G
  AB: "[g3,c4,e4]@4 [g3,e4]@2 g3 [g3,b3,d4] ~@8, ~ c4@3", // C G
  AC: "[a3,c4,f4]@4 [c4,f4]@2 a3 [g3,e4] ~@8, ~@4 a3 ~@2 c4@5 ~@4", // F F5 C
  AD: "[b3,d4,g4]@3 ~ [d4,g4]@2 ~ [a3,c4,f4] ~@8, ~@4 [b3,f4] ~@11", // G G5 F Bdim
  AE: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [c4,e4] ~@8, ~@4 a3 ~@11", // F F5 C
  AF: "[a3,c4,e4,f4]@3 ~ [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // Fmaj7 F5 C
  AG: "[[a3,c4,f4]@2 ~@2 [c4,f4]@2 a3 [g3,c4,e4]@15 ~@10, e4 ~@3 a3 ~@27]/2", // F F5 C
})).s("gm_clavinet").gain(0.36).pan(0.1)

// other · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  A B A C D B A E A B A C ~@8 F G A C A H A C ~@8 A B A C A B I C ~@17
>`.pickRestart({
  A: "c4!2 a3 ~ c4 ~ a3 ~ c4 ~ a3 ~ d4 e4@3", B: "c4!2 a3 ~ c4 ~ a3 c4 ~ e4 ~ d4 ~ c4 a3 ~",
  C: "c4@2 a3 ~ c4 ~ c4 g3 ~@8", D: "c4!2 a3 ~ c4 ~ a3 ~ c4 ~@3 d4 e4@2 ~", E: "c4 ~ a3 ~ c4 ~ c4 g3 ~@8",
  F: "c4 ~ a3 ~ c4 ~ a3 ~ c4 ~ a3 ~@2 e4@3", G: "c4 ~ a3 ~ c4 ~ a3 c4 ~ e4 ~ d4 ~ c4 a3 ~, ~ c4@3 ~@12",
  H: "c4!2 a3 ~ c4 ~ a3 c4 ~ e4 ~ d4 ~ c4 ~@2", I: "c4!2 a3 ~ c4@2 a3 c4 ~@8",
})).s("gm_electric_guitar_muted").gain(0.4).pan(0.6)

// bass · synth bass 1 · "SYN BASS 1"
const bass_2 = note(`<
  A B C D@2 E F G H I F J K L M N O N P Q R S@4 B T J U N V N W N X Y Z E AA AB AC B F J AD N AE AF AD N X Q AG AH AI AJ
  AK AL AM AN@2
>`.pickRestart({
  A: "c3@4 c3@3 a2 ~@8", B: "d3@3 ~ d3@2 ~ c3 ~@8", C: "e3@4 e3 ~ e3 f3 ~ c3 ~@6",
  D: "[c3@3 ~ c3@2 ~ c3 ~@5 g2 a2 c3@4 c3@4 a2 ~@8]/2", E: "d3@3 ~ d3@3 c3 ~ a3@3 g3@2 e3 ~, ~@9 g3 ~@6",
  F: "e3@3 ~ e3@2 ~ f3 ~ c3 ~@6", G: "~@4 c3@2 ~ c3 ~@5 g2 a2 c3", H: "c3@4 c3@3 a2 ~@6 a2 ~",
  I: "d3@3 ~ d3@3 c3 ~ a3@3 g3@2 e3 ~, c3 ~@8 g3 ~@6", J: "c3@3 ~ c3@2 ~ c3 ~@8", K: "g2 ~@6 g2 ~@5 g2!3",
  L: "a2 ~@5 a2!2 ~@6 a2@2", M: "g2 ~@5 g2!2 ~@6 g2 ~", N: "a2 ~@5 a2!2 ~@8", O: "g2@3 ~@3 g2!2 ~@6 g2 ~",
  P: "g2@3 ~@3 g2!2 ~@8", Q: "a2@3 ~ b2@3 ~ c3@4 d3@3 ~", R: "c3@3 ~ c3@2 c3 a2 ~@6 g2 ~",
  S: "[d3@3 ~ d3 ~@2 c3 ~ a3@3 g3@2 e3 ~ e3@3 ~ e3@2 e3 f3 ~ c3 ~@4 a2 ~ c3@3 ~ c3@2 ~ c3 ~@8 c3@3 ~ c3@3 ~@9, ~@3 d3@29, ~@9 g3 ~@54]/4",
  T: "e3@4 e3@2 e3 ~@9", U: "g2 ~@5 g2!2 ~@8", V: "g2 ~@5 g2!2 ~@5 g2!3", W: "g2@2 ~@4 g2!2 ~@6 g2 ~",
  X: "g2@2 ~@4 g2!2 ~@8", Y: "a2@3 ~ b2@3 ~ c3@3 ~ d3@3 ~", Z: "c3@3 ~ c3 ~ c3 a2 ~@5 g2 a2 c3",
  AA: "e3@3 ~ e3@3 f3 ~ c3@7", AB: "c3@3 ~ c3@3 c3 ~@6 a2 ~", AC: "c3@3 ~ c3@2 ~ a2 ~@5 g2 a2 c3",
  AD: "~@6 g2!2 ~@6 g2 ~", AE: "g2@2 ~@4 g2!2 ~@5 g2!3", AF: "a2 ~@5 a2!2 ~@5 a2!3",
  AG: "c2@3 ~ c2 ~ c2 a1 ~@5 a1 c2 ~, c3 ~@15", AH: "d2@3 ~ d2@2 ~ c2 ~@8", AI: "e2@3 ~ e2 ~ e2 f2 ~ c2@5 a1 ~",
  AJ: "c2@3 ~ c2@2 ~ c2 ~@8", AK: "c2@3 ~ c2@2 ~ a1 ~@8", AL: "d2@3 ~ d2@2 ~ c2 ~ a2@3 g2@2 e2 ~, ~@9 g2 ~@6",
  AM: "e2@3 ~ e2@3 f2 ~@8", AN: "[c2@3 ~ c2@2 ~ c2@15 ~@10]/2",
})).s("gm_synth_bass_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<A B A@9 C A B A@9 C A B A@9 C A B A@9 C A B A@9 C ~>".pickRestart({
  A: "x ~@5 x!2 ~@8", B: "~ x ~@4 x!2 ~@8", C: "x ~@6 x ~@8",
})).gain(0.63)

// drums · clap
const clap = s("cp").struct("<A@7 B A@11 B A@11 B A@11 B A@11 B A@4 ~>".pickRestart({
  A: "~@7 x", B: "~@5 x!2 ~",
})).gain(0.63)

// drums · snare
const snare = s("sd").struct("<A@3 B A@11 B A@11 B A@11 B A@11 B A@8 ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2",
})).gain(0.63)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!60 ~>").gain(0.63)

// drums · mid tom
const mid_tom = s("mt").struct("<~@9 A ~@11 A ~@11 A ~@11 A ~@11 A ~@3>".pickRestart({
  A: "x",
})).gain(0.63)

// drums · open hat
const open_hat = s("oh").struct("<A@7 B A@11 B A@11 B A@11 B A@11 B A@4 ~>".pickRestart({
  A: "~@7 x", B: "~@5 x ~ x",
})).gain(0.63)

// drums · vibraslap
const vibraslap = s("vibraslap:0").struct(`<
  A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@4
>`.pickRestart({
  A: "~@7 x",
})).gain(8.25)

// drums · bongos
const bongos = s("bongo:18").struct("<[~@10 x!2 ~@4]!60 ~>").gain(1.66)

// drums · congas
const congas = s("conga:18").struct(`<
  A@3 B A@3 B A@3 B C A@2 B A@3 B A@3 B C A@2 B A@3 B A@3 B C A@2 B A@3 B A@3 B C A@2 B A@3 B A@3 B ~
>`.pickRestart({
  A: "x ~@3 x ~@2 x ~@4 x ~@3", B: "x ~@3 x ~@2 x ~@4 x ~ x ~", C: "~@4 x ~@2 x ~@4 x ~@3",
})).gain(2.02)

stack(
  piano, bass, clavinet, electric_guitar_muted, bass_2, kick, clap, snare, pedal_hat, mid_tom, open_hat, vibraslap,
  bongos, congas
)

More by Boston