Strudelify
Honey, Honey cover art

1974 · Waterloo

Honey, Honey

ABBA

KeyF majorTempo130 bpm
0:00/0:00
// Honey, Honey — Abba
// 130 bpm, 4/4, key F major. Source: mcgill + midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · acoustic guitar nylon · "Mel"
const acoustic_guitar_nylon = note(`<
  ~@4 A B C ~ D E F G H@2 I@2 J@3 K A B C ~ D E F G H@2 I@2 L@3 ~@2 M N O@2 P Q R@2 S@2 T@2 U@2 V ~ A B C ~ D E F G H@2
  I@2 L@3 ~@6 P Q R@2 ~@4 U@2 V ~ A B C ~ D E F G H@2 I@2 L@3 ~@2 A B C ~ D E F ~ A B C ~ D E F ~@3
>`.pickRestart({
  A: "~@2 e5!2 eb5 e5@2 ab5", B: "~@2 e5@3 ~ eb5@3 ~ e5@4 b4@2", C: "db5@3 ~ e5@2 e5@2 eb5@2 e5@3 ~@3",
  D: "~@4 e5@2 e5@2 eb5@2 e5@3 ~ ab5@2", E: "~@2 e5@2 ~@2 eb5@2 ~@2 e5@3 ~ b4@2", F: "db5@3 ~ e5@2 e5@2 eb5@2 e5@2 ~@4",
  G: "~@7 b4", H: "[[ab5,b5]!3 [e5,ab5] ~ [b4,e5] ~ [ab4,db5]@6 ~@2 b4]/2",
  I: "[[ab5,b5]@2 [ab5,b5] ~ [ab5,b5]@2 [e5,ab5]@2 ~@2 [b4,e5]@2 ~@2 [ab4,db5]@13 ~@3 b4@2]/2", // Abm E E5 Db5
  J: "[[ab5,b5]@2 [ab5,b5] ~ [ab5,b5]@2 [e5,ab5]@2 ~@2 [b4,e5]@2 ~@2 [ab4,db5]@5 ~ [ab4,db5] ~ [ab4,db5] ~ [b4,eb5] ~ [db5,e5]@2 ~@2 [db5,a5]@18]/3", // Abm E E5 Db5 B Dbm Gbm
  K: "[db5,a5] [b4,ab5] [db5,a5] [b4,ab5] [db5,a5] ~ [eb5,b5] ~", // Gbm E Gbm E Gbm Abm
  L: "[[ab5,b5]@2 [ab5,b5] ~ [ab5,b5]@2 [e5,ab5]@2 ~@2 [b4,e5]@2 ~@2 [ab4,db5]@5 ~ [ab4,db5] ~ [ab4,db5] ~ [b4,eb5] ~ [db5,e5]@2 ~@2 [db5,a5]@17 ~]/3", // Abm E E5 Db5 B Dbm Gbm
  M: "[b4,d5]@2 [a4,db5] [b4,d5] ~ [a4,db5] ~ [b4,d5]", N: "~@2 [ab4,e5]@9 ~ [ab4,b4]@4",
  O: "[[a4,db5]@5 ~ [a4,db5] ~ [ab4,b4]@2 [a4,db5]@2 [ab4,b4] ~ [gb4,a4]@4 [db4,gb4]@9 ~ [a4,db5]@4]/2", // A Abm A Abm Gbm Gb5 A
  P: "[b4,d5]@4 [a4,db5]@2 [b4,d5]@2 ~@2 [a4,db5]@3 ~ [b4,d5]@2", Q: "~@2 [b4,e5]@9 ~ [ab4,b4]@4",
  R: "[[a4,db5]@13 ~@3]/2", // A
  S: "[[b4,g5]@2 [b4,g5] ~ [a4,gb5]@2 [b4,g5]@3 ~ [b4,g5]@2 [a4,gb5]@2 [b4,g5]@4 [db5,a5]@9 ~ [db5,e5]@3 ~]/2", // Em D Em D Em Gbm Dbm
  T: "[[d5,gb5]@5 ~ [d5,gb5] ~ [db5,e5]@2 [d5,gb5]@2 [db5,e5]@2 [b4,d5]@16 [g4,b4]@2]/2", // D Dbm D Dbm Bm G
  U: "[[g4,b4]@2 [g4,b4] ~ [g4,b4] ~ [g4,b4]@4 [a4,c5]@2 [b4,d5] ~ [c5,d5]@4 c5@2 b4@2 c5@4 g4@2 a4@3 ~, ~@7 g4@4 ~@5]/2", // G Am Bm Csus2
  V: "[e4,gb4,b4]", // Esus2
})).s("gm_acoustic_guitar_nylon").gain(0.56)

// bass · acoustic bass · "Bass"
const bass = note(`<
  A@2 B C A@2 D B E F B@2 G H I J K J L M A@2 D B E F B@2 G H I J K J L N O P Q R S T Q U V W X Y W Z AA AB AC A@2 D B E
  F B@2 G H I J K J L N O P Q R S T Q U V W X Y W Z AA AB AD A@2 D B E F B@2 G H I J K J L N O A@2 D B E F B@2 A@2 D B E
  F B@2 AE AF
>`.pickRestart({
  A: "e1 ~ e1@2 ab1@2 b1@2 e1 ~ e1@2 ab1@2 b1@2", B: "a1 ~ a1@2 db2@2 e2@2 a1 ~ a1@2 db2@2 e2@2",
  C: "a1 ~ a1@2 db2@2 e2@2 a1@2 ~@2 b1@2 ~@2", D: "a1 ~ a1@2 db2@2 e2@2 a1@2 a1@2 db2@2 e2@2",
  E: "e1@2 e1@2 ab1@2 b1@2 e1 ~ e1@2 ab1@2 b1@2", F: "e1@2 e1@2 ab1@2 b1@2 e1 ~ e1@2 ab1@2 b1 ~",
  G: "e2@2 b1 db2 e2@2 b1 db2", H: "db2@2 ab1 c2 db2@2 ab1 b1", I: "e2@4 b1@2 db2@2 e2@3 ~ b1@2 db2@2",
  J: "db2@2 ab1 b1 db2@2 ab1 b1", K: "e2@2 b1 db2 e2@2 b1 c2", L: "a1@2 db2 e2 a1@2 db2 e2",
  M: "a1@2 ab1 ~ a1 ~ ab1 ~ a1@2 ~@2 b1@3 ~", N: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~",
  O: "b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1 ~ b1@2", P: "b1@2 b1 ~@3 b1 ~@3 b1@2 b1@2 b1@2", Q: "e1!2 ~ e1 ~ e1 gb1 ab1",
  R: "a1!2 ~ a1 ~ a1 ab1!2", S: "gb1!2 ~ gb1 ~ gb1 ab1 a1", T: "b1!2 ~ b1 ~ db2 d2 b1",
  U: "a1@2 a1@2 ~@2 a1 ~@3 a1@2 b1@2 db2@2", V: "a1@2 a1 ~@3 a1@2 ~@2 a1@2 b1@2 db2@2", W: "g1@5 ~ g1@2 g1@3 ~ g1@4",
  X: "a1@5 ~ a1@2 a1@3 ~ a1@3 ~", Y: "d2@5 ~ d2@2 a1@3 ~ a1@4", Z: "g1@5 ~ g1@2 a1@3 ~ b1@4",
  AA: "c2@5 ~ c2@2 c2@3 ~ c2@3 ~", AB: "b1@6 b1 ~ b1@3 ~ b1@4", AC: "b1@5 ~ b1 ~ b1@4 db2@2 eb2@2",
  AD: "b1@6 b1 ~ b1@4 db2@2 eb2@2", AE: "e2 ~ e2@2 ab2@2 b2@2 e2@2 ~@6", AF: "~@2 e2 ~ eb2 e2 ~@2",
})).s("gm_acoustic_bass").gain(0.42).pan(0.4)

// chords · synth strings 1 · "Fl„che"
const synth_strings_1 = note(`<
  A@2 B@2 C@2 D@2 C@2 D@2 E F E F E F G H C@2 D@2 C@2 D@2 E F E F E F G I J K E L M K E D@2 N O P N@2 Q R S T@2 D@2 C@2
  D@2 E F E F E F G I J K E L M K E D@2 N O P N@2 Q R S T@2 D@2 C@2 D@2 E F E F E F G I J C@2 D@2 C@2 D@2 C@2 D@2 C@2
  D@2 U V
>`.pickRestart({
  A: "[e3,ab3,b3]/2", B: "[[e3,a3,db4]@14 [eb3,gb3,b3] ~]/2", C: "[b3,e4,ab4]/2", D: "[db4,e4,a4]/2", E: "[b3,e4,ab4]",
  F: "[db4,e4,ab4]", G: "[db4,e4,a4]",
  H: "[db4,e4,a4] [b3,e4,ab4] [db4,e4,a4] [b3,e4,ab4] [db4,e4,a4] ~ [b3,eb4,gb4] ~", I: "[gb3,a3,b3]",
  J: "[gb3,b3,eb4]", K: "[b3,d4,gb4]", L: "[db4,e4,a4] [b3,e4,ab4]", M: "[db4,gb4,a4]", N: "[g3,b3,d4]",
  O: "[a3,db4,e4]", P: "[a3,d4,gb4] [a3,db4,e4]", Q: "[g3,c4,e4]", R: "[b3,e4,gb4]", S: "[b3,eb4,gb4]",
  T: "[[e4,ab4], b3 ~@31]/2", U: "e2 ~ e2@2 ab2@2 b2@2 e2@3 ~@5", V: "~@2 e2 ~ b1 e2 ~@2",
})).s("gm_synth_strings_1").gain(0.15)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@2 B C ~@31 D@2 E F G H I J K L M N O P Q R S@2 T@2 U@2 V@2 U@2 W X W X W X N D@2 Y@2 Z AA I J K L AB@2 AC@2 AD R AE
  AF T@2 U@2 V@2 U@2 W X W X W X N D@2 T@2 U@2 V@2 U@2 T@2 U@2 V@2 U@2 AG AH
>`.pickRestart({
  A: "[[e4,e5]@23 ~ [e4,e5]@2 [gb4,gb5]@2 [e4,e5]@4]/2", B: "[a3,a4]",
  C: "[db4,a4] ~ [db4,a4] ~ [db4,a4] ~ [db4,a4] ~ [db4,a4] ~@3 [eb4,b4] ~@3", D: "[b4,b5]/2", E: "[gb5,d6]",
  F: "[ab5,e6]", G: "[a5,db6] [ab5,b5]", H: "[gb5,a5] [ab5,b5] [a5,db6] [a4,gb5] [b4,ab5] [db5,a5] [e4,db5] [gb4,d5]",
  I: "[gb4,d5]", J: "[ab4,e5]", K: "[a4,db5] [e3,e4] [d4,d5] [db4,db5]", L: "[b3,b4] [a3,a4] [ab3,ab4] [a3,a4]",
  M: "[g4,b4]", N: "[a4,db5]", O: "[d5,gb5] [db5,e5]",
  P: "[b4,d5] [db5,e5] [d5,gb5] [g4,b4] [a4,db5] [b4,d5] [b3,g4] [c4,a4]", Q: "[d4,b4]", R: "[e4,c5]",
  S: "[[e4,gb4,b4]@10 [b3,eb4]!2 [db4,e4]!2 [eb4,gb4]!2]/2", T: "[b3,ab4]/2", U: "[[db4,a4]@9 [a4,db5]@5 [ab4,b4]@2]/2",
  V: "[ab4,b4]/2", W: "[ab4,b4]", X: "[ab4,db5]",
  Y: "[[d5,gb5,d6]!2 [db5,e5,db6] [d5,gb5,d6]@2 [db5,e5,db6]@2 [d5,gb5,d6]@2 [e5,ab5,e6]@5 [b4,ab5,b5]@2]/2", // D Dbm D Dbm D E
  Z: "[db5,a5,db6]!3 [b4,ab5,b5]@2 [b4,ab5,b5] [db5,a5,db6]@2", // Gbm E Gbm
  AA: "[a4,gb5,a5] [b4,ab5,b5] [db5,a5,db6] [gb4,a4,gb5] [ab4,b4,ab5] [a4,db5,a5] [b3,ab4,b4] [db4,a4,db5]", // D E Gbm Abm A E Gbm
  AB: "[[g4,g5]!2 [gb4,gb5] [g4,g5]@2 [gb4,gb5]@2 [g4,g5]@2 [a4,a5]@5 [e4,e5]@2]/2", // G Gb G Gb G A E
  AC: "[[gb4,gb5]!3 [e4,e5]@2 [gb4,gb5]@2 [d4,d5]@2 [e4,e5] [gb4,gb5] [d4,d5] [b3,b4] [db4,db5] [d4,d5] [a3,a4]]/2", // Gb E Gb D E Gb D B …
  AD: "d4", AE: "[e4,gb4,b4]@15 ~", AF: "[eb4,gb4,b4]", AG: "~@2 e5!2 [gb4,eb5] [ab4,e5] ~@2, ~@4 ab4 ~ ab4 ~@9",
  AH: "~@2 e5 ~ [gb4,eb5] [ab4,e5] ~@2, ~@4 ab4 ~@11", // Ebm Dbm
})).s("gm_string_ensemble_1").gain(0.43)

// chords · acoustic guitar nylon · "RhytGuit"
const acoustic_guitar_nylon_2 = note(`<
  A B C D E@2 F G H E I J K L M N K O P Q E R F S H E I T K L M N K O P U V W X Y Z AA AB AC AD AE AF AG AE@2 AH AI AJ E
  R F S H E I T K L M N K O P U V W X Y Z AA AB AC AD AE AF AG AE@2 AH AI AJ E R F S H E I T K L M N K O P U V E R F S H
  E I T E R F S H E I AK@3
>`.pickRestart({
  A: "~@2 [b3,e4,ab4]@3 ~ [b3,e4,ab4] ~@3 [b3,e4,ab4] ~ [b3,e4,ab4] ~ [b3,e4,ab4] ~", // E
  B: "~@2 [b3,e4,ab4]@2 ~@2 [b3,e4,ab4]@2 ~@2 [b3,e4,ab4] ~ [b3,e4,ab4] ~ [b3,e4,ab4] ~", // E
  C: "~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~", // A
  D: "[db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4]@2 ~@2 [b3,eb4,gb4]@2 ~@2", // A B
  E: "~@2 [b3,e4,ab4]@2 ~@2 [b3,e4,ab4] ~@3 [b3,e4,ab4]@2 [b3,e4,ab4] ~ [b3,e4,ab4] ~", // E
  F: "~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4] ~@3 [db4,e4,a4]@2 [db4,e4,a4] ~ [db4,e4,a4] ~", // A
  G: "~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4]@2 [db4,e4,a4] ~ [db4,e4,a4] ~", // A
  H: "[b3,e4,ab4] ~ [b3,e4,ab4] ~@3 [b3,e4,ab4] ~@3 [b3,e4,ab4]@2 [b3,e4,ab4] ~ [b3,e4,ab4] ~", // E
  I: "~@2 [db4,e4,a4] ~@3 [db4,e4,a4] ~@3 [db4,e4,a4]@2 [db4,e4,a4] ~ [db4,e4,a4] ~", // A
  J: "~@2 [db4,e4,a4] ~@3 [db4,e4,a4] ~@3 [db4,e4,a4]@2 [db4,e4,a4]@2 [db4,e4,a4] ~", // A
  K: "~@2 [b3,e4,ab4] ~@3 [b3,e4,ab4] ~@3 [b3,e4,ab4] ~ [b3,e4,ab4] ~ [b3,e4,ab4] ~", // E
  L: "~@2 [db4,e4,ab4]@2 ~@2 [db4,e4,ab4] ~@3 [db4,e4,ab4] ~ [db4,e4,ab4] ~ [db4,e4,ab4]@2", // Dbm
  M: "~@2 [b3,e4,ab4] ~@3 [b3,e4,ab4] ~@3 [b3,e4,ab4] ~@3 [b3,e4,ab4] ~", // E
  N: "~@2 [db4,e4,ab4] ~@3 [db4,e4,ab4]@2 ~@2 [db4,e4,ab4] ~ [db4,e4,ab4] ~ [db4,e4,ab4]@2", // Dbm
  O: "~@2 [db4,e4,ab4] ~@3 [db4,e4,ab4] ~@3 [db4,e4,ab4] ~ [db4,e4,ab4] ~ [db4,e4,ab4] ~", // Dbm
  P: "~@2 [db4,e4,a4] ~@3 [db4,e4,a4] ~@3 [db4,e4,a4] ~ [db4,e4,a4] ~ [db4,e4,a4] ~", // A
  Q: "[db4,e4,a4] ~ [b3,e4,ab4] ~ [db4,e4,a4]@2 [b3,e4,ab4] ~ [db4,e4,a4]@2 ~@2 [b3,eb4,gb4]@2 ~@2", // A E A E A B
  R: "~@2 [b3,e4,ab4]@2 ~@2 [b3,e4,ab4] ~@3 [b3,e4,ab4]@2 ~@2 [b3,e4,ab4] ~", // E
  S: "~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4]@2 ~@2 [db4,e4,a4] ~", // A
  T: "~@2 [db4,e4,a4] ~@3 [db4,e4,a4] ~@3 [db4,e4,a4]@2 ~@2 [db4,e4,a4] ~", // A
  U: "[gb4,a4,b4] ~ [gb4,a4,b4] ~ [gb4,a4,b4] ~ [gb4,a4,b4] ~", // B7
  V: "[gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~ [gb4,b4,eb5] ~", W: "[b3,d4,gb4]@5 ~ [b3,d4,gb4]@2 [b3,d4,gb4]@7 ~",
  X: "[b3,e4,ab4]@5 ~ [b3,e4,ab4]@2 [b3,e4,ab4]@6 ~@2", Y: "[a3,db4,e4]@5 ~ [a3,db4,e4]@2 [a3,db4,e4]@3 ~ [ab3,e4]@4",
  Z: "[gb3,a3,db4]@5 ~ [gb3,a3,db4]@2 [gb3,a3,db4]@7 ~, b3", AA: "[gb3,b3,d4]@5 ~ [gb3,b3,d4]@2 [gb3,b3,d4]@7 ~",
  AB: "[ab3,b3,e4]@5 ~ [ab3,b3,e4]@2 [ab3,b3,e4]@7 ~", AC: "[e3,a3,db4]@5 ~ [e3,a3,db4]@2 [e3,a3,db4]@8",
  AD: "[e3,a3,db4]@5 ~ [e3,a3,db4] ~ [e3,a3,db4]@7 ~", AE: "[g3,b3,d4]@3 [g3,b3,d4]!5",
  AF: "[a3,db4,e4]@3 [a3,db4,e4]!5", AG: "[a3,d4,gb4]@3 [a3,d4,gb4] [a3,db4,e4]!4", AH: "[g3,c4,e4]@3 [g3,c4,e4]!5",
  AI: "[b3,e4,gb4]@3 [b3,e4,gb4]!5", // Bsus4
  AJ: "[b3,eb4,gb4]@6 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 [b3,eb4,gb4]@2 [b3,eb4,gb4] ~", // B
  AK: "[~@2 [db4,e4,a4] ~@3 [db4,e4,a4] ~@3 [db4,e4,a4]@2 ~@2 [db4,e4,a4] ~ [b3,e4]@17 ~@15, ~@5 [e3,ab3]@6 ~@5]/3", // A E5 E
})).s("gm_acoustic_guitar_nylon").gain(0.17).pan(0.6)

// chords · piano · "Klavier" · B5 Bsus4 B
const piano = note(`<
  ~@68
  [[b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~ [b2,gb3,gb4,b4] ~]!2
  ~@14
  [[b4,e5,gb5]@2 ~@2 [b4,e5,gb5]@2 ~@2 [b4,e5,gb5]@2 ~@2 [b4,e5,gb5]@3 ~]
  [[b4,eb5,gb5]@2 ~@2 [b4,eb5,gb5]@2 ~@2 [b4,eb5,gb5]@2 ~@2 [b4,eb5,gb5]@3 ~]
  ~@35
>`).s("gm_piano").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  A@15 B A@15 B A@5 C@8 D E D E D E@3 A@11 B A@5 C@8 D E D E D E@3 A@11 B A@22 F
>`.pickRestart({
  A: "x!4", B: "x ~ x ~ x ~ x!2", C: "x!2 ~ x!2 ~ x ~", D: "x ~@2 x!2 ~@3", E: "x ~@2 x!2 ~ x ~", F: "x ~ x ~ x!2 ~@2",
})).gain(0.28)

// drums · snare
const snare = s("sd").struct(`<
  A@3 B A@7 C A@7 B A@7 C A@7 D@2 A@7 C A@7 C A@7 C A@7 D@2 A@7 C A@7 C A@7 C A@7 D@2 A@7 C A@7 C A E
>`.pickRestart({
  A: "~ x ~ x", B: "x!5 ~ x ~", C: "~@2 x ~@2 x!3", D: "x!4", E: "~@3 x!2 ~@3 x ~ x ~@5",
})).gain(0.32)

// drums · low tom
const low_tom = s("lt").struct("<~@3 [~@3 x] ~@117>").gain(0.32)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!3 [x!5 ~ x ~] [x!8]!15 [x!5 ~ x ~] [x!8]!100 [x!3 ~ x!2 ~@2]>").gain(0.28)

// drums · shaker
const shaker = s("sh").struct("<A@3 B A@15 C A@15 ~@10 D@8 A@15 ~@14 D@4 A@15 ~@2 A@16 ~@2>".pickRestart({
  A: "~ x ~@6", B: "x!4", C: "~ x ~ x!2 ~ x ~", D: "x ~@2 x!2 ~ x ~",
})).gain(0.28)

// drums · guiro
const guiro = s("guiro:4").struct("<~@12 A@8 ~@8 A@7 B@2 ~@24 A@7 B@2 ~@24 A@7 B@2 ~@18>".pickRestart({
  A: "x", B: "x!4",
})).gain(5.94)

stack(
  acoustic_guitar_nylon, bass, synth_strings_1, string_ensemble_1, acoustic_guitar_nylon_2, piano, kick, snare, low_tom,
  hihat, shaker, guiro
)

More by ABBA