Strudelify

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: 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 G H I@2 J K L M N O E F E A E C G H I@2 J K L M N P Q R S T@2 U V H I@2 J K L M N W X Y Z W AA
  AB AC@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 [c3,g3,c4,e4] ~@8, ~@4 a3 ~@11", // 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", // Em7 F
  G: "[a2,a3,c4,f4]@3 ~ [a2,c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@2 c3@2 ~@7", // F C
  H: "[g3,b3,d4]@13 ~ [a3,c4,e4] [g3,b3,d4]", // G Am G
  I: "[~ [f3,a3,c4]@12 ~ [f3,a3,c4] [g3,b3,d4]@13 ~@2 [c4,e4] [g3,b3,d4]]/2", J: "~ [f3,a3,c4]@14 ~",
  K: "[g3,b3,d4]@12 ~@2 [a3,c4,e4] [g3,b3,d4]", L: "~ [a3,c4]@14 ~", M: "[g3,b3,d4]@15 ~",
  N: "[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
  O: "~@4 [c3,c4,e4]@2 g3 [a2,g3,b3,d4] ~@8, ~@4 g3 ~@11", // C G
  P: "[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
  Q: "[d#4,e4] a3 ~ c4@3 d4 c4@2 ~ c4 d4 d#4 ~ g4 ~", // Emaj7
  R: "a4 ~ c5 ~ c5@2 a4 [a4,c5]@2 ~ [a4,c#5,d#5] ~ [a4,d#5] [a4,e5]!3", // Am D#m7b5 Adim A5
  S: "[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
  T: "[[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 …
  U: "a4 g4 e4 [d#4,e4] ~ c4 a3 c4@3 d4 [c4,d#4] e4 a3 c4 ~, ~@2 d4 ~@5", V: "d4 d#4 e4 g4 a4 c5!3 ~@8",
  W: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [g3,b3,d4] ~@8, ~@4 g3 ~@11", // C G
  X: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [g3,e4] ~@8, ~@4 a3 ~@11", Y: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4] ~@8, ~@4 b3 ~@11",
  Z: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // F F5 C
  AA: "[a3,c4,f4]@3 ~ f4@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // F C
  AB: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4,f4] ~@8, ~@4 b3 ~@11", // G G5 F
  AC: "[[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 E F G H I J K D L M N M O P Q R S F G H I J K D L M N M O P Q R S F G H I J K D L M N M O P Q R T U V W T X V
  Y@2
>`.pickRestart({
  A: "c2@3 ~ c2@2 ~ a1@2 ~@7", B: "d2@4 d2@2 ~ c2@2 ~@7", C: "e2@3 ~ e2@2 ~ f2@2 ~@7", D: "a1@3 ~ a1@2 ~ c2@2 ~@7",
  E: "c2@3 ~ c2@2 ~ a1 ~@8", F: "d2@3 ~ d2@3 c2@2 ~@7", G: "e2@3 ~ e2@2 ~ d2@2 ~@7", H: "d2@3 ~ d2@2 ~ c2 ~@8",
  I: "c2@4 c2@2 ~ a1@2 ~@7", J: "d2@3 ~ d2@2 ~ c2@2 ~@7", K: "e2@3 ~ e2@3 f2@2 ~@7", L: "g1@2 ~@4 g1!2 ~@6 g1@2",
  M: "f1@2 ~@4 f1 f1@2 ~@7", N: "g1@2 ~@4 g1 g1@2 ~@5 g1!2", O: "g1@2 ~@4 g1 g1@2 ~@5 g1@2", P: "f1@2 ~@4 f1!2 ~@8",
  Q: "g1@2 ~@4 g1!2 ~@6 g1 ~", R: "f1@4 e1@3 ~ d1@4 g1@3 ~", S: "~@4 c2@2 ~ a1 ~@8", T: "c2@3 ~ c2@3 a1 ~@8",
  U: "d2@3 ~ d2@2 ~ c2 ~@8, c2 ~@15", V: "e2@3 ~ e2@2 ~ f2 ~@8", W: "c2@3 ~ c2@2 ~ c2 ~@8", X: "d2@3 ~@4 c2 ~@8",
  Y: "[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 G H G C G I J K L M N@2 O P G Q G E G R F S T@3 U V@2 W E X C G E G Y G Z AA@2 L AB V@2 AC AD AE AF AG E
  AH C AI@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]@4 [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // F F5 C
  G: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // F F5 C
  H: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [b3,d4] ~@8, ~@4 g3 ~@11", I: "[g3,b3,d4]@5 ~ [g3,b3,d4]!2 ~@8",
  J: "[f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@6 [f2,f3,a3,c4] f2", K: "[g2,g3,b3,d4]@6 [g2,g3,b3,d4]!2 ~@6 [g2,g3,b3,d4] ~",
  L: "[f2,f3,a3,c4]@5 ~ [f2,f3,a3,c4]!2 ~@8", M: "[g2,g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@6 [g2,g3,b3,d4] g2",
  N: "[[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
  O: "[f2,f3,a3,c4]@3 ~ [g2,g3,b3,d4]@4 [a2,g3,c4,e4]@3 ~ [b3,d4,g4]@3 ~", // F G Am7 G
  P: "[g3,c4,e4]@3 ~ [c4,e4]@2 g3 [g3,d4] ~@8, ~@4 g3 ~@11", // C G5
  Q: "[b3,d4,g4]@4 g4@2 b3 [a3,c4,f4] ~@8, ~ d4 ~@2, ~@4 b3 ~@11", // G F
  R: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,c4] ~@8, ~@4 b3 ~@11", S: "[g2,g3,b3,d4]@2 ~@4 [g2,g3,b3,d4]!2 ~@8",
  T: "[[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
  U: "[g2,g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@8", // G
  V: "[[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
  W: "[f3,a3,c4]@3 ~ [g3,d4]@3 ~ [a3,c4,e4]@3 ~ [b3,d4,g4]@3 ~", // F G5 Am G
  X: "[a3,c4,f4]@3 ~ [a3,c4,f4]@2 ~ [g3,c4,e4] ~@8, ~@3 a3 ~@4", // F C
  Y: "[b3,d4,g4]@3 ~ [d4,g4]@2 b3 [a3,f4] ~@8, ~@4 b3 ~@11", Z: "[g3,b3,d4]@2 ~@4 [g3,b3,d4]!2 ~@8",
  AA: "[[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
  AB: "[g2,g3,b3,d4]@5 ~ [g2,g3,b3,d4]!2 ~@6 [g2,g3,b3,d4] ~", // G
  AC: "[f3,a3,c4]@3 ~ [g3,b3,d4]@3 ~ [a3,e4]@3 ~ [b3,d4,g4]@3 ~", // F G A5 G
  AD: "[g3,c4,e4]@4 [g3,e4]@2 g3 [g3,b3,d4] ~@8, ~ c4@3", // C G
  AE: "[a3,c4,f4]@4 [c4,f4]@2 a3 [g3,e4] ~@8, ~@4 a3 ~@2 c4@5 ~@4", // F F5 C
  AF: "[b3,d4,g4]@3 ~ [d4,g4]@2 ~ [a3,c4,f4] ~@8, ~@4 [b3,f4] ~@11", // G G5 F Bdim
  AG: "[a3,c4,f4]@3 ~ [c4,f4]@2 a3 [c4,e4] ~@8, ~@4 a3 ~@11", // F F5 C
  AH: "[a3,c4,e4,f4]@3 ~ [c4,f4]@2 a3 [g3,c4,e4] ~@8, ~@4 a3 ~@11", // Fmaj7 F5 C
  AI: "[[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 C D E B C F A B C D ~@8 G H C D A I A D ~@8 A B C D A B J D ~@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 ~ a3 ~ c4 ~ a3 ~ d4 e4@2 ~", D: "c4@2 a3 ~ c4 ~ c4 g3 ~@8",
  E: "c4!2 a3 ~ c4 ~ a3 ~ c4 ~@3 d4 e4@2 ~", F: "c4 ~ a3 ~ c4 ~ c4 g3 ~@8", G: "c4 ~ a3 ~ c4 ~ a3 ~ c4 ~ a3 ~@2 e4@3",
  H: "c4 ~ a3 ~ c4 ~ a3 c4 ~ e4 ~ d4 ~ c4 a3 ~, ~ c4@3 ~@12", I: "c4!2 a3 ~ c4 ~ a3 c4 ~ e4 ~ d4 ~ c4 ~@2",
  J: "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 J K L M N O P Q R S T U@4 B V K W Q X O Y O Z AA AB AC AD AE AF AG F AH AI O AJ AK AI O Z S AL AM
  AN AO AP AQ AR AS@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: "e3@3 ~ e3@3 f3 ~ c3 ~@6", K: "c3@3 ~ c3@2 ~ c3 ~@8",
  L: "g2 ~@6 g2 ~@5 g2!3", M: "a2 ~@5 a2!2 ~@6 a2@2", N: "g2 ~@5 g2!2 ~@6 g2 ~", O: "a2 ~@5 a2!2 ~@8",
  P: "g2@3 ~@3 g2!2 ~@6 g2 ~", Q: "a2@2 ~@4 a2!2 ~@8", R: "g2@3 ~@3 g2!2 ~@8", S: "a2@3 ~ b2@3 ~ c3@4 d3@3 ~",
  T: "c3@3 ~ c3@2 c3 a2 ~@6 g2 ~",
  U: "[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",
  V: "e3@4 e3@2 e3 ~@9", W: "g2 ~@5 g2!2 ~@8", X: "g2 ~@5 g2!2 ~@5 g2!3", Y: "g2@2 ~@4 g2!2 ~@6 g2 ~",
  Z: "g2@2 ~@4 g2!2 ~@8", AA: "a2@3 ~ b2@3 ~ c3@3 ~ d3@3 ~", AB: "c3@3 ~ c3 ~ c3 a2 ~@5 g2 a2 c3",
  AC: "d3@3 ~ d3@2 ~ c3 ~ a3@3 g3@2 e3 ~, ~@9 g3 ~@6", AD: "e3@3 ~ e3@3 f3 ~ c3@7", AE: "c3@3 ~ c3@3 c3 ~@6 a2 ~",
  AF: "c3@3 ~ c3@2 ~ a2 ~@5 g2 a2 c3", AG: "d3@3 ~ d3@3 c3 ~@8", AH: "c3@3 ~ c3@3 c3 ~@8", AI: "~@6 g2!2 ~@6 g2 ~",
  AJ: "g2@2 ~@4 g2!2 ~@5 g2!3", AK: "a2 ~@5 a2!2 ~@5 a2!3", AL: "c2@3 ~ c2 ~ c2 a1 ~@5 a1 c2 ~, c3 ~@15",
  AM: "d2@3 ~ d2@2 ~ c2 ~@8", AN: "e2@3 ~ e2 ~ e2 f2 ~ c2@5 a1 ~", AO: "c2@3 ~ c2@2 ~ c2 ~@8",
  AP: "c2@3 ~ c2@2 ~ a1 ~@8", AQ: "d2@3 ~ d2@2 ~ c2 ~ a2@3 g2@2 e2 ~, ~@9 g2 ~@6", AR: "e2@3 ~ e2@3 f2 ~@8",
  AS: "[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