Strudelify

It's Easy

Boston

KeyD majorTempo142 bpm
0:00/0:00
// It's Easy — Boston
// 142 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: duplicate parts dropped: ch 11 "Backup" lead 5 charang (copy of ch 2 "Lead Instr." acoustic guitar steel)
// note: Full arrangement: all 182 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(142/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.

// other · synth strings 1 · "Lead Instr."
const synth_strings_1 = note("<A@5 B@7 C@3 D@8 E@2 F@4 G@2 H I@3 J@5 K@7 L H M@2 N O@2 P@8 ~@120>".pickRestart({
  A: "[~@15 [a4,c#5,e5]@44 ~ [a5,d6,f#6]@20]/5", B: "[~@3 [a#5,d6,f6]@21 ~@2 [g5,c6,e6]@44 ~ [g5,c6,e6]@41]/7",
  C: "[~@5 [a5,d6,f#6]@38 ~@2 [b0,b4,d5,g5]@3]/3", // D G
  D: "[~@2 [a4,d5,f#5]@27 ~@2 e5@5 f#5@8 ~ g5@3 g5@10 ~ c5@16 ~ e5@5 ~ f#5@8 g5@3 g5@21 ~@2 b4@5 ~ d5@5 f#5, ~ d1@63]/8", // D
  E: "[~@8 g5@3 g5@21]/2", F: "[~ a#4@5 ~ c#5@5 ~ e5@8 c#5@3 d5@38 ~@2]/4", G: "[e5@5 [a4,d5,f#5]@27]/2",
  H: "~@2 e5@5 ~ f#5@8", I: "[g5@3 g5@10 ~ c5@16 ~ e5@5 ~ f#5@8 g5@3]/3",
  J: "[g5@21 ~@2 b4@5 ~ d5@5 f#5@8 ~ g5@3 g5@21 ~ a#4@5 ~ c#5@5 ~]/5",
  K: "[e5@8 c#5@3 d5@38 ~@2 e5@5 ~ [a4,d5,f#5]@27 ~ e5@5 ~ f#5@8 g5@3 g5@10]/7", L: "~ c5@15",
  M: "[~ g5@3 g5@21 ~ b4@5 ~]/2", N: "d5@5 ~ f#5@8 g5@2", O: "[~ g5@21 ~@2 a#4@5 c#5@3]/2",
  P: "[~@3 e5@8 ~ c#5@2 d5@44 ~@2 [c5,d5,g5]@67 ~]/8", // Csus2
})).s("gm_synth_strings_1").gain(0.56)

// chords · acoustic guitar steel · "Lead Instr."
const acoustic_guitar_steel = note(`<
  ~@62 A B A C A B A C D@2 E F G H I@2 J K@4 L M@2 N@2 O P Q@3 R S T U V W@2 B A X Y Z@2 AA@7 I@2 J K@4 L M@2 N@2 O P
  Q@3 R AB@3 AC@3 B AD AE Y AF@2 AA@7 I@2 J K@4 L M@2 N@2 O P Q@3 R AB@3 AG@4 AH@3 AI@2 AJ@2
>`.pickRestart({
  A: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]@3 ~ [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@3 ~", // D C
  B: "[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,d4,f#4]@4 [a3,d4,e4]@5 ~", // G D Asus4
  C: "[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,d4,f#4]@9 ~", // G D
  D: "[[b3,e4,g#4]@3 ~ e3@7 ~@3 [b3,e4,g#4]@4 [b3,d#4,f#4]@3 ~ [d#4,f#4,b4]@4 [c#4,f#4]@3 ~ e4@2]/2", // E B F#5
  E: "[b3,e4,g#4]@3 ~ e3@7 ~@3 b3@2", F: "[b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,a4]@4 g#4@2 f#4@2 e4@2",
  G: "[c#4,e4,a4]@2 [c#4,e4,a4]@3 ~ [c#4,e4,a4]@4 [b3,e4,g#4]@3 ~ e4@2", // A E
  H: "[b3,d#4,f#4]@2 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@4 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2", // B E
  I: "[[c#4,e4,a4]@3 ~ a4@2 [c#4,e4,a4]@4 [c#4,e4,f#4]@3 ~ [b3,e4,g#4]@13 ~@3 b3@2]/2", // A F#7 E
  J: "[c#4,g4]@2 [c#4,g4]@2 [c#4,f#4]@2 [c#4,e4]@2 [c#4,e4]@3 ~ c#4@2 a3@2", // C#dim F#5 C#m
  K: "[[e4,a4,c#5]@2 [e4,a4,c#5]@2 [e4,a4,c#5]@2 [e4,a4,c#5]@2 [a4,c#5]@2 b4@2 a4@2 b4@2 g#4@2 e3@2 g#3@2 e4@4 e4@2 g#3@2 e3@4 e3@2 g#3@2 e4@4 e4@2 ~@2 [c#4,e4,a4]@4 [c#4,e4,a4]@3 ~ [c#4,e4,a4]@4 [b3,e4,g#4]@3 ~ e4@2, ~@8 e4@5 ~ e4@4 ~@46]/4", // A E
  L: "[b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@2 [b3,d#4,f#4]@4 [b3,d#4,g#4]@3 ~ b3@2", // B G#m
  M: "[[a3,c#4,e4]@2 [a3,c#4,e4]@3 ~ [c#4,e4,a4]@4 [e4,a4,b4]@3 ~ [e4,g#4,b4]@9 ~@3 [b3,d#4,g#4]@5 ~]/2", // A Esus4 E G#m
  N: "[[c#4,e4,g#4]@5 ~ b3@2 [c#4,e4,g#4]@2 [c#4,e4,g#4]@2 [c#4,e4,g#4]@2 [a3,c#4,g#4]@4 a4@2 [c#4,f#4,a4]@6 [a3,c#4,e4]@5 ~]/2", // C#m Amaj7 F#m A
  O: "[b3,d#4]@5 ~ [b3,d#4,f#4]@4 [b3,d#4,f#4]@3 ~ f#4@2", P: "[b3,e4]@7 ~@3 [b3,d#4,g#4]@5 ~",
  Q: "[~ b3 g#4 [c#4,e4,g#4]@2 g#4!2 [c#4,f#4,a4]@2 g#4 f#4 [a3,c#4,e4]@2 e4 f#4 [b3,e4,g#4]@2 f#4 ~@3 [b3,d#4,g#4]!3]/3", // C#m F#m A E G#m
  R: "[c#4,e4,a4]@2 [c#4,e4,a4]@3 ~ g#4@2 c#4@5 ~@3", S: "d4@2 c#4@3 ~ b3@4 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2",
  T: "[d#4,f#4]@5 ~@3 [d#4,f#4]@5 ~ b3@2", U: "e4@2 d#4@3 ~ c#4@4 b3@3 ~ [d4,f#4,a4]@2",
  V: "[d4,g4,b4]@5 ~ [d4,f#4,a4]@2 [d4,f#4,a4]@7 ~", // G D
  W: "[[b3,g4]@2 f#4@2 e4@2 d4@4 c#4@3 ~ d4@9 ~ [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@3 ~]/2", // Em C
  X: "[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,d4,f#4]@5 ~@5", Y: "[d4,f#4,b4]@3 ~ [d4,f#4,a4]@11 ~",
  Z: "[[b3,d4,a4]@5 ~ g4 f#4 g4@3 ~ a4@2 d4@18, ~@14 f#4@9 ~@9]/2", // Bm7
  AA: "[[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,f#4]@9 ~ [b3,e4,g#4]@3 ~ e3@7 ~@3 [b3,e4,g#4]@4 [b3,d#4,f#4]@3 ~ [d#4,f#4,b4]@4 [c#4,f#4]@3 ~ e4@2 [b3,e4,g#4]@3 ~ e3@7 ~@3 b3@2 [b3,e4,g#4]@2 [b3,e4,g#4]@3 ~ [b3,e4,a4]@4 g#4@2 f#4@2 e4@2 [c#4,e4,a4]@2 [c#4,e4,a4]@3 ~ [c#4,e4,a4]@4 [b3,e4,g#4]@3 ~ e4@2 [b3,d#4,f#4]@2 [b3,d#4,f#4]@3 ~ [b3,d#4,f#4]@4 [b3,e4,g#4]@3 ~ [b3,e4,g#4]@2, ~@3 d4@53]/7", // G D E B F#5 E Esus4 A …
  AB: "[~@2 c#4@3 ~ b3@4 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [d#4,f#4]@5 ~@3 [d#4,f#4]@5 ~ b3@2 e4@2 d#4@3 ~ c#4@4 b3@3 ~ [d4,f#4,a4]@2, d4@23 ~]/3", // A D#m D
  AC: "[[d4,g4,b4]@5 ~ [d4,f#4,a4]@2 [f#4,a4]@7 ~ [b3,g4]@2 f#4@2 e4@2 ~@4 c#4@3 ~@11 [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@3 ~, ~@4 d4@7 d4@4 d4@9]/3", // G D F#m Em C
  AD: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,f#4]@3 ~ [c4,e4,g4]@2 [c4,e4,g4]@2 [c4,e4,g4]@3 ~, ~ d4@3", // D C
  AE: "[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,f#4]@5 ~@5, ~@3 d4@5", // G D
  AF: "[[b3,a4]@5 ~ g4 f#4 g4@3 ~ a4@2 d4@18, d4@14 f#4@9 ~@9]/2", // B7
  AG: "[[d4,g4,b4]@5 ~ [d4,f#4,a4]@2 [f#4,a4]@7 ~ [b3,g4]@2 f#4@2 e4@2 ~@4 [a3,c#4]@3 ~ b3@13 ~@3 [f#4,d5]@4 [f#4,b4]@3 ~ [f#4,a4]@7 ~ [d4,f#4,a4]@2, ~@4 d4@7 d4@4 d4@16 ~]/4", // G D F#m Em A D B5 F#m …
  AH: "[[d4,g4,b4]@5 ~ [d4,f#4,a4]@2 [f#4,a4]@7 ~ g4@2 f#4@2 e4@2 ~@4 c#4@3 ~@3 a3@2 a3@2 ~@2 f#4@2 b3@2 g3@2 ~@2 g4@2, ~@4 d4@7 d4@4 d4@3 d4@4 d4@2]/3", // G D F#m
  AI: "[[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,d4,f#4]@4 [a3,e4]@5 ~ a3@2 a3@2 ~@2 f#4@2 b3@2 g3@2 ~@2 g4@2, ~@5 d4@5 d4@4 d4@2]/2", // G D A5
  AJ: "[[b3,d4,g4]@2 [b3,d4,g4]@2 [b3,d4,g4]@2 [a3,d4,f#4]@25 ~]/2", // G D
})).s("gm_acoustic_guitar_steel").gain(0.72)

// other · tuba · "Bass"
const tuba = note("<A@6 B@3 ~@48 C@5 ~@120>".pickRestart({
  A: "[~@15 a3@44 ~ d4@36]/6", B: "[~@5 c4@19]/3", C: "[~@12 [c3,g3]@67 ~]/5",
})).s("gm_tuba").gain(0.4)

// chords · acoustic guitar steel · "Bass"
const acoustic_guitar_steel_2 = note("<~@9 A B@5 C@2 D@3 E@2 F@8 G@7 H@7 I@7 J@7 ~@124>".pickRestart({
  A: "~@13 d4@3, ~@5 a3@5 a3@6, ~@7 d4@6 ~@3",
  B: "[~@11 d4@3 ~@63 f#3@2 d4, a3@8 a3@9 a3@6 a3@8 a3@11 a3@11 ~ a3@11 a3@15, ~@3 e4@31 f#4@3 f#4@11 f#4@11 ~ f#4@11 f#4@9, ~@6 d4@5 ~@3 d4@6 d4@8 d4@11 ~ d4@5 d4@6 d4@6 d4@5 d4@6 d4@6 d4@5 ~, ~@25 g4@10 g4@32 ~@13]/5",
  C: "[~@22 d4@3 ~@3 a3@3 d4, ~@2 d4@6 d4@8 d4@6 ~@3 d4@6 ~, ~@5 a3@6 a3@8 a3@9 ~@4, ~@7 f#4@9]/2",
  D: "[~@44 c4@3 a3, ~ a3@9 a3@9 a3@2 c4@9 a3@3 c4@11 ~@4, ~@4 f#4@32 a3@5 a3@6 ~, ~@7 d4@6 d4@32 ~@3, ~@16 g3@8 a3@3 g3@11 g3@10]/3",
  E: "[~@15 g4, ~@2 g3@11 g3@9 d4@2 g3@8, ~@5 a3@5 a3@22, ~@7 c4@25, ~@16 d4@3 g4@8 d4@5]/2",
  F: "[~@115 a3@2 ~@9 a3@2, ~ d4@6 d4@5 d4@6 d4@6 d4@31 c#4@8 a#3@23 a3@3 e4@20 d4@8 d4@6 d4@5, ~@4 g3@11 g3@31 c#4@6 e3@14 g4@3 c#4@29 d4@2 a3@3 d4@3 a3@9 ~@5 a3@6 ~@2, ~@10 g4@11 g4@8 c#4@3 g4@9 c#4@3 g4@17 e4@11 d4@3 a3@3 d4@3 g4@31 e4@6 ~@10, ~@27 a#3@8 c#4@3 a#3@11 a#3@9 g3@25 d4@9 a3@3 f#4@23 ~@10]/8",
  G: "[~@9 d4@3 ~@97 g4@3, ~ f#4@23 f#4@31 a3@5 a3@6 a3@6 a3@5 a3@32 ~@3, ~@4 d4@5 ~@3 d4@6 d4@8 d4@6 d4@32 ~@19 d4@3 g4@9 d4@2 g4@11 ~@4, ~@6 a3@9 a3@6 a3@8 a3@9 a3@3 c4@8 a3@3 c4@11 c4@11 ~ c4@31 d4@6, ~@35 g3@8 a3@3 g3@11 ~ g3@11 g3@11 g3@9 d4@3 g3@8 d4@3 g3@9]/7",
  H: "[~@102 a3@3 ~@5 d4@2, d4@5 d4@6 d4@31 c#4@9 a#3@22 a3@3 e4@20 d4@9 d4@5 ~@2, ~@2 g3@29 g4@17 e4@11 d4@3 a3@3 d4@3 g4@31 e4@6 ~@7, ~@8 g4@9 c#4@2 g4@9 c#4@6 c#4@5 e3@15 g4@2 c#4@26 f#4@23 ~@7, ~@14 a#3@8 c#4@3 a#3@11 a#3@9 g3@26 d4@8 a3@6 d4@3 a3@2 d4@3 a3@9 ~@5 a3@5]/7",
  I: "[~@13 d4@2 ~@94 d4@3, ~ a3@9 a3@8 a3@6 a3@8 a3@9 a3@3 c4@8 a3@3 c4@11 c4@11 ~ c4@32 ~@2, ~@4 f#4@23 f#4@31 a3@6 a3@5 a3@6 a3@6 a3@31, ~@7 d4@6 ~@2 d4@6 d4@9 d4@5 d4@32 ~@19 d4@3 g4@9 d4@3 g4@11, ~@38 g3@9 a3@2 g3@11 ~ g3@11 g3@11 ~ g3@8 d4@3 g3@8 d4@3 g3@6]/7",
  J: "[~@51 e4@3 ~@2, g4@11 g4@9 c#4@3 g4@8 c#4@3 g4@17 e4@11 d4@3 a3@3 d4@3 g4@32 ~@9, ~@3 d4@5 d4@6 d4@31 c#4@9 a#3@23 a3@2 e4@20 d4@9 ~@4, ~@6 g3@31 c#4@6 e3@14 g4@3 c#4@28 d4@3 a3@3 d4@2 a3@11 ~@5, ~@17 a#3@8 c#4@3 a#3@11 ~ a#3@8 g3@26 d4@8 a3@3 f#4@23 ~@4]/7",
})).s("gm_acoustic_guitar_steel").gain(0.56)

// bass · fretless bass · "Bass"
const bass = note(`<
  ~@62 A B C D A B C D E@2 F G H I J@2 H K@4 L@3 M N O P Q R S T U I V W X Y Z C AA A AA AB D E@2 F G H I J@2 H K@4 L@3
  M N O P Q R S T U I V W X Y Z C AA A AA AB D E@2 F G H I J@2 H K@4 L@3 M N O P Q R S T U I V W AC AD AE W AF AG AH AI
  AJ@2
>`.pickRestart({
  A: "d2@2 d2@2 d3@3 ~ d2@2 d2@2 d3@3 ~", B: "g2@2 g2@2 a2@2 d2@4 b1@2 b1@3 ~", C: "d2@2 d2@2 d3@3 ~ c2@2 c2@2 c3@3 ~",
  D: "b2@2 g2@2 f2@2 d2@4 d2@2 d2@3 ~", E: "[e2@3 ~ e2@3 ~ e2@2 e2@2 e2@2 e2@4 d#2@3 ~ d#2@4 c#2@3 ~ b1@2]/2",
  F: "e2@3 ~ e2@3 ~ e2@3 ~ e2@3 ~", G: "g#2@2 a2@3 ~ b2@4 e2@3 ~ e2@2", H: "a2!8", I: "b2!8",
  J: "[a2@3 ~ c#3@3 ~ c#3@2 c#3@2 b2@2 e2@4 e2@2 e3@2 e3@2 e2@2 f#2@2 f#2@2 g#2@2]/2",
  K: "[a2!7 e2@2 e2 g#2 e3@2 e3 g#2 e2@2 e2 g#2 e3@2 e3 g#2 a2@2 a2!7]/4",
  L: "[b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 b2@2 a2@4 a2@3 ~ a2@4 b2@3 ~ e3@4 e3@2 e2@3 ~@3 g#2@3 ~ b2@2]/3",
  M: "c#3@7 ~@3 g#2@3 ~ c#3@2", N: "f#2@5 ~ f#2@4 f#2@3 ~ a2@2", O: "b2@3 ~ b2@6 a2@3 ~ b2@2",
  P: "e2@3 ~ e2@3 ~@3 g#2@3 ~ b2@2", Q: "c#3@7 ~@3 g#2@3 ~ g#2@2", R: "f#2@5 ~ f#2@4 f#2@3 ~ c#3@2",
  S: "b2@3 ~ b2@6 b1@2 d#2@2 e2@2", T: "a2@2 a2@3 ~ a2@2 a2@2 a2@3 ~ a2@2", U: "d3@2 c#3@3 ~ b2@4 a2@5 ~",
  V: "c#3@2 b2@3 ~ a2@4 b2@3 ~ f#2@2", W: "g2!2 b2 d3 f#2!2 a2 d3", X: "e2@2 f#2@2 g2@2 a2@4 a1@3 ~ c#2@2",
  Y: "d2@2 d2@2 d2@3 ~ d2@2 d2@2 d2@3 ~", Z: "g1!2 b1 d2@2 b1 c2 c#2", AA: "b2 g2 f2 d2@2 b1 c2 c#2",
  AB: "d2@2 d2@2 d2@3 ~ c2@2 c2@2 c3@3 ~", AC: "e2@2 f#2@2 g2@2 a2@4 a1@2 c#2@3 ~",
  AD: "b1@3 ~ b1@2 b1@2 d2@2 d2@2 f#2@2 a2@2", AE: "b2@2 b2@2 b2@2 b2@2 d3@2 c#3@3 ~ f#2@2",
  AF: "e2 f#2 g2 a2@2 b2 c#3 d3", AG: "d2!2 ~@6", AH: "~@5 b2 c3 g2", AI: "d2!2 ~@5 c3",
  AJ: "[b2@2 g2@2 f2@2 d2@25 ~]/2",
})).s("gm_fretless_bass").gain(0.56)

// drums · kick
const kick = s("bd").struct("<~@61 A ~@4 B@19 C D ~@4 B E B@29 C D ~@4 B E B@29 C D ~@4 B E B@13 F ~>".pickRestart({
  A: "~@3 x", B: "x!2 ~@2 x!2 ~@2", C: "x!2 ~@2 x!3 ~", D: "x!2 ~@6", E: "x!2 ~@2 x!4", F: "x!2 ~@2 x ~@3",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@61 A ~@3 B C@20 D C@5 E C@30 D C@5 E C@30 D C@5 E C@13 F ~>".pickRestart({
  A: "~@3 x", B: "~@5 x!3", C: "~ x ~ x", D: "x!2 ~ x", E: "~@2 x ~ x!4", F: "~ x!2 ~",
})).gain(0.8)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@86 A B@4 ~@32 A B@4 ~@32 A B@4 ~@17>".pickRestart({
  A: "~@4 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2",
})).gain(0.48)

// drums · splash
const splash = s("cr").struct(`<
  ~@62 A ~@7 B C@14 D A ~@2 E A ~ F C@4 G H I@8 B C@14 D A ~@2 E A ~ F C@4 G H I@8 B C@14 D A ~@2 E A ~ F C@4 G I@8 J ~
>`.pickRestart({
  A: "x", B: "x!2 ~@2 x ~@3", C: "x!2", D: "x ~ x!2", E: "~@3 x", F: "~ x", G: "~ x ~ x", H: "~@2 x ~@2 x!3", I: "x!8",
  J: "x!5 ~@3",
})).gain(0.56)

// drums · splash · soft notes
const splash_soft = s("cr").struct("<~@86 A B@2 C D B E ~@30 A B@2 C D B E ~@30 A B@2 C D B E ~@15>".pickRestart({
  A: "~@4 x!3 ~", B: "x!3 ~ x!3 ~", C: "x!3 ~ x!2 ~@2", D: "~ x!2 ~ x!3 ~", E: "x!3 ~@5",
})).gain(0.32)

// drums · ride
const ride = s("rd").struct("<~@66 A@4 ~@19 B C ~@35 B C ~@35 B C ~@17>".pickRestart({
  A: "x!8", B: "~@3 x", C: "x",
})).gain(0.4)

stack(
  synth_strings_1, acoustic_guitar_steel, tuba, acoustic_guitar_steel_2, bass, kick, snare, snare_soft, splash,
  splash_soft, ride
)

More by Boston