Strudelify
Take On Me cover art

1985 · Hunting High and Low

Take On Me

a-ha

KeyC majorTempo175 bpm
0:00/0:00
// Take On Me — a-ha
// 175 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (4/4 at bar 1, 2/4 at bar 4, 4/4 at bar 4) are rendered on a constant 4/4 grid of one bar per cycle
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 165 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(175/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 · piano · "elec grand"
const piano = note("<~@84 A B@7 C ~@11 A B@3 C ~@56>".pickRestart({
  A: "~@8 b4 a#4 a4 g#4 g4 g#4 a4 a#4", B: "b4 a#4 a4 g#4 g4 g#4 a4 a#4 b4 a#4 a4 g#4 g4 g#4 a4 a#4",
  C: "b4 a#4 a4 g#4 g4 g#4 a4 a#4 ~@8",
})).s("gm_piano").gain(0.22).pan(0.8)

// bass · synth bass 1 · "synth bass"
const bass = note(`<
  ~@8 A B A B C D E F G D E F G D H D I D E F G D E F G D J F K L M N O L M N O P Q R S T U V W D E F G D E F G D J F K
  L M N O L M N O P Q R S T U V X Y Z AA AB Y Z AA AC B AD AE AF ~@3 C D E F G D E F G D H D I D E F G D E F G D J F K L
  M N O L M N O P Q R S L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AI L AG AH AJ
>`.pickRestart({
  A: "~@2 d2 c2 d3 ~@2 d2", B: "~@2 d2 c2 d3!2 ~ d2", C: "~@4 d2!3 ~", D: "~@3 g2 ~ g2 ~ g2", E: "g2 ~@3 c2!3 ~",
  F: "~@3 f2 ~ f2 ~ f2", G: "e2 ~@2 e2 d2!3 ~", H: "g2 ~@3 f2!3 ~", I: "g2 ~@3 d2!3 ~", J: "g2 ~@3 a2!3 ~",
  K: "g2!3 ~ c2!3 ~", L: "c2 ~ c2 ~ b1 ~ b1 ~", M: "b1 ~ b1 ~ a1 ~ a1 ~", N: "a1 ~ a1 ~ f1 ~ f1 ~",
  O: "f1 ~ g1 ~ c2!3 ~", P: "~@3 c2 b1!3 ~", Q: "~@3 b1 a1!3 ~", R: "~@3 a1 f1!2 f2!2", S: "g1!2 g2!2 c2!3 ~",
  T: "c2 ~ c2 ~ g1 ~ g1 ~", U: "g1 ~ g1 ~ f1!4", V: "f1!3 ~ g1!4", W: "g1!3 ~ d2!3 ~", X: "g1!3 ~ e3 ~@2 e2",
  Y: "~@2 e2 d2 e3!2 ~ e2", Z: "~@2 e2 d2 a#2 ~@2 a#1", AA: "~@2 a#1 a1 a#2!2 ~ a#1", AB: "~@4 e3 ~@2 e2",
  AC: "~@4 d3 ~@2 d2", AD: "~@2 d2 c2 g2 ~@2 g1", AE: "~@2 g1 f1 g2!2 g1 ~", AF: "g1 ~ g1 ~@5", AG: "b1 ~ b1 ~ a1!3 ~",
  AH: "a1 ~ a1 ~ f1!3 ~", AI: "g1!3 ~ c2!3 ~", AJ: "g1!2 ~@6",
})).s("gm_synth_bass_1").gain(0.45)

// chords · epiano2 · "elec piano"
const epiano2 = note("<~@4 A@5 ~@11 B@6 ~@54 C@5 ~@3 D@5 ~@72>".pickRestart({
  A: "[~@4 a5@16 ~@3 c5@16 ~, ~@3 d5@16 ~@21, ~@7 f5@32 ~ e5@32 ~@8]/5",
  B: "[~@7 d6@4 ~, ~ a5@4 c6@4 ~@3, ~@3 b5@4 ~@5]/6", C: "[~ b5@4 d5@4 ~, ~@3 e5@16 ~@21, ~@7 g5@32 ~@41]/5",
  D: "[e6@4 ~@12 c6@4 ~ d6@13 ~@6, ~@2 e6@8 c6 ~@9, ~@5 f6@16 ~@19]/5",
})).s("gm_epiano2").gain(0.54).pan(0.7)

// other · lead 2 sawtooth · "saw wave"
const lead_2_sawtooth = note(`<
  ~@12 A B C D E B C D E B C D F ~@67 A B G B G B C D E B C D E B C D F ~@56
>`.pickRestart({
  A: "~@8 a5 ~ a5 ~ f5 ~ d5 ~", B: "~@2 d5 ~@3 g5 ~@3 g5 ~@3 g5 ~", C: "b5 ~ b5 ~ c6 ~ d6 ~ c6 ~ c6 ~ c6 ~ g5 ~",
  D: "~@2 f5 ~@3 a5 ~@3 a5 ~@3 a5 ~", E: "g5 ~ g5 ~ a5 ~ g5 ~ a5 ~ a5 ~ f5 ~ d5 ~", F: "g5 ~ g5 ~ g5 ~@11",
  G: "b5 ~ b5 ~ c6 ~ d6 ~ a5 ~ a5 ~ f5 ~ d5 ~",
})).s("gm_lead_2_sawtooth").gain(0.32)

// other · synth brass 1 · "brass"
const synth_brass_1 = note(`<
  ~@39 A@2 ~@2 A@2 ~@22 B@2 ~@2 C@2 ~@50 A@2 ~@2 D@2 ~@6 D@2 ~@2 D@2 ~@2 E@2 ~@2 F@2 G@4 ~@2 H@2 I@3 ~@5
>`.pickRestart({
  A: "[~@8 g5@5 ~ a5@5 ~ g5@3 ~@9]/2", B: "[~@8 g5@6 a5@5 ~ g5@3 ~@9]/2", C: "[~@8 g5@6 a5@6 g5@3 ~@9]/2",
  D: "[~@8 g5@5 ~ a5@4 ~@2 g5@3 ~@9]/2", E: "[~@8 g5@4 ~@2 a5@4 ~@2 g5@3 ~@9]/2",
  F: "[~@8 g5@4 ~@2 a5@5 ~ g5@3 ~ c5 ~ c5 ~@3 c5 ~]/2",
  G: "[~@2 c5 ~@3 d5@2 ~@2 b4@2 ~@2 g4@9 ~ c5@14 ~@2 g5@4 ~@2 a5@5 ~ g5@3 ~@9]/4",
  H: "[~@8 g5@5 ~ a5@4 ~@2 g5@4 c5 ~ c5 ~@3 c5@2]/2", I: "[~@2 c5@2 ~@2 d5@2 ~@2 b4@2 ~@2 g4@9 ~ c5@14 ~@10]/3",
})).s("gm_synth_brass_1").gain(0.48)

// other · synth brass 1 · "brass" · soft notes
const synth_brass_1_soft = note("<~@159 A@2 B@4>".pickRestart({
  A: "[~@8 g5@5 ~ a5@4 ~@2 g5@3 ~ c5 ~ c5@2 ~@2 c5@2]/2",
  B: "[~@2 c5@2 ~@2 d5@2 ~@2 b4@2 ~@2 g4@8 ~@2 c5@14 ~@2 g5@5 ~ a5@4 ~@2 g5@2 ~@10]/4",
})).s("gm_synth_brass_1").gain(0.18)

// chords · synth strings 1 · "strings"
const synth_strings_1 = note(`<
  ~@8 A@2 B@8 C D@7 E@8 F@2 G@8 H@4 I@4 J@2 K@8 F@2 L@8 M@4 N@8 O@2 P@7 ~@3 Q@7 D@7 R@4 S@6 T@8 M@4 U@4 V@4 W@8 X@4 Y@4
  Z@4 AA@4 AB
>`.pickRestart({
  A: "[~ [d4,f4,a4]@3]/2", // Dm
  B: "[~@8 [d4,e4,a4]@31 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/8", // Dsus2 Dm G C F Dm G
  C: "~ [c4,e4,g4]", // C
  D: "[~@8 [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/7", // F Dm G F G Dm G
  E: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@15 ~ [c4,f4,a4]@14 ~@2 [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/8", // C F Dm G C F Dm G
  F: "[~@8 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/2", // Am F
  G: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@14 ~@2 [c4,f4,a4]@14 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@8]/8", // G C Em Am F C Em Am …
  H: "[~@8 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@14 ~@2 [c4,f4,a4]@7 ~]/4", // C Em Am F
  I: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [d4,g4,b4]@15 ~ [c4,f4,a4]@15 ~ [d4,g4,b4]@8]/4", // G C G F G
  J: "[~@8 [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/2", // Dm G
  K: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/8", // C F Dm G C F Dm G
  L: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@14 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@8, ~@8 a#4 ~@119]/8", // G C Em Am F C Em Am …
  M: "[~@8 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // C Em Am F
  N: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [d4,g4,b4]@15 ~ [c4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [e4,g4,b4]@30 ~@2 [f4,a#4,d5]@24]/8", // G C G F G Em A#
  O: "[~@4 [g4,b4]@7 ~ g4@4, ~ e4@3]/2", // G
  P: "[b4@6 ~@2 [d4,f4,a#4]@31 ~ [d4,f4,a4]@31 ~ [d4,g4,b4]@31 ~@9, ~@40 c4 ~@71]/7", // A# Dm G
  Q: "[~@8 [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@14 ~@2 [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,g4]@8]/7", // Dm G C F Dm G C
  R: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@8]/4", // C F Dm G
  S: "[~@8 [c4,e4,g4]@15 ~ [c4,f4,a4]@15 ~ [d4,f4,a4]@15 ~ [d4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/6", // C F Dm G Am F
  T: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@14 ~@2 [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@8, ~@40 f4 ~@87]/8", // G C Em Am F C Em Am …
  U: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
  V: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@14 ~@2 [c4,f4,a4]@7 ~]/4", // G C Em Am F
  W: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@14 ~@2 [c4,f4,a4]@7 ~]/4", // G C Em Am F
  X: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@15 ~ [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
  Y: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@15 ~ [e4,g4,b4]@15 ~ [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
  Z: "[[d4,g4,b4]@7 ~ [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", // G C Em Am F
  AA: "[[d4,g4,b4]@6 ~@2 [e4,g4,c5]@14 ~@2 [e4,g4,b4]@14 ~@2 [c4,e4,a4]@15 ~ [c4,f4,a4]@7 ~]/4", AB: "[d4,g4,b4]@3 ~@5",
})).s("gm_synth_strings_1").gain(0.15)

// other · electric guitar muted · "mt guitar"
const electric_guitar_muted = note(`<
  ~@24 A B C D E B C D E B F G H ~@15 A B C D E B C D E B F G H ~@43 A B C D E B C D E B F G H ~@11 I J K L M J K L M J
  K L M J K L M J K L M J K L M J K N ~@5
>`.pickRestart({
  A: "~@8 d4 ~ d4 ~ f4 ~ d4 ~", B: "a4 ~ d4 ~ f4 ~ d4 ~ g3 ~ g3 ~ b3 ~ g3 ~",
  C: "d4 ~ g3 ~ b3 ~ g3 ~ c4 ~ c4 ~ e4 ~ c4 ~", D: "g4 ~ c4 ~ e4 ~ c4 ~ f3 ~ f3 ~ a3 ~ f3 ~",
  E: "c4 ~ f3 ~ a3 ~ f3 ~ d4 ~ d4 ~ f4 ~ d4 ~", F: "d4 ~ g3 ~ b3 ~ g3 ~ a3 ~ a3 ~ c4 ~ a3 ~",
  G: "e4 ~ a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ f3 ~", H: "d4 ~ c4 ~ b3 ~ g3 ~@9", I: "~@8 c4 ~ c4 ~ e4 ~ c4 ~",
  J: "g4 ~ c4 ~ e4 ~ c4 ~ b3 ~ b3 ~ e4 ~ b3 ~", K: "g4 ~ b3 ~ e4 ~ b3 ~ a3 ~ a3 ~ c4 ~ a3 ~",
  L: "e4 ~ a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ c4 ~", M: "g3 ~ g3 ~ b3 ~ d4 ~ c4 ~ c4 ~ e4 ~ c4 ~", N: "e4 ~@15",
})).s("gm_electric_guitar_muted").gain(0.28).pan(0.2)

// other · electric guitar muted · "mt guitar" · soft notes
const electric_guitar_muted_2 = note(`<
  ~@159
  [~@2 a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ c4 ~]
  [g3 ~ g3 ~ b3 ~ d4 ~ c4 ~ c4 ~ e4 ~ c4 ~]
  [g4 ~ c4 ~ e4 ~ c4 ~ b3 ~ b3 ~ e4 ~ b3 ~]
  [g4 ~ b3 ~ e4 ~ b3 ~ a3 ~ a3 ~ c4 ~ a3 ~]
  [e4 ~ a3 ~ c4 ~ a3 ~ f3 ~ f3 ~ a3 ~ c4 ~]
  [g3 ~ g3 ~ b3 ~@11]
>`).s("gm_electric_guitar_muted").gain(0.08).pan(0.2)

// other · electric guitar clean · "cl guitar"
const electric_guitar_clean = note(`<
  ~@24 A B C D E B C D E B C D F ~@15 A B C D E B C D E B C D F ~@43 A B C D E B C D E B C D F ~@11 G H I J K H I J K H
  I J K H I J K H I J K H I J K H I ~@6
>`.pickRestart({
  A: "~@6 f4 ~", B: "~ f4 ~@2 f4 ~@2 f4", C: "~@2 f4 ~@3 e4 ~", D: "~ e4 ~@2 e4 ~@2 e4", E: "~@2 e4 ~@3 f4 ~",
  F: "~@2 e4 ~@5", G: "~@4 c3!2 ~ c3", H: "~ c3 ~ c3 b2!2 ~ b2", I: "~ b2 ~ b2 a2!2 ~ a2", J: "~ a2 ~ a2 f2!2 ~ f2",
  K: "g2!2 ~ g2 c3!2 ~ c3",
})).s("gm_electric_guitar_clean").gain(0.28).pan(0.8)

// other · electric guitar clean · "cl guitar" · soft notes
const electric_guitar_clean_2 = note(`<
  ~@159
  [~ a2 ~ a2 f2!2 ~ f2]
  [g2!2 ~ g2 c3!2 ~ c3]
  [~ c3 ~ c3 b2!2 ~ b2]
  [~ b2 ~ b2 a2!2 ~ a2]
  [~ a2 ~ a2 f2!2 ~ f2]
  [g2!2 ~@6]
>`).s("gm_electric_guitar_clean").gain(0.12).pan(0.8)

// other · lead 1 square · "square wave"
const lead_1_square = note("<~@12 A B C D E B C D E B C D F ~@67 A B G B G B C D E B C D E B C D F ~@56>".pickRestart({
  A: "~@8 a4 ~ a4 ~ f4 ~ d4 ~", B: "~@2 d4 ~@3 g4 ~@3 g4 ~@3 g4 ~", C: "b4 ~ b4 ~ c5 ~ d5 ~ c5 ~ c5 ~ c5 ~ g4 ~",
  D: "~@2 f4 ~@3 a4 ~@3 a4 ~@3 a4 ~", E: "g4 ~ g4 ~ a4 ~ g4 ~ a4 ~ a4 ~ f4 ~ d4 ~", F: "g4 ~ g4 ~ g4 ~@11",
  G: "b4 ~ b4 ~ c5 ~ d5 ~ a4 ~ a4 ~ f4 ~ d4 ~",
})).s("gm_lead_1_square").gain(0.19)

// drums · kick
const kick = s("bd").struct("<A B@43 C D@2 A E B@23 C D@2 A E B@15 F G@3 H B@31 C D@2 A E B@31 I>".pickRestart({
  A: "~@4 x!2 ~ x", B: "x!2 ~ x!3 ~ x", C: "x!2 ~ x!4 ~", D: "~@3 x!4 ~", E: "~@2 x!4 ~ x", F: "x!2 ~ x ~@3 x",
  G: "x!2 ~@5 x", H: "x!2 ~@2 x!2 ~ x", I: "x!2 ~@6",
})).gain(0.29)

// drums · snare
const snare = s("sd").struct(`<
  A B@11 C B@10 D C B@10 D C B@7 E ~@2 F C B@3 C B@10 D C B@7 E ~@2 F C B@3 C B@11 G ~@3 C B@11 C B@10 D C B@7 E ~@2 F C
  B@31 E
>`.pickRestart({
  A: "~@3 x", B: "~ x ~ x", C: "x!2 ~@4 x ~", D: "~@2 x ~@2 x!2 ~", E: "~ x ~@2", F: "x ~ x!2 ~@2 x ~", G: "x!2 ~@6",
})).gain(0.29)

// drums · low tom
const low_tom = s("lt").struct("<~@24 A ~@11 A ~@11 A ~@15 A ~@11 A ~@19 A ~@23 A ~@11 A ~@32>".pickRestart({
  A: "~@3 x ~@4",
})).gain(0.29)

// drums · hihat
const hihat = s("hh").struct("<A B@43 C D@2 E B@24 C D@2 E B@16 F ~@3 A B@31 C D@2 E B@32 G>".pickRestart({
  A: "~@4 x!4", B: "x!8", C: "x!7 ~", D: "~@3 x!4 ~", E: "~@3 x!5", F: "x!4 ~@4", G: "x!3 ~@5",
})).gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct(`<
  ~@12 A ~@11 A ~@11 A ~@11 A ~@3 A ~@11 A ~@11 A ~@3 A ~@11 A ~@3 A ~@11 A ~@11 A ~@11 A ~@32
>`.pickRestart({
  A: "~@2 x!2 ~@4",
})).gain(0.29)

// drums · open hat
const open_hat = s("oh").struct("<~@47 x ~@27 x ~@55 x ~@33>").gain(0.19)

// drums · high tom
const high_tom = s("ht").struct("<~@24 A ~@11 A ~@11 A ~@15 A ~@11 A ~@19 A ~@23 A ~@11 A ~@32>".pickRestart({
  A: "~ x ~@2",
})).gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@35 A B ~@10 A B ~@14 A B ~@10 A B ~@19 B ~@22 A B ~@10 A B ~@32>".pickRestart({
  A: "~@3 x ~@4", B: "~ x",
})).gain(0.29)

stack(
  piano, bass, epiano2, lead_2_sawtooth, synth_brass_1, synth_brass_1_soft, synth_strings_1, electric_guitar_muted,
  electric_guitar_muted_2, electric_guitar_clean, electric_guitar_clean_2, lead_1_square, kick, snare, low_tom, hihat,
  mid_tom, open_hat, high_tom, crash
// … 1 more lines

More by a-ha