Strudelify

Mamma Mia

A*Teens

KeyE majorTempo133 bpm
0:00/0:00
// Mamma Mia — A*Teens
// 133 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 125 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(133/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
const piano = note(`<
  A B A B A B A B ~@8 A B A B ~@26 A B A B ~@38 A B A B A B A B ~@19 A B A B A B A B ~@2
>`.pickRestart({
  A: "[e4,e5] ~ [b5,b6] ~ [e4,e5] ~ [b5,b6] ~ [e4,e5] ~ [b5,b6] ~ [e4,e5] ~ [c6,c7] ~", // E B E B E B E C
  B: "[e4,e5] ~ [c6,c7] ~ [e4,e5] ~ [c6,c7] ~ [e4,e5] ~ [c6,c7] ~ [e4,e5] ~ [b5,b6] ~", // E C E C E C E B
})).s("gm_piano").gain(0.6).pan(0.6)

// chords · piano
const piano_2 = note("<~@28 A B C@2 A B C@2 ~@34 A B C@2 A B C@2 ~@19 A B C@2 A B C@2 ~@20>".pickRestart({
  A: "[b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~", // E
  B: "[b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,g#5] ~ [b4,e5,f#5] ~ [b4,e5,g#5] ~", // E Bsus4 E
  C: "[c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~ [c#5,e5,a5] ~", // A
})).s("gm_piano").gain(0.09).pan(0.6)

// bass · synth bass 2
const bass = note(`<
  A@8 B@2 C@2 B@2 C@2 B@4 C@2 D E D E D F ~@4 B@2 C@2 B G H D C I B H C I ~@4 B@2 C@2 B@2 C@2 B@4 C@2 D E D E D F ~@2
  C@2 B@2 C@2 B G H D C I B H C I ~@9 B@2 C@2 B@2 C@2 B G H D C I B H C I B@8 J ~
>`.pickRestart({
  A: "e2 ~ e2 ~ e2 ~ e2 ~", B: "e1@2 ~ e1 ~@2 e1@2 ~@2 e1@2 ~@2 e1 ~", C: "a0@2 ~ a0 ~@2 a0@2 ~@2 a0@2 ~@2 a0 ~",
  D: "b0@2 ~ b0 ~@2 b0@2 ~@2 b0@2 ~@2 b0 ~", E: "b0@2 ~ b0 ~@2 b0@2 a1@3 ~ g#1@3 ~", F: "b0@7 ~@9",
  G: "d#1@2 ~ d#1 ~@2 d#1@2 ~@2 d#1@2 ~@2 d#1 ~", H: "c#1@2 ~ c#1 ~@2 c#1@2 ~@2 c#1@2 ~@2 c#1 ~",
  I: "f#1@2 ~ f#1 ~@2 f#1@2 b0@2 ~ b0 ~@2 b0@2", J: "a#0 ~@7",
})).s("gm_synth_bass_2").gain(0.67)

// bass · electric guitar muted
const bass_2 = note(`<
  ~@2 A B C@4 D@2 E@2 F G H C I ~@9 C@2 ~@2 C@2 ~@13 J A B C@2 D@2 E@2 F G H C I ~@9 C@2 ~@23 C@4 ~@16 C@2 ~@10
>`.pickRestart({
  A: "b1 ~ b1 ~@3 b1 ~ b1 ~@3 b1 ~ b1 ~", B: "~@2 b1 ~ b1 ~@3 b1 ~@3 b1 ~ b1 ~", C: "b1!16",
  D: "b1!2 ~ b1!2 ~ b1!7 ~ b1 ~", E: "b1!2 ~ b1!2 ~ b1!5 ~ b1 ~ b1 ~", F: "b1!2 ~ b1!2 ~ b1 ~ b1!2 ~ b1!2 ~ b1 ~",
  G: "b1!5 ~ b1!7 ~ b1 ~", H: "b1!2 ~ b1!2 ~ b1!5 ~ b1 ~ b1!2", I: "b1 ~@15", J: "~@10 b1!6",
})).s("gm_electric_guitar_muted").gain(0.18)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  A B A B A B A B ~@2 C D ~@2 C D E@2 F@2 G@2 H@2 I J I ~@5 K@4 L@2 M@2 N ~ O@2 N P A B A B ~@2 C D ~@2 C D E@2 F@2 G@2
  H@2 I J I ~@2 Q@3 K@4 L@2 M@2 N ~ O@2 N P ~@8 R@5 K@4 L@2 M@2 N ~ O@2 N P A B A B A B A B ~@2
>`.pickRestart({
  A: "e5 ~ b5 ~ e5 ~ b5 ~ e5 ~ b5 ~ e5 ~ c6 ~", B: "e5 ~ c6 ~ e5 ~ c6 ~ e5 ~ c6 ~ e5 ~ b5 ~",
  C: "~@4 [b4,e5] ~ [b4,e5] ~ [b4,f#5]@2 e5 ~ [b4,e5] ~ [b4,e5]@2", // E5 B5 E5
  D: "~@4 [b4,a5] ~ [b4,a5] ~ [b4,g#5]@2 e5 ~ [b4,e5] ~ [b4,e5]@2", E: "[~@6 g#5 f#5 g#5 f#5 b5@6, [b4,e5]@31 ~]/2",
  F: "[~@12 g#5 ~ f#5 ~ g#5 ~ f#5@2 c6@12, [c5,e5]]/2", G: "[[a3,c#4,e4], c#5 ~@15]/2",
  H: "[[b3,d#4,f#4]@21 ~@3 [b4,e5,a5,e6,a6]@3 ~ [b4,e5,g#5,e6,g#6]@3 ~]/2", I: "[b4,d#5,f#5,b5,f#6]@3 ~@13",
  J: "~@8 [b4,e5,a5,e6,a6]@3 ~ [b4,e5,g#5,e6,g#6]@3 ~", K: "[g#4 a4, [e5,e6]]/4",
  L: "[[b4,b5]@5 [f#4,f#5] [g#4,g#5] [a4,a5]]/2", M: "[[g#4,g#5]@5 [d#4,d#5] [e4,e5] [f#4,f#5]]/2",
  N: "~@4 [a4,d5]@3 ~ [a4,c#5]@3 ~@5", O: "[b4,e5]/2", P: "g#3 a3 a#3 b3 c4 c#4 d4 d#4 e4 f4 f#4 g4 g#4 a4 a#4 b4",
  Q: "[~ e5@2, ~@5 [a4,c#5]@11]/3", R: "[~@16 e5@31 ~ e5@32, ~@15 [g#4,b4]@32 [a4,c#5]@33]/5",
})).s("gm_string_ensemble_1").gain(0.4)

// other · electric guitar clean
const electric_guitar_clean = note("<~@37 A B C D ~ E F ~@35 A B C D ~ E F ~@20 A B C D ~ E F ~@12>".pickRestart({
  A: "~@4 b2 a2 g#2 a2", B: "g#2 ~", C: "~@4 g#2 f#2 e2 f#2", D: "e2 ~", E: "e3@5 ~ e3 d#3", F: "c#3",
})).s("gm_electric_guitar_clean").gain(0.15)

// other · electric guitar clean
const electric_guitar_clean_2 = note("<~@6 A ~@28 B C ~@5 D E ~@33 B C ~@5 D E ~@25 D E ~@12>".pickRestart({
  A: "[e4,b4]@2 [e4,b4] ~@3 [e4,b4] ~ [e4,b4]@4 ~@4", B: "~@4 b4 g#4 f#4 f4", C: "e4 ~", D: "~@6 e4 d#4", E: "c#4",
})).s("gm_electric_guitar_clean").gain(0.26).pan(1)

// other · xylophone
const xylophone = note(`<
  A B A B A B A B ~@8 A B A B ~@8 C D E F C D E F ~@10 A B A B ~@8 A B A B ~@8 C D E F C D E F ~@10 A B A B A B A B ~ C
  D E F C D E F ~@10 A B A B A B A B ~@2
>`.pickRestart({
  A: "[e5,e6] ~ [b5,b6] ~ [e5,e6] ~ [b5,b6] ~ [e5,e6] ~ [b5,b6] ~ [e5,e6] ~ [c6,c7] ~", // E B E B E B E C
  B: "[e5,e6] ~ [c6,c7] ~ [e5,e6] ~ [c6,c7] ~ [e5,e6] ~ [c6,c7] ~ [e5,e6] ~ [b5,b6] ~", // E C E C E C E B
  C: "~@4 [f#5,f#6] ~ [e5,e6] ~ [f#5,f#6] ~ [e5,e6] ~@5", // F# E F# E
  D: "~@4 [e5,e6] ~ [e5,e6] ~ [f#5,f#6] ~ [g#5,g#6] ~ [f#5,f#6] ~ [e5,e6] ~", // E F# G# F# E
  E: "~@4 [f#5,f#6] ~@3 [e5,e6] ~@5 [a5,a6] ~", F: "~@2 [a5,a6] ~ [a5,a6] ~ [a5,a6] ~ [g#5,g#6] ~@3 [e5,e6] ~@3",
})).s("gm_xylophone").gain(0.38).pan(0.4)

// chords · pad warm
const pad_warm = note(`<
  A@8 B@8 C@4 ~@4 D@2 E@2 F@2 G@2 F@2 G@2 H I J K L M N O ~@6 B@8 C@4 ~@4 D@2 E@2 F@2 G@2 F@2 G@2 H I J K L M N O ~@2
  P@8 ~ F@2 G@2 F@2 G@2 H I J K L M N O ~@2 P@8 ~@2
>`.pickRestart({
  A: "[b3 c4 b3 c4 b3 c4 b3 c4, [e4,g#4]]/8", B: "[[e3,b3,g#4] [a2,c#4,a4] [e3,b3,g#4] [a2,c#4,a4], e4]/8",
  C: "[b3 c4, [e3,e4,g#4]]/4", D: "[[f#3,b3,f#4]@11 ~@5]/2", E: "[[f#3,b3,f#4]@21 ~@11]/2", F: "[e3,b3,e4]/2",
  G: "[c#3,a3,e4]/2", H: "[e4,g#4,b4]", I: "[d#4,f#4,b4]", J: "[c#4,e4,g#4]", K: "[b3,d#4,g#4]", L: "[a3,c#4,e4]",
  M: "[f#3,a3,c#4] [b3,d#4,f#4]", N: "[g#3,b3,e4]", O: "[g#3,c#4,e4]", P: "[b3 c4 b3 c4 b3 c4 b3 c4, [e3,e4,g#4]]/8",
})).s("gm_pad_warm").gain(0.03)

// chords · distortion guitar
const distortion_guitar = note("<~@6 A ~@16 B C D C E ~@7 F G ~@28 B C D C E ~@7 F G ~@25 F G ~@19>".pickRestart({
  A: "[e3,b3]@2 [e3,b3] ~@3 [e3,b3] ~ [e3,b3]@4 ~@4", B: "~@6 [b2,d#3,f#3]!2 [b2,e3,a3]@4 [b2,e3,g#3]@4",
  C: "[b2,d#3,f#3] b2!7", D: "b2!2 [a2,d3,g3]@2 [b2,e3,a3]@2 [b2,e3,g#3]@2", E: "b2@7 ~@9", F: "~@4 b3 g#3 f#3 f3",
  G: "e3 ~",
})).s("gm_distortion_guitar").gain(0.54)

// chords · synth brass 1
const synth_brass_1 = note("<~@40 A ~@3 A ~@37 A ~@3 A ~@22 A ~@3 A ~@11>".pickRestart({
  A: "~@4 [f#4,a4,d5]@3 ~ [e4,a4,c#5]@3 ~@5", // D A
})).s("gm_synth_brass_1").gain(0.29).pan(0.2)

// other · rock organ
const rock_organ = note(`<
  ~@2 A B A B ~@14 C ~ D E ~@22 A B A B ~@12 C ~ D E ~@22 A B A B A B A B ~@19 A B A B A B A B ~@2
>`.pickRestart({
  A: "b4 ~ b4 ~@3 b4 ~ b4 ~@3 b4 ~ b4 ~", B: "~@2 b4 ~ b4 ~@3 b4 ~@3 b4 ~ b4 ~",
  C: "[a4,e5] ~ [a4,e5] ~@3 [a4,e5] ~ [a4,e5] ~@7", // A5
  D: "[b4,f#5] ~ [b4,f#5] ~@3 [b4,f#5] ~ [b4,f#5] ~@3 [b4,f#5] ~ [b4,f#5] ~", // B5
  E: "[b4,f#5] ~@2 [b4,f#5]!2 ~ [b4,f#5] ~@9", // B5
})).s("gm_rock_organ").gain(0.59)

// chords · percussive organ · E5
const percussive_organ = note(`<
  ~@123
  [[e4,b4] ~ [e4,b4] ~@3 [e4,b4] ~ [e4,b4] ~@3 [e4,b4] ~ [e4,b4] ~]
  [~@2 [e4,b4] ~ [e4,b4] ~@3 [e4,b4] ~ [e4,b4] ~@5]
>`).s("gm_percussive_organ").gain(0.1)

// other · melodic tom
const melodic_tom = note("<~@7 [c6!16] ~@23 [c6!16] ~@90 [c6!16] ~@2>").s("gm_melodic_tom").gain(0.33)

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

// drums · snare
const snare = s("sd").struct("<~@8 A@20 ~@3 B A@38 ~ C D A@15 ~@9 A@25 B ~@2>".pickRestart({
  A: "~ x ~ x", B: "x!16", C: "~@14 x!2", D: "x!2 ~ x",
})).gain(0.71)

// drums · clap
const clap = s("cp").struct("<~@8 A@20 ~@4 A@38 ~@2 A@16 ~@9 A@26 ~@2>".pickRestart({
  A: "~ x ~ x",
})).gain(0.71)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@8 A B@7 A B@3 A B@2 C B C A B ~@4 A B@3 A B@5 A B@7 A B@7 A B@3 A B@2 C B C A B ~ D A B@5 A B@5 A B@3 ~@9 A B@7 A
  B@5 A B@3 A B@7 ~@2
>`.pickRestart({
  A: "~ x ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", B: "x!2 ~@2 x!2 ~@2 x!2 ~@2 x!2 ~@2", C: "x!2 ~@2 x!2 ~@3 x ~@3 x ~@2",
  D: "~@14 x!2",
})).gain(0.71)

// drums · open hat
const open_hat = s("oh").struct("<~@8 A@20 ~@3 B A@38 ~@2 A@16 ~@9 A@26 ~@2>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "x!16",
})).gain(0.71)

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

// drums · guiro
const guiro = s("guiro:0").struct("<~@8 A@20 ~@4 A@38 ~@2 A@16 ~@9 A@26 ~@2>".pickRestart({
  A: "x!16",
})).gain(15.09)

stack(
  piano, piano_2, bass, bass_2, string_ensemble_1, electric_guitar_clean, electric_guitar_clean_2, xylophone, pad_warm,
  distortion_guitar, synth_brass_1, rock_organ, percussive_organ, melodic_tom, kick, snare, clap, hihat, open_hat,
  crash, guiro
)

More by A*Teens