Strudelify

Don't Forget to Remember

Bee Gees

KeyA♭ majorTempo99 bpm
0:00/0:00
// Don't Forget to Remember — Bee Gees
// 99 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 30 bars on a 24-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(99/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 · electric bass finger
const bass = note("<~@2 A B C A D E D F G@2 D H D I J K L M N O P Q P R S T U V>".pickRestart({
  A: "eb2@13 ~@5 eb2@6", B: "bb1@17 ~ bb1@5 ~", C: "eb2@23 ~", D: "ab1@6 ~@3 ab1 ~@2 ab1@6 ~@6",
  E: "eb2@6 ~@3 eb2 ~@2 eb2@6 ~@6", F: "ab1@5 ~@4 ab1 ~@2 ab1@6 ~@6", G: "db2@6 ~@3 db2 ~@2 db2@6 ~@6",
  H: "eb1@6 ~@3 eb1 ~@2 eb2@6 g1@5 ~", I: "ab1@6 ~@3 ab1 ~@2 ab1@6 c2@5 ~", J: "db2@6 ~@3 db2 ~@2 db2@6 ~@3 db2 c2 ~",
  K: "bb1@6 ~@3 bb1 ~@2 bb1@6 ~@6", L: "eb1@6 ~@3 eb1 ~@2 eb1@6 ~@6", M: "eb1@6 ~@3 eb1 ~@2 eb1@6 g1@6",
  N: "ab1@6 ~@3 ab1 ~@2 ab1@6 ~@3 c2 db2 ~", O: "eb2@6 ~@3 eb2 ~@2 eb2@6 eb1@3 g1@3",
  P: "ab1@6 ~@3 ab1 ~@2 eb2@5 ~ eb2@5 ~", Q: "ab1@6 ~@3 ab1 ~@2 eb2@5 ~ eb2@6", R: "ab1@6 ~@3 ab1 ~@2 eb2@4 ~@2 eb2@6",
  S: "eb1@6 ~@3 eb1 ~@2 bb1@4 ~@2 bb1@6", T: "eb1@6 ~@3 eb1 ~@2 bb1@5 ~ bb1@5 ~", U: "db2@6 ~@3 db2 ~@2 db2@5 ~ db2@6",
  V: "ab1@2 ~ ab1@2 ~@3",
})).s("gm_electric_bass_finger").gain(0.61)

// chords · epiano1
const epiano1 = note("<~ A@2 B C@3 D E@2 F@2 G H I@2 J K L@2 M@2 N@6 O P>".pickRestart({
  A: "[~@25 eb5@17 ~ [eb4,ab4]@5, ~@22 eb4@19 ~@7, ~@4 bb4@3 c5]/2", // Ab5
  B: "~@18 d5@5 ~, d5@3 ~, ~ bb4@22 ~, ~ f4@14 f4@8 ~, ~@12 bb3@11 ~",
  C: "[bb4@10 ~@2 eb5@6 ~@24 db5@4 ~@2 ab4@15 ~@3 c5@2 ~@4, [eb5,g5]@12 g5@11 ~ g5@23 ~@25, ~@10 eb4@26 eb4@11 eb4@18 ~ eb4 ~@5, ~@10 bb4@10 ~ bb4@18 bb4@8 ~@25, ~@18 eb5@5 ~ db5@18 ~@4 ab3@12 ~@5 ab3@5 ~@4]/3", // Eb
  D: "eb3@12 ~@6 bb4@5 ~, g4@23 ~, bb4@3 ~, ~@12 eb3@11 ~, ~@15 eb4@8 ~",
  E: "[~@21 ab4@2 ~@19 gb4@4 ~@2, eb4@23 ~@16 eb4@7 ~@2, ab4@7 ~ gb4@6 ~@2, c5@9 c5@14 ~, ~@15 ab3@21 ab3@10 ~@2]/2",
  F: "[~ db3@14 ~@9 db5@10 ~ f4@7 f4@5 ~, db4@34 db4@13 ~, ab4@7 ab4@4 ~@5, f4@9 f4@8 ~@7, ~@15 db3@19 ~@14]/2",
  G: "~@9 c5@2 ~, c5@3 ~, ab4@15 ab4@7 ~@2, eb4@2 eb4 ~, ~@9 ab3@14 ~",
  H: "~@9 bb4@2 ~, bb4@3 ~, g4@15 g4@7 ~@2, eb4@6 eb4@5 ~, ~@9 eb3@13 ~@2",
  I: "[[eb4,c5]@15 ~@6 ab4@2 ~@20 c5@3 ~@2, ab4@21 ~@3 gb4@18 gb4@4 ~@2, ~@15 eb4@24 eb4@7 ~@2, ~@15 ab3@21 ab3@10 ~@2, ~@8 c5@13 ~@3]/2", // Cm
  J: "~@18 ab4@5 ~, f4@23 ~, ab4@3 ~, db4@15 db4@8 ~, ~@12 db3@11 ~",
  K: "~@9 f4@2 ~, d4@11 ~, f4@3 ~, bb3@15 bb3@7 ~@2, ~@6 bb2@5 ~",
  L: "[[eb4,g4]@21 ~@21 db4@5 ~, bb3@20 ~ eb3@15 eb3@11 ~, ~@24 g4@23 ~, ~@4 db4@3 ~, ~@24 bb3@15 bb3@8 ~]/2", // Eb
  M: "[eb4@9 ~@33 bb4@4 ~@2, [ab4,c5]@11 ab4@6 ab4@6 g4@13 eb4@10 ~@2, ~@9 ab3@37 ~@2, ~@10 eb4@11 eb4@12 eb3@13 ~@2, ~@12 c5@11 ~ bb4@15 g4@7 ~@2]/2", // Ab
  N: "[[ab4,c5]@3 ~@4 eb4 ~@4 eb4@3 [g4,b4] ~@5 ab4 ~@4 [ab4,c5]@2 eb4 ~@10 g4 [bb3,g4]@3 ~ g4@2 [eb4,g4]@2, eb4@12 eb4@9 ~@3 [eb4,ab4]@12 ~@9 d4@42 eb4@3 ab3@6 ~@12 eb3@21 eb3@14 ~, ~@9 [ab4,c5]@15 c5@22 ~@2 ab4@12 eb4@6 [ab4,c5]@6 db5@21 eb4@18 bb3@9 ~@10 bb3@14, ~@18 ab3@15 ab3@13 ~@2 c4@47 ~ g4@18 eb4@6 eb4@11 eb4@7 ~@6, ~@48 eb4@9 ab3@27 [ab4,c5]@11 ~ bb4@47 ~]/6", // Ab G Ab Eb Ab5 Ab
  O: "~@3 f4, ab4, db4@4 f4 db4@3, f4@12 ab3@11 ~, ~@3 db3@5", P: "[eb4,ab4,c5]@11 ~@13",
})).s("gm_epiano1").gain(0.31).pan(0.8)

// chords · epiano1 · soft notes
const epiano1_soft = note("<~@2 A ~@2 B@2 C ~@3 D E ~@10 F G@2 ~ H ~@2>".pickRestart({
  A: "g5@17 ~@7", B: "[~@23 c5@16 ~@6 eb4@2 ~]/2", C: "eb4@5 ~@3", D: "~@9 ab4 ~@2 ab4@11 ~", E: "~@9 eb4@2 ~",
  F: "~@6 ab4@5 ~", G: "[~@7 eb4@5 ~@4]/2", H: "~@3 g4 ~@4",
})).s("gm_epiano1").gain(0.18).pan(0.8)

// chords · acoustic guitar steel
const acoustic_guitar_steel = note("<~ A@5 B C D E F G B H I J F K L M N O P@3 Q R S T U>".pickRestart({
  A: "[~@24 [eb4,g4]@22 ~@2 [d4,f4]@21 ~@3 g4@22 ~@2 [db4,g4]@24, ~@23 [eb3,bb3]@23 bb2@22 ~@2 eb3@24 ~ [eb3,bb3]@25, ~@47 bb3@22 ~@2 [bb3,eb4]@23 ~@26]/5", // Eb Dm Dbdim Eb5
  B: "[c4,eb4,ab4]@2 [c4,eb4,ab4]!4 c4!2, ~@3 [eb4,ab4]", // Ab Ab5
  C: "[bb3,eb4,g4]@6 [bb3,eb4,g4]@3 [bb3,eb4,g4]@3 [bb3,eb4,g4]@3 [bb3,eb4,g4]@3 eb4@3 eb4@2 ~, ~@18 [bb3,g4]@5 ~", // Eb
  D: "[c4,eb4,ab4]@6 [c4,eb4,ab4]@3 [c4,eb4,ab4]@3 [c4,eb4,ab4]@3 [c4,eb4,ab4]@3 [c4,eb4,ab4]@3 [c4,eb4,ab4]@2 ~", // Ab
  E: "[c4,gb4,ab4]@6 [c4,gb4,ab4]@3 [c4,gb4,ab4]@3 [c4,ab4]@3 [c4,ab4]@3 [c4,ab4]@3 [c4,ab4]@2 ~, ~@12 gb4@6 gb4@5 ~", // Ab7 Fm
  F: "[ab3,db4,f4]@2 [ab3,db4,f4]!6", // Db
  G: "[ab3,db4,f4]@6 [ab3,db4,f4]@3 [ab3,db4,f4]@3 [ab3,db4,f4]@3 [ab3,db4,f4]@3 db4@3 db4@2 ~, ~@18 [ab3,f4]@5 ~", // Db
  H: "[bb3,eb4,g4]@2 [bb3,eb4,g4]!2 [bb3,g4]!2 eb4!2, ~@2 eb4 [bb3,g4]", // Eb
  I: "[c4,eb4,ab4]@6 [c4,eb4,ab4]@3 [c4,eb4,ab4]@3 [c4,eb4,ab4]@3 [eb4,ab4]@3 ~@3 c4@2 ~, ~@5 c4@2 ~, ~@18 [eb4,ab4]@5 ~", // Ab Ab5
  J: "[c4,gb4,ab4]@6 [c4,gb4,ab4]@3 [c4,gb4,ab4]@3 [c4,gb4,ab4]@3 [c4,gb4,ab4]@3 [c4,gb4,ab4]@5 ~", // Ab7
  K: "[bb3,d4,f4]@2 [bb3,d4,f4]!4 [bb3,d4]!2, ~@3 f4", // Bb
  L: "[bb3,eb4,g4]@6 [eb4,g4]@3 [eb4,g4]@3 [bb3,eb4]@3 [bb3,eb4]@3 [bb3,g4]@3 [bb3,d4,g4]@2 ~, ~ bb3 g4 eb4", // Eb Eb5 Eb Gm
  M: "[bb3,db4,g4]@2 [bb3,db4,g4] bb3@2 bb3 [bb3,db4,g4]@2, ~@3 [db4,g4]@3 ~@2", // Gdim Dbdim
  N: "ab4!2 [c4,eb4]!2 [c4,eb4,ab4]!2 [c4,ab4]!2, [c4,eb4]@6 ab4@6 ~@6 eb4@5 ~", // Cm Ab Fm Cm
  O: "[bb3,eb4,g4]@2 [eb4,g4]@2 [eb4,g4]!4, ~ bb3@3", P: "[eb4,ab4]@2 [eb4,ab4]!6",
  Q: "[eb4,ab4]@2 [eb4,ab4]!4 eb4!2, ~@3 ab4", R: "[eb4,g4]@2 [eb4,g4]!6",
  S: "[eb4,g4]@6 [eb4,g4]@3 [eb4,g4]@3 [eb4,g4]@6 [eb4,g4]@5 ~", // Eb
  T: "[db4,f4]@6 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@3 [db4,f4]@5 ~", // Db
  U: "ab4@2 ab4@3 ~ [eb4,ab4]@6 ~@12, eb4 ~@3", // Ab5
})).s("gm_acoustic_guitar_steel").gain(0.14).pan(0.3)

// chords · string ensemble 2
const string_ensemble_2 = note("<~@2 A B@3 C D@3 E@2 C A F@2 G@2 H@2 C I J@2 K@2 L@2 M N>".pickRestart({
  A: "[g3,eb4]", B: "[~@24 eb4@23 db4@23 ~@2, [bb3,d4]@25 ~@47, ~@23 g3@47 ~@2]/3", C: "[c4,ab4]",
  D: "[[g3,eb4]@23 ab4@24 ~ gb4@24, ~@23 c4@49]/3", E: "[f3,db4]/2", F: "[ab4 gb4, c4]/2",
  G: "[[f3,db4]@23 [bb3,d4]@25]/2", H: "[eb4@7 d4 db4@8, g3]/2", I: "eb4, g3 ~", J: "[ab4@43 ~ g4@3 ~]/2", K: "ab4/2",
  L: "eb4/2", M: "db4", N: "c4 ~",
})).s("gm_string_ensemble_2").gain(0.33)

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

// drums · rim
const rim = s("rim").struct("<~@5 [~@3 x] [~ x ~ x]!15 ~@9>").gain(0.6)

// drums · snare
const snare = s("sd").struct("<~@21 [~@2 x ~@2 x ~@2] [~ x ~ x]!7 [~ x ~@2]>").gain(0.53)

// drums · low tom
const low_tom = s("lt").struct("<~@21 [~@6 x!2] ~@8>").gain(0.6)

// drums · hihat
const hihat = s("hh").struct("<A B ~@3 C D E@6 F D E@6 G D E@6 H>".pickRestart({
  A: "x!4", B: "x!3 ~", C: "~@3 x", D: "~ x!7", E: "x!8", F: "x!7 ~", G: "x!5 ~@3", H: "x!4 ~@4",
})).gain(0.4)

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

// drums · crash
const crash = s("cr").struct("<~@6 x ~@15 x ~@7>").gain(0.4)

// drums · ride
const ride = s("rd").struct("<~@2 [x ~@2 x!2 ~ x!2] [x ~@3 x!4] [x ~@3 x ~@2 x] [x!2 ~@2] ~@24>").gain(0.47)

stack(
  bass, epiano1, epiano1_soft, acoustic_guitar_steel, string_ensemble_2, kick, rim, snare, low_tom, hihat, open_hat,
  crash, ride
)

More by Bee Gees