Strudelify
KeyD majorTempo120 bpm
0:00/0:00
// Joy — Isaac Watts
// 120 bpm, 2/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/657536; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 40 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/2)

// 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 · pizzicato strings
const pizzicato_strings = note("<~@28 A B C A D B E F ~@4>".pickRestart({
  A: "~ a4!2 ~", B: "~ d5!2 ~", C: "~ f#5!2 ~", D: "~ b4!2 ~", E: "~ c#5!2 ~", F: "c#5 ~",
})).s("gm_pizzicato_strings").gain(0.3)

// other · violin
const violin = note("<A B C D E F G@2 H I H J K L M N O P Q R ~@13 S M N O P Q T>".pickRestart({
  A: "f#4@4 a4@3 g4", B: "f#4@3 e4", C: "d4 c#4", D: "d4@3 d4", E: "g4@3 g4", F: "e4@3 e4", G: "[f#4@3 ~]/2", H: "a4!2",
  I: "f#4 ~", J: "f#4@2 ~ f#4", K: "f#4@2 f#4@2 f#4@2 f#4 g4", L: "a4@6 g4 f#4", M: "e4@2 e4@2 e4@2 e4 f#4",
  N: "g4@6 f#4 e4", O: "d4 f#4@2 g4", P: "f#4@3 g4", Q: "f#4 e4", R: "d4 ~", S: "~@6 g4 f#4", T: "d4",
})).s("gm_violin").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_2 = note("<~@21 A ~ B ~ C D E F G H F I J ~@6>".pickRestart({
  A: "~ d4 f#4 a4", B: "~ a3 d4 f#4", C: "~ a4 c#5 e5", D: "~ d4", E: "~ f#4 d4 ~", F: "~ f#4!2 ~", G: "~ a4!2 ~",
  H: "~ d5!2 ~", I: "d4", J: "d4 ~",
})).s("gm_pizzicato_strings").gain(0.3)

// other · viola
const viola = note("<A B C D E F G@2 H I H I J K L M N B O P ~@9 Q R S ~@3 J N B O T>".pickRestart({
  A: "d4@4 d4@3 d4", B: "d4@3 b3", C: "a3 g3", D: "d3@3 d4", E: "d4@3 d4", F: "a3@3 a3", G: "[a3@3 ~]/2", H: "f#4!2",
  I: "d4 ~", J: "~@3 a3", K: "a3!4", L: "a3@3 e4", M: "e4!3 a3", N: "d4 a3@2 d4", O: "a3!2", P: "d3 ~", Q: "~@3 d5",
  R: "d5 c#5 b4 a4", S: "a4@3 g4 f#4@4", T: "d3",
})).s("gm_viola").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_3 = note("<~@20 A ~ B ~ C ~ D E F G ~@2 H I J K ~@4>".pickRestart({
  A: "~ d4 f#4 a4", B: "~ a3 e4 c#5", C: "~ g3 b3 d4", D: "a3 ~", E: "~ a4 d4 ~", F: "d4", G: "d4 ~", H: "~ d5!2 ~",
  I: "~ a4!2 ~", J: "~ g4!2 ~", K: "e4 ~",
})).s("gm_pizzicato_strings").gain(0.3)

// other · cello
const cello = note("<A B C D E F G@2 H I H I J K L M N O P Q ~@7 R S T ~ U V W ~ X N O P Y>".pickRestart({
  A: "d3@4 d3@3 d3", B: "d3@3 g2", C: "a2!2", D: "f#3@3 f#3", E: "g3@3 g3", F: "a3@3 a3", G: "[d3@3 ~]/2", H: "d2!2",
  I: "d3 ~", J: "~@3 d3", K: "d3!4", L: "a2@3 a3", M: "a3!4", N: "d3@3 d3", O: "d3@3 g3", P: "a3 g3", Q: "f#3 ~",
  R: "~@3 d4", S: "d4 c#4 b3 a3", T: "a3@3 g3 f#3@4", U: "~@3 f#3", V: "f#3@2 f#3@2 f#3@2 f#3 g3", W: "a3@3 ~",
  X: "~@3 a3", Y: "f#3",
})).s("gm_cello").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_4 = note("<~@20 A@2 B C D E F G ~@2 A H ~@2 B I ~@4>".pickRestart({
  A: "d3", B: "a3", C: "d3 f#3", D: "g2", E: "a2", F: "d3 f#3 a3 d3", G: "d4 ~", H: "d3 ~", I: "a3 ~",
})).s("gm_pizzicato_strings").gain(0.3)

stack(pizzicato_strings, violin, pizzicato_strings_2, viola, pizzicato_strings_3, cello, pizzicato_strings_4)