Strudelify

...in concerto

Pooh

KeyF majorTempo72 bpm
0:00/0:00
// ...in concerto — Pooh
// 72 bpm, 4/4, key F 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: duplicate parts dropped: ch 11 synth bass 1 (copy of ch 6 synth bass 1, 0.333 beats late); ch 7 lead 2 sawtooth (copy of ch 8 harpsichord, 0.073 beats early)
// note: Full arrangement: all 65 bars on a 48-step grid, each part at one level. 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 · [...]/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 N O P Q B C D E F R S T U V U W X Q A B C D E F G H I J K L M N O P Q B C D E F R S T U V
  U W Y Z@3
>`.pickRestart({
  A: "~@3 c4 ~@3 [c3,a4], f2, e4 a3 a4 e4, ~ c3@6 ~, ~ f3@3 ~ c4@3", // F
  B: "~@3 db4 ~@3 a3, db2@5 a3 db4@2, a4 e4, ~ e3@7, ~@2 a3@2 ~ a2@3",
  C: "~@3 a3 ~@3 a3, d2, a4 d4, ~ d3@7, ~@2 f3@2 ~ a3 a4@2",
  D: "~@3 db4 ~@3 f4, db2, bb4!2, ~@2 db3@9 db3 db5@4, ~@4 bb3@4 ~@2 f4@3 db3@3",
  E: "~@3 c4 ~@3 c4, c2, c5 a4, ~ f3@3 ~ c4@2 ~, ~ a3 f4 [f4,c5]", // F5
  F: "~@3 db4 ~@3 a3, db2, e4 db4, ~ e3@3 ~ a3@2 ~, ~ a3 e4 [e4,g4]", // Em
  G: "~@5 a3!3, [d2,a4]@3 [e2,a4], ~ d3@5 ~@2, ~ f3@2 ~, ~@3 a3 d4@2 ~@2", // D5 A5
  H: "~@3 c4 ~@3 f4, f2, a4 a3 f4 c5, ~ f3@3 ~ a4@3, ~@3 c3@13",
  I: "~@3 b3 ~@3 b3, e2, e4 d5, ~ e3@7, ~@2 g3@2 ~ b3 b4@2",
  J: "~@3 e4 ~@3 a3, [a1,a4] [db2,g4], ~ [a2,a3]@3 ~ db3@3, ~@2 db4@2 ~ a3@2 ~, ~@3 db4", // A Dbdim A
  K: "~@3 d4 ~@3 a3, d2, a4@3 d3@5, ~ f3@3 ~ a3 a4@2, ~ a3 f4@2",
  L: "~@3 db4 ~@3 db5, db2, bb4 f4, ~ f3@3 ~ [bb2,bb3]@3, ~ bb3 ~ bb4", // Bb
  M: "~@3 f4 ~@3 c4, c2, a4!2, ~ a3@3 ~ c3@3, ~@2 c4@2 ~ c4 c5@2",
  N: "~@3 a3 ~@3 [a3,e4], db2, a4@4 e4 a3 a4@2, ~ e3@7, ~ db5@3", // A5
  O: "~@3 a3 ~@3 d3, d2, a4 f4, ~@2 d3@9 d3 a4@4, ~@2 f3@2 ~ a3@3",
  P: "~@3 c3 ~@3 bb2, [c2,c4] [bb1,e4], ~ c3@2 ~@2 bb2@2 ~, ~ g4 ~ c5", // C Bbdim
  Q: "~@3 c4 ~@3 [c3,a4], f2, f4 a3 a4 f4, ~ c3@6 ~, ~ f3@3 ~ c4@3", // F
  R: "~@5 a3 ~ d3, [d2,a4]@3 [c2,f3], ~ d3@5 ~@2, ~ f3@2 ~, ~@3 a3 d4@2 ~@2", // D5 F5
  S: "~@3 d4 ~@3 d4, [b1,b2], ~ d4@2 ~@2 d4@2 ~, ~ b4 d5@2, ~@3 g4", // B
  T: "~@3 db4 ~@2 db5@2, bb1, db4 bb3 bb4@2, ~ bb2@7, ~ f3@3 ~ db4@3",
  U: "~@3 c4 ~@3 [f2,c4], a1, c5 a3 a4@2, ~ f2@5 c5@2, ~ f3@3 ~ c4@2 ~", // F5
  V: "~@3 db4 ~@3 db4, bb1, db5 bb3 bb4@2, ~ bb2@7, ~ f3@3 ~ db4 db5@2",
  W: "~@3 bb3 ~@3 d4, g2, c5 bb4, ~ d3@3 ~@2 c5@2, ~@2 f3@2 ~ d4@2 ~",
  X: "~@3 g3 ~@3 c3, c2, c5 e4, ~ c3@3 ~ c3@2 ~, ~ e3 ~ g4",
  Y: "~@18 g3@6 ~@19 c3@5, c2, c5 e4, ~@6 c3@18 ~@7 c3@12 ~@5, ~@12 e3@12 ~@13 g4@11",
  Z: "[~@62 f4@61 ~@21, ~@2 f2@33 c4@7 c5@17 a3@64 ~@21, ~@8 f3@41 c4@8 f3@3 c4@62 ~@22, ~@15 a3@40 f2@67 ~@22, ~@21 c4@7 a4@94 ~@22]/3",
})).s("gm_piano").gain(0.44)

// chords · string ensemble 2
const string_ensemble_2 = note("<A@7 B@8 C D@7 E@7 F@8 G H@8 D@7 I@8 J@3>".pickRestart({
  A: "[f5@47 [f2,a3,c4]@48 [db2,db3,db4]@48 [d2,d3,d4]@48 [db2,db3,bb3,db4]@48 [c2,c3,c4]@48 [db2,db3,db4,e4]@48 [d2,d3,a3,d4,f4], ~@47 e4@96 f4@144 ~@49, ~@95 a3@96 ~@48 a3@96 ~]/7", // F Db D Gb C Dbm Dm
  B: "[~@35 [e2,e3,c4,e4]@12 [f2,f3,a3,c4,f4]@48 [e2,g3,b3,d4]@48 a1@24 db2@24 [d2,d4]@48 [db2,bb3,db4]@48 [c2,c4]@48 [db2,db4,e4]@48 [d2,d4,f4], ~@95 e4@96 f4@144 ~@49, ~@143 a3@96 ~@48 a3@97, ~@143 db4@48 ~@193]/8", // C F Em7 D Gb C Dbm Dm
  C: "~@47 [c2,g3,c4,e4]", // C
  D: "[~@23 bb1@24 [c4,f4]@48 [db4,e4]@48 [d2,a3,d4]@48 [db2,bb3,db4]@48 [c2,c4]@48 [db2,db4,e4]@48 [d2,d4,f4], ~@47 [a1,a3]@96 f4@144 ~@49, ~@239 a3@97]/7", // F5 Dbm D5 Gb C Dbm Dm A
  E: "[~@35 c2@12 [b1,g3,b3,d4]@48 [bb1,bb3,db4]@48 [a1,a3,c4]@48 [bb1,bb3,db4]@48 [a1,a3,c4]@48 [g1,g3,bb3,d4]@48 c2, ~@95 f4@241]/7", // G Bbm Am Bbm Am Gm
  F: "[~@23 [c4,e4]@24 f4@48 ~@48 [db2,db3,db4]@48 [d2,d3,d4]@48 [db2,db3,bb3,db4]@48 [c2,c3,c4]@48 [db2,db3,db4,e4]@48 [d2,d3,a3,d4,f4], ~@47 [f2,a3,c4]@96 a3@96 ~@48 a3@96 ~, ~@95 e4@96 f4@144 ~@49]/8", // C Db D Gb C Dbm Dm F
  G: "~@35 [e2,e3,c4,e4]@12 ~", // C
  H: "[[f2,f3,a3,c4,f4]@46 ~ [e2,g3,b3,d4]@48 a1@24 db2@24 [d2,d4]@48 [db2,bb3,db4]@48 [c2,c4]@48 [db2,db4,e4]@48 [d2,d4,f4]@48 [c2,g3,c4,e4], ~@47 e4@96 f4@144 ~@97, ~@95 a3@96 ~@48 a3@144 ~, ~@95 db4@48 ~@241]/8", // F Em7 D Gb C Dbm Dm C
  I: "[~@35 c2@12 [b1,g3,b3,d4]@48 [bb1,bb3,db4]@48 [a1,a3,c4]@48 [bb1,bb3,db4]@48 [a1,a3,c4]@48 g1@48 ~@25 [c4,e4]@24, ~@95 f4@264 ~@25, ~@287 g3@97, ~@287 [bb3,d4]@72 ~@25, ~@335 c2@49]/8", // G Bbm Am Bbm Am C Bb
  J: "[~ [f2,a3,c4,f4]@114 ~@29]/3", // F
})).s("gm_string_ensemble_2").gain(0.11)

// other · synth bass 1
const synth_bass_1 = note(`<
  ~@8 A B C D E F@2 G H I J K L M N O P Q R Q R S T U V W X Y Z J AA AB B C AC E AD AE AF AG I J K L M N O P Q AH AI AJ
  AK AL AM AN ~
>`.pickRestart({
  A: "f4 ~@2 c5", B: "e4 ~ d5 b4", C: "a4 ~ e4 g4", D: "f4!2 ~@2", E: "db4 bb4 ~@2",
  F: "[c4 f4 a4 ~ db4 db5 a4 ~, ~@7 c4@2 ~@7]/2", G: "~@2 f4 a4", H: "c4 ~ e4 c5", I: "c5 ~ a4 f4", J: "a4 ~ e4 db4",
  K: "d4 ~ f4 a4", L: "bb4 ~ f4 db4", M: "c4 ~ f4 a4", N: "db4 ~ e4 a4", O: "d4 a4 f4 a4", P: "d4 b4 g4 d5",
  Q: "db5 ~ bb4 db5", R: "c5 ~ a4 c5", S: "d4 ~ g4 ~", T: "c4 ~ e4 g4", U: "c4 f4 ~ c5", V: "a4 c5 a5 ~",
  W: "a4 e4 ~@2", X: "d4 f4 a4 ~", Y: "db4 f4 ~ bb4, ~@5 f4@2 ~", Z: "f4 ~ c4 a4", AA: "a4 ~ f4 a4", AB: "a4 ~@2 c5",
  AC: "f4@2 d4 f4 a4 d4 d5 d4", AD: "c4@2 f4@2 a4@2 ~ c4", AE: "e4 db4 e4 a4", AF: "f4 a4 ~ a4", AG: "c4 e4 g4 bb4",
  AH: "f3 c4 f4 c4 a4 c4 c5@2", AI: "db5@2 db4 bb4", AJ: "f4@3 ~@3 c4 ~", AK: "g4@3 ~ f4@2 d4@2", AL: "c4 ~",
  AM: "~@2 c5@13 ~@33", AN: "~@9 f4@15 f4@5 f4@5 f4@5 f4@5 ~@4",
})).s("gm_synth_bass_1").gain(0.08).pan(0.8)

// other · harpsichord
const harpsichord = note(`<
  ~ A B C D E F C G H I J K L M N O P B C D E F Q R S T U T V W P A B C D E F C G H I J K L M N O P B C D E F Q R S T U
  T V X Y Z@2
>`.pickRestart({
  A: "e4 f3 a3 c4 a4 c4 e4 a4", B: "a4 e3 a3 db4 e4 a3 db4 a3", C: "a4 d3 f3 a3 d4 a3 a4 a3",
  D: "bb4 db3 bb3 db4 bb4 f4 db5 f4", E: "c5 f3 a3 c4 [f4,a4] c4 [f4,c5] c4", F: "e4 e3 a3 db4 [db4,e4] a3 [e4,g4] a3",
  G: "a4 f3 a3 c4 f4 a4 c5 f4", H: "e4 e3 g3 b3 d5 b3 b4 b3", I: "a4 a3 db4 e4 g4 a3 db4 a3",
  J: "a4 f3 a3 d4 f4 a3 a4 a3", K: "bb4 f3 bb3 db4 f4 bb3 bb4 db5", L: "a4 a3 c4 f4 a4 c4 c5 c4",
  M: "a4 e3 db5 a3 e4 a3 a4 [a3,e4]", N: "a4 d3 f3 a3 f4 a3 a4 d3", O: "c4 c3 g4 c3 e4 bb2 c5 bb2",
  P: "f4 f3 a3 c4 a4 c4 f4 a4", Q: "a4 d3 f3 a3 d4 a3 f3 d3", R: "b2 d4 b4 d4 d5 d4 g4 d4",
  S: "db4 f3 bb3 db4 bb4 db4 db5 ~", T: "c5 f3 a3 c4 a4 c4 c5 c4", U: "db5 f3 bb3 db4 bb4 db4 db5 db4",
  V: "c5 d3 f3 bb3 bb4 d4 c5 d4", W: "c5 c3 e3 g3 e4 c3 g4 c3", X: "c5@6 c3@6 ~ e3@6 g3@6 e4@6 c3@6 g4@6 ~ c3@4",
  Y: "~@9 f3@6 a3@6 ~ c4@6 a4@7 c4@7 c5@6", Z: "[~@2 c4@7 f3@59 ~@28]/2",
})).s("gm_harpsichord").gain(0.07).pan(1)

// other · synth bass 1
const synth_bass_1_2 = note("<~@8 A@4 B C D E@2 F@8 G@5 H@3 I J K@8 L M N@8 O@7 P@2 Q R ~>".pickRestart({
  A: "[~@8 f4@26 ~@10 c5@11 ~ e4@20 ~@4 d5@11 ~ b4@9 ~@3 a4@24 e4@11 ~ g4@12 f4@9 ~@3 f4@22 ~@6]/4",
  B: "~@20 bb4@21 ~@7, ~ db4@4 ~", C: "~@8 c4@11 ~ f4@11 ~ a4@15 ~", D: "~@2 c4@5 ~@13 db5@12 a4@12 ~@4, ~ db4@3 ~@2",
  E: "[~@32 f4@11 ~ a4@12 c4@16 ~@8 e4@11 ~ c5@4]/2",
  F: "[~@2 c5@3 ~@3 a4@3 f4@3 a4@3 ~@3 e4@3 db4@3 d4@3 ~@3 f4@3 a4@3 bb4@3 ~@3 f4@3 db4@3 c4@3 ~@3 f4@3 a4@3 db4@3 ~@3 e4@3 a4@3 d4@3 a4@3 f4@3 a4@3 d4@3 b4@3 g4@3 d5]/8",
  G: "[~@2 db5@3 ~@3 bb4@3 db5@3 c5@3 ~@3 a4@3 c5@3 db5@3 ~@3 bb4@3 db5@3 c5@3 ~@3 a4@3 c5@3 d4@3 ~@3 g4@3 ~]/5",
  H: "[~@2 c4@3 ~@3 e4@3 g4@3 c4@3 f4@3 ~@3 c5@3 a4@3 c5@3 a5@3 ~]/3", I: "~@2 a4@3 e4@3 ~@4",
  J: "~@2 d4@3 f4@3 a4@3 ~",
  K: "[~@4 db4@6 f4@6 ~@6 bb4@6 f4@6 ~@6 c4@6 a4@6 a4@6 ~@6 e4@6 db4@6 a4@6 ~@6 f4@6 a4@6 a4@6 ~@12 c5@6 e4@6 ~@6 d5@6 b4@6 a4@6 ~@6 e4@6 g4@6 f4@6 d4@3 f4@3 a4@3 d4@3 d5@2, ~@19 f4@6 ~@167]/8",
  L: "~ d4@3 db4@6 bb4@6 ~@8", M: "~@2 c4@3 f4@3 a4@3 ~",
  N: "[~ c4@3 e4@6 db4@6 e4@6 a4@6 f4@6 a4@6 ~@6 a4@6 c4@6 e4@6 g4@6 bb4@6 c5@6 ~@6 a4@6 f4@6 a4@6 ~@6 e4@6 db4@6 d4@6 ~@6 f4@6 a4@6 bb4@6 ~@6 f4@6 db4@6 c4@6 ~@6 f4@6 a4@2]/8",
  O: "[~@4 db4@6 ~@6 e4@6 a4@6 d4@6 a4@6 f4@6 a4@6 d4@6 b4@6 g4@6 d5@6 db5@6 ~@6 bb4@6 db5@6 f3@3 c4@3 f4@3 c4@3 a4@3 c4@3 c5@6 db5@12 db4@6 bb4@6 f4@9 ~@9 c4@2]/7",
  P: "[~@8 g4@18 ~@6 f4@12 d4@12 c4@25 ~@15]/2", Q: "~@10 c5@13 ~@25", R: "~@19 f4@15 ~@14",
})).s("gm_synth_bass_1").gain(0.03).pan(0.4)

stack(piano, string_ensemble_2, synth_bass_1, harpsichord, synth_bass_1_2)

More by Pooh