Strudelify
Frozen cover art

1998 · Ray of Light

Frozen

Madonna

KeyF minorTempo112 bpm
0:00/0:00
// Frozen — Madonna
// 112 bpm, 4/4, key F minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 163 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(112/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 · string ensemble 1 · "Strings H"
const string_ensemble_1 = note(`<
  A@2 B@2 C D E@2 F@2 G@2 H I J@2 ~@8 K L K M N O P Q R Q S T R Q U V W X Y Z AA AB AC AD ~@7 AE N O AF Q K L K M N O AG
  Q AH AI AB AJ AH AI AC AD W X Y Z AA AB AK AL AM AN@3 AO@5 AP@2 AQ AO@5 AP@2 AR K L K AS N O AF Q AH AI AB AJ AH AI AC
  AD W X Y Z AA AB AK AL AH AI AB AJ AH AI AC AD W X Y Z AA AB AK AL AT@2 AU AV AW@2 AU AV AW AX AY AZ@8
>`.pickRestart({
  A: "[ab4 g4, [f3,c4,f4]]/2", B: "[ab3@2 ~ [eb4,g4], [c4,f4]@3 ~, ~ bb3]/2", C: "[f4,ab4]@2 g4 f4", D: "[eb4,g4] eb4",
  E: "[bb3 ab3, [c4,f4]]/2", F: "[ab4 g4, [c4,f4]]/2", G: "[ab3@4 ~ g4 [c4,eb4,ab4] [db4,bb4], [c4,f4]@5 ~@3, ~ bb3]/2",
  H: "db5 c5, [c4,f4,ab4]", I: "[g4,bb4] ab4, [bb3,eb4]", J: "[g4@16 f4@11 ~@5, [ab3,c4]@27 ~@5]/2", K: "f4 g4",
  L: "ab4 bb4", M: "ab4@3 bb4", N: "db5 c5", O: "bb4 ab4", P: "g4@7 ~ ab4@8", Q: "f4", R: "f4@12 g4 f4 eb4@2", S: "ab4",
  T: "c4", U: "db4", V: "eb4", W: "f5@7 ab5", X: "g5@3 f5 f5@2 g5@2", Y: "ab5 bb5", Z: "db6@2 c6 bb5", AA: "ab5@7 g5",
  AB: "ab5", AC: "db5", AD: "eb5", AE: "~@3 bb4", AF: "g4 ab4", AG: "g4", AH: "f5@7 eb5", AI: "f5", AJ: "c6",
  AK: "bb5 c6", AL: "db6 eb6", AM: "g6", AN: "[f6@35 ~@13]/3",
  AO: "[~ [g4,g5] [ab4,ab5] [c5,c6]@2 [e5,e6] [f5,f6] [c5,c6]@2 [bb4,bb5] [db5,db6] [c5,c6]@2 [ab4,ab5] [g4,g5] [f4,f5]@2 [db4,db5] [eb4,eb5] [f4,f5], ~@40 [c5,c6] ~@39]/5", // G Ab C E F C Bb Db …
  AP: "[[bb4,bb5] [c5,c6] [db5,db6] [f5,f6]@5]/2", AQ: "[c5,g5,c6]", AR: "[g5,c6,g6]", AS: "ab4@2 bb4 eb4",
  AT: "[g4 ab4 g4 ab4 g4 ab4 g4 ab4, f6@5 ~@3]/2", AU: "ab4 bb4 ab4 bb4", AV: "bb4 c5 bb4 c5", AW: "g4 ab4 g4 ab4",
  AX: "g4@4 ~ ab4@4 g4@4 ab4@3", AY: "~@2 ab4@4 bb4@5 ab4@5",
  AZ: "[bb4@4 bb4@5 c5@5 bb4@5 c5@5 g5@45 f5@53 ~@6, ~@12 [ab4,c5]@49 ~@3]/8", // Ab
})).s("gm_string_ensemble_1").gain(0.42)

// other · string ensemble 1 · "Strings L"
const string_ensemble_1_2 = note(`<
  A@4 B C D@2 A@4 E F G@2 ~@16 H I J K H I L K H I J K H I L K ~@20 H I J K H I L K H I J K H I L K ~@4 M@2 N E O P Q R
  M@2 N E O P Q S ~@8 H I J K H I L K H I J K H I L K H I J K H I L K H I J K H I L K T U V W T U X W T U Y Z@8
>`.pickRestart({
  A: "[[f2,f3]@7 [eb2,eb3]]/4", B: "[db2,db3,c4,f4]", C: "[eb2,eb3,bb3]", D: "[f2,f3]/2", E: "[db2,db3]",
  F: "[eb2,eb3]", G: "[[f2,f3]@27 ~@5]/2", H: "f2", I: "bb2", J: "db2", K: "ab2", L: "gb2",
  M: "[[f2,f3]@7 [ab2,ab3]]/2", N: "[g2,g3]@3 [f2,f3]", O: "[f2,f3] [db2,db3]",
  P: "[bb2,bb3] [ab2,ab3] [g2,g3] [f2,f3]", Q: "[db2,db3] [eb2,eb3] [f2,f3]@2", R: "[c2,c3] [c3,c4]",
  S: "[c2,c3] [c2,c3,c4]", T: "[f2,ab3,c4]", U: "[bb2,bb3,db4]", V: "[db2,ab3,db4]", W: "[ab2,c4,eb4]",
  X: "[gb2,bb3,db4]", Y: "~ [gb2,bb3,db4]@7", Z: "[~@2 [ab2,c4,eb4]@10 [f2,f3]@49 ~@3]/8",
})).s("gm_string_ensemble_1").gain(0.42)

// bass · acoustic bass · "Bass"
const bass = note(`<
  ~@32 A B C D A B E D A B C D A B E D ~@20 A B C D A B E D A B C D A B E D ~@28 A B C D A B E D A B C D A B E D A B C D
  A B E D A B C F A B E D G H I J G H K L G H M@2 N@7
>`.pickRestart({
  A: "f2@10 f2@5 ~", B: "bb2@10 bb2@5 ~", C: "db2@10 db2@5 ~", D: "ab2@10 ab2@5 ~", E: "gb2@10 gb2@5 ~",
  F: "ab2@5 ab2@2 g2", G: "f2", H: "bb2", I: "db2", J: "ab2", K: "gb2", L: "ab2@10 ~@2 g2@3 ~", M: "[~ gb2@9 ab2@6]/2",
  N: "[~@4 f2@49 ~@3]/7",
})).s("gm_acoustic_bass").gain(0.42)

// bass · lead 2 sawtooth · "Sawtooth"
const bass_2 = note("<~@13 A B@3 C ~@31 B@6 D ~@29 B@3 ~@75>".pickRestart({
  A: "~@12 f2 ~ f2 ~", B: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", C: "f2 ~ f2 ~@13", D: "f2 ~@15",
})).s("gm_lead_2_sawtooth").gain(0.28)

// bass · lead 2 sawtooth · "Sawtooth" · soft notes
const bass_soft = note("<~@17 A ~@30 B ~@6 C ~@28 B ~@78>".pickRestart({
  A: "~@4 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~", B: "f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
  C: "~@2 f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~ f2 ~",
})).s("gm_lead_2_sawtooth").gain(0.14)

// chords · vibraphone · "Vibes"
const vibraphone = note("<~@16 A@4 B C@3 A@4 B D E F ~@20 A@4 B C@3 A@4 ~@40 A@4 B D E F ~@51>".pickRestart({
  A: "[[f3,f4,ab4]@14 eb4@4 ~ g3@3 ab3@7 ~@3 c4@13 ~@11 [eb4,g4]@6 ~@2, ~@15 f4@12 ~@5]/4", B: "ab4@11 ~ g4@3 ~",
  C: "[f4@22 ~@2 bb3@15 ~ ab3@6 ~@2]/3", D: "f4@13 ~@3", E: "[f4,ab4] [eb4,g4]", F: "f4",
})).s("gm_vibraphone").gain(0.42)

// chords · pad new age · "Fantasy"
const pad_new_age = note(`<
  A@4 B C D@2 E@2 F@2 G H I@2 J@2 K L M N O P J@2 K L Q R S T U V W X U V Y Z U V W X U V Y Z AA@2 ~@2 J@2 K L M N O P
  J@2 K L Q R S T U V W X U V Y Z U V W X U V Y Z AB@4 ~@16 J@2 K L Q R S T U V W X U V Y Z U V W X U V Y Z U V W X U V
  Y Z U V W X U V Y Z AC AD AE X AF AD AG X AF AD AH@5 AI@4
>`.pickRestart({
  A: "[ab4@2 g4@2 ab3@2 ~ [eb3,g4], f3@7 ~, c4@4 f4@3 ~, ~@3 bb3]/4", B: "ab4@2 g4 f4, [db3,c4]",
  C: "g4 eb4, [eb3,bb3]", D: "[bb3 ab3, [f3,f4]]/2", E: "[ab4 g4, [f3,c4]]/2",
  F: "[[ab3,f4]@5 [bb3,g4] [c4,ab4] [db4,bb4], f3@3 eb3]/2", G: "db5 c5, [db3,f4]", H: "bb4 ab4, [eb3,eb4]",
  I: "[g4@16 f4@15 ~, [ab3,c4]@31 ~]/2", J: "[f3,c4,ab4]/2", K: "[f3,c4,ab4]", L: "[f3,bb3,g4]",
  M: "[db3,ab3,db4,f4]@15 ~", N: "[eb3,bb3,eb4,g4]@15 ~", O: "[f3,c4,f4,ab4]@15 ~", P: "[f3,bb3,eb4,g4]@13 ~@3",
  Q: "[db3,ab3,db4,f4]", R: "[eb3,bb3,eb4,g4]", S: "[c4,f4,ab4] [bb3,eb4,g4], f3", T: "[f3,ab3,c4,f4]",
  U: "[ab3,c4,f4]", V: "[bb3,db4,f4]", W: "[ab3,db4,f4]", X: "[ab3,c4,eb4]", Y: "[gb3,bb3,db4]", Z: "[ab3,db4,eb4]",
  AA: "[[f4,ab4,c5]@19 ~@13]/2", AB: "[[f4,ab4,c5]@51 ~@13]/4", AC: "[f4,ab4,c5]", AD: "[bb3,db4,f4,g4]",
  AE: "[db4,f4,ab4]", AF: "[c4,f4,ab4]", AG: "[bb3,db4,gb4]",
  AH: "[~ [bb3,db4,gb4]@9 [ab3,c4,eb4]@10 [ab4,c5,g5]@20]/5", AI: "[~@5 c5@25 db4@28 ~@6, ~@5 [ab4,f5]@53 ~@6]/4",
})).s("gm_pad_new_age").gain(0.29)

// chords · electric guitar muted · "Guitar"
const electric_guitar_muted = note(`<
  ~@32 A B C D A B E F A B C D A B E F G H I@2 ~@16 A B C D A B E F A B C D A B E F G H I@2 ~@16 A@3 J C K L A@2 B C D A
  B E F A B C D A B E F A B C D A B E F A B C D A B E F ~@19
>`.pickRestart({
  A: "[f3,ab3,c4]@2 ~@2 [f3,ab3,c4]@2 ~ [f3,ab3,c4]@2 ~ [f3,ab3,c4] ~@5", // Fm
  B: "[f3,bb3,eb4,f4]@2 ~@2 [f3,bb3,eb4]@2 ~ [f3,bb3,db4]@2 ~ [f3,bb3,db4] ~@5", // Ebsus2 Bbm
  C: "[ab3,db4,f4]@2 ~@2 [ab3,db4,f4]@2 ~ [ab3,db4,f4]@2 ~ [ab3,db4,f4] ~@5", // Db
  D: "[ab3,c4,eb4]@2 ~@2 [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~ [ab3,c4,eb4]@2 ~@2 [ab3,c4,eb4] ~", // Ab
  E: "[gb3,bb3,db4]@2 ~@2 [gb3,bb3,db4]@2 ~ [gb3,bb3,db4]@2 ~ [gb3,bb3,db4] ~@5", // Gb
  F: "[ab3,db4,eb4]@2 ~@2 [ab3,db4,eb4]@2 ~ [ab3,db4,eb4]@2 ~ [ab3,db4,eb4]@2 ~@4", // Absus4
  G: "c5@2 ~ c5@2 c5@2 ~ c5@2 ~ c5@2 c5@2 ~", H: "c5@2 ~ c5@2 c5@2 ~ c5@2 ~ c5@2 ab5@2 ~",
  I: "ab5@2 ~ ab5@2 ab5@2 ~ ab5@2 ~ ab5@2 ab5@2 ~",
  J: "[g3,bb3,eb4,f4]@2 ~@2 [g3,bb3,eb4,f4]@2 ~ [g3,bb3,eb4]@2 ~ [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4] ~", // Eb
  K: "[g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4]@2 ~ [g3,bb3,eb4]@2 ~ [g3,bb3,eb4]@2 ~@2 [g3,bb3,eb4] ~", // Eb
  L: "[f3,ab3,f4]@2 ~@2 [f3,ab3,f4]@2 ~@2 g3 ~ [f3,g3,bb3,eb4] ~@5, ~@7 [f3,g3,bb3,eb4]@2 ~@7", // Fm Eb
})).s("gm_electric_guitar_muted").gain(0.42)

// drums · kick
const kick = s("bd").struct(`<
  ~@32 A B A B A B A B A B A B A B A B ~@12 C D C D C D C B A B A B A B A B A B A B A B A B ~@5 C ~ C ~ C ~ C ~ C ~ C ~
  C ~ C ~ C ~ C ~ C ~ C A B A B A B A B A B A B A B A B A B A B A B A B A B A B A B A D ~@19
>`.pickRestart({
  A: "x ~@4 x ~@2", B: "x ~@4 x ~ x", C: "x", D: "x ~@6 x",
})).gain(0.42)

// drums · snare
const snare = s("sd").struct("<~@23 A ~@7 A B@7 C B@7 D ~@3 E ~@7 F B@7 D B@16 ~@4 G@23 A B@31 D ~@19>".pickRestart({
  A: "~@10 x!3 ~ x ~", B: "~@2 x ~@2 x ~@2", C: "~@4 x ~@5 x!3 ~ x ~", D: "~@4 x ~@4 x!7", E: "~@4 x ~ x!3 ~ x!3 ~ x ~",
  F: "~@9 x!7", G: "~@4 x ~@2 x ~@8",
})).gain(0.42)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@23 A ~@7 A ~@7 A ~@11 B ~@36 C@23 A ~@51>".pickRestart({
  A: "~@15 x", B: "~@2 x!2 ~@12", C: "~@5 x ~@2",
})).gain(0.21)

// drums · low tom
const low_tom = s("lt").struct(`<
  ~@51 A B ~@2 C ~@3 D B E B E B E B F G F G F G F G F G F G F G F G F ~@5 B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B ~ B
  G F G F G F G F G F G F G F G F G F G F G F G F G F G F G F G B ~@19
>`.pickRestart({
  A: "~@2 x!2 ~@12", B: "x", C: "~@10 x!2 ~@2 x!2", D: "~@7 x", E: "x ~@6 x", F: "x ~@4 x ~ x", G: "x ~@4 x ~@2",
})).gain(0.42)

// drums · hihat
const hihat = s("hh").struct("<~@32 [x!7 ~]!16 ~@12 [x!7 ~]!24 ~@28 [x!7 ~]!32 ~@19>").gain(0.35)

// drums · mid tom
const mid_tom = s("mt").struct("<~@8 A B A B A B A B ~@35 C ~@3 D A ~@106>".pickRestart({
  A: "x", B: "x ~@2 x ~@4", C: "~@6 x!3 ~ x!2 ~@4", D: "~@3 x",
})).gain(0.42)

// drums · mid tom · soft notes
const mid_tom_soft = s("mt").struct("<~@51 [~@2 x!3 ~@11] ~@111>").gain(0.28)

// drums · open hat
const open_hat = s("oh").struct("<~@32 [~@7 x]!16 ~@12 [~@7 x]!24 ~@28 [~@7 x]!32 ~@19>").gain(0.35)

// drums · high tom
const high_tom = s("ht").struct("<~@8 A@8 ~@7 B ~@27 B ~@7 B ~@7 B ~@43 B ~@51>".pickRestart({
  A: "~@3 x ~@12", B: "~@10 x!3 ~ x ~",
})).gain(0.42)

// drums · tambourine
const tambourine = s("tb").struct("<~@88 [~@2 x!3 ~ x!6 ~@2 x ~]!16 ~@59>").gain(0.42)

// drums · congas
const congas = s("conga:18").struct("<~@88 A B A B A B A B A B A B A B A B A B A B A B A C ~@51>".pickRestart({
  A: "x ~ x!2 ~@2 x ~@3 x ~@5", B: "x ~ x!2 ~@2 x ~@3 x ~@3 x ~", C: "x ~ x!2 ~@2 x ~@9",
})).gain(1.35)

// drums · shaker
const shaker = s("sh").struct(`<
  ~@32
  [~@2 x!3 ~ x!5 ~@5]!16
  ~@12
  [~@2 x!3 ~ x!5 ~@5]!24
  ~@4
  [~@2 x!3 ~ x!5 ~@5]!56
  ~@19
>`).gain(0.35)

// drums · claves
const claves = s("clave:2").struct("<~@90 A ~@3 A ~@3 A ~@3 A ~@60>".pickRestart({
  A: "x",
})).gain(2.07)

stack(
  string_ensemble_1, string_ensemble_1_2, bass, bass_2, bass_soft, vibraphone, pad_new_age, electric_guitar_muted, kick,
  snare, snare_soft, low_tom, hihat, mid_tom, mid_tom_soft, open_hat, high_tom, tambourine, congas, shaker, claves
)

More by Madonna