Strudelify

Mountains

Prince

KeyD majorTempo130 bpm
0:00/0:00
// Mountains — Prince
// 130 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 132 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(130/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 · "A.PIANO 2"
const piano = note(`<
  ~@4 A B C D E F G H I J K L M N O B P Q A R I J S T U V W X Y V Z AA A AB O B AC AD AE AF I J AG AH A B C D E F G H I
  J K L M N O B P Q A R I J AI T U V W X AJ V Z AA A AB O B AK AL AM AF I J AN AH AO AP@2 AQ AR AS AT AU AV AW AI AX AY
  AZ Q BA AY BB BC BD A D BE BF BG F M BH I BI BJ AH BK AH BL AB BM@4
>`.pickRestart({
  A: "[d3,f#3,a3,d4]@8 ~ [d3,g3,b3,d4]@2 ~", B: "[d3,f#3,a3,d4]@19 ~@5",
  C: "~ d4@16 ~@2 [b3,d4]@4 ~, [d3,f#3,a3]@8 ~ [d3,g3]@2 ~", D: "~ [d3,d4]@18 ~@5, [f#3,a3]@3 ~",
  E: "~ g3@16 ~ [g3,c4,e4,g4]@4 ~@2, [b3,d4,g4]@2 ~", F: "[g3,b3,d4,g4]@3 ~",
  G: "[d3,f#3,a3,d4]@16 ~@3 g3@3 ~@2, ~@6 [d3,b3,d4] ~", H: "~ d4@19 ~@4, [d3,f#3,a3]@5 ~",
  I: "[e3,a3,c#4]@17 ~ [d#3,g#3,c4]@5 ~", J: "[d3,g3,b3]@11 ~", K: "[d3,f#3,a3,d4]@11 ~@2 [a3,c#4]@10 ~, ~@12 e3@11 ~",
  L: "~ [d3,f#3,a3]@19 ~@4, d4@19 ~@5", M: "[d3,f#3,a3,d4]@17 ~ [d3,g3,b3,d4]@5 ~",
  N: "~ [f#3,d4]@20 ~@3, [d3,a3]@19 ~@5", O: "[d3,f#3,a3,d4]@17 ~ [d3,g3,b3,d4]@4 ~@2",
  P: "~ [g3,d4]@16 ~ [g3,c4,e4,g4]@4 ~@2, [b3,g4]@2 ~", Q: "[g3,b3,d4,g4]@19 ~@5", R: "[d3,f#3,a3,d4]@11 ~",
  S: "~ f#3@10 ~ [e3,a3,c#4]@11 ~, [d3,a3,d4]@5 ~@7", T: "[d3,f#3,a3,d4]@17 ~@7",
  U: "[g3,b3,d4,g4]@8 ~ [g3,b3,d4,g4]@2 ~", V: "[f#3,a3,c#4,f#4]@5 ~", W: "[g3,b3]@7 ~, [d4,g4]@19 ~@5",
  X: "[a3,c#4,f#4]@3 ~ [e3,g3,b3,e4]@3 ~, f#3@11 ~@13", Y: "~ [g3,b3,d4,g4]@16 ~ [g3,b3,d4,g4]@4 ~@2",
  Z: "[g3,b3,d4,g4]@5 ~", AA: "[f#3,f#4]@9 ~@3 [e3,g3,b3,e4]@7 ~@5, [a3,c#4]@7 ~@17", AB: "~ [d3,f#3,d4]@22 ~, a3@11 ~",
  AC: "~ [g3,d4,g4]@16 ~ [g3,c4,e4,g4]@4 ~@2, b3@17 ~@7", AD: "~ [d4,g4]@18 ~@5, [g3,b3]@3 ~",
  AE: "~ [d3,a3,d4]@16 ~ [d3,g3,b3,d4]@5 ~, f#3@2 ~", AF: "~ [f#3,a3,d4]@20 ~@3, ~ d3@18 ~@5",
  AG: "[d3,f#3,a3,d4]@11 ~@2 [e3,a3,c#4]@11", AH: "[d3,f#3,a3,d4]@23 ~", AI: "[d3,f#3,a3,d4]@10 ~@2 [e3,a3,c#4]@11 ~",
  AJ: "~ [g3,b3,d4]@16 ~ [g3,b3,d4,g4]@4 ~@2, g4@2 ~", AK: "~ [d4,g4]@16 ~ [g3,c4,e4,g4]@4 ~@2, [g3,b3]@17 ~@7",
  AL: "~ d4@17 ~@6, [g3,b3,g4]@3 ~", AM: "~ d4@16 ~ [d3,g3,b3,d4]@5 ~, [d3,f#3,a3]@2 ~",
  AN: "[d3,f#3,a3,d4]@11 ~@2 c#4@11, ~@12 [e3,a3]@11 ~", AO: "[d3,f#3,a3,d4]@5 ~@5 [d3,f#3,a3,d4]@12 ~@2",
  AP: "[d3,f#3,a3,d4] ~@4 [d3,f#3,a3,d4]@6 ~", AQ: "[f#3,d4]@2 ~@9 [d3,f#3,a3,d4]@11 ~@2, [d3,a3] ~@23",
  AR: "~ [g3,b3,d4] ~@9 [g3,d4]@12 ~, ~ g4@2 ~@7 [b3,g4]@12 ~@2", // G G5 Em
  AS: "[g3,b3,d4,g4]@2 ~@8 [b3,d4,g4]@9 ~@5, ~@10 g3@11 ~@3", // G
  AT: "[d3,f#3,a3] ~@10 a3@8 ~@5, d4@2 ~@8 [d3,f#3,d4]@9 ~@5", // D
  AU: "[d3,f#3,a3,d4] ~@10 f#3@12 ~, ~@10 [d3,a3,d4]@11 ~@3", AV: "[e3,a3,c#4]@2 ~@8 [e3,a3,c#4]@7 ~ [d#3,g#3,c4]@5 ~",
  AW: "[d3,g3,b3] ~@4 [d3,g3,b3]@6 ~", AX: "[d3,f#3,a3,d4]@11 ~ [d3,f#3,a3,c4]@7 ~@5",
  AY: "[g3,b3,d4,g4]@17 ~ [g3,b3,d4,g4]@3 ~@3", AZ: "[f#3,a3,c#4,f#4]@19 ~@5",
  BA: "[a3,c#4,f#4]@2 ~ [e3,g3,b3,e4]@2 ~, f#3@11 ~@13", BB: "~ [f#3,a3]@18 ~@5, [c#4,f#4]@3 ~",
  BC: "[g3,b3]@5 ~, [d4,g4]@3 ~", BD: "[a3,c#4,f#4]@8 ~@4 [e3,g3,b3,e4]@7 ~@5, f#3@5 ~@7",
  BE: "~ [f#3,a3,d4]@16 ~ [d3,g3,b3,d4]@4 ~@2, d3@2 ~", BF: "[d3,f#3,a3,d4]@3 ~",
  BG: "~ [g3,b3]@17 [g3,c4,e4,g4]@5 ~, [d4,g4]@17 ~@7", BH: "[f#3,d4]@7 ~, [d3,a3]@19 ~@5", BI: "[d3,g3,b3]@23 ~",
  BJ: "[d3,f#3,a3,d4]@11 ~@2 c#4@10 ~, ~@12 [e3,a3]@11 ~", BK: "[d3,f#3,a3]@11 ~ [e3,a3,c#4]@11 ~, d4@3 ~@5",
  BL: "[f#3,a3]@12 ~ [e3,c#4]@11, [d3,d4]@10 ~@2 a3@11 ~", BM: "[[d3,f#3,a3,d4] ~@9 [d3,f#3,a3,d4]@75 ~@11]/4",
})).s("gm_piano").gain(0.4)

// chords · electric guitar muted · "MUTED GTR"
const electric_guitar_muted = note(`<
  ~ A B C D@2 E F G H I D J H K L D@2 E F G H I D J H K M N O P Q R S T U D@2 E F G H I D J H K L D@2 E F G H I D J H K
  L D@2 E F G H I D J H K M V O P Q R S T U D@2 E F G H I D J H K L D@2 E F G H I D J H K M V O P Q R S T U D@2 E F G H
  I D J H K L K L K L W@3 ~
>`.pickRestart({
  A: "~@11 d3", B: "[f#3,a3,d4]@4 d3@2 [g3,b3,d4]@4 d3@2 [f#3,a3,d4]@4 d3@2 [g3,b3,d4]@4 d3 ~",
  C: "[f#3,a3,d4]@4 d3 ~ [g3,b3,d4]@4 d3@2 [f#3,a3,d4]@4 d3@2 [g3,b3,d4]@4 d3@2", // D G D G
  D: "[f#3,a3,d4]@4 d3 ~ [g3,b3,d4]@4 d3 ~ [f#3,a3,d4]@4 d3 ~ [g3,b3,d4]@4 d3 ~", // D G D G
  E: "[f#3,a3,d4]@4 d3@2 [g3,b3,d4]@4 d3@2 [f#3,a3,d4]@3 ~ d3@2 [g3,b3,d4]@4 d3 ~", // D G D G
  F: "[f#3,a3,d4]@4 d3 ~ [g3,b3,d4]@4 d3 ~ [f#3,a3,d4]@4 d3 ~ [g3,b3]@4 d3 ~, ~@6 d4 ~", // D G D G
  G: "[b3,d4]@2 g3 [c4,e4]@2 g3 [b3,d4]@2 g3 [c4,e4]@2 g3", // Bm C Bm C
  H: "[b3,d4]@4 g3@2 [c4,e4]@4 g3@2 [b3,d4]@4 g3@2 [c4,e4]@4 g3 ~", // Bm C Bm C
  I: "[f#3,a3,d4]@4 d3@2 [g3,b3,d4]@4 d3 ~ [f#3,a3,d4]@4 d3@2 [g3,b3,d4]@4 d3@2", // D G D G
  J: "[c#4,e4]@2 a3 [d4,f#4]@2 a3 [c#4,e4]@2 a3 [d4,f#4]@2 a3", // C#m D C#m D
  K: "[f#3,a3]@4 d3 ~ [d3,f#3,a3]@5 ~ [c#3,e3,g3]@5 ~ [c#3,e3,g3]@5 ~", // F#m D C#dim
  L: "[f#3,a3]@4 d3@2 [g3,b3]@4 d3@2 [f#3,a3]@4 d3@2 [g3,b3]@4 d3 ~, d3 ~@11", // F#m G F#m G
  M: "[f#3,a3]@4 d3@2 [g3,b3]@4 d3@2 [f#3,c4]@4 d3@2 [f#3,c4]@4 d3 ~, d3 ~@11", // F#m G F#dim
  N: "[g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@4 b3 [g3,d4]@2 [g3,b3,d4]@3 b3 [g3,d4] ~ g3@2 ~ [g3,b3,d4] ~, ~@6 [b3,d4] ~", // G G5 G G5 G Bm
  O: "[f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~", // F#m
  P: "[g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@2 ~@2 [g3,b3,d4] ~", // G
  Q: "[f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~ [f#3,c#4]@5 ~ [e3,g3,b3]@2 ~@2 [e3,g3,b3] ~ [g3,b3]@5 ~, ~@2 a3 ~@3 e3 ~", // F#m F#5 Em G
  R: "[g3,b3,d4]@2 ~@2 [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~", // G
  S: "[f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4]@3 ~ [f#3,a3,c#4] ~@2 [f#3,a3,c#4]@2 ~ [f#3,a3,c#4] ~ [f#3,a3,c#4]@2 ~@2 [f#3,a3,c#4] ~", // F#m
  T: "[g3,b3,d4]@3 ~ [g3,b3] ~ [g3,b3]@3 ~ [g3,b3] ~ [g3,b3]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@2 ~@2 [g3,b3,d4] ~, ~@4 d4@4 ~@2 d4@5 ~@9", // G
  U: "[f#3,a3,c#4]@2 ~@2 [f#3,a3,c#4] ~ [f#3,a3,c#4]@5 ~ [e3,g3,b3]@2 ~@2 [e3,g3,b3] ~ [e3,g3,b3]@5 ~", // F#m Em
  V: "[g3,b3,d4]@3 ~ [g3,b3,d4] ~ [g3,b3,d4]@4 b3 [g3,d4]@2 [g3,b3,d4]@3 [g3,b3,d4] ~ [g3,b3,d4]@3 ~ [g3,b3,d4] ~", // G G5 G
  W: "[[d3,f#3,a3,d4] ~@10 d4@39 ~@22, ~@9 d3@40 ~@23, ~@5 [f#3,a3]@20 ~@11]/3", // D F#m
})).s("gm_electric_guitar_muted").gain(0.48)

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B A B C D@2 E F G H@2 I J K L C D@2 E F G H@2 I J K M N O P Q P R S T C D@2 E F G H@2 I J K L C D@2 E F G H@2 I J K
  L C D@2 E F G H@2 I J K M N O P Q P R S T C D@2 E F G H@2 I J K L C D@2 E F G H@2 I J K M N O P Q P R S T C D@2 E F G
  H@2 I J K L K L K L U@4
>`.pickRestart({
  A: "d2@3 ~ d2@2 f#2@4 d2@2 a2@4 d2@2 g2@4 f#2@2", B: "d2@3 ~ d2@2 f#2@4 d2 ~ a2@4 d2@2 g2@3 ~ f#2@2",
  C: "d2@3 ~ d2@2 f#2@4 d2 ~ a2@4 d2@2 g2@4 f#2@2", D: "d2@3 ~ d2@2 f#2@4 d2@2 a2@4 d2 ~ g2@4 f#2@2",
  E: "d2@2 ~@2 d2@2 f#2@4 d2 ~ a2@4 d2@2 g2@4 f#2 ~", F: "g2@5 ~ e2@5 ~ d2@5 ~ e2@3 ~ d2 ~",
  G: "g2@3 ~ g2@2 e2@6 d2@5 ~ e2@6", H: "d2@3 ~ d2@2 f#2@4 d2 ~ a2@4 d2 ~ g2@3 ~ f#2@2", I: "a1@6 e2@6 a2@5 ~ g#2@6",
  J: "g2@5 ~ e2@6 d2@6 b1@6", K: "d2 f#2 a1 c#2", L: "d2@3 ~ d2@2 f#2@4 d2@2 a2@4 d2 ~ g2@3 ~ f#2@2",
  M: "d2@4 ~@2 d2@5 ~ e2@5 ~ f#2@5 ~", N: "g2@5 ~ g2@6 d2@5 ~ g2@6", O: "f#2@5 ~ f#2@6 c#2@6 f#2@6",
  P: "g2@5 ~ g2@6 d2@6 g2@6", Q: "f#2@5 ~ f#2@6 e2@5 ~ e2@4 ~@2", R: "f#2@5 ~ f#2@6 c#2@6 f#2@5 ~",
  S: "g2@2 ~ g2@3 d2@3 g2@3", T: "f#2@5 ~ f#2@6 e2@5 ~ e2@5 ~", U: "[d2@2 ~@2 d2@2 a1@4 d1@65 ~@21]/4",
})).s("gm_acoustic_bass").gain(0.48)

// drums · kick
const kick = s("bd").struct(`<
  A@4 B C B C B C B C@5 B C B C B C B C@13 B C B C B C B C@5 B C B C B C B C@5 B C B C B C B C@13 B C B C B C B C@5 B C
  B C B C B C@13 B C B C B C B C@8 B D ~@3
>`.pickRestart({
  A: "x ~@10 x", B: "x!2", C: "x ~@5 x ~@4 x", D: "x ~@4 x ~@6",
})).gain(0.56)

// drums · snare
const snare = s("sd").struct(`<
  ~@2 A B A@3 C A C A C A@3 D A@3 C A C A C A@3 E A@3 C A@3 D A@3 C A C A C A@3 E A@3 C A C A C A@3 D A@3 C A C A C A@3
  E A@3 C A@3 D A@3 C A C A C A@3 E A@3 C A C A C A@3 E A@3 C A@3 D A@3 C A C A C A@3 E A@3 E F ~@3
>`.pickRestart({
  A: "~ x ~ x", B: "~@3 x ~@3 x!5", C: "~@3 x ~@4 x!2 ~ x", D: "~@3 x!9", E: "~@3 x!3 ~@6", F: "~ x ~@4",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct(`<
  [~ x ~ x]!28
  [~@3 x ~ x ~@3 x ~@2]!8
  [~ x ~ x]!36
  [~@3 x ~ x ~@3 x ~@2]!8
  [~ x ~ x]!24
  [~@3 x ~ x ~@3 x ~@2]!8
  [~ x ~ x]!16
  ~@4
>`).gain(0.56)

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x]!35 [x!4] [~ x ~ x]!43 [x!4] [~ x ~ x]!31 [x!4] [~ x ~ x]!16 ~@4>").gain(0.56)

// drums · low tom
const low_tom = s("lt").struct("<~@27 A ~@19 A ~@23 A ~@19 A ~@11 A ~@19 A ~@3 A B ~@3>".pickRestart({
  A: "~@11 x", B: "~@7 x ~@16",
})).gain(0.5)

// drums · mid tom
const mid_tom = s("mt").struct("<~@27 A ~@19 A ~@23 A ~@19 A ~@11 A ~@19 A ~@3 A B ~@3>".pickRestart({
  A: "~@9 x!2 ~", B: "~ x ~@2",
})).gain(0.5)

// drums · crash
const crash = s("cr").struct(`<
  ~@4 A ~@11 A ~@11 A ~@5 B ~ A ~@11 A ~@11 A ~@11 A ~@5 B ~ A ~@11 A ~@11 A ~@5 B ~ A ~@15 C ~@3
>`.pickRestart({
  A: "x", B: "~@3 x", C: "x ~@4 x ~@6",
})).gain(0.56)

// drums · high tom
const high_tom = s("ht").struct("<~@27 A ~@19 A ~@23 A ~@19 A ~@11 A ~@19 A ~@3 A B ~@3>".pickRestart({
  A: "~@6 x!3 ~@3", B: "~@5 x ~@18",
})).gain(0.5)

// drums · ride
const ride = s("rd").struct("<~@4 A@30 B ~ A@42 B ~ A@30 B ~ A@16 ~@4>".pickRestart({
  A: "x ~ x!2 ~ x!2 ~ x!2 ~ x", B: "x ~ x!2 ~ x!2 ~ x!2 ~@2",
})).gain(0.5)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!128 ~@4>").gain(0.56)

stack(piano, electric_guitar_muted, bass, kick, snare, clap, hihat, low_tom, mid_tom, crash, high_tom, ride, tambourine)

More by Prince