Strudelify

hör auf deine freunde

Montreal

KeyG majorTempo120 bpm
0:00/0:00
// hör auf deine freunde — Montreal
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 4 "Bass" named as a bass, played on electric bass finger (its piano patch is not one)
// note: Transcription provider: pdmx. https://musescore.com/score/28986; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 65 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [...]/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 · "Tenor"
const piano = note(`<
  A B C@2 D E B ~@2 F G H I F G H I ~ F J K L G M@2 N G O P Q R S T U V W X Y Z AA AB AC AD AE AF G@2 AG ~ F G AH AI
  AJ@2 P AK AL AM L AN ~@4
>`.pickRestart({
  A: "~@2 g3!2", B: "g3", C: "[g3!2 g3@4 b3!2]/2", D: "g3@2 g3!2", E: "g3 g3@3", F: "~ g3 a3 b3", G: "c4",
  H: "~ d4 c4 b3", I: "a3", J: "c4!4", K: "b3!4", L: "a3 g#3@2 a3", M: "~ b3", N: "b3 b3@3", O: "c#4", P: "d4",
  Q: "~ a#3 c4 d4", R: "d#4!4", S: "d4@3 d4", T: "c4 b3@2 c4", U: "d#4 ~", V: "a#3@2 c4 d4", W: "d4 a#3@3",
  X: "a#3 d#4 f4 d#4", Y: "b3@2 ~@5 b3", Z: "b3 a3@2 a3@2 a3 g3 a3", AA: "b3@2 ~@3 d4@2 ~", AB: "b3 a3@2 a3@2 ~@2 a3",
  AC: "a3@3 a3 a3@2 a3@2 a3@2 a3@2 f3@2 c3@2", AD: "f3@2 a3 a#3@2 a#3!3", AE: "c4!4 a#3!2 a3!2",
  AF: "a#3 c4@2 d4@2 ~@3", AG: "b3", AH: "c4@2 d4!2 c4@2 b3@2", AI: "c4 a3 b3 c#4", AJ: "d4/2", AK: "d4!2",
  AL: "c4@2 c4!2", AM: "b3 b3@2 b3", AN: "a3 ~",
})).s("gm_piano").gain(0.24)

// other · piano · "Baritone"
const piano_2 = note(`<
  A B C@2 D E F ~@3 G H I H J H I H ~ K L M N O@2 P B Q R S T U V H W X Y Z AA AB AC AD AE AF AG N AH AI ~@2 I AJ@2 AK
  AL@2 AM D AN AO AP ~@4
>`.pickRestart({
  A: "~@2 g3!2", B: "g3", C: "[g3!2 g3@4 g3!2]/2", D: "g3@2 g3!2", E: "f3 e3@3", F: "d3", G: "~ c4!3", H: "c4 ~",
  I: "~ d4 c4 b3", J: "~ g3 a3 b3", K: "g3!4", L: "g#3!4", M: "a3 g#3@2 a3", N: "a3", O: "~ g3", P: "a3 g3@3", Q: "g#3",
  R: "a#3", S: "~ a#3 c4 a#3", T: "a#3!4", U: "b3@3 b3", V: "c4 b3@2 c4", W: "d#4 d4 c4 a#3", X: "a#3 a#3@3",
  Y: "d#4 d#3 f3 d#3", Z: "f3@2 ~@5 g3", AA: "d#3 d#3@2 d#3@2 d#3!3", AB: "g3@2 ~@3 d3@2 ~",
  AC: "d#3 d#3@2 d#3@2 ~@2 d#3", AD: "f3@3 f3 f3@2 f3@2 f3@2 c3@2 a2@2 a2@2", AE: "d3@2 d#3 f3@2 f3 g3 g#3",
  AF: "a3!2 f3!6", AG: "d3 d#3@2 f3@2 ~@3", AH: "f#3", AI: "f3", AJ: "a3/2", AK: "~ f3 e3 f3", AL: "d3/2", AM: "d3!2",
  AN: "g#3 g#3@2 g#3", AO: "a3 g#3@2 f3", AP: "f3 ~",
})).s("gm_piano").gain(0.3)

// bass · electric bass finger · "Bass"
const bass = note(`<
  ~@6 A B@2 ~ C D E F G D E F ~ H I J K D@2 L M N O ~ P Q R F ~@2 S T U T U V W X Y Z AA AB ~@6 AC N AD AE AF J AG AH
  AI@2 AJ
>`.pickRestart({
  A: "~ g3", B: "[d3 b2@2 g2@3 ~@2]/2", C: "~ a3!2 g#3", D: "g3 ~", E: "~ a3!2 e3", F: "a3 ~", G: "~ g3 a3 g#3",
  H: "c3!4", I: "e3!4", J: "f3 f3@2 f3", K: "f#3", L: "a3 g3@3", M: "c3", N: "b2", O: "a#2", P: "d#3!4", Q: "g3@3 g3",
  R: "g#3 g#3@2 g#3", S: "~ d#3 f3 d#3", T: "d3@3 g2 g2@3 d3", U: "c3@3 g2 g2@3 c3", V: "f3@3 f3 f3@3 f3",
  W: "a#2@3 a#2 a#2@3 a#2", X: "f3@3 f3 f2@3 f2", Y: "a#2 a#2@2 a#2@2 ~@3", Z: "f3", AA: "d3", AB: "g3",
  AC: "~ e3 d3 c3", AD: "b2 g3 a3 b3", AE: "c4@2 c4!2", AF: "e3 e3@2 e3", AG: "d#3 ~", AH: "~@2 g3!2",
  AI: "[f3 g2@2 g2]/2", AJ: "c2 ~",
})).s("gm_electric_bass_finger").gain(0.3)

stack(piano, piano_2, bass)