Strudelify

Meditation arr. for Tuba and Piano

Massenet

KeyB♭ majorTempo76 bpm
0:00/0:00
// Meditation arr. for Tuba and Piano — Massenet
// 76 bpm, 4/4, key Bb 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/2096176; license: https://creativecommons.org/publicdomain/mark/1.0/
// note: Full arrangement: all 78 bars on a 32-step grid, each part at one level. Source detail keeps the original performance.
setcpm(76/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.

// bass · tuba
const bass = note(`<
  ~@3 A@2 B@2 C D@4 E@8 F G H@2 I J K@2 L M N O P Q R S T U V W X@2 Y Z AA AB AC AD AE AF AG AH AI AJ AC AD AK AL AM AN
  AO AP AQ AR AS AT AU AV@2 AW AX@2 AY@2 AZ@2 BA ~
>`.pickRestart({
  A: "[~@3 d3@26 ~ bb2@5 f2@3 bb2@3 ~ d3@3 g3@19]/2",
  B: "[~@2 a3@10 ~ bb3@10 bb2@16 c3@5 d3@2 eb3@2 d3@2 c3@2 ~ d3@2 f3@5 f2@4]/2", C: "~ g2@31",
  D: "[~ a2@5 bb2@5 d3@5 c3@5 ~ eb3@20 b2@5 ~ c3@5 d3@5 eb3@5 f3@5 ~ g3@5 g3@10 g2@10 ~ a2@21 bb2@10 c3@2]/4",
  E: "[~ bb2@3 a2@2 bb2@3 c3@21 db3@21 d3@26 bb2@5 f2@3 ~ bb2@3 d3@3 ~ g3@21 a3@10 bb3@10 ~ d3@28 bb2@3 f2@3 bb2@2 d3@3 f3@3 ab3@21 bb3@10 c4@10 d4@26 ~ b3@5 g3@3 d3@3]/8",
  F: "~ b2@3 f3@7 eb3@3 ~ c3@3 g2@3 ~ eb2@3 d3@7", G: "c3@3 ~ g2@3 eb2@3 ~ c2@3 bb2@7 f2@3 ~ d2@3 bb1@3 ~",
  H: "[f1@3 g1@10 ~ a1@5 bb1@5 c2@21 d2@10 ~ eb2@8]/2", I: "~@2 c2@10 ~ d2@10 g1@9", J: "~ c2@5 bb1@10",
  K: "[~ a1@21 bb1@42]/2", L: "ab2@5 eb2 f2 c2", M: "eb2@8 d2@16 gb2@3 a2@2 c3@3", N: "c3@5 g2 a2 eb2",
  O: "g2@8 f2@16 a2@3 c3@2 eb3@3", P: "eb3@3 f3 g3 d3 bb2 g2",
  Q: "c3@6 d3@2 c3@2 ~ c3@2 ~ eb3@2 eb3@4 c3@4 ab2@4 eb2@4, ~@10 b2@2 ~ d3@2 ~@17", R: "gb2@2 f2 eb2",
  S: "f3@2 eb3 db3 c3@2 bb2 ab2", T: "bb3@3 ab3 f3@3 ab3", U: "c4@3 bb3 ab3@2 f3 ab3", V: "db4@3 c4 eb4 db4 ab3 e3",
  W: "db3 c3 eb3 db3@2 ab2 e2 db2", X: "db2@7 c2 c2@12 db2@8 db2@4", Y: "db2@7 c2 c2@12 eb2@8 gb2@4",
  Z: "gb2@3 eb2 c2 eb2 gb2 a2 c3@2 db3@2 d3@2 eb3@2", AA: "eb3 d3 db3 c3 eb3 f3 gb3 g3", AB: "g3@3 eb3!2 c3@2 a2",
  AC: "d3@20 bb2@4 f2@3 bb2@2 d3@3", AD: "g3@2 a3 bb3",
  AE: "bb2@12 c3@4 d3@2 ~ d3@2 ~ d3@2 f3@4 f2@4, ~@18 eb3@2 ~ c3@2 ~@9", AF: "g2@6 a2 bb2", AG: "d3 c3 eb3@4 b2 c3",
  AH: "d3 eb3 f3 g3 g3@2 g2@2", AI: "a2@8 bb2@4 c3 bb2 a2 bb2", AJ: "c3 db3", AK: "d3@11 bb2 f2 bb2 d3 f3",
  AL: "ab3@2 bb3 c4", AM: "d4@20 b3@4 g3@3 d3@2 b2@3", AN: "f3@5 eb3@3 c3@3 g2@2 eb2@3 d3@5 c3@3 g2@3 eb2@2 c2@3",
  AO: "bb2@5 f2@3 d2@3 bb1@2 f1@3 g1@8 a1@4 bb1@4", AP: "c2@2 d2 eb2", AQ: "c2 d2 g1 c2", AR: "bb1 a1",
  AS: "bb1@11 d2 f2 bb2 d3 f3", AT: "g3@3 a3", AU: "d4@3 bb3 f3 d3 bb2 f2",
  AV: "[eb2@8 gb2@16 a1@12 a1 bb1 ~ c2 bb1@16 d2@8]/2", AW: "f2 bb2 d3 f3", AX: "[f3@3 bb2]/2",
  AY: "[c3@3 d3 d3@8 c3@4]/2", AZ: "bb2@24 a2@3 bb2@2 c3@3", BA: "bb2 ~",
})).s("gm_tuba").gain(0.32)

// chords · piano
const piano = note(`<
  A@6 B C D E@7 F@6 G@4 H@2 I J K L M N O P Q R S T U V W X Y ~ Z AA@2 AB AC AD AE AF AG AH AI AJ AK AL AM AN AO AP AA
  AQ AA AR AA@3 AS AT AU AV AW AX AY
>`.pickRestart({
  A: "[~@52 d5@5 bb1@5 ~ [f2,d3]@5 [bb2,f3]@5 [d3,bb3]@5 [f3,d4]@5 ~ [bb3,f4]@5 [d4,bb4]@5 d5@5 bb1@5 ~ [f2,d3]@5 [bb2,f3]@5 [d3,bb3]@5 [f3,d4]@5 ~ [bb3,f4]@5 [d4,bb4]@5 d5@5 bb1@5 [f2,d3]@5 ~ [bb2,f3]@5 [d3,bb3]@5 [f3,d4]@5 [bb3,f4]@5 ~ [d4,bb4]@5 d5@5 bb1@5 [f2,d3]@4, ~@15 bb1@16 bb3@5 [f3,d4]@6 [bb3,f4]@16 ~@134, ~@21 f2@37 ~@134, ~@21 d3@5 f3@5 d3@16 [d4,bb4]@11 ~@134, ~@26 bb2@31 ~@135]/6", // Dm Bb5 Gm Dm Bb5 Gm Dm Bb5 …
  B: "~@2 [bb2,f3]@5 [d3,bb3]@5 [f3,d4]@5 [bb3,f4]@5 ~ [d4,bb4]@5 d5@4", // Bb5 Gm Dm Bb5 Gm
  C: "~ eb2@5 [bb2,g3]@5 ~ [eb3,bb3]@5 [g3,eb4]@5 [bb3,g4]@5 [eb4,bb4]@5", // Eb Eb5 Cm Eb Eb5
  D: "~ [g4,eb5]@5 g5@5 c2@5 [g2,eb3]@5 ~ [c3,g3]@5 [eb3,c4]@5", // Cm C5 Cm
  E: "[[g3,d4]@5 [c4,eb4]@5 [eb4,g4]@5 ~ c5@5 c2@5 [g2,eb3]@5 [c3,g3]@5 ~ [eb3,c4]@5 [g3,eb4]@5 [c4,g4]@5 [eb4,c5]@5 ~ eb5@5 ~@5 [eb3,c4]@5 eb4@5 ~ a4@5 ~@5 [eb3,bb3]@5 eb4@5 ~ bb4@5 ~@5 [f3,eb4]@5 f4@5 ~ c5@5 ~@5 [gb3,db4]@5 gb4@5 ~ db5@5 bb1@5 [f2,d3]@5 [bb2,f3]@5 [d3,bb3]@5 ~ [f3,d4]@5 [bb3,f4]@5 [d4,bb4]@5 d5@5 ~ bb1@5 [f2,d3]@5 [bb2,f3]@5 [d3,bb3]@5 ~ [f3,d4]@5 [bb3,f4]@5 [d4,bb4]@4, ~@63 f2@20 ~ g2@20 ~@11 eb3@10 ~@11 db3@10 ~@78, ~@73 c3@10 ~@11 bb2@10 ~ a2@20 ~ a2@20 ~ bb0@40 ~@2 bb0@35]/7", // G5 Cm Eb Cm C5 Cm C5 Cm …
  F: "[~ d5@5 ~ bb1@5 [f2,d3]@5 [bb2,f3]@5 [d3,bb3]@5 ~ [f3,d4]@5 [bb3,f4]@5 [d4,bb4]@5 d5@5 ~ c2@5 [eb2,c3]@5 [ab2,eb3]@5 [c3,ab3]@5 ~ [eb3,c4]@5 [ab3,eb4]@5 [c4,ab4]@5 c5@5 ~@6 [g2,d3]@5 [b2,g3]@5 [d3,b3]@5 [g3,d4]@5 ~ [b3,g4]@5 [d4,b4]@5 d5@5 c2@5 ~ [g2,eb3]@5 [c3,g3]@5 [eb3,c4]@5 [g3,eb4]@5 ~ [c4,g4]@5 [eb4,c5]@5 eb5@5 f1@5 ~ [f2,d3]@5 f3@5 bb3@2, ~@7 bb0@40 ~@2 c1@40 ~ g1@40 ~@2 c1@40 ~@20]/6", // Dm Bb5 Gm Dm Bb5 Gm Cm Ab5 …
  G: "[~@3 f1@5 ~ [f2,bb2]@5 eb3@5 g3@5 f1@5 ~ [f2,g3]@5 [c3,eb3]@5 [f2,g3]@5 eb3@5 [c3,g3]@5 ~ [f2,c4]@5 [c3,g3]@5 f2@5 eb3@5 ~ g3@5 eb3@5 f2@5 eb3@5 ~ c4@5 g3@5 f1@5 eb3@5 ~ c3@5 g3@4, ~@71 c3@15 ~@6 c3@15 ~@6 f2@15]/4", // Bb5 Fsus2 Cm Fsus2 C5 F5 C5
  H: "[~ f2@5 g3@5 ~ f3@5 eb3@5 bb1@5 [f2,d3]@5 ~ [bb2,f3]@5 [d3,bb3]@5 [f3,d4]@5 [bb3,f4]@5 ~ [d4,bb4]@5 ~@5, ~@6 c3@15 ~ bb0@40 ~@2]/2", // Dm Bb5 Gm Dm Bb5 Gm
  I: "c2 [eb2,c3] [ab2,eb3] [c3,ab3] [eb3,c4] [ab3,eb4] [c4,ab4] c5, c1@15 ~", // Cm Ab5 Fm Cm Ab5 Fm
  J: "d2 [a2,gb3] [c3,a3] [d3,c4] [gb3,d4] [a3,gb4] [c4,a4] c5, d1@15 ~", // D F D7 D F
  K: "eb2 [g2,eb3] [c3,g3] [eb3,c4] [g3,eb4] [c4,g4] [eb4,c5] eb5, eb1@15 ~", // Cm C5 Cm C5 Cm
  L: "f2 [c3,a3] [eb3,c4] [f3,eb4] [a3,f4] [c4,a4] [eb4,c5] eb5, f1@15 ~", // F Cm F7 Dm F Cm
  M: "bb3 eb4 bb4 eb4 bb3 d4 bb4 d4, [g2,g3]@15 ~ [g2,g3]@15 ~, ~ [bb2,eb3] ~ [bb2,d3]", // G Eb5 Bb
  N: "c4 f4 c5 f4 c4 eb4 c5 eb4, ab2 [c3,f3] ab2 [c3,eb3]", // F5 Cm
  O: "ab1 [eb2,c3] [ab2,eb3] [c3,ab3] gb3 [c3,ab3] [eb3,c4] [gb3,eb4]", // Cm Ab5 Fm Cm Ebm
  P: "ab1 [eb2,c3] [ab2,gb3] ab3 [eb3,c4] [gb3,eb4] [c4,gb4] ab4", // Cm Ab7 Cm Ebm Cdim
  Q: "ab1 [f2,db3] [ab2,f3] [db3,ab3] [f3,db4] [ab3,f4] [db4,ab4] db5", // Db Db5 Db Db5
  R: "f1 [f2,db3] [ab2,f3] [db3,ab3] [f3,db4] [ab3,f4] [db4,ab4] db5", // Db Db5 Db Db5
  S: "~@13 a4@3 ~@13 e4@3, [a1,a2]@8 a4@3 db5@5 ~@5 e4@3 [ab3,ab4]@3 db5@5, ~@3 [db3,db4]@13 [ab1,ab2]@16, ~@5 [gb3,gb4]@11 ~@3 [db3,db4]@13, ~@8 a3@8 ~@5 e3@11", // A Ab Db Ab Gb Db
  T: "gb2@3 [a2,a3]@2 [db3,db4]@3 [gb3,gb4]@3 a4@2 db4@3 e2@3 [ab2,ab3]@2 [db3,db4]@3 [e3,e4]@3 a4@2 db4@3, gb1@15 ~ e1@15 ~", // A Db Gb Ab Db E
  U: "eb1@4 eb2@3 [c3,c4] gb2@4 a2@4 db1@4 db2@4 gb2@4 [a2,db3,gb3,a3,db4]@4, [db3,db4]@7 ~ [c3,c4]@11 ~ [db3,gb3,a3,db4]@8 ~@4", // C Gbm Db C Gbm
  V: "eb1@4 eb2@3 [c3,c4] gb2@4 a2@4 e1@4 e2@4 ab2@4 [db3,db4]@4, [db3,db4]@7 ~ [c3,c4]@11 ~ [db3,ab3,db4]@8 ~@4", // C Db C Db5
  W: "f1@4 f2@3 c4 c3@4 eb3@4 gb3@4 c4@4 eb4@4 gb4@4, [eb3,a3]@11 ~@21, db4@7 ~ c4@11 ~ a3@11 ~", // Ebdim
  X: "f2 [a2,eb3] [c3,gb3] [eb3,a3] [gb3,c4] [a3,eb4] [c4,gb4] a4", Y: "[f3,c4,eb4,a4,eb5]",
  Z: "~@7 d5, bb1@3 bb3 [f3,d4] [bb3,f4] [d4,bb4]@2, ~ f2@7, ~ d3 f3 d3@5, ~ bb2@3", // Dm Bb5 Gm
  AA: "bb1 [f2,d3] [bb2,f3] [d3,bb3] [f3,d4] [bb3,f4] [d4,bb4] d5", // Dm Bb5 Gm Dm Bb5 Gm
  AB: "eb2 [bb2,g3] [eb3,bb3] [g3,eb4] [bb3,g4] [eb4,bb4] [g4,eb5] g5", // Eb Eb5 Cm Eb Eb5 Cm
  AC: "c2 [g2,eb3] [c3,g3] [eb3,c4] [g3,d4] [c4,eb4] [eb4,g4] c5", // Cm C5 Cm G5 Cm Eb
  AD: "c2 [g2,eb3] [c3,g3] [eb3,c4] [g3,eb4] [c4,g4] [eb4,c5] eb5", // Cm C5 Cm C5 Cm
  AE: "~ [eb3,c4] eb4 a4 ~ [eb3,bb3] eb4 bb4, f2@15 ~ g2@15 ~, ~ c3 ~ bb2", // Cm Eb5
  AF: "~ [f3,eb4] f4 c5 ~ [gb3,db4] gb4 db5, a2@15 ~ a2@15 ~, ~ eb3 ~ db3", // F7 Gb5
  AG: "ab2 [bb2,f3] [d3,bb3] [f3,d4] [bb3,f4] [d4,bb4] [f4,d5] f5, ab1@15 ~", // Bb5 Gm Dm Bb5 Gm Dm
  AH: "g2 [bb2,g3] [eb3,bb3] [g3,eb4] [bb3,g4] [eb4,bb4] [g4,eb5] g5, g1@15 ~", // Eb Eb5 Cm Eb Eb5 Cm
  AI: "f2 [d3,bb3] [f3,d4] [bb3,f4] [d4,bb4] [f4,d5] [bb4,f5] bb5, f1@15 ~", // Gm Dm Bb5 Gm Dm Bb5
  AJ: "eb2 [eb3,c4] [ab3,eb4] [c4,ab4] [c4,c5] [eb4,eb5] [ab4,ab5] c6, eb1@15 ~", // Cm Ab5 Fm C Eb Ab
  AK: "d2 [g2,d3] [b2,g3] [d3,b3] [g3,d4] [b3,g4] [d4,b4] d5, d1@15 ~", // G5 Em G G5 Em G
  AL: "a1 [g2,eb3] [c3,g3] [eb3,c4] [g3,eb4] [c4,g4] [eb4,c5] eb5, a0@15 ~", AM: "f1 [f2,d3] f3 bb3 f1 [f2,bb2] eb3 g3",
  AN: "f1 [f2,g3] [c3,eb3] [f2,g3] eb3 [c3,g3] [f2,c4] [c3,g3]", // Fsus2 Cm Fsus2 C5 F5 C5
  AO: "f2 eb3 g3 eb3 f2 eb3 c4 g3, ~@4 c3@11 ~@5 c3@11 ~", AP: "f1 eb3 c3 g3 f2 g3 f3 eb3, ~@4 f2@11 ~@5 c3@11 ~",
  AQ: "a1 [g2,e3] [db3,g3] [e3,db4] [g3,e4] [db4,g4] [e4,db5] e5", // C Dbdim Dbm C Dbdim Dbm
  AR: "b1 [gb2,eb3] [a2,gb3] [eb3,b3] [gb3,eb4] [a3,gb4] [eb4,b4] eb5", // Ebm D Abm Ebm D Abm
  AS: "f5@4 bb5@4 d6@4 f6@4 [g1,g2,bb2,eb3,bb3]@15 ~", AT: "c4@11 ~ d4@4 d4@15 ~, [gb1,gb2,d3,a3]@15 ~",
  AU: "[f1,f2,eb3,a3]@15 ~", AV: "[bb1,f2,d3,bb3]@4 [f3,d4]@4 [bb3,f4]@4 [d4,bb4]@4 ~ f6@15, ~ [f4,f5]",
  AW: "[bb2,d3,bb3]@4 [f3,d4]@4 [bb3,f4]@4 [d4,bb4]@4 ~ f6@15, ~ [f4,f5]", // Bb Dm Bb5 Gm F
  AX: "[bb1,f2,d3,bb3]@15 ~ [bb1,f2,d3,bb3]@15 ~", AY: "[bb1,f2,bb2,d3,bb3]@15 ~",
})).s("gm_piano").gain(0.2)

stack(bass, piano)