Strudelify

soltane ghalbha

Lennard Farwick

KeyF majorTempo180 bpm
0:00/0:00
// soltane ghalbha — Lennard Farwick
// 180 bpm, 3/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Transcription provider: pdmx. https://musescore.com/score/5984333; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 155 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(180/3)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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.

// other · cello · "Violoncello"
const cello = note(`<
  A@3 B C D E F G H I J K L M N O P Q R S T U V W X@3 Y Z Y AA AB AC AB AD Y Z Y AE AF AG AH AI Y Z Y Z AB AC AB AD Y Z
  Y AE AJ AK AL AM@4 AN@3 AO AP@6 AQ AR AS@3 AT AU@3 AV AW@3 AX AY AZ BA BB BC W@3 BD BE@3 BF BG@2 BH BI BJ BK BL BM
  BN@3 BO BP@3 BQ BR@2 BS BT BU BV BW BX@4 BY@3 BZ CA@6 CB CC CD@3 CE CF@3 CG CH@3 CI CJ CK CL CM
>`.pickRestart({
  A: "[~@5 g3@5 ~ bb3@10 d3@5 ~ g3@10 bb2@5 ~ d3@5]/3", B: "g3@5 f3@5 ~ e3@5", C: "~@5 f2@5 ~ a2@5",
  D: "d3@5 f3@5 ~ a3@5", E: "d4@5 a3@5 ~ f3@5", F: "f3@5 e3@5 ~ d3@5", G: "db3@5 a2@5 ~ g2@5", H: "a2@5 g2@5 ~ e2@5",
  I: "g2@5 e2@5 ~ db2@5", J: "d2@11 e2@5", K: "f2@4 ~ a2@4 ~@2 db3@4 ~", L: "d3@4 ~ e3@4 ~@2 gb3@4 ~",
  M: "g3@5 d3@5 ~ g3@5", N: "bb3@5 g3@5 ~ bb3@5", O: "d4@5 bb3@5 ~ d4@5", P: "bb3@5 a3@5 ~ g3@5", Q: "f3@5 d3@5 ~ f3@5",
  R: "a3@5 f3@5 ~ a3@5", S: "d4@5 a3@5 ~ a2@5", T: "a3@5 g3@5 ~ f3@5", U: "e3@5 eb3@5 ~ e3@5", V: "a3@11 g3@5",
  W: "e3@11 f3@5", X: "d3/3", Y: "d3@5 [f3,a3]@3 ~@3 [f3,a3]@3 ~@2", Z: "a2@5 [f3,a3]@3 ~@3 [f3,a3]@3 ~@2",
  AA: "a2@5 [f3,a3]@3 ~@3 d3@3 ~@2", AB: "g3@5 [d3,bb3]@3 ~@3 [d3,bb3]@3 ~@2", AC: "d3@5 [d3,bb3]@3 ~@3 [d3,bb3]@3 ~@2",
  AD: "d3@5 [d3,bb3]@3 ~@3 a2@3 ~@2", AE: "a2@5 [f3,a3]@3 ~@3 a2@3 ~@2", AF: "db2@5 e3@3 ~@3 a3@3 ~@2",
  AG: "d2@5 d3@3 ~@3 bb3@3 ~@2", AH: "d2@5 f3@3 ~@3 a3@3 ~@2", AI: "d2@5 f3@3 ~@3 [f3,a3]@3 ~@2",
  AJ: "d2@5 f2@5 ~ a2@5", AK: "d3@5 gb3@5 ~ a3@5", AL: "a2@5 d3@5 ~ gb3@5", AM: "g2@5 d3@5 ~ g3@5",
  AN: "d2@5 d3@5 ~ f3@5", AO: "a2@5 d3@5 ~ f3@5", AP: "a2@5 db3@5 ~ g3@5", AQ: "[f3,a3]@11 [f3,a3]@5",
  AR: "d2@5 [gb3,a3]@5 ~ d2@5", AS: "g2@5 bb2@5 ~ d3@2 bb2@3", AT: "g2@3 bb2@2 d3@3 g3@3 f3@2 e3@3",
  AU: "f3@5 d3@5 ~ a2@2 d3@3", AV: "f3@3 e3@2 d3@3 bb2@3 a2@2 g2@3", AW: "a2@5 db3@5 ~ e3@2 db3@3",
  AX: "a2@5 e3@5 ~ g3@5", AY: "a3@5 d3@5 ~ a2@5", AZ: "f3@5 d3@5 ~ a2@5", BA: "d3@5 a2@5 ~ f2@5", BB: "d2@11 a2@5",
  BC: "a2@5 b2@8 c3@3", BD: "e3@5 f3@8 e3@3", BE: "d3@11 e3@5", BF: "d3@5 e3@8 d3@3", BG: "c3@11 d3@5",
  BH: "c3@11 b2@5", BI: "a2@11 ab2@2 a2@3", BJ: "b2", BK: "f3", BL: "e3@5 ab2@3 b2@3 d3@2 e3@3", BM: "a3@5 b3@5 ~ c4@5",
  BN: "e4@11 f4@5", BO: "e4@5 f4@5 ~ e4@5", BP: "d4@11 e4@5", BQ: "d4@5 e4@8 d4@3", BR: "c4@11 d4@5", BS: "c4@11 b3@5",
  BT: "a3@11 ab3@2 b3@3", BU: "a3@5 db3@5 ~ e2@5", BV: "a2@5 db3@5 ~ e3@5", BW: "e3@5 a3@5 ~ db4@5",
  BX: "d3@5 a3@5 ~ d4@5", BY: "a2@5 a3@5 ~ c4@5", BZ: "e3@5 a3@5 ~ c4@5", CA: "e3@5 ab3@5 ~ d4@5",
  CB: "[c4,e4]@11 [c4,e4]@5", CC: "a2@5 [db3,e3]@5 ~ a2@5", CD: "d3@5 f3@5 ~ a3@2 f3@3",
  CE: "d3@3 f3@2 a3@3 d4@3 c4@2 b3@3", CF: "c4@5 a3@5 ~ e3@2 a3@3", CG: "c4@3 b3@2 a3@3 f3@3 e3@2 d3@3",
  CH: "e3@5 ab3@5 ~ b3@2 ab3@3", CI: "e3@5 b3@5 ~ d4@5", CJ: "e4@5 a3@5 ~ e3@5", CK: "c4@5 a3@5 ~ e3@5", CL: "e3",
  CM: "a2",
})).s("gm_cello").gain(0.4)

stack(cello)