Strudelify
KeyF majorTempo50 bpm
0:00/0:00
// Reverie — Giovanni BOTTESINI
// 50 bpm, 3/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: Transcription provider: pdmx. https://musescore.com/score/4032636; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 44 bars on a 48-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(50/3)

// 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.

// bass · contrabass · "Contrebasse"
const bass = note("<~@5 A B C D E F G H I J ~@3 K L M ~@4 N ~@4 O@2 P ~@4 Q R S@5>".pickRestart({
  A: "~@27 d2@3 ~@2 e2@5 f2@5 ~ g2@5", B: "a2@21 a2@3 ~@3 a2@3 ~@2 a2@5 g2@5 ~ d2@5", C: "f2@16 ~@21 a2@5 ~ bb2@5",
  D: "c3@16 f2@12 f2@2 ~@2 bb2@8 bb2 ~@2 bb2 ~ bb2 ~@2", E: "bb2@16 a2@8 ~@8 ab2@5 b2@5 ~ e2@5",
  F: "e2@24 gb2@3 ab2@2 a2@3 b1@5 gb2@8 e2@3", G: "e2@8 a1@8 a1@6 a1 ~", H: "d2@21 db2@5 ~ d2@5 f2 e2@4 d2@5 ~ e2@5",
  I: "gb2@8 g2@6 g2 ~ bb2@6 ab2 ~", J: "g2@7 ~@5", K: "~@21 g2@3 ~@3 g2@3 ~@2 g2@8 g2@3 gb2@2 g2@3",
  L: "b2@16 bb2@8 ~@8 bb2@5 b2@5 ~ db3@5", M: "d3@21 d3@3 ~@3 d3@3 ~@2 d3@12 c3@4", N: "d3@5 db3@5 ~ a3@5 a3@5 ~@27",
  O: "[gb2@5 g2@5 ~ a2@5 b2@5 c3@5 ~ db3@10 b2@5 ~ e3@10 eb3@5 ~ gb3@5 e3@5 b3@5 ~ b3 bb3 ~ a3 ab3 ~ g3 gb3 ~ f3 e3 ~ eb3 d3 ~ db3 c3 ~ b2 bb2 ~]/2",
  P: "a2 ab2 ~ g2 gb2 ~ f2 e2 ~ eb2@2 d2@12 e2@4 ~@21", Q: "~@11 d3@18 db3@3 e3@3 d3@2 db3@3 b2@3 a2@2 ab2@3",
  R: "g2@3 gb2@2 e2@3 d2@3 db2@2 b1@3 a1@3 g1@2 e1@3 a1@3 d1@18 db1@3",
  S: "[d1@3 g1@2 b1@3 e2@3 e2 ~ db2@3 d2@3 gb2@2 a2@3 d3@3 d3@48 d3@12 gb3@4 gb3@12 a3@4 a3@12 d4@4 d4@96 ~@21, ~@6 d2 ~@113]/5",
})).s("gm_contrabass").gain(0.3)

// bass · contrabass · "Contrebasse" · soft notes
const bass_soft = note("<~@4 A B ~ C ~@6 D E F G H ~@2 I J K L ~ M N O P ~@2 Q@2 R S T ~@7>".pickRestart({
  A: "f2@21 e2@5 ~ d2@5 f2@12 e2@4", B: "d2@16 db2@5 db2@3 ~@24", C: "~@16 e2@8 ~@8 g2@5 ~@11", D: "~@7 f2 eb2@3 d2",
  E: "db2@4 ~ a1", F: "gb2@21 gb2@3 ~@3 gb2@3 ~@2 gb2@8 gb2@3 e2@2 gb2@3", G: "a2@4 g2@2 ~@5 g2", H: "g2@7 ~@9",
  I: "c3@5 b2@5 ~ b2@5 b2@8 ~@4 b2@4 b2@12 a2@4", J: "a2@5 g2@5 ~ g2@5 g2@16 db2 b1 a1 b1@2 g2@5 ~ gb2@5",
  K: "gb2@12 e2@4 d2@8 d2@3 [d2,e2] db2 d2@3 db3@12 b2@4", L: "bb2@21 e2@5 ~ f2@5 g2@5 bb2@5 ~ e3@5",
  M: "a1@5 b1@5 ~ db2@5 d2@5 e2@5 ~ gb2@21", N: "e2@5 d2@5 ~ gb2@12 e2@4 d2@21",
  O: "db2@5 d2@5 ~ e2@5 gb2@5 g2@5 ~ a2@21", P: "g2@5 gb2@5 ~ a2@12 g2@4 gb2@21",
  Q: "[~@27 g2 gb2 e2 gb2@29 db3@12 b2@4 a2@21]/2", R: "e2@5 gb2@5 ~ g2@5 b1@5 db2@5 ~ d2@16 ~@5", S: "~@9 a2@6 ab2",
  T: "b2@3 a2@2 e2@3 gb2@3 g2@2 b1@3 c2@3 db2@2 gb2@3 e2@3 d2@21",
})).s("gm_contrabass").gain(0.2)

// chords · piano
const piano = note("<A B C D E F@2 G H I J K L M N O P Q R S T U V W X Y Z@7 AA@4 AB AC@6>".pickRestart({
  A: "[d3,d4]@8 [a2,a3]@3 [bb2,bb3]", B: "[f2,f3]@32 [g2,g3]@15 ~", C: "[a2,a3]@23 ~", D: "[a3,db4,e4,g4,a4]@23 ~",
  E: "[d3,f3,a3,d4]@30 ~@2 [g2,bb3,d4]@15 ~", // Dm Gm
  F: "[d4@15 ~ db4@8 ~@8 [g3,db4]@16 [f3,d4]@30 ~@2 [bb2,bb3,d4]@15 ~, [a2,a3,e4]@23 ~@9 a3@46 ~@18]/2", // Gdim Dm Bb A5
  G: "[a3,f4]@2 [g3,e4] ~ [bb2,bb3,c4,e4,g4]@2, [c3,c4] ~", H: "[a2,a3,c4,f4,c5]@30 ~@2 [g2,g3,bb3,db4,e4]@15 ~",
  I: "[bb3,db4,e4]@16 [a3,d4,f4]@8 ~@8 [e3,ab3,d4,e4]@15 ~, [f2,f3]@23 ~@25", // Bbdim Dm E7 F
  J: "[db4,e4]@5 a3@5 ~ [db4,e4]@5 [e3,a3,db4]@15 ~ [e2,e3,ab3,d4]@15 ~, e2@5 ~@11", // Dbm A E7
  K: "~@5 [e3,a3,db4]@5 ~ [e3,a3,db4]@5 [e3,a3,db4]@5 [e3,a3,db4]@5 ~ [e3,a3,db4]@5 ~@5 [e3,a3,db4]@5 ~ [e3,a3,db4]@5, [a1,a2]@15 ~@17 [g1,g2]@15 ~", // A G
  L: "~@5 [f3,a3,d4]@5 ~ [f3,a3,d4]@5 [f3,a3,d4]@5 [f3,a3,d4]@5 ~ [f3,a3,d4]@5 ~@5 [bb3,d4,e4]@5 ~ [bb3,d4,e4]@5, [f1,f2]@30 ~@2 [g1,g2]@15 ~", // Dm Em7b5 F G
  M: "~@5 [a3,c4,d4,gb4]@5 ~ [a3,c4,d4,gb4]@5 [g3,bb3,d4,g4]@5 [g3,bb3,d4,g4]@5 ~ [g3,bb3,d4,g4]@5 [ab3,bb3,d4,f4]@5 [ab3,bb3,d4,f4]@5 ~ [ab3,bb3,d4,f4]@5, [a1,a2]@15 ~ [bb1,bb2]@15 ~ [bb1,bb2]@15 ~", // D7 Gm Bb7 A Bb
  N: "~@5 [g3,bb3,eb4]@5 ~ [g3,bb3,eb4]@5 [g3,bb3,eb4]@5 [g3,bb3,eb4]@5 ~ [g3,bb3,eb4]@5 ~@5 [eb3,bb3,eb4]@5 ~ [eb3,bb3,d4]@5, [eb2,eb3]@30 ~@2 g2@15 ~", // Eb Eb5 Ebmaj7 Eb
  O: "eb3@5 [g3,db4]@5 ~ [g3,db4]@5 e3@5 [g3,db4]@5 ~ [g3,db4]@5 ~@5 [e3,g3,db4]@5 ~ [e3,g3,db4]@5, [bb1,bb2]@30 ~@2 [a1,a2]@15 ~", // Gdim Dbdim Bb A
  P: "~@5 [d3,gb3,a3]@5 ~ [d3,gb3,a3]@5 ~@5 [d3,gb3,a3]@5 ~ [d3,gb3,a3]@5 ~@5 [d3,gb3,b3]@5 ~ [d3,gb3,b3]@5, d2@23 ~, ~@16 a2@16 b2@15 ~", // D Bm
  Q: "~@5 [e3,g3,b3]@5 ~ [e3,g3,b3]@5 ~@5 [e3,g3,b3]@5 ~ [e3,g3,b3]@5 ~@5 [e3,g3,c4]@5 ~ [e3,g3,c4]@5, e2@23 ~, ~@16 b2@16 c3@15 ~", // Em C
  R: "~@5 [e3,g3,b3,db4]@5 ~ [e3,g3,b3,db4]@5 ~@5 [e3,g3,b3,db4]@5 ~ [e3,g3,b3,db4]@5 ~@5 [e3,g3,b3,db4]@5 ~ [e3,g3,b3,db4]@5, db3@23 ~, ~@8 e2@15 ~", // Dbm7b5
  S: "~@5 [db4,e4]@5 ~ [db4,e4]@5 [bb3,db4,e4,gb4]@5 [bb3,db4,e4,gb4]@5 ~ [bb3,db4,e4,gb4]@5 ~@5 [b3,gb4,ab4]@5 ~ [db4,gb4,bb4]@5, [gb2,gb3]@30 ~@2 [gb2,gb3]@15 ~", // Dbm Gb7 Abm7 Gb
  T: "~@5 [b3,d4,gb4,b4]@5 ~ [b3,d4,gb4,b4]@5 [b3,d4,gb4,b4]@5 [b3,d4,gb4,b4]@5 ~ [b3,d4,gb4,b4]@5 ~@5 [c4,d4,gb4]@5 ~ [c4,d4,gb4]@5, [b1,b2]@30 ~@2 [a1,a2]@15 ~", // Bm D7 B A
  U: "~@5 [b3,d4,g4]@5 ~ [b3,d4,g4]@5 [b3,d4,g4]@5 [b3,d4,g4]@5 ~ [b3,d4,g4]@5 ~@5 [a3,b3,eb4]@5 ~ [a3,b3,eb4]@5, [g1,g2]@30 ~@2 [gb2,gb3]@15 ~", // G B7 G Gb
  V: "~@5 [g3,b3,e4]@5 ~ [g3,b3,e4]@5 [g3,b3,e4]@5 [g3,b3,e4]@5 ~ [g3,b3,e4]@5 [g2,b3,e4]@15 ~, [e2,e3]@5 ~@3", // Em E
  W: "~@5 g3@5 ~ a3@5 ~@5 gb3@5 ~ b3@5 ~@5 g3@5 ~ b3@5, [a2,db4] [b2,d4] [e2,d4]", // A Bm E7
  X: "~@5 [g3,bb3,d4]@5 ~ [g3,bb3,d4]@5 [g3,bb3,d4]@5 [g3,bb3,d4]@5 ~ [g3,bb3,d4]@5 [g3,bb3,d4]@5 [g3,bb3,d4]@5 ~ [g3,bb3,d4]@5, [a1,a2]@23 ~", // Gm A
  Y: "~@5 [g3,a3,db4]@5 ~ [g3,a3,db4]@5 [g3,a3,db4]@32, [a1,a2]", // A7 A
  Z: "[~@32 gb3@5 a3@5 ~ d4@5 gb3@5 b3@5 ~ d4@5 e3@5 ab3@5 ~@6 [ab3,d4,e4]@5 [ab3,d4,e4]@5 ~ [a3,db4,e4]@5 [a3,db4,e4]@5 [a3,db4,e4]@5 ~@6 [gb3,a3,db4]@5 [gb3,a3,db4]@5 ~@6 [a3,d4,gb4]@5 [a3,d4,gb4]@5 ~ [a3,d4,gb4]@5 [a3,d4,gb4]@5 [a3,d4,gb4]@5 ~@6 [a3,db4,g4]@5 [a3,db4,g4]@5 ~@6 [a3,c4,g4]@5 [a3,c4,g4]@5 ~ [a3,c4,gb4]@5 [a3,c4,gb4]@5 [a3,c4,gb4]@5 ~@6 [a3,b3,eb4]@5 [a3,b3,eb4]@5 ~@6 [g3,e4,g4]@5 [b3,g4,b4]@5 ~@6 [b3,a4,b4]@5 [eb4,a4,b4,eb5]@5 ~@6 [b3,g4,b4]@5 [e4,b4,e5]@5 ~@6 [f4,b4,d5]@5 [f4,f5]@5 ~ [b4,b5]@8 ~@29 [a3,d4,gb4]@5 [a3,d4,gb4]@5 ~ [a3,d4,gb4]@5, ~@27 d2@15 ~ b2@16 e2@15 ~ a2@30 ~@2 [g2,g3]@16 [gb2,gb3]@30 ~@2 [e2,e3]@15 ~ [eb2,eb3]@30 ~@2 [b1,b2]@15 ~ [e2,e3]@15 ~ [gb2,gb3]@15 ~ [g2,g3]@15 ~ [ab2,ab3]@23 ~@25 a2@21]/7", // E7 A Gbm D A7 Am7 Gbdim B7 …
  AA: "[[a3,d4,gb4]@5 [a3,d4,gb4]@5 ~@6 [ab3,d4,f4]@5 [ab3,d4,f4]@5 ~@6 [g3,d4,e4]@5 [g3,d4,e4]@5 ~ [g3,db4,e4]@15 ~ [a2,e4,g4,a4]@15 ~@6 a3@5 d4@5 ~ b4@5 [gb3,e5]@5 [b3,d5]@5 ~@6 b3@5 ~@2 e5@4 ~@5 e4@5 ~@6 [e4,db5]@8 ~@24 d3@5 a3@5 d4@5 ~ b2@5, ~@11 a2@15 ~ a1@30 ~@18 gb4@30 ~@12 d4@5 ~ d5@16 ~@53, ~@75 [d3,gb5]@20 ~@12 [e3,ab4,gb5]@16 ~@10 g4@13 ~@25 gb4@20 ~, ~@75 a4@15 ~ b2@16 ~@16 [a2,a3]@23 ~@46]/4", // D Ddim Em7 Dbdim A7 Gb7 Bm Dbm …
  AB: "[d3,e4]@5 [b3,d4]@5 ~ [ab3,gb4]@5 d4@5 e4@5 ~ [a1,a2,a3,d4,gb4,a4]@21, ~@11 e2@15 ~@22", // Dsus2 Bm Ab7 D
  AC: "[~@11 [a1,a2,a3,db4,g4]@15 ~ [a3,d4,gb4]@5 [a3,d4,gb4]@5 [a3,d4,gb4]@5 ~ [g2,b3,d4,g4]@16 [d3,d4,gb4,a4]@15 ~ [d4,bb4,d5]@5 [d4,bb4,d5]@5 [d4,bb4,d5]@5 ~ [d4,bb4,d5]@5 [d4,bb4,d5]@5 [d4,bb4,d5]@5 ~ [d4,bb4,d5]@5 [d4,bb4,d5]@5 [d4,bb4,d5]@5 ~ [d4,gb4,a4,d5]@5 [d4,gb4,a4,d5]@5 [d4,gb4,a4,d5]@5 ~ [d4,gb4,a4,d5]@5 [d4,gb4,a4,d5]@5 [d4,gb4,a4,d5]@5 ~ [d4,gb4,a4,d5]@5 [d4,gb4,a4,d5]@5 [d4,gb4,a4,d5]@5 ~ [d2,d4,gb4,a4]@8 ~@8 [d2,d3,a3,d4,gb4]@8 ~@8 [d2,d3,a3,d4,gb4]@8 ~@8 [d2,d3,a3,d4,gb4]@46 ~@23, ~@27 [d2,d3]@15 ~@33 bb3@16 f3@16 g3@15 ~ d3@8 ~@8 a2@16 gb2@15 ~@118]/6", // A7 D G D Gm D
})).s("gm_piano").gain(0.08)

stack(bass, bass_soft, piano)