Strudelify

Little Star

Madonna

KeyE majorTempo140 bpm
0:00/0:00
// Little Star — Madonna
// 140 bpm, 4/4, key E major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 166 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140/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(`<
  ~@4 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 ~@16 A B C@2 A B D@2 A B C@2 A B E@2 ~@16 A B C@2 A B D@2 A B C@2 A B ~@26
  F G H I J K L M ~@8 A B C@2 A B D@2 A B C@2 ~@26
>`.pickRestart({
  A: "g#4 a4 g#4 [e4,a4,e5]@3 g#4 e4, a2@3 e3", B: "f#4 g#4 a4 [b3,g#4,d#5]@3 g#4 d#4, g#2@3 d#3",
  C: "[c#4 e4 f#4 a4 [a3,c#4,a4]@4 ~@3 e4 [g#2,d#4,g#4,b4]@4, f#2@3 ~]/2", // A G#m
  D: "[c#4 e4 f#4 a4 [a3,c#4,a4]@4 ~@4 [f#2,c#4,e4,a4]@4, f#2@3 ~]/2", // A F#m7
  E: "[c#4 e4 f#4 a4 [a3,c#4,a4]@4 ~@8, f#2@3 ~]/2", // A
  F: "c#3!2 ~ [c#4,e4,g#4] [g#3,c#5]@2 c#5 b4, c#4@3 ~@5, ~ e3 ~ c#3", // C#m C#5
  G: "d#4 ~ f#3 [d#3,f#4] [f#2,b2,d#4,f#4,b4,d#5]@4, b2 ~@3, ~ e4@2 ~@5", // D#m B
  H: "a2@2 a2!2 a4 e4 a2 e3, [e4,c#5]@2 c#3 c#4", // C#m
  I: "d#4 g#4 [g#2,b4] g#2 d#3@3 [b2,d#4,g#4,b4], d#3@2 ~ [d#4,g#4,b4]@4 ~", // G#m
  J: "g#5@2 c#5 [e2,e5] g#2@2 c#3@2, c#2@3 ~ [e4,g#4,c#5]@4", K: "b2 b2@3 b4 f#4 ~ d#2, f#5@4 f#2@3 ~, ~@2 b5 d#5",
  L: "a5@2 c#6 [c#4,a4,e5] [a2,e4,a4,c#5]@3 [c#3,a4], a2 ~", M: "g#5 d#5@2 b4@3 b4@2, g#2 ~",
})).s("gm_piano").gain(0.32).pan(0.7)

// chords · pad warm
const pad_warm = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 ~@16 A B C@2 A B D@2 A B C@2 A B D@2 ~@16 A B C@2 A B D@2 A B C@2 A B
  E@2 F@2 G H I@2 J@2 K@2 L@2 K@2 L@2 K@2 L@2 M K ~@18 A B C@2 A B D@2 A B C@2 N B O@2 N B P Q N M E@2 R S T@2 A B U@2 A
  V E@2 W@2
>`.pickRestart({
  A: "[a3,c#4,e4,g#4]", B: "[g#3,b3,d#4,f#4]", C: "[[f#3,a3,c#4,e4]@3 [g#3,b3,d#4,f#4]]/2",
  D: "[[f#3,a3,c#4,e4]@3 [f#3,a3,c#4,e4]]/2", E: "[a3,c#4,e4,f#4]/2", F: "[[e4,g#4,b4]@7 ~]/2", G: "[f#4,a4]",
  H: "[f#4,a4,d5]", I: "[e4,g#4,b4]/2", J: "[[d4,f#4]@3 ~]/2", K: "[b3,e4,g#4]", L: "[[f#3,a3]@3 ~, d4 ~@3]/2",
  M: "[g#3,b3]", N: "[a3,c#4]", O: "[[a3,c#4,e4]@3 [a3,c#4,e4]]/2", P: "[e3,a3]", Q: "~ [f#3,g#3,b3,d#4]",
  R: "[g#3,a3,c#4,e4]", S: "[f#3,b3,d#4]", T: "[~ b3@2 [g#3,b3,d#4,f#4], [e3,a3] ~]/2",
  U: "[~ b3@2 [g#3,b3,d#4,f#4], [e3,a3]@3 ~]/2", V: "[g#3,b3,d#4,f#4]@3 b3", W: "[g#3,b3,e4]/2",
})).s("gm_pad_warm").gain(0.48).pan(0.3)

// bass · electric bass finger
const bass = note(`<
  A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 A B C@2 D E F@2 D G H@2 D I A J K L A I A M N@2 A O P Q A M N@2 A O P R D E
  F@2 D G H@2 D I A J K L A I A M N@2 A O P Q A M N@2 A O S T U V W X U V W X U@2 W Y U@2 W Y U@2 W Y U@2 W Y D E F@2 D
  G H@2 D I A J K L A I A M N@2 A O P Q A M N@2 A O P R A M Z@2 A O P Q A B C@2 A B C@2 A B AA@2 AB@2
>`.pickRestart({
  A: "a1", B: "g#1", C: "[f#1@3 g#1]/2", D: "c#2", E: "b1", F: "[~@11 c#2 b1 e2@3, a1@3 ~]/2", G: "b1 g#1@2 b1@2 e2@3",
  H: "[~@11 c#1 c#2 g#1@3, a1@3 ~]/2", I: "b1@3 f#2@3 b1@2", J: "g#1@3 g#2@3 d#2@2", K: "g#1@3 d1",
  L: "d1 g1@4 g1 d2@2", M: "~@2 g#1 d#2@2 g#1@3", N: "[f#1@3 c#2@3 a1@4 a1!2 d#2 b1@3]/2", O: "~ g#1@2 d#2@2 g#1@3",
  P: "f#1@6 f#1 e1", Q: "f#1@3 e1 f#1 g#1@3", R: "f#1 c#2 f#2@4 e2@2", S: "f#1@6 f#1!2", T: "f#1@3 b1 c#2@2 g#1@2",
  U: "e1@3 e1@4 e1", V: "e1@3 e1@4 a1", W: "b1@3 b1@4 b1", X: "b1@3 b1@5", Y: "b1@3 b1 b1@4",
  Z: "[f#1@3 c#2@3 a1@3 e2@2 c#2 d#2 b1@3]/2", AA: "f#1/2", AB: "e1/2",
})).s("gm_electric_bass_finger").gain(0.44)

// chords · synth strings 1
const synth_strings_1 = note(`<
  ~@24 A B C@2 D E F@2 G H I J K L M N ~@16 A B C@2 D E F@2 G H I J K L M N ~@40 A B C@2 D E F@2 G H I J K L M N ~@38
>`.pickRestart({
  A: "[c#3,b3,c#4,e4]", B: "[f#3,b3,d#4]@3 ~, b2", C: "[~@11 c#3 b2 e3@3, [a2,e3,a3]@3 [f#3,g#3,b3,d#4]]/2",
  D: "[c#3,g#3,c#4], e4 ~", E: "b2 g#2@2 b2@2 e3@3, [f#3,b3,d#4]@3 ~",
  F: "[~@11 c#2 c#3 ~ b3@2, [a2,e3,a3,c#4]@6 [f#3,b3,d#4] ~, ~@13 g#2@3]/2", G: "[c#3,g#3,c#4,e4]",
  H: "[f#3,b3,d#4]@3 ~", I: "[a2,a3,c#4,f#4]", J: "g#2@3 g#3@3 d#3@2, [b3,d#4,f#4]@3 ~", K: "[g3,b3,e4]@3 ~",
  L: "[g3,b3,d4]@3 ~", M: "[a3,c#4,e4]", N: "[b3,d#4,f#4]",
})).s("gm_synth_strings_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@56 x!64 ~@46>").gain(0.19)

// drums · rim
const rim = s("rim").struct("<A@24 B@21 A@2 B@5 A@3 B C@39 D@17 E@8 B@8 ~@12 B@10 ~@16>".pickRestart({
  A: "~ x ~ x", B: "~ x ~@6", C: "~ x ~@2 x ~@3", D: "~ x!3", E: "~ x",
})).gain(0.19)

// drums · snare
const snare = s("sd").struct("<~@24 A@21 ~@2 A@5 ~@3 A@40 ~@25 A@8 ~@12 A@10 ~@16>".pickRestart({
  A: "~ x ~@2",
})).gain(0.19)

// drums · hihat
const hihat = s("hh").struct("<A@24 B@21 A@2 B@5 A@3 B C@64 B@8 ~@12 B@10 ~@16>".pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~@3 x ~@3 x", C: "x!8",
})).gain(0.19)

// drums · open hat
const open_hat = s("oh").struct("<~@24 A@21 ~@2 A@5 ~@3 A@40 ~@25 A@8 ~@12 A@10 ~@16>".pickRestart({
  A: "~@4 x!2 ~@6 x!2 ~@2",
})).gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct("<~@24 A@21 ~@2 A@5 ~@3 A@40 ~@25 A@8 ~@12 A@10 ~@16>".pickRestart({
  A: "~ x",
})).gain(0.19)

// drums · ride
const ride = s("rd").struct("<A@2 B@22 C@21 B@2 C@5 B@3 D C@30 D@9 B@17 E@8 C@8 ~@12 C@10 ~@16>".pickRestart({
  A: "~@2 x!2 ~@4 x!2 ~@2 x!2 ~@2", B: "x ~ x!3 ~ x ~ x!3 ~ x!3 ~", C: "~ x!2 ~@6 x!2 ~@5",
  D: "x!3 ~ x ~ x ~ x!3 ~ x ~ x ~", E: "x!8",
})).gain(0.19)

// drums · tambourine
const tambourine = s("tb").struct("<A@24 B@21 A@2 B@5 A@3 B@40 A@17 ~@8 B@8 ~@12 B@10 ~@16>".pickRestart({
  A: "x!2 ~@4 x!2 ~@2 x!2 ~@4", B: "x ~@2 x ~@4 x ~@2 x!2 ~@3",
})).gain(0.19)

// drums · cowbell
const cowbell = s("cb").struct("<~@24 A@21 ~@2 A@5 ~@3 A@40 ~@25 A@8 ~@12 A@10 ~@16>".pickRestart({
  A: "~@7 x",
})).gain(0.19)

stack(piano, pad_warm, bass, synth_strings_1, kick, rim, snare, hihat, open_hat, mid_tom, ride, tambourine, cowbell)

More by Madonna