Strudelify

Compilations

Nathan Gunaselvam

KeyC majorTempo72 bpm
0:00/0:00
// Compilations — Nathan Gunaselvam
// 72 bpm, 4/4, key C major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/126060; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 38 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(72/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · clarinet · "Bb Clarinet"
const clarinet = note("<~@17 A B C D E F G H I J K L M ~ N O P Q R S T>".pickRestart({
  A: "e4@3 e4", B: "e4@2 c4 e4", C: "f4 d4", D: "g4 f4 g4 a4", E: "g4@2 f4 e4", F: "e4 f#4 g4 d4", G: "g4 a4 b4 c5",
  H: "d5 d4 f#4 a4", I: "g4 d4 f4 b3", J: "c4@2 d4 c4", K: "d4 b3 c4!2", L: "f4 e4 d4 c4", M: "g3 f#3 g3 ~",
  N: "~@3 c5", O: "c5 b4 c5 d5", P: "c5@2 b4 c5", Q: "d5 c5 b4 a4", R: "g4 f4 e4 f4", S: "g4@4 b4@3 c5", T: "c5",
})).s("gm_clarinet").gain(0.3)

// other · clarinet · "Bb Clarinet" · soft notes
const clarinet_soft = note("<~ A ~@3 B C ~ D E F G H ~@3 I ~@21>".pickRestart({
  A: "c4 d4", B: "c4 g3", C: "e4@3 ~", D: "~@2 c5!2 c5@4", E: "a#4@2 a4 c4", F: "c4@3 e4", G: "f4 g4 g3!2", H: "c4",
  I: "~@3 e4",
})).s("gm_clarinet").gain(0.15)

// other · trumpet · "Bb Trumpet"
const trumpet = note("<~ A ~@3 B C ~ D E F G H ~@2 I J@2 H K L M N O P Q R@2 S T ~@3 U V W M X>".pickRestart({
  A: "a4 g4", B: "e4 d4", C: "c4@3 ~", D: "e4!2 a4@6", E: "e5 d5", F: "e5@3 e5", G: "f4 g4", H: "c5", I: "~@3 c4",
  J: "c4", K: "d5 c5", L: "c5!4", M: "c5 d5", N: "c5@2 d5 g4", O: "b4 c5 d5 e5", P: "b4 g4 d5 g4", Q: "c5 b4", R: "g5",
  S: "d5@2 c5 d4", T: "g4", U: "~@3 g5", V: "g5@3 g5", W: "g5@3 f5", X: "e5",
})).s("gm_trumpet").gain(0.15)

// other · trombone
const trombone = note("<~@17 A B C D E F G H ~ I J K L ~@3 M N O P A>".pickRestart({
  A: "c3", B: "c3!4", C: "d3!2 g2!2", D: "c3 b2 a2 g2", E: "f2!2 g2!2", F: "a2 f#2 d3!2", G: "g2!4", H: "g2!2 f#2!2",
  I: "c3!2 d3 c3", J: "d3 b2 c3!2", K: "d3!2 a2!2", L: "g2!2 g2@2", M: "~@3 g2", N: "f2!4", O: "g2!2 a2 d3",
  P: "c3!2 d3 g2",
})).s("gm_trombone").gain(0.3)

// other · trombone · soft notes
const trombone_soft = note("<~@8 A B C D E ~ F E@2 ~@21>".pickRestart({
  A: "~ a2", B: "~@3 g2", C: "f2@3 d3", D: "c3 f2 g2!2", E: "c3", F: "~@3 c3",
})).s("gm_trombone").gain(0.2)

// other · acoustic guitar nylon · "Guitar"
const acoustic_guitar_nylon = note("<~@17 A B C D E F G H I J K L M N O D P Q R S T>".pickRestart({
  A: "~@3 c4", B: "c4@2 g3 c4", C: "d4 g3", D: "e4 d4 e4 f4", E: "e4@2 d4 c4", F: "c4@2 b3 a3", G: "b3 c4 d4 e4",
  H: "b3@4 a3@3 g3", I: "g3@6 b3 d4", J: "g4@2 f4 e4", K: "f4 e4", L: "d4 e4 c4 d4", M: "b3 a3 g3@2", N: "c4 b3 c4 d4",
  O: "c4@2 g3 e4", P: "e4@2 d4 e4", Q: "f4 e4 d4 c4", R: "b3@2 c4 f4", S: "e4@4 d4@3 c4", T: "c4",
})).s("gm_acoustic_guitar_nylon").gain(0.4)

// chords · piano
const piano = note("<A B C D E F G H I J K L M N ~@4 O P Q R S T U V W X Y Z ~@3 AA AB AC AD AE>".pickRestart({
  A: "c4 [b3,e4] [a3,g4] [g3,c5]", B: "f3 f2 a2 c3 [g2,c3,g4,c5]@2 [g2,d3,g4,b4,d5]@2, g4 ~",
  C: "[c4,e4,g4]!2 [b3,e4,g4]!2, c3 g2", // C Em
  D: "[a3,c4,a4]@4 ~@2 e2 f2 [g2,c4,g4,c5]@4 [g2,b2,d4,b4,d5]@4, f2@3 ~@5, ~ [a3,c4,a4] ~@2", // Am C5 G Am
  E: "[c4,e4,g4] [b3,g4] [a3,g4] [g3,g4], c3 g2", // C Em A7 G
  F: "f2 ~@2 f2 [g2,e4,g4,a4]@2 [g2,d4,f4,g4]@2, [f4,a4,c5] [f4,a4,b4] ~@2, ~ f2@2 ~@5", // A7 G7 F Bm7b5
  G: "[c3,c4,e4,g4]!2 [g2,b3,d4,g4]!2", H: "d5 g5 e5 c5 [g2,g4,c5]@2 [f2,g4,d5]@2, f3 e3 ~@2",
  I: "[g4,e5]@2 [e2,a3,a4,c5,e5] [g2,a3,a4,c5,e5] [a2,a3,e4,a4,c5]@2 [a2,a3,e4,a4,c5]@2", // C Am Am7 Am
  J: "[d3,d4,a#4]!2 [g2,g4,a4]!2", K: "[f2,f3,f4,a4,c5]@3 [d3,e4,f4,a4]", L: "c3 f2 g2!2, [f4,a4,c5] [g4,b4,d5]",
  M: "~@2 [f4,a4,c5] [f4,a4,c5,d5]", N: "[c2,c3,c5,e5,g5]", O: "[c3,c4,e4,g4]!4", P: "[d3,g3,f4]!2 [g2,g4,b4,d5]!2",
  Q: "[c3,c4,g4,c5] [b2,c4,g4,b4] [a2,c4,g4,a4] [g2,d4,g4]", R: "[f2,f4,a4,c5]!2 [g2,g4,a4,c5] [g2,g4,b4,d5]",
  S: "[a2,a4,c5] [f#2,g4,d5] [d3,d4,g4,b4] [c3,d4,g4,b4]", T: "[g2,g4,b4,d5]!3 [g2,g4,b4,e5]",
  U: "[g2,g4,b4,d5]!2 [f#2,d4,g4,c#5]!2", V: "[d4,g4]!2 b3!2", W: "[c3,c4,e4,g4]!2 [d3,d4,e4,g4] [c3,c4,e4,g4]",
  X: "[d3,d4] [b2,b3] [c3,c4]!2", Y: "[d3,d4]!2 [a2,a3]!2", Z: "[g2,g3,g4] [g2,g3,f#4] [g2,g3,g4]@2",
  AA: "~@3 [g2,g4,b4,d5]", AB: "[f2,f4,a4,c5]!4", AC: "[g2,g4,d5]!2 [a2,e5,g5] [d3,c5,e5]",
  AD: "[c3,c4,e4,c5] [c3,c4,e4,g4,c5] [d3,d4,f4,a4] [g2,b3,g4]", AE: "[c3,c4,e4,g4]",
})).s("gm_piano").gain(0.4)

stack(clarinet, clarinet_soft, trumpet, trombone, trombone_soft, acoustic_guitar_nylon, piano)