Strudelify
KeyD♭ majorTempo59 bpm
0:00/0:00
// Soul and Mind — E's Jammy Jam(Bennett Foddy)
// 59 bpm, 4/4, key Db major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Transcription provider: pdmx. https://musescore.com/score/5881640; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 34 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(59/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
const piano = note("<A B C D E F G H I J K L M@2 N O P Q R S T U V W X Y Z AA ~@6>".pickRestart({
  A: "[gb3,ab3,bb3,db4,f4,f5]@23 ~@16 eb5@3 f5@3 gb5@3, ~@24 [ab3,b3,d4,g4]@23 ~", // Gbmaj7 G
  B: "f5@3 bb4@6 bb4@14 ~ [gb3,b3,c4,e4,a4]@23 ~, [gb3,ab3,bb3,db4,f4]@23 ~@25", // Gbm7b5 Gbmaj7
  C: "[f3,bb3,eb4,ab4]@23 ~@7 bb4@11 ~ c5@3 db5@3, ~@24 [e3,bb3,eb4]@23 ~", // Fm7 Eb
  D: "c5@3 f4@6 f4@14 ~ ab4 [eb4,a4,c5]@3 ~@8 a4 [eb4,a4,c5]@11, [g3,ab3,c4]@23 ~@25", // Adim Abmaj7
  E: "[gb3,ab3,bb3,db4,f4,bb4]@23 ~@4 bb3@3 eb4@3 f4@3 gb4@4 ab4@4 gb4@4", // Gbmaj7
  F: "f4@15 ~ eb4@4 ~@4 [eb3,a3,d4]@11 ~ [eb3,ab3,db4,f4]@11 ~, ~@20 gb4@15 ~@13", // D Db
  G: "[ab3,bb3,db4]@11 ~ [g3,db4,f4,c5]@11 ~ [gb3,db4,gb4]@11 ~@7 c5@3 db5@3, ~@24 bb4@17 ~@7, ~@36 [gb3,c4,f4]@11 ~", // Bbm7 Csus4 Gb5 F
  H: "eb5 ~@2 ab4@6 ab4@10 ~ f4@4 [ab3,b3,d4]@11 ~ [ab3,b3]@11 ~, [f3,bb3,eb4]@23 ~ bb4@24", // Abdim Abm Ebsus2
  I: "[gb3,ab3,bb3,db4,f4]@23 ~@4 f5@3 gb5 g5 ~ ab5 ~@2 f5 ~@2 db5 ~@2 bb4 ~@2 gb4 ~@2, ~@24 [ab3,b3,d4,g4]@23 ~", // Gbmaj7 G
  J: "[gb3,ab3,bb3,db4]@20 eb4@4 [gb3,b3,c4,ab4]@23 ~, f4@19 ~@29", // Gb Ab7
  K: "eb5@17 ~ db5@3 eb5@3 ~@2 e5@2 eb5@2 db5@17 ~, [c4,f4,ab4]@23 ~ [e3,ab3,bb3,eb4]@23 ~", // Fm Emaj7
  L: "c5@4 g4@2 ab4 a4 bb4@4 ab4@4 db4@4 ~@4 [g3,bb3,db4,e4]@23 ~, [g3,ab3,c4]@20 g4@27 ~", // Gdim Abmaj7
  M: "[~@6 f4@6 gb4@6 bb4@6 [db4,gb4,db5,f5]@6 [eb4,ab4,eb5,gb5]@6 [f4,ab4,db5,ab5]@4 gb5@4 ~@22 eb5@6 b4@11 ~ c5@11 ~, [gb3,ab3,bb3,db4]@23 ~@21 f5@21 ~@31, ~@48 [bb3,d4,eb4,g4]@23 ~ [eb3,a3,d4]@23 ~]/2", // Gbmaj7 Ab7 Db Gb Ebmaj7 D
  N: "[ab3,c4,db4,f4,db5]@11 ~@5 f5@4 ab5@4 c6@6 ab5@6 f5@6 ab4@6, ~@12 [gb3,c4,db4,f4]@11 ~ [gb3,ab3,bb3,db4,f4]@11 ~ [gb3,bb3,c4,f4]@11 ~", // Dbmaj7 Gbmaj7
  O: "[c4,f4,ab4,eb5]@3 [bb3,f4,ab4,db5] ~@8 [bb3,f4,ab4,db5]@11 ~ [g3,d4,e4,gb4,g4,b4]@11 ~ [g3,db4,e4,g4]@11 ~", // Fm7 Bbm7 Gmaj7 Dbdim
  P: "~@16 a5@4 a5@4 [g3,b3,d4,gb4]@11 ~@5 gb5@4 e5@2 d5@2, [gb3,a3,b3,e4,a4]@23 ~ a5@12 [g3,b3,db4,gb4]@11 ~", // Gmaj7 Gbm7 Gmaj7
  Q: "db5@4 a4@2 b4@11 ~@7 [bb3,d4,f4,a4,c5]@11 ~ [bb3,d4,g4,bb4]@11 ~, [gb3,a3,b3,e4]@23 ~@25", // Bbmaj7 Gm Gbm7
  R: "a4@3 b4@3 b4@3 d5@3 d5@3 gb5@3 gb5@3 g5@3 g5@3 b5@3 b5@3 d6@3 [g3,b3,db4,gb4,gb6]@8 e6@2 d6@2, [e3,ab3,a3,db4]@11 ~ [eb3,a3,d4]@11 ~ [g3,b3,d4,gb4]@11 ~@13", // Gmaj7 Amaj7 D Gmaj7
  S: "db6@4 db7@4 a6@15 ~ [g3,db4,gb4,a4]@3 [gb3,b3,e4,g4] ~@8 [e3,a3,db4,gb4]@3 [d3,a3,db4,e4]@9, [gb3,b3,e4]@23 ~@25", // Gbm Em Gbm7 A Esus2
  T: "~@12 e6@3 d6 e6 d6 db6@3 d6@3 a6@4 g6@4 b6@11 ~ g6@4, [f3,g3,a3,c4,d4]@23 ~ [f3,a3,b3,e4,a4]@23 ~", // Dm7 Fmaj7
  U: "d6 e6@3 g5@4 a5@2 e5@2 ~@24 db6@3 c6@3 c6@3 a5@3, [e3,g3,a3,d4]@23 ~ [g3,bb3,db4,e4]@23 ~, ~@12 g5@23 ~@13", // Em7 Gdim
  V: "a5@3 e5@3 e5@3 g5@3 f5@3 a4@3 ab4@3 a4@3 ~@8 e5@2 d5@2 b4@6 a4@6, [f3,g3,a3,c4,e4]@23 ~ f5@8 ~@16, ~@27 [f3,a3,c4,e4]@9 [b2,f3,e4]@11 ~", // Fmaj7 E
  W: "g4 e5 gb4 eb5 d5 bb4 bb5 f5, [e3,a3,d4]@11 ~ [eb3,ab3,db4]@11 ~ [d3,g3,c4]@11 ~ [ab3,b3,d4,g4]@11 ~", // Dsus2 Dbsus2 Csus2 G
  X: "[ab4,db5,ab5]@17 ~ ab5@6 ~@6 [ab4,ab5]@6 bb3@6 [ab4,ab5]@6, [gb3,ab3,bb3,db4,eb4]@23 ~ [ab3,b3,d4,f4]@23 ~", // Db5 Ab Ebm7 Abdim
  Y: "~@4 [db5,db6]@4 [c5,c6]@4 [ab4,ab5]@4 f5@4 gb5@4 [gb3,c4,ab4,c5,e5,ab5]@11 ~ ab4 [a4,c5,e5]@11, [gb3,ab3,bb3,db4,eb4]@23 ~@13 [gb3,c4]@11 ~", // Db C Ab Caug Am Ebm7 Gbdim
  Z: "[ab4,c5,eb5]@11 ~@4 ab5@3 bb5@3 c6@3 db6 ~@3 eb6 ~@3 e6 ~@3 ab6@4 c7@4 eb7@4, [f3,bb3,eb4]@23 ~ [e3,bb3,eb4]@23 ~", // Ab Ebsus2 Eb
  AA: "g7@17 ~ f7@6 ~@24, [g3,ab3,c4]@23 ~@25", // Abmaj7
})).s("gm_piano").gain(0.25)

// chords · piano · soft notes
const piano_soft = note("<~@27 A B C D E@3>".pickRestart({
  A: "~@24 [e3,bb3,db4,bb7]@23 ~", // Bbdim
  B: "~@3 ab7@3 gb7@3 bb6@3 f7@2 eb7@2 bb6@2 gb6@2 eb6@2 bb5@2, [gb3,ab3,bb3,db4,f4]@23 ~ [gb3,ab3,bb3,c4,f4]@23 ~", // Gbmaj7 Fm
  C: "c6 bb5 gb5 db5 ab4 a4 [f5,ab5] [eb5,gb5], [eb3,bb3,c4]@23 ~ [eb3,a3]@23 ~", // Fm Ebm Cm7 Ebdim
  D: "[db5,f5] [c5,eb5]!2 [bb4,db5] [gb4,bb4] [eb4,gb4] [d4,f4] ab4, [ab3,c4,db4,f4]@11 ~ [g3,c4,db4,f4]@11 ~ [gb3,ab3,bb3,db4]@11 ~ [gb3,ab3,a3]@11 ~", // Db Cm Bbm Gb Ebm Dm Dbmaj7 Csus4 …
  E: "[~@4 [eb5,g7] ~, ~@6 [ab2,db3]@6 [bb3,c6]@3 [c4,eb6] [f4,ab6] [c4,eb6] [f4,ab6]@3 [bb4,bb6] [eb5,g7] [bb4,bb6]@7 ~@6, ~@24 f3 bb3 eb4@94 ~@24, ~@25 ab3@95 ~@24, ~@25 c4@11 [f3,ab5]@4 [bb3,c6]@4 [f3,ab5]@76 ~@24]/3", // Eb Db5 Bbsus2 Cm Fm Cm Fm Bb …
})).s("gm_piano").gain(0.15)

// bass · acoustic bass
const bass = note("<A B C D E F G H A I C D E J K L M N O P Q R S T U V W D E X G Y@3>".pickRestart({
  A: "eb1 bb1", B: "eb1 ab1", C: "db1 gb1", D: "f1 e1", E: "eb1 db1", F: "c1 f1", G: "bb1 eb1!2 ab1",
  H: "db1@8 bb1 ~ f1 ~ d2@4", I: "eb1@8 ab1@4 eb1@3 d1", J: "c2 gb1 f1@2", K: "bb0 eb1!2 ab1", L: "db1@2 e1 a1",
  M: "d1 e1", N: "gb1 a1 g1 e2", O: "gb1 b0 e1 a0", P: "d1@4 a1 a0@2 a1", Q: "d1@7 c2 b1@4 g1@4", R: "c1 e1 eb1 a0",
  S: "d1 a0 g0 b0", T: "c1 b0 bb0 e1", U: "eb1 bb1@2 bb1 bb0 bb1@2 bb1", V: "eb1 bb1@3 ab1@2 eb1 d1", W: "db1 f1 gb1@2",
  X: "c1 eb1 f1@2", Y: "[~ db1@4 ~]/3",
})).s("gm_acoustic_bass").gain(0.3)

stack(piano, piano_soft, bass)