Strudelify

I Will Always Think About You

The New Colony Six

KeyD majorTempo90 bpm
0:00/0:00
// I Will Always Think About You — The New Colony Six
// 90 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 56 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(90/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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G H I J K L M N O P Q F G H I J K L M N O P Q R S T U V W X Y F G H I J K L M N O P Q N O P Q Z@3
>`.pickRestart({
  A: "~@3 a2", B: "d2@5 ~ d2 ~ d2@8", C: "c2@5 ~ c2 ~ c2@8", D: "e2@5 ~ e2@2 e1@8", E: "a1@5 ~ a1 ~ a1@7 ~",
  F: "d2@4 ~@2 d2 ~ d2@8", G: "c2@4 ~@2 c2 ~ c2@7 ~", H: "e2@4 ~@2 e2 ~ e2@8", I: "a1@4 ~@2 a1 ~ a1@4 b1@2 c#2 ~",
  J: "d2@4 ~@2 d2 ~ d2@7 ~", K: "c2@4 ~@2 c2 ~ c2 ~ c2@3 ~ c2 ~", L: "e2@5 ~ e2 ~ e2@5 ~ e2@2",
  M: "a1@5 ~ a1 ~ a1@5 ~ a1 ~", N: "b1@4 ~@2 b1 ~ a1@5 ~ a1@2", O: "e2@3 e2 b2 e1 e2@2",
  P: "d2@2 e2 ~ f#2 ~ g2@2 a2@2 b2@2 c#3 ~ d3 ~", Q: "e3@5 e3 b2@2 e2@4 e2@2 ~@2", R: "d2@5 ~ d2 ~ d2 ~ d2@3 ~ d2@2",
  S: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1@2", T: "d2@4 ~@2 d2 ~ d2@4 ~@2 d2@2", U: "g1@4 ~@2 g1 ~ g1@4 d2@3 ~",
  V: "f#2@4 ~@2 f#2@2 f#1@2 f#2@3 ~ f#2@2", W: "b1@4 ~@2 b1 ~ b1@5 ~ b1@2", X: "e2@4 ~@2 e2 ~ e2@4 e1@2 e2@2",
  Y: "a1@5 ~ a1@2 a2@4 a1@3 ~", Z: "[d2@11 ~@5]/3",
})).s("gm_acoustic_bass").gain(0.57)

// chords · piano · "A.PIANO 1"
const piano = note(`<
  ~ A B@3 C D@2 E F G H I J K L M C D@2 E F G H I J K L M N O P Q R S T@2 C D@2 E F G H I J K L M J K L M U@3
>`.pickRestart({
  A: "[d4,f#4]@4 ~@3 [e4,g4], [d2,d3,a3], ~@2 [d4,f#4]!2, ~@5 [e4,g4]@2 ~", // D Em D5 D Em
  B: "[[e4,g4,a4]@6 e4 ~@9 d4@8 f#4@2 ~@4 e4@2 [c#4,a4]@2 [d4,b4]@2 c#5@2 d5@2 e5@2 a4@2 [b4,g5]@2 [c#5,a5]@2, [c3,c4]@15 e3@17 [a2,e3,a3]@14 ~@2, g3@8 f#4@8 g4@10 [e4,g4]@4 g4@6 ~@2 f#4 ~ g4 ~ f#5 ~@5, ~@3 g4@2 g3@3 [g3,b3]@8 ~@8, ~@8 d4@4 [a3,d4,e4,g4]@5 ~@7 d4@4 [d4,f#4]@4 e4@4 e4@4 ~@8]/3", // A7 F#m G Em F#m C A5 Em …
  C: "[d3,a3,d4,f#4]@15 ~, [a4,f#5]@7 ~@9", D: "[[c3,g3,c4,e4,g4]@15 ~ [b3,e4,g4,b4]@16, ~@15 [e3,g3]@17]/2",
  E: "[a2,e3,a3,c#4,e4]", F: "[d3,a3,d4,f#4]", G: "[c3,g3,c4,e4,a4]", H: "[e3,b3,d4,g4,b4]@7 ~",
  I: "~@2 a4@2 g4@2 f#4@2 a4@2 b4@2 c#5@2 e5 ~, [a2,e3,a3,c#4,e4]@13 ~@3", // A
  J: "b2@2 ~ b3 a2@2 a2@2, [d4,f#4] ~, b3@3 ~ [a3,d4,f#4]@4, ~ b2 ~@2", // D
  K: "e2@3 ~@3 b3@2, e4, b3@5 g#3@3, g#3 b2, b2@3 e2@5", L: "[d3,a3]@5 ~ [d4,f#4]@2, [d4,f#4]@3 ~, ~@5 [d3,a3]@3",
  M: "b2@3 ~@2 [e2,b2]@2 ~, e2@5 ~@3, [g#3,b3,e4]@4 [g#3,b3,e4]@3 ~, ~@3 b2@2 ~@3", // E5 E
  N: "d3@3 ~@3 d3@2, [d4,f#4]@5 [d4,f#4]@3, a3!2, ~@3 d3@3 ~@2", // D
  O: "[b3,d4,f#4]@3 b3 ~@2 [d4,f#4]@2, g3!2, ~@3 [d4,f#4]@3 ~@2, ~@5 b3@3", // Bm D
  P: "[d3,a3,d4,f#4]@6 d3 ~ [d3,a3,c#4,f#4] ~ [d3,a3,c#4,f#4]@6", // D Dmaj7
  Q: "g3@3 ~@3 f#4@2, f#4@3 ~, d4@5 d4@3, b3!2, ~@3 g3@5",
  R: "c#4@6 [c#4,e4,a4]@5 ~@3 d#4@2, [c#3,f#3,a3,f#4]@11 ~ [c#3,f#3,a3,c#4,e4]@4", // A F#m F#m7
  S: "b2@3 ~@2 d4 [b3,d4,f#4]@2, d3, f#4@3 ~, d4@2 b3 ~, b3@3 b2@5", // Bm
  T: "[e3@6 ~@6 b4@3 c#3 a3@4 ~@4 d4@2 ~@2 e3@3 ~, [g3,g4]@15 a2@11 [a2,e4]@5 ~, b4@10 d4@6 c#4@6 c#4@5 ~@5, d4@8 b3@8 ~@4 a3@7 ~@5, b3@6 e3@10 e3@11 ~@5]/2", // G A5
  U: "[[d2,d3,a3,c#4,f#4]@11 ~@5]/3", // Dmaj7
})).s("gm_piano").gain(0.47)

// chords · synth brass 2 · "SYNBRASS 2"
const synth_brass_2 = note(`<
  ~ A B@2 C ~@8 D E F G H I J K L M N O P E F G Q R Q S T U V W H I J K L M N O P E F G P E F G X Y ~
>`.pickRestart({
  A: "[a3,f#4]", B: "[c4 b3, g4]/2", C: "[a3,e4]", D: "[b3,d4,f#4]", E: "[b3,e4,g#4]@7 ~", F: "[a3,d4,f#4]",
  G: "[b3,e4,g#4]@15 ~", H: "a4 g4 f#4 e4 d4@4", I: "[e4,g4]@15 ~", J: "b4@2 a4@2 g4@2 f#4@2 e4@7 ~", K: "[e4,a4]@15 ~",
  L: "[a4,c#5] [g4,b4] [f#4,a4] [e4,g4] [d4,f#4]@4", M: "[c4,e4,g4]@15 ~",
  N: "[b4,d5]@2 [a4,c#5]@2 [g4,b4]@2 [f#4,a4]@2 g4@4 b4@3 ~, ~@8 e4@7 ~", O: "c#5@8 d5@4 e5@3 ~, [e4,a4]@15 ~",
  P: "~@11 [b3,d4,f#4]@5", Q: "a4", R: "b4@15 ~", S: "b4@12 d5@3 ~", T: "~@2 c#5 d5 c#5 a4 f#4 e4", U: "d4@13 ~@3",
  V: "[g4,b4,d5]@15 ~", W: "[a4,c#5,e5]@15 ~", X: "a4@3 b4@2 c#5@2 ~ d5@3 c#5@3 b4@2", Y: "~ a4@15",
})).s("gm_synth_brass_2").gain(0.5)

// chords · acoustic guitar nylon · "NYLON GTR"
const acoustic_guitar_nylon = note(`<
  ~ A B C D E@2 F G H I J K L M N O E@2 F G H I J K L M N O P Q R S T U@2 V E@2 F G H I J K L M N O L M N O W ~@2
>`.pickRestart({
  A: "[a3,d4,f#4]@2 [a3,d4,f#4]@2 ~@8 [a3,d4,f#4]!4, d3@3 d3@2 d3@3, ~ [a3,d4,f#4]!2 ~", // D
  B: "~@2 [g3,c4,e4]!2 ~@2 [g3,c4,e4]@2, [g3,c4,e4] ~ [g3,c4,e4] ~, ~ c3@4 c3@3", // C
  C: "e4@2 ~ [e3,g3,b3]!2 [e3,g3,b3,e4,g4] ~ [e4,g4], [e3,g3,b3]@6 ~@7 [e3,g3,b3]@3, ~@2 e4@3 ~ [e4,g4] ~", // Em
  D: "[a3,c#4,e4]@4 [a3,c#4,e4]@2 [a3,c#4,e4]@2 [a2,e3]@2 ~@2 [a3,c#4,e4]@3 ~, [a2,e3]@2 [a3,c#4,e4] ~, ~@10 [a2,e3]@5 ~", // A A5 A A5 A A5
  E: "[[a3,d4,f#4]@4 ~@4 [a3,d4,f#4]@2 [a3,d4,f#4]@2 [a3,d4,f#4]!3 ~ [g3,c4,e4]@4 [g3,c4,e4]@2 [g3,c4,e4]@2 c4@2 c4@2 [g3,c4,e4]@4, d3@6 d3@11 ~@15, ~@4 [a3,d4,f#4]@4 ~@7 [a3,d4,f#4]@2 ~@7 [g3,e4]@4 ~@4]/2", // D C D C
  F: "[e3,g3,b3]@4 ~@4 [e3,g3,b3]@2 [e3,g3,b3]@2 [e3,g3,b3]!2 [e3,g3,b3]@2, ~ [e3,g3,b3] ~@2, ~@3 e2@5", // Em
  G: "[a3,c#4,e4]@2 ~@2 e4 ~@2 [a3,c#4,e4], [a2,e3]@3 [a2,e3]@3 [a2,e3]@2, ~@2 [a3,c#4,e4]@2 [a3,c#4]@3 ~, ~@5 [b3,d4]@3, ~@5 e4@2 ~", // A A5 A Bm
  H: "[d4,f#4]@4 ~@8 [d4,f#4]!2 [d4,f#4]@2, [d3,a3]@3 [d3,a3]@2 [d3,a3]@3, ~ [d4,f#4] a4@2, ~@2 [d4,f#4] ~", // D D5 D
  I: "[c4,e4,g4]@4 ~@8 [c4,e4,g4]!2 [c4,e4,g4]@2, [c3,g3]@3 [c3,g3]@2 [c3,g3]@3, ~ [c4,e4,g4]!2 ~", // C C5 C
  J: "[e3,g3,b3]@4 [e3,g3,b3,e4]@4 [e3,g3,b3,e4]@2 [e3,g3,b3,e4]@2 ~ e4 e4@2, ~@3 [e3,g3,b3]", // Em
  K: "[a3,c#4,e4]@4 ~@8 [a3,c#4,e4]@3 ~, [a2,e3]@6 [a2,e3]@4 [a2,e3]@5 ~, ~ [a3,c#4,e4]!2 ~", // A A5 A
  L: "[b3,d4,f#4] ~ [a3,d4,f#4]!2, b2@3 b2@5, ~ b3@3, ~ [d4,f#4] ~@2", // Bm D
  M: "[e3,g#3,b3]@3 ~ [e3,g#3,b3]@2 [e3,g#3,b3]@2 ~@4 [e3,g#3,b3]@4, ~@3 b2@7 b2@6, ~@2 [e3,g#3,b3] ~", // E
  N: "[d3,a3,d4,f#4] ~ [d4,f#4]!2 ~@2 [d4,f#4]@2, ~ [d4,f#4] ~@2 [d4,f#4]@2 ~@2, ~@3 [d3,a3]@7 [d3,a3]@6", // D D5
  O: "[g#3,b3,e4]@4 [g#3,b3,e4]@2 [g#3,b3,e4]@2 ~@4 [g#3,b3,e4]@3 ~, [e2,b2]@10 [e2,b2]@5 ~, ~@2 [g#3,b3,e4] ~", // E E5 E
  P: "[a3,f#4] ~ [a3,d4,f#4]!3 ~@2 [a3,d4,f#4], [d3,d4]@3 d3@5 d3@4 d3@4, ~ [a3,f#4] ~@3 [a3,d4,f#4]@2 ~", // D
  Q: "[g3,b3,d4,f#4]@2 ~@2 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [b3,d4,f#4]@2 [b3,d4,f#4]!2 [b3,d4,f#4]@2, ~ [b3,d4,f#4] ~@6, ~@3 g3@5 g3@8", // Gmaj7 Bm
  R: "~@2 [a3,d4,f#4]!3 ~@2 [a3,d4,f#4], [a3,d4,f#4]@2 ~@3 [a3,d4,f#4]@2 ~, ~ d3@3 d3@2 d3@2", // D
  S: "[g3,b3,d4,f#4] ~ [b3,d4,f#4]!2 ~@2 [b3,f#4]!2, ~ [b3,d4,f#4] ~@2 [b3,d4,f#4]@2 d4@2, ~@3 g3@7 g3@6", // Gmaj7 Bm B5 Bm
  T: "[f#3,a3,c#4,e4] ~ [a3,c#4,e4]!2 ~@2 [a3,c#4,e4]@2, ~ [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 ~@2, ~@3 f#3@7 f#3@6", // F#m7 A
  U: "[[b2,b3,d4,f#4]@3 ~ [b3,d4,f#4]@2 [b3,d4,f#4]@2 ~@4 [b3,d4,f#4]@2 b3@2 [e3,b3,g4]@2 ~@2 [d4,g4]@2 [d4,g4]@2 ~@6 e3@2, ~@3 b2@7 b2@16 e3@2 [d4,g4]@4, ~@4 [b3,d4,f#4]@2 ~ f#4@9, ~@14 d4@4 [d4,g4] [e3,b3]@5 [d4,g4]@2 b3@6, ~ e4]/2", // Bm Em G5 Bm G5 E5 G5
  V: "[a2,e3,a3,c#4,e4]@2 ~@2 [a3,c#4,e4]@2 [a3,c#4,e4]@2 ~@4 [a3,c#4,e4]@3 ~, ~ [a3,c#4,e4] ~@2 [a3,c#4,e4]@2 ~@2, ~@3 [a2,e3]@7 [a2,e3]@5 ~", // A A5
  W: "[d3,a3,d4,f#4]@9 ~@7", // D
})).s("gm_acoustic_guitar_nylon").gain(0.39)

// chords · tenor sax
const tenor_sax = note("<~ A B C D ~@8 E F G H ~@8 E F G H I J I J A J K A ~@8 E F G H E F G H L@2 ~>".pickRestart({
  A: "[a3,c#4,e4]@15 ~", B: "[g3,c4,e4]@15 ~", C: "[g3,b3,d4]@15 ~", D: "[e3,a3,c#4]", E: "[d4,f#4]@8 a3@7 ~, b3@7 ~@9",
  F: "[g#3,b3,e4]@7 ~", G: "[f#3,a3,d4]@15 ~", H: "[g#3,b3,e4]@15 ~", I: "[a3,d4,f#4]@15 ~", J: "[b3,d4,f#4]@15 ~",
  K: "[e3,b3]", L: "[[a3,d4,f#4]@31 ~]/2",
})).s("gm_tenor_sax").gain(0.43)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~ A@4 ~@20 B C D E ~@2 F G H I J K ~ L@3 M ~@3 B C D E B C D E N@2 ~>".pickRestart({
  A: "[[a4,c#5]@12 ~@4 g5@10 a5 ~ a5 b5 a5@34, e5@23 ~@41]/4", B: "[b3,d4,f#4]", C: "[b3,e4,g#4]@15 ~",
  D: "[d4,f#4,a4]@15 ~", E: "[b3,e4,g#4]@7 ~", F: "[d5,f#5,a5] ~@3 [f#5,a5] ~@3, ~@8 c#5 ~@7", G: "g5@3 ~@4 d6",
  H: "c#6", I: "b5@2 a5 f#5", J: "g5", K: "a5@15 ~", L: "[a5@9 ~ a5 ~ a5 b5 a5@34]/3", M: "[a4,c#5,e5]@9 ~@7",
  N: "[d3,c#4,e4,a4]/2", // A
})).s("gm_string_ensemble_1").gain(0.18)

// drums · kick
const kick = s("bd").struct(`<
  ~ A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B C ~@2
>`.pickRestart({
  A: "x ~@3 x!2 ~ x", B: "x ~@2 x!3 ~ x", C: "x",
})).gain(0.4)

// drums · rim
const rim = s("rim").struct("<~ [~ x ~ x]!52 ~@3>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<[~@3 x] [x ~ x ~ x!2 ~ x]!51 [x ~ x ~ x ~ x!2] ~@3>").gain(0.4)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<[~@13 x ~@2] [~@2 x ~@3 x ~@5 x!2 ~ x]!51 [~@2 x ~@3 x ~@6 x ~@2] ~@3>").gain(0.16)

// drums · open hat
const open_hat = s("oh").struct("<[~@7 x] ~@51 [~@7 x ~@2 x ~@4 x] x ~@2>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@29 [x!4]!8 ~@15 [x ~ x!2] x ~@2>").gain(0.4)

stack(
  bass, piano, synth_brass_2, acoustic_guitar_nylon, tenor_sax, string_ensemble_1, kick, rim, hihat, hihat_soft,
  open_hat, ride
)