Strudelify

Super Trouper

A*Teens

KeyC majorTempo120 bpm
0:00/0:00
// Super Trouper — A*Teens
// 120 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: duplicate parts dropped: ch 2 "Staff-1" lead 1 square (copy of ch 1 "Staff" pan flute)
// note: Full arrangement: all 128 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · glockenspiel · "Staff-3"
const glockenspiel = note(`<
  ~@9 A@2 B@2 C@2 D E ~@23 F G H I J I K L A@2 B@2 C@2 D E ~@23 F G H I J I K L M ~@17 F G H I J I K L G H I J I K L G H
  I J I K N@2
>`.pickRestart({
  A: "g5@2 c6@2 e6@2 g6@2 d6@3 ~ d6@2 c6@2", B: "e5@2 a5@2 c6@2 e6@2 b5@3 ~ b5@2 a5@2",
  C: "a5@2 d6@2 f6@2 a6@2 e6@3 ~ e6@2 d6@2", D: "d5@2 g5@2 b5@2 [c6,d6]@2 a5@3 ~ a5@2 g5@2",
  E: "d5@2 g5@2 b5@2 d6@2 a5@3 ~ a5@2 g5@2", F: "~@5 g5 c6 e6", G: "g6@3 ~ g6@3 ~ f6@3 ~ f6@3 ~",
  H: "e6@2 d6@2 e6@2 f6@2 e6@2 d6@2 d6@3 ~", I: "f6@3 ~ f6@3 ~ e6@3 ~ e6@2 d6@2", J: "d6@3 ~@13", K: "d6@3 ~@11 d6@2",
  L: "d6@2 c6@2 d6@2 e6@2 d6@2 c6@2 c6@3 ~", M: "c5@3 ~@13", N: "[d6@2 c6@2 d6@2 e6@2 d6@2 c6@2 c6@15 ~@5]/2",
})).s("gm_glockenspiel").gain(0.72)

// bass · synth bass 2 · "Staff-2"
const bass = note(`<
  ~@9 A B C D E F G H I J K L I M N G O P O P O Q R@2 S ~@14 A B C D E F T H B U V W B X Y Z AA P O P AB AC AD@2 ~@15 AE
  AF AG AH AI AJ AK AL AG AM AN ~@30
>`.pickRestart({
  A: "c2@3 ~ a1@3 ~ g1@3 ~ c2@2 g1@2", B: "c2@2 c2@2 a1@3 ~ g1@2 g1@2 a1@2 g1@2",
  C: "a1@2 a1@2 c2@3 ~ e2@3 ~ c2@2 e2@2", D: "a1@2 a1@2 c2@3 ~ a1@2 b1@2 c2@3 ~",
  E: "d2@2 d2@2 f2@3 ~ a2@3 ~ f2@2 a2@2", F: "d2@2 d2@2 f2@3 ~ d2@2 e2@2 f2@3 ~",
  G: "g2@2 g2@2 e2@3 ~ d2@3 ~ e2@2 d2@2", H: "g2@2 g2@2 e2@3 ~ d2@2 d2@2 e2@2 d2@2",
  I: "c2@2 c2@2 a1@3 ~ g1@3 ~ a1@2 g1@2", J: "e2@2 e2@2 e2@3 ~ e2@2 e2@2 e2@3 ~",
  K: "d2@2 d2@2 f2@3 ~ a2@2 a2@2 f2@3 ~", L: "g2@2 g2@2 e2@3 ~ d2@3 ~ g2@3 ~", M: "e1@2 e1@2 e1@3 ~ e1@2 e1@2 e1@3 ~",
  N: "d2@2 d2@2 e2@3 ~ f2@2 f2@2 a2@3 ~", O: "f2@5 ~ f2@2 f2@7 ~", P: "e2@5 ~ e2@2 e2@7 ~",
  Q: "c2@5 ~ c2@2 c2@3 ~ c2@3 ~", R: "[g1@3 ~ g1@3 ~ g1@3 ~ d2@2 g2@4 g2@2 g2@3 ~ b2@3 ~ d3@3 ~]/2", S: "c2@3 ~@13",
  T: "g2@2 g2@2 e2@3 ~ d2@3 ~ e2 d2@3", U: "e2@3 ~@3 e2@2 e2@3 ~ e2@3 ~", V: "d2@3 ~ d2@2 f2@2 a2@3 ~ f2@2 a2@2",
  W: "g2@2 g2@2 e2@3 ~ d2@2 e2@2 g2@3 ~", X: "e2@2 e2@4 e2@2 e2@3 ~ e2@3 ~", Y: "d2@2 d2@2 e1@3 ~ f1@2 f1@2 a1@3 ~",
  Z: "g1@2 g1@4 g1@2 e2@3 ~ g2@2 e2@2", AA: "f2@5 ~ f2@2 f2@3 ~ c3@2 g3@2", AB: "f2@5 ~ f2@2 f2@5 ~ g3@2",
  AC: "c2@5 ~ c2@2 c2@3 ~ d2@3 ~", AD: "[g1@3 ~ g1@3 ~ g1@3 ~ d2@2 g2@4 g2@2 d3@2 g3@2 g3@7 ~]/2",
  AE: "c2@3 c2 c2@2 c2@5 ~ g1@2 g1@2", AF: "c2@3 c2 c2@2 c2@5 ~ d2@2 e2@2", AG: "f2@3 ~@3 f2@2 f2@5 ~ f2@2",
  AH: "a2@5 ~ a2@2 a2@7 ~", AI: "d2@5 ~ d2@2 g2@2 g2@2 ~@2 g2@2", AJ: "c2@5 ~ c2@2 c2@3 ~ g2@3 ~",
  AK: "f2@5 ~ f2@2 f2@3 ~@3 f2@2", AL: "d2@5 ~ d2@2 e2@5 ~ e2@2", AM: "g2@3 ~ g2@3 ~ g2@3 ~ g2@3 ~",
  AN: "[a2,b2]@2 g3@2 g3@3 ~ g3@2 f3@2 g3@2 g3@2", // Asus2
})).s("gm_synth_bass_2").gain(0.36)

// other · overdriven guitar · "Staff-4"
const overdriven_guitar = note("<~@9 A@2 B@2 C@2 D@2 ~@31 A@2 B@2 E C D@2 ~@72>".pickRestart({
  A: "g4@2 c5@2 e5@2 g5@2 d5@3 ~ d5@2 c5@2", B: "e4@2 a4@2 c5@2 e5@2 b4@3 ~ b4@2 a4@2",
  C: "a4@2 d5@2 f5@2 a5@2 e5@3 ~ e5@2 d5@2", D: "d4@2 g4@2 b4@2 d5@2 a4@3 ~ a4@2 g4@2",
  E: "[g4,a4]@2 d5@2 f5@2 a5@2 e5@3 ~ e5@2 d5@2", // Gsus2
})).s("gm_overdriven_guitar").gain(0.72)

// chords · synth strings 1 · "Staff-4"
const synth_strings_1 = note(`<
  ~@17 A@2 B C A@2 B C D E F G H I J K ~@8 L M N O P Q R ~@8 A@2 B C A@2 B C S T U V H I W K ~@8 L M N O P Q R X Y Z AA
  AB AC AD AE AF AG AH ~@7 AI AJ M N O P Q AK AJ M N O P Q AK AJ M N O P Q AL@2
>`.pickRestart({
  A: "[[e4,g4,c5]@18 [d4,g4,b4]@2 [d4,g4,b4]@2 c5@2 [d4,g4,b4]@2 c5@2 [d4,g4,b4]@3 ~]/2", B: "[c4,f4,a4]@15 ~",
  C: "[e4,g4,b4]@5 ~ d4@2 [d4,g4,b4]@7 ~", D: "[c5,f5,a5]@7 ~ [c5,f5,a5,c6]@7 ~",
  E: "[c5,e5,g5]@5 ~ [e5,g5,c6]@2 [e5,g5,c6]@3 ~ [c5,e5,g5]@3 ~", F: "[c5,f5,a5,c6]@11 ~ [c5,f5,a5]@3 ~",
  G: "[c5,e5,g5]@5 ~ [c5,e5,g5,c6]@2 [c5,e5,g5,c6]@7 ~", H: "[c4,f4,a4]@11 ~ [g3,g4]@3 ~",
  I: "[c4,e4]@11 ~ [g3,g4]@3 ~", J: "[d4,f4,g4,c5]@3 ~ [d4,f4,g4,c5]@3 ~ [d4,f4,g4,c5]@3 ~ [d4,f4,g4,c5]@2 b4@2",
  K: "[d4,f4,g4,b4]@3 ~ [d4,f4,g4,b4]@3 ~ [d4,f4,g4,b4]@3 ~ [d4,f4,g4,b4]@3 ~", // G7
  L: "[c5,e5,g5]@3 ~ [c5,e5,g5]@3 ~ [c5,f5,g5]@3 ~ [c5,f5,g5]@3 ~", // C Csus4
  M: "[c5,e5,g5]@2 [c5,d5,g5]@2 [c5,e5,g5]@2 [c5,f5,g5]@2 [c5,e5,g5]@2 d5@2 [c5,d5,g5]@3 ~", // C Csus2 C Csus4 C Csus2
  N: "[c5,f5,g5]@3 ~ [c5,f5,g5]@3 ~ [c5,e5,g5]@3 ~ [c5,e5,g5]@2 d5@2", O: "[b4,d5,g5]@15 ~",
  P: "[d5,f5,g5]@3 ~ [d5,f5,g5]@3 ~ [c5,e5,g5]@3 ~ [c5,e5,g5]@2 d5@2", Q: "[b4,d5,g5]@7 [d5,f5,g5]",
  R: "[d5,f5,g5]@2 [c5,e5]@2 [d5,f5,g5]@2 [e5,g5]@2 [d5,f5,g5]@2 [c5,e5]@2 [c5,e5,g5]@3 ~", // G7 C G7 Em G7 C
  S: "[c4,f4,a4]@7 ~ [c4,f4,a4,c5]@7 ~", T: "[c4,e4,g4]@5 ~ [e4,g4,c5]@2 [e4,g4,c5]@3 ~ [c4,e4,g4]@3 ~",
  U: "[c4,f4,a4,c5]@11 ~ [c4,f4,a4]@3 ~", V: "[c4,e4,g4]@5 ~ [c4,e4,g4,c5]@2 [c4,e4,g4,c5]@7 ~",
  W: "[d4,f4,g4,c5]@3 ~ [d4,f4,g4,c5]@3 ~ [d4,f4,g4,c5]@3 ~ [d4,f4,g4,c5]@3 ~", // Dm7
  X: "[g4,c5]@3 c4@3 [c4,g4,c5]@4 [c4,g4,c5]@4 [c4,g4,c5]@2", Y: "[c4,g4,c5]@3 ~ [c4,g4,c5]@3 ~ [c4,g4,c5]@7 ~",
  Z: "[f4,a4,c5]@5 ~ [f4,a4,c5,f5]@2 [f4,a4,c5,f5]@7 ~", AA: "[e4,a4,c5]@5 ~ [e4,a4,c5,e5]@2 [e4,a4,c5,e5]@7 ~",
  AB: "[f4,a4,c5,f5]@7 ~ [g4,b4,d5,g5]@7 ~", // F G
  AC: "[e4,g4,c5,e5]@5 ~ [e4,g4,c5,e5]@2 [e4,g4,c5,e5]@3 ~ [d4,g4,b4,d5]@3 ~", AD: "[c4,f4,a4,c5]@7 ~ [c4,f4,a4]@7 ~",
  AE: "[d4,f4,a4]@7 ~ [c#4,e4,g4,a4]@7 ~", AF: "[d4,f4,a4,d5]@7 ~ [d5,f5,a5,d6]@7 ~",
  AG: "[g4,d5,g5]@3 ~ [g4,b4,d5,g5]@3 ~ [g4,b4,d5,g5]@2 [g4,b4,d5,g5]@4 [g4,b4,d5,g5]@2", // G5 G
  AH: "[g4,b4,d5,g5]@2 [g4,b4,d5,g5]@2 [g4,b4,d5,g5]@3 ~ [g4,b4,d5,g5]@2 [g4,b4,d5,g5]@2 [g4,b4,d5,g5]@2 [g4,b4,d5,g5]@2", // G
  AI: "~@5 g4 c5 e5", AJ: "[c5,e5,g5]@3 ~ [c5,e5,g5]@3 ~ [c5,d5,f5,g5]@3 ~ [c5,d5,f5,g5]@3 ~",
  AK: "[d5,f5,g5]@2 [c5,e5]@2 [d5,f5]@2 [e5,g5]@2 [d5,f5,g5]@2 [c5,e5]@2 [c5,e5,g5]@3 ~", // G7 C Dm Em G7 C
  AL: "[[d5,f5,g5]@2 [c5,e5]@2 [d5,f5]@2 [e5,g5]@2 [d5,f5,g5]@2 [c5,e5]@2 [c5,e5,g5]@15 ~@5]/2", // G7 C Dm Em G7 C
})).s("gm_synth_strings_1").gain(0.22)

// other · lead 1 square · "Staff-5"
const lead_1_square = note(`<
  ~@33 A ~@2 B ~ B ~@2 A ~@2 B ~ B ~@25 A ~@2 B ~ B ~@2 A ~@2 B ~ B ~@12 A ~@2 B ~ B ~@2 A ~@2 B ~ B ~ A ~@2 B ~ B ~ A
  ~@2 B ~ B ~@2
>`.pickRestart({
  A: "c3@2 c4@2 c4@3 ~ c3@2 c4@2 c4@3 ~", B: "g2@2 g3@2 g3@3 ~ g2@2 g3@2 g3@3 ~",
})).s("gm_lead_1_square").gain(0.72)

// other · lead 1 square · "Staff-6"
const lead_1_square_2 = note(`<
  ~@33 A@2 B C D C@2 E A@2 B C D C@2 ~@24 A@2 B C D C@2 E A@2 B C D C@2 ~@11 A@2 B C D C@2 E A@2 B C D C@2 A B@2 C D C F
  A@3 C D C G ~
>`.pickRestart({
  A: "c2@2 c3@2 c3@2 a2 g2 c2@2 c3@2 c3@2 a2 g2", B: "c2@2 c3@2 c3@2 a2 g2 c2@2 c3@2 c2@2 c3@2",
  C: "g1@2 g2@2 g2@2 f2 d2 g1@2 g2@2 g2@2 f2 d2", D: "d2@2 d3@2 d3@2 c3 a2 d2@2 d3@2 d3@2 c3 a2",
  E: "c2@2 c3@2 c3@2 a2 g2 c2@2 c3@2 a2 g2 e2 d2", F: "g1@2 g2@2 g2@2 f2 d2 g1@2 g2@2 a2 g2 e2 d2",
  G: "g1@2 g2@2 g2@2 f2 d2 g1@2 c3@2 a2 g2 e2 d2",
})).s("gm_lead_1_square").gain(0.72)

// drums · kick
const kick = s("bd").struct("<A B ~@7 B@89 C ~@2 C ~ C B@23 ~>".pickRestart({
  A: "x!2", B: "x!4", C: "x",
})).gain(0.72)

// drums · snare
const snare = s("sd").struct("<~@9 A@23 B A@38 B A@25 B ~@6 B@2 A@21 ~>".pickRestart({
  A: "~ x ~ x", B: "x!16",
})).gain(0.72)

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~ x]!89 ~@7 [~ x ~ x]!22 ~>").gain(0.72)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@9
  [~ x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!88
  ~@7
  [x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2]!22
  ~
>`).gain(0.72)

// drums · open hat
const open_hat = s("oh").struct("<~@9 A@23 B A@38 B A@25 B ~@6 B@2 A@19 ~@3>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!16",
})).gain(0.72)

// drums · crash
const crash = s("cr").struct(`<
  A B ~@7 C ~@30 B ~@6 B ~@31 B ~@7 A B ~@9 C ~@2 C ~ C ~@2 C ~@2 C ~ C B ~@3 C ~ C B ~@2 D@3 B E ~
>`.pickRestart({
  A: "x!2", B: "x!4", C: "x", D: "~@3 x", E: "x!3 ~",
})).gain(0.72)

// drums · guiro
const guiro = s("guiro:0").struct("<~@9 [x!16]!89 ~@7 [x!16]!20 ~@3>").gain(15.21)

stack(
  glockenspiel, bass, overdriven_guitar, synth_strings_1, lead_1_square, lead_1_square_2, kick, snare, clap, hihat,
  open_hat, crash, guiro
)

More by A*Teens