Strudelify

Uncertain

The Cranberries

KeyA majorTempo135 bpm
0:00/0:00
// Uncertain — The Cranberries
// 135 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: metre changes (2/4 at bar 1, 4/4 at bar 1) are rendered on a constant 4/4 grid of one bar per cycle
// note: Full arrangement: all 95 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(135/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 · pad poly
const pad_poly = note(`<
  ~@9 A@5 B@2 C D@5 B@2 E F@2 G@2 H@3 ~ I J K L I J M N I J M O A@5 B@2 C A@5 B@2 ~ I J K L I J M N P@3 Q R@3 ~ I J K L
  I J M S T@2 U V W X@3 ~@2
>`.pickRestart({
  A: "[f#5@10 g5@2 f#5@2 e5@7 ~ d5@4 e5@3 ~ b4@7 ~ a4@2 b4@2 c#5@2 d5@2 c#5@7 ~ a4@4 f#4@3 ~ g4@9 ~@3 b4@2 b4@2 f#5@2]/5",
  B: "[e5@4 e5@2 c#5@2 d5@2 e5@3 ~ a4@8 ~@10]/2", C: "f#5@2 e5@3 ~ d5@4 e5@5 ~",
  D: "[f#5@4 ~@2 e5@2 f#5@2 g5@2 f#5@2 e5@7 ~ d5@4 e5@3 ~ b4@7 ~ a4@2 b4@2 c#5@2 d5@2 c#5@7 ~ a4@4 f#4@3 ~ g4@9 ~@3 b4@2 b4@2 f#5@2]/5",
  E: "a4@2 b4@3 ~ c#5@4 d5@2 e5@2 c#5@2",
  F: "[[f#4,d5]@3 ~@3 [f#4,d5]@2 [f#4,d5]@2 [e4,e5]@2 [f#4,d5]@2 [a4,c#5]@7 ~ [g4,d5]@4 [f#4,c#5]@5 ~]/2", // D E D A G5 F#5
  G: "[[e4,b4]@5 ~ [d4,a4]@2 [e4,b4]@2 [f#4,c#5]@2 [g4,d5]@2 [a4,c#5]@7 ~ [a4,d5]@4 [a4,d5]@2 [a4,d5]@2 [g4,c#5]@2]/2", // E5 D5 E5 F#5 G5 A D5 Gdim
  H: "[[e4,g4]@10 ~@2 [e4,g4]@2 [e4,g4]@4 [f#4,a4]@3 ~ [g4,b4]@4 [b4,d5]@4 [e4,a4]@8 ~@10]/3", I: "d5@13 ~@3",
  J: "e5@13 ~@3", K: "g5@13 ~@3", L: "[g4,g5]@2 [f#4,f#5]@3 ~ [e4,e5]@4 [f#4,f#5]@2 [f#4,f#5]@2 [f#4,f#5]@2",
  M: "g5@7 [g4,g5]", N: "[g4,g5]@2 [f#4,f#5]@3 ~ [a4,a5]@4 [e4,e5]@2 [f#4,f#5]@2 [f#4,f#5]@2",
  O: "[g4,g5]@2 [f#4,f#5]@3 ~ [e4,e5]@4 [c#4,c#5]@3 ~@3", // G F# E C#
  P: "[[f#4,d5]@3 ~@2 [f#4,c#5]!2 [g4,d5]@4 ~@2 [f#4,c#5]!2 [g4,d5]@4 ~@5]/3", // D F#5 G5 F#5 G5
  Q: "[g4,d5]@2 [f#4,c#5]@3 ~ [g4,d5]@4 [a4,e5]@2 [f#4,c#5]@2 [f#4,c#5]@2", // G5 F#5 G5 A5 F#5
  R: "[[f#4,d5]@6 ~@4 [f#4,c#5]@2 [f#4,c#5]@2 [g4,d5]@8 ~@4 [f#4,c#5,f#5]@2 [f#4,c#5,f#5]@2 [g4,d5,g5]@15 ~@3]/3", // D F#5 G5 F#5 G5
  S: "[g4,g5]@2 [f#4,f#5]@3 ~ [a4,a5]@4 [f#4,f#5]@2 [c#4,c#5]@2 [c#4,c#5]@2", // G F# A F# C#
  T: "[d4,d5]@5 ~ [a4,a5]@4 [f#4,f#5]@2 [c#4,c#5]@2 [c#4,c#5]@2", U: "d5@7 [d4,d5]",
  V: "[d4,d5]@2 [c#4,c#5]@3 ~ [d4,d5]@4 [e4,e5]@2 [c#4,c#5]@2 [c#4,c#5]@2", // D C# D E C#
  W: "[d4,d5]@5 ~ [d4,d5]@4 [e4,e5]@2 [c#4,c#5]@2 [c#4,c#5]@2", // D E C#
  X: "[[d4,d5]@5 ~ [d4,d5]@4 [e4,e5]@2 [d4,d5]@2 [d4,d5]@4 [e4,e5]@2 [d4,d5]@2 [d4,d5]@4 [e4,e5]@2 [d4,d5]@2 [d4,d5]@5 ~@13]/3", // D E D E D E D
})).s("gm_pad_poly").gain(0.48)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note(`<
  ~ A B C D E C D F A F G F H@2 I@3 J@2 F H@2 I@3 J@2 F H@2 I@3 K@2 L@2 K@2 L@2 K@2 L@2 J@2 F H@2 I@3 J@2 F H@2 I@3 K@2
  L@2 K@2 L@2 K@2 L@2 K@2 L@2 K@2 L@2 K@2 L@2 K@2 L@2 M@3 N@2
>`.pickRestart({
  A: "~ [d4,f#4]@15, [f#3,a3]", B: "~ [e3,a3]@15, c#3", C: "~ [d4,g4]@15, [g3,b3]", D: "~ a3@15, [c#3,e3]",
  E: "~ [e4,g4]@15, [g3,b3]", F: "~ [c#4,e4]@15, [e3,a3]", G: "~ [b3,d4]@15, [d3,g3]", H: "~ [b3,e4]@15, [e3,g3]",
  I: "[~ [c#4,e4]@31 ~ [d4,f#4]@15, e3, a3@2 [f#3,a3]]/3", J: "[~ [c#4,e4]@15 ~ [b3,d4]@15, e3, a3 [d3,g3]]/2",
  K: "[~ [b3,e4]@15 ~ [b3,d4]@15, e3, g3 [d3,g3]]/2", L: "[~ [b3,e4]@15 ~ [d4,f#4]@15, e3, g3 [f#3,a3]]/2",
  M: "[~ [b3,e4]@15 ~ [b3,d4]@15 ~ [b3,e4]@15, e3, g3 [d3,g3] g3]/3", N: "[~ [d4,f#4]@31, [f#3,a3]]/2",
})).s("gm_acoustic_guitar_nylon").gain(0.14)

// other · epiano1
const epiano1 = note(`<
  ~ A B C B C D B E ~@4 F G H ~@5 G H I ~@7 J@2 A D K@2 A D K@2 A D K@2 L M N O G H I ~ G ~@5 P@2 A D K@2 A D K@2 Q I H
  F I G H R A D K@2 A D K@2 A D S@2 A D S@2 T@2
>`.pickRestart({
  A: "d5@13 ~@3", B: "a4@13 ~@3", C: "g4@13 ~@3", D: "b4@13 ~@3", E: "e5@13 ~@3", F: "[g3,g4]@13 ~@3",
  G: "[d4,d5]@13 ~@3", H: "[b3,b4]@13 ~@3", I: "[a3,a4]@13 ~@3", J: "[[g3,g4]@14 [a3,a4]@15 ~@3]/2", K: "[g4@29 ~@3]/2",
  L: "[f#3,f#4]", M: "[a3,a4]", N: "[b3,b4]", O: "[e3,e4]", P: "[[e4,e5]@29 ~@3]/2", Q: "[f#3,f#4]@13 ~@3",
  R: "[a3,a4]@5 ~ [g3,g4]@5 ~ [e3,e4]@3 ~", S: "[[g4,d5]@29 ~@3]/2", T: "[[f#4,f#5]@29 ~@3]/2",
})).s("gm_epiano1").gain(0.14)

// chords · string ensemble 1
const string_ensemble_1 = note(`<
  ~@9 A B C B D@2 E@2 A F@2 G@3 E@2 A F@2 G@3 E@2 H@12 A F@2 G@3 E@2 A F@2 G@3 E@2 H@8 I@8 J K L M J K L M N M C M J K L
  M O@2
>`.pickRestart({
  A: "[a3,d4,f#4]", B: "[a3,c#4,e4]", C: "[g3,b3,d4]", D: "[g3,b3,e4]/2", E: "[a3,c#4,e4]/2",
  F: "[[c#4,e4] [g3,b3,d4], a3]/2", G: "[[c#4,e4] [g3,b3,e4]@2, a3]/3",
  H: "[[d4,f#4,d5] [g3,b3,e4,e5] [g3,b3,d4,g5] [g3,b3,e4], a3]/4", // D Em G Em
  I: "[[d4,f#4] [g3,b3,e4] [g3,b3,d4] [g3,b3,e4] [d4,f#4] [g3,b3,e4] [g3,b3,d4] [g3,b3,e4], a3]/8", J: "[d4,f#4,d5]",
  K: "[g3,b3,e4,e5]", L: "[g3,b3,d4,g5]", M: "[g3,b3,e4]", N: "[d4,f#4]", O: "[f#5@29 ~@3]/2",
})).s("gm_string_ensemble_1").gain(0.07)

// bass · acoustic bass
const bass = note(`<
  ~ A B C B D E F G H I J I K@2 L@2 H I J I K@2 L@2 H I J I K@2 L@2 M N C O M N C O M N C O H I J I K@2 L@2 H I J I K@2
  L@2 M N C O M N C O M N C J M N C O M N P O M N P O M N P O M N P O Q@2
>`.pickRestart({
  A: "d2@7 d2", B: "a1", C: "g1@7 g1", D: "e2@7 e2", E: "e2@13 ~@3", F: "a1@7 a1", G: "a1@5 ~ a1@5 ~ f#1@3 ~",
  H: "d2@5 ~ d2@4 d2@3 ~ d2@2", I: "a1@5 ~ a1@4 a1@3 ~ a1@2", J: "g1@5 ~ g1@4 g1@3 ~ g1@2",
  K: "e2@5 ~ e2@4 e2@3 ~ e2@2", L: "[a1@2 a1@3 ~ a1@4 a1@3 ~ a1@4 a1@3 ~ a1@4 a1@3 ~ a1@2]/2", M: "d1@7 d1",
  N: "e1@7 e1", O: "g1@5 ~ g1@4 ~ g1@3 g1@2", P: "g1@10 g1@3 ~ g1@2", Q: "[d1@29 ~@3]/2",
})).s("gm_acoustic_bass").gain(0.48)

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

// drums · snare
const snare = s("sd").struct(`<
  A B ~@6 C D E D F D E D G D E D F D E D G D E D F D E D H D@3 C D I D C D@3 C D E D F D E D H D E D E D E D H D@3 C D
  I D C ~@7 C D@3 C D I D J D I@2 C D I D G ~@2
>`.pickRestart({
  A: "~@15 x", B: "x", C: "~@8 x ~@2 x ~@2 x ~", D: "~ x", E: "~@8 x ~@2 x ~@4", F: "~@8 x ~@4 x!3",
  G: "~@4 x ~@3 x ~@2 x ~@2 x ~", H: "~@4 x ~@3 x ~@3 x!4", I: "~@8 x ~@5 x!2", J: "~@4 x ~@3 x ~ x!6",
})).gain(0.1)

// drums · pedal hat
const pedal_hat = s("hh").struct(`<
  [~@15 x]
  [x ~ x!3 ~ x!3 ~ x!6]!68
  [x!2]!7
  [x ~@7 x ~ x!3 ~ x!2]
  [x ~ x!3 ~ x!3 ~ x!6]!16
  x
  ~
>`).gain(0.1)

// drums · mid tom
const mid_tom = s("mt").struct("<~@16 A ~@7 A ~@7 A ~@4 B ~@6 A ~@7 A ~@12 B ~@15 B ~@3 B ~@3 B ~@5>".pickRestart({
  A: "~@8 x ~@2 x ~@4", B: "x",
})).gain(0.1)

// drums · ride
const ride = s("rd").struct("<~ [x!8]!68 [x!2]!24 x ~>").gain(0.1)

// drums · china
const china = s("cr").struct(`<
  ~@9 A ~@7 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@7 A ~@7 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~
>`.pickRestart({
  A: "x",
})).gain(0.1)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~@8 A B C B@3 C B D B C B@3 C B D B C B@3 C B E B@3 A B@3 A B@3 A B C B@3 C B E B C B C B C B E B@3 A B@3 A ~@7 A B@3
  A B@3 E B@3 A B@3 D ~@2
>`.pickRestart({
  A: "~@8 x ~@2 x ~@2 x ~", B: "~ x", C: "~@8 x ~@2 x ~@4", D: "~@4 x ~@3 x ~@2 x ~@2 x ~", E: "~ x!2 ~",
})).gain(0.1)

// drums · cabasa
const cabasa = s("cabasa:4").struct("<~@9 [x!16]!60 ~@8 [x!16]!16 x ~>").gain(0.53)

stack(
  pad_poly, acoustic_guitar_nylon, epiano1, string_ensemble_1, bass, kick, snare, pedal_hat, mid_tom, ride, china,
  tambourine, cabasa
)

More by The Cranberries