Strudelify

I Wonder (Departure)

ABBA

KeyC majorTempo67 bpm
0:00/0:00
// I Wonder (Departure) — ABBA
// 67 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 76 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(67/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
const piano = note(`<
  A@5 B C D E F G H I J K L M@2 G H N O P Q R S@2 T U V W X Y Z W AA AB AC AD AE AF@2 AG AH AI@2 AJ L AK AL AM H N O P Q
  R S@2 AN U V W X AO Z W AP ~ AQ N AR@2 AS@2 ~
>`.pickRestart({
  A: "[~@10 [c3,e4]@2 [g3,g4]@2 d5@2 ~@2 a2@2 e3@2 [a3,c4]@3 b4 [f2,a4]@2 [f3,c5]@2 a5@2 ~@2 f2@2 d3@2 [g3,b3]@4 ~ [e2,e5]@2 [c3,g5]@2 d6@2 ~@2 a2@2 [e3,e5]@2 f5@2 ~@2 g2@3 d3@3 g3@2 c4@3 [g3,b3]@5 [d4,g4]@5, ~@14 [c4,e4]@4 ~@12 [a3,c4]@4 ~@13 [g3,c4]@4 ~@4 [a3,c4]@4 ~@21, ~@16 c5@6 ~@10 g5@6 ~@11 c6@4 ~@4 g5@18 ~@5]/5", // C G Am F F5 G E C5 …
  B: "~@4 [g3,c4,e4]@4 e4@6 d4 c4, c3 [f2,a3,c4]", // C F
  C: "[b2,g3,d4]@8 ~@2 c4 d4 [c4,e4] d4 [a3,c4] d4, ~ g3, ~@2 e2 ~, ~@5 f2 g2 ~", // G C Am
  D: "[g3,c4]@4 [g3,c4,e4]@4 [c4,e4]@4 d4 c4@3, c3 [f2,a3]", // C5 C F
  E: "a3@6 ~@4 c4 d4 e4 d4 c4 d4, d4@5 ~@3, f#2 g2, ~@6 c4@4 ~@2 b3@3 ~",
  F: "[e3,c4] [g3,e4] [e3,c4,g4] [f3,c4,f4,a4]@5, c3 ~@3, g3 ~@15", // C F
  G: "[g3,b3] [b3,d4] [d4,f4] ~ c3@4, f3 ~, ~@3 [c4,e4,g4]@5", // G Bm Dm C
  H: "[f3,a3] [a3,c4] [c4,e4] ~@2 f4@2 e4, f2 d3, ~@3 [a3,c4]@5, ~@3 g4@2 ~@3", // F Am C Am
  I: "~@3 g4, [g2,f3,a3], c4!2 e4 ~, ~ d4@3 d4@4, ~@3 f4@2 a4@2 ~", // Dm
  J: "~@8 e4@2 f4@2 e4@2 d4 c4, c3 [f2,a3,c4], ~ [g3,c4,e4] ~@2, ~@3 d4@2 ~@2 a4", // F C
  K: "[b2,d4]@8 ~@2 c4 d4 [c4,e4] d4 [a3,c4] d4, ~@2 e2 ~, ~@5 f2 g2 ~", // Bm C Am
  L: "~@4 [g3,c4,e4]@4 [c4,e4]@4 d4 c4@3, c3 [f2,a3]", // C F
  M: "[~@7 c6!2 b5!2 a5!2 g5!2 ~ [e3,c4]@2 [g3,e4]@2 [e3,c4,g4]@2 [f3,c4,f4,a4]@10, d4@3 ~@5, f#2@6 g5@4 ~@5 g5@4 ~@13, a3@3 c4@3 b3@2 ~@8, ~ d5 g2@2 c3 ~@3]/2", // C F
  N: "[f3,a3,c4] [f3,b3,d4], g2", O: "~ a4 c#4 d4, [f2,f3,a3]", P: "~ g4 b3 c4, [e2,e3,g3]",
  Q: "~@2 f4 e4 f4@3 e4, d2 [c2,a3,d4], ~ [a3,d4] ~@2", R: "f4 g4 [g2,d4] [c3,e4], [b1,g3,d4] [g3,a#3]",
  S: "[~@2 a4@2 c#4 g3@3 [e2,g3]@4 ~@2 g4@2, [f2,f3,a3] f2 ~ a2, ~@5 b3@7 ~@4]/2", // Em F
  T: "[c4,e4]@3 f4@2 ~ g#3@2 ~@2 [g#2,e4]@2 [a2,e3,a3]@4, [d2,a3]@5 e4@2 ~ g#3@4 ~@4, ~@3 b3@3 ~@2, ~@3 [e2,d4]@2 ~@3", // C C#m A5 D5 E7
  U: "d4 e4 f4 ~ c3@2 [c3,c4,e4,g#4]@2, g2 ~, [f3,a#3]@3 [c4,e4,g4]@3 ~@2", // Caug A#5 C
  V: "f2@6 f2@2 [f2,a4]@6 g4 f4, [c4,f4,a4] [b3,d4], ~@7 f2", W: "e2@3 e2 a2@3 a2, [c4,g4] [a3,c4]",
  X: "~@3 d3 [a3,f4] [b3,g4]@2 [g2,f3,d4], d3@3 ~ g2@3 ~, ~ [a3,f4] ~@2", // Dm Em G7 Dm
  Y: "~@3 [c3,f4] ~@2 [c3,a#3,e4,g4]@2, [g3,e4] ~, c3@3 ~ [g2,a#3,e4,f4]@2 ~@2, ~ d4@3 d4@4, ~@2 c4@2 ~ a4@2 ~", // F5 C7 C Edim
  Z: "~@6 f2@2 [f2,a4]@6 g4 f4, [a3,f4] [b3,d4], f2@3 ~@4 f2, ~ a4 ~@2", // F Dm Bm
  AA: "[f3,a3] [a3,c4] [c4,e4] a3 ~@3 e4, d3!2 a3@2, ~@3 c4@5, ~@3 g4@2 f4@2 ~, ~@2 d3!2", AB: "c4 d4, [g2,f3,a3]",
  AC: "~@2 [g4,c5] [c5,e5] [d5,f5] [c5,e5] [b4,d5] [a4,c5] [b4,d5] [a4,e5] [g4,c5]@4 ~ c4, c3 [f2,a3,c4], ~@2 [g3,c4,e4]@2 e4@3 [d4,f5,a5]", // C5 C Dm C Bm Am Bm A5 …
  AD: "[f5,g5] d5 e5 f5 [d5,f5] [f2,c5,e5] [g2,a#4,d5] [a4,c5], [b2,g3,d4] g3, ~@2 e2 ~", // Fsus2 Dm Fmaj7 Gm Am G
  AE: "~@2 d5 e5 [d5,g5] e5 f5 [e5,g5] e6@2 d6@2 [d4,a5] ~ d6@2, c3 [f2,a3], ~@4 [g3,c4,e4]@4 [c4,e4]@5 c4@3, ~@8 c6 ~ b5 ~ c6@2 ~@2", // G5 Em D5 F C
  AF: "[[a#5,d6] [a5,c6]!2 [g5,b5]!2 [a5,d6]!2 [c6,e6]!2 [b5,d6]!2 [a5,c6]!2 [g5,b5] [f5,a5] d5 [e3,c4]@2 [g5,c6] c6 [d6,f6] [c6,e6] [a#5,d6] [a5,c6] b5 c6 [f5,a5]@4 [f6,c7]@2, d4@12 ~@3 g5@3 ~@14, f#2@2 g2@2 c3 ~@3, a3@3 c4@3 b3@2 ~ [g3,e4] [e3,c4,g4] [f3,c4,f4,a4]@3 ~@2]/2", // A# Am G D5 C Bm Am G …
  AG: "[f6,b6] [g6,c7] [b3,d4,g6,d7]@2 [d4,f4,d6,f6]@2 c6@2 ~@2 [c6,e6]@2 [a5,d6]@2 [g5,c6]@2, f3@2 c3 ~, [g3,b3] ~@2 [c4,e4,g4]@3 ~@2, ~@3 f6@2 ~@3", // Fdim C5 G Dm C D5 C5 G …
  AH: "b5 c6 [a3,c4,g5]@2 [c4,e4]@2 [a5,c6] [g#5,c#6] [b5,d6] [c6,e6] [f4,a5]@4 ~ [a5,c6], f2 d3, [f3,a3] a5@2 [a3,c4]@5, ~@6 g4@4 f5 ~@3 e4@2", // Am7 C Am C#5 Bm C F Am …
  AI: "[[a5,c6] [g5,b5]!2 [f5,a5]!2 [e5,g5]!2 [f6,a6]!2 [e6,g6]!2 [d6,f6]!2 [c6,e6]!2 ~@5 [g3,c4,e4]@4 e4@6 d4 c4, [g2,f3,a3]@15 [b5,d6]@12 ~@5, c4 d4 c3 [f2,a3,c4]]/2", // Am G F Em F Em Dm C …
  AJ: "[b2,g3,d4]@4 ~ f2 g2 ~, ~ g3, ~@2 e2 ~", AK: "a3@3 ~@3 b3@2, d4@3 ~, f#2 g2, ~@3 c4@3 ~@2",
  AL: "[e3,c4] [g3,e4] [e3,c4,g4] [f3,c4,f4,a4]@3 ~@2, c3 ~@3", // C F
  AM: "[g3,b3] [b3,d4] [d4,f4] ~ c3@2 ~@2, f3 ~, ~@3 [c4,e4,g4]@3 ~@2", // G Bm Dm C
  AN: "[c4,e4]@3 f4@2 ~ g#3@2 ~@2 [g#2,e4]@2 a2@4, [d2,a3]@5 e4@2 ~ g#3@4 ~@4, ~@3 b3@3 ~@2, ~@3 [e2,d4]@2 ~@3", // C C#m D5 E7
  AO: "~@3 [c3,f4] ~@2 [c3,a#3,e4,g4]@2, g3 ~, c3@3 ~ [g2,a#3,e4,f4]@2 ~@2, ~ d4@3 d4@4, ~@2 c4@2 ~ a4@2 ~", // F5 C7 Edim
  AP: "[f3,a3] [a3,c4] [c4,e4] ~@3 d3@2, d3!3 ~, ~@3 [a3,c4]@4 ~, ~@3 g4@2 f4@2 ~", // F Am C Am
  AQ: "g4@2 f4@2 e4@2 f4 e4 [f3,a3,c4]@4 ~@2 a3@2, d3@3 ~, [a3,c4] ~", // F Am
  AR: "[c3@4 g2@4 [f3,a3]@2 b4 a4 [g#3,c4,g4]@2 [g#3,c4,f4]@2, c4@5 c4 ~@2, [e3,g3]@2 f2!2]/2", // F G#maj7 Fm Em
  AS: "[[g3,e4] [f3,d4] [e3,g3]@2 [f3,a3]@4 [e3,g3]@6 ~@2, c3@7 ~, ~ c4@6 ~]/2", // C Dm Em F Em
})).s("gm_piano").gain(0.35)

// other · glockenspiel · "Bells"
const glockenspiel = note("<A B C@3 ~@16 D E ~@30 D E ~@13 F ~@3 G ~@3>".pickRestart({
  A: "~@5 e5 g5 d6", B: "c6@6 ~@3 b5 a5@2 c6@2 a6@2",
  C: "[g6@6 ~@5 e6@2 g6@2 d7@2 c7@4 e6@2 f6@2 ~@8 g7 [c7,d7,e7,f7] [f6,a6,b6] [c6,d6,e6] b5@3 ~@8, ~@26 g6@9 g6@8 ~@5]/3", // Dm7 Bm7b5 C
  D: "~ a6 c#6 d6", E: "~ g6 b5 c6", F: "a5 c6 e6 g6@2 f6@2 ~", G: "~@2 b6 a6 g6@2 f6@2",
})).s("gm_glockenspiel").gain(0.35)

// bass · electric bass finger · "Bass"
const bass = note(`<
  A@4 B C D C E F G H I C D C E F G H I J K L M N O P Q R S T U R S V I C D C E F G H I C D C E F G H I J K L M N O P Q
  R S T U R S V@2 W I X N Y@2 ~
>`.pickRestart({
  A: "[~@10 c3@2 g3@2 [c4,e4]@4 a2@2 e3@2 [a3,c4]@4 f2@2 f3@2 [a3,c4]@4 f2@2 d3@2 [g3,b3]@4 ~ e2@2 c3@2 [g3,c4]@4 a2@2 e3@2 [a3,c4]@4 g2@3 d3@2]/4", // C Am G C5 Am
  B: "~ g3@2 c4@3 [g3,b3]@5 ~@5", C: "c3 f2", D: "b2@4 ~ f2 g2 ~, ~@2 e2 ~", E: "f#2 g2", F: "c3@2 e3 f3@3 ~@2",
  G: "f3@2 c3 ~", H: "f2 d3", I: "g2", J: "f2", K: "e2", L: "d2 c2", M: "b1@2 g2 c3", N: "f2!2", O: "e2 a2",
  P: "d2@3 e2@2 g#2 a2@2", Q: "g2@2 c3!2", R: "f2@3 f2 f2@3 f2", S: "e2@3 e2 a2@3 a2", T: "d3@3 d3 g2@3 g2",
  U: "c3@3 c3 g2@2 c3@2", V: "d3!4", W: "d3@3 ~", X: "c3 e2", Y: "[c3@7 ~]/2",
})).s("gm_electric_bass_finger").gain(0.2)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  ~@9 A B C ~ D E F G@2 B C H I J K L M@2 N O P Q R S T Q U ~ V W F X Y Z C AA AB W F X AC Z C AD I J K L M@2 AE O P Q R
  AF T Q AG ~ AH ~@2 AI AJ@3
>`.pickRestart({
  A: "[e3,c4] [g3,e4] [e3,c4,g4] [f3,c4,f4,a4]@5, c3 ~@3, g3 ~@15", // C F
  B: "[g3,b3] [b3,d4] [d4,f4] ~ c3@4, f3 ~, ~@3 [c4,e4,g4]@5", // G Bm Dm C
  C: "[f3,a3] [a3,c4] [c4,e4] ~@2 f4@2 e4, f2 d3, ~@3 [a3,c4]@5, ~@3 g4@2 ~@3", // F Am C Am
  D: "~@8 e4@2 f4@2 e4@2 d4 c4, c3 [f2,a3,c4], ~ [g3,c4,e4] ~@2, ~@3 d4@2 ~@2 a4", // F C
  E: "[b2,d4]@8 ~@2 c4 d4 [c4,e4] d4 [a3,c4] d4, ~@2 e2 ~, ~@5 f2 g2 ~", // Bm C Am
  F: "~@4 [g3,c4,e4]@4 [c4,e4]@4 d4 c4@3, c3 [f2,a3]", // C F
  G: "[~@7 c6!2 b5!2 a5!2 g5!2 ~ [e3,c4]@2 [g3,e4]@2 [e3,c4,g4]@2 [f3,c4,f4,a4]@10, d4@3 ~@5, f#2@6 g5@4 ~@5 g5@4 ~@13, a3@3 c4@3 b3@2 ~@8, ~ d5 g2@2 c3 ~@3]/2", // C F
  H: "[f3,a3,c4] ~, g2", I: "~ a4 c#4 d4, [f2,f3,a3]", J: "~ g4 b3 c4, [e2,e3,g3]",
  K: "~@2 f4 e4 f4@3 e4, d2 [c2,a3,d4], ~ [a3,d4] ~@2", L: "f4 g4 [g2,d4] [c3,e4], [b1,g3,d4] [g3,a#3]",
  M: "[~@2 a4@2 c#4 g3@3 [e2,g3]@4 ~@2 g4@2, [f2,f3,a3] f2 ~ a2, ~@5 b3@7 ~@4]/2", // Em F
  N: "[c4,e4]@3 f4@2 ~ g#3@2 ~@2 [g#2,e4]@2 [a2,e3,a3]@4, [d2,a3]@5 e4@2 ~ g#3@4 ~@4, ~@3 b3@3 ~@2, ~@3 [e2,d4]@2 ~@3", // C C#m A5 D5 E7
  O: "d4 e4 f4 ~ c3@2 [c3,c4,e4,g#4]@2, g2 ~, [f3,a#3]@3 [c4,e4,g4]@3 ~@2", // Caug A#5 C
  P: "f2@6 f2@2 [f2,a4]@6 g4 f4, [c4,f4,a4] [b3,d4], ~@7 f2", Q: "e2@3 e2 a2@3 a2, [c4,g4] [a3,c4]",
  R: "~@3 d3 [a3,f4] [b3,g4]@2 [g2,f3,d4], d3@3 ~ g2@3 ~, ~ [a3,f4] ~@2", // Dm Em G7 Dm
  S: "~@3 [c3,f4] ~@2 [c3,a#3,e4,g4]@2, [g3,e4] ~, c3@3 ~ [g2,a#3,e4,f4]@2 ~@2, ~ d4@3 d4@4, ~@2 c4@2 ~ a4@2 ~", // F5 C7 C Edim
  T: "~@6 f2@2 [f2,a4]@6 g4 f4, [a3,f4] [b3,d4], f2@3 ~@4 f2, ~ a4 ~@2", // F Dm Bm
  U: "[f3,a3] [a3,c4] [c4,e4] a3 ~@3 e4, d3!2 a3@2, ~@3 c4@5, ~@3 g4@2 f4@2 ~, ~@2 d3!2", // F Am C
  V: "~@4 [g3,c4,e4]@4 ~@2 g4@4 ~ c4, c3 [f2,a3,c4], ~@4 e4@3 d4", W: "[b2,g3,d4]@4 ~ f2 g2 ~, ~ g3, ~@2 e2 ~",
  X: "a3@3 ~@3 b3@2, d4@3 ~, f#2 g2, ~@3 c4@3 ~@2", Y: "[e3,c4] [g3,e4] [e3,c4,g4] [f3,c4,a4]@5, c3@2 ~ f4@3 ~@2",
  Z: "[g3,b3] [b3,d4] [d4,f4] ~ c3@4, f3 ~, ~@3 e4@5, ~@3 [c4,g4]@3 ~@2", AA: "c4 d4, [g2,f3,a3]",
  AB: "~@4 [g3,c4,e4]@4 e4@6 d4 c4, c3 [f2,a3,c4]", AC: "[e3,c4] [g3,e4] [e3,c4,g4] [f3,f4]@5, c3@2 ~ [c4,a4]@3 ~@2",
  AD: "[f3,a3,c4] [f3,b3,d4], g2", // F Bdim
  AE: "[c4,e4]@3 f4@2 ~ g#3@2 ~@2 [g#2,e4]@2 a2@4, [d2,a3]@5 e4@2 ~ g#3@4 ~@4, ~@3 b3@3 ~@2, ~@3 [e2,d4]@2 ~@3", // C C#m D5 E7
  AF: "~@3 [c3,f4] ~@2 [c3,a#3,e4,g4]@2, g3 ~, c3@3 ~ [g2,a#3,e4,f4]@2 ~@2, ~ d4@3 d4@4, ~@2 c4@2 ~ a4@2 ~", // F5 C7 Edim
  AG: "[f3,a3] [a3,c4] [c4,e4] ~@3 d3@2, d3!3 ~, ~@3 [a3,c4]@4 ~, ~@3 g4@2 f4@2 ~", // F Am C Am
  AH: "g4@2 f4@2 e4@2 f4 e4 ~@8, d3@3 ~, [a3,c4] ~", AI: "~@2 [g#3,c4,g4] [g#3,c4,f4], ~ f2",
  AJ: "[[g3,e4] [f3,d4] [e3,g3]@2 [f3,a3]@4 [e3,g3]@11 ~@5, c3@3 ~, ~@2 c4@17 ~@5]/3", // C Dm Em F Em
})).s("gm_string_ensemble_1").gain(0.14)

// other · pizzicato strings · "Pizacatto"
const pizzicato_strings = note("<~@21 A B C D ~@28 A B C D ~@19>".pickRestart({
  A: "a3 c4 f4 a4 a3 b3 c#4 g4", B: "g3 b3 d4 g4 g3 a3 c4 e4", C: "a3 d4 e4 f4 a3 d4 e4 f4",
  D: "g3 d4 f4 g4 g3 d4 f4 g4",
})).s("gm_pizzicato_strings").gain(0.37)

// other · glockenspiel · "Bells Delay"
const glockenspiel_2 = note("<A B@4 ~@16 C D ~@30 C D ~@13 E ~@3 F ~@3>".pickRestart({
  A: "~@5 e5 g5 d6",
  B: "[c6@6 ~@4 b5 a5@2 c6@2 a6@2 g6@6 ~@4 e6@2 g6@2 d7@2 c7@4 ~ e6@2 f6@2 ~@7 g7 [c7,d7,e7,f7] [f6,a6,b6] [c6,d6,e6] b5@3 ~@8, ~@42 g6@9 g6@8 ~@5]/4", // Dm7 Bm7b5 C
  C: "~ a6 c#6 d6", D: "~ g6 b5 c6", E: "a5 c6 e6 g6@2 f6@2 ~", F: "~@2 b6 a6 g6@2 f6@2",
})).s("gm_glockenspiel").gain(0.33)

// drums · kick
const kick = s("bd").struct("<~@28 A B@7 C B@16 ~@8 B@6 D@2 C ~@6>".pickRestart({
  A: "~@2 x!2", B: "x!2", C: "x", D: "x!4",
})).gain(0.21)

// drums · snare
const snare = s("sd").struct("<~@28 A B C@6 ~ C@7 D C@7 D ~@8 B C@3 B C ~@9>".pickRestart({
  A: "~@2 x!2", B: "x!2 ~ x", C: "~ x ~ x", D: "~ x ~@2",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct("<~@36 [~@7 x] ~@7 [~@7 x] ~@31>").gain(0.21)

// drums · pedal hat
const pedal_hat = s("hh").struct("<~@29 A B@5 C D B@16 ~@8 A B@3 A B ~@9>".pickRestart({
  A: "~@2 x!4 ~ x", B: "x!2 ~ x!3 ~ x", C: "x!2 ~ x!3 ~@2", D: "x ~ x ~@2 x ~@2",
})).gain(0.21)

// drums · mid tom
const mid_tom = s("mt").struct("<~@36 [~@8 x ~@4 x ~@2] ~@7 [~@10 x ~@2 x ~@2] ~@31>").gain(0.21)

// drums · open hat
const open_hat = s("oh").struct("<~@29 A B@6 ~ B@16 C ~@7 A B@3 A B ~@9>".pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x",
})).gain(0.21)

// drums · crash
const crash = s("cr").struct("<~@28 A B ~@15 B ~@15 B ~@3 B ~@3 B ~@6>".pickRestart({
  A: "~@2 x!2", B: "x",
})).gain(0.21)

stack(
  piano, glockenspiel, bass, string_ensemble_1, pizzicato_strings, glockenspiel_2, kick, snare, low_tom, pedal_hat,
  mid_tom, open_hat, crash
)

More by ABBA