Strudelify
Le Chemin de fer, Op. 27 cover art

Le Chemin de fer, Op. 27

Charles-Valentin Alkan

KeyD minorTempo200 bpm
0:00/0:00
// Le Chemin de fer, Op. 27 — Charles-Valentin Alkan
// 200 bpm, 2/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 513 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(200/2)

// 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, A@4 for four bars: edit a riff to change every repeat.

// other · piano · "A.PIANO 3"
const piano = note(`<
  A B@7 C@4 D E F C G@2 B@6 C@4 D H D E D H D E B@2 I J B@2 I@2 B@6 K B L@4 M L N O P Q L@2 M L R N S T U V R N W X@3 Y
  ~@3 Z AA AB AC Z AD AE AF AG AH AI AJ AK AL AM AN AO AP AQ AR AO AP AS AT AU AV AW AX AY AZ BA BB BC BD BE BF BG BH BI
  BJ BK BL BM BN BO BP BQ BH BR BS BT@2 BU BV BW BX BW BX BY BZ BU BV BU BV BW BX BY BZ CA CB CC CD CA CB CC CD CA CE CF
  CG CH CI CJ@2 B@4 C@4 D E F C G@2 B@6 C@4 D H D E D H D E B@2 I@2 B@2 I@2 B@20 CK@8 CL CM CN CO CP CQ CR CS CT CU CV
  CW CX CY CZ DA DB CM CN CO CZ DC DD DE DF DG DH DI DJ DK DL DM DN DO DP DQ DR DS DT DU DR DS DT DU DT DU DT DU@5 DV@3
  DW ~@74 B DX@2 B C DX@2 C DY DZ ~ D EA EB DX E EC ED EE EF EG EH EI EJ EG EH EI EJ EK@2 EL@2 EM@4 EN EO EP EO EN EQ EP
  EO EN ER ES ET@2 EU EV EW@2 EP EX EY EZ FA FB FC FD EP FE FF@2 FG EZ FG EZ FH EZ FD FI FJ FI FJ FI FJ FK FL FI FJ FI
  FJ FI FJ FK FL FM BV FM BV FM BV FM BV FN FO@2 FP FQ FO@2 FP FR FO@2 FP ~@2 FS@2 ~@12 FT FU FV@8 FW@2 FX@2 FY FZ@8 ~@2
>`.pickRestart({
  A: "~@2 a3 ~ a3 ~ a3 ~", B: "[a2,a3] ~ a3 ~ a3 ~ a3 ~", C: "[d3,a3] ~ a3 ~ a3 ~ a3 ~", D: "[e3,a3] ~ a3 ~ a3 ~ a3 ~",
  E: "[f3,a3] ~ a3 ~ a3 ~ a3 ~", F: "[db3,a3] ~ a3 ~ a3 ~ a3 ~", G: "[bb2,a3] ~ a3 ~ a3 ~ a3 ~",
  H: "[e3,ab3] ~ ab3 ~ ab3 ~ ab3 ~", I: "a3!4, a2", J: "a3@4 a3@4 a3@4 a3@3 ~, a2@15 ~", K: "[a2,a3] ~ a3 ~ a3 ~@3",
  L: "f3 ~ f3 ~ f3 ~ f3 ~", M: "[e3,f3] ~ f3 ~ f3 ~ f3 ~", N: "[bb2,f3] ~ f3 ~ f3 ~ f3 ~",
  O: "[c3,f3] ~ f3 ~ f3 ~ f3 ~", P: "f3 ~@3 f3 ~ f3 ~", Q: "f3 ~ f3 ~ f3 ~@3", R: "[a2,f3] ~ f3 ~ f3 ~ f3 ~",
  S: "[bb2,gb3] ~@7", T: "[c3,gb3] ~ gb3 ~ gb3 ~ gb3 ~", U: "[c3,ab3] ~ ab3 ~@3 ab3 ~", V: "[db3,ab3] ~ ab3 ~ ab3 ~@3",
  W: "[f2,db3] ~ db3 ~ db3 ~ db3 ~", X: "[gb2,db3] ~ db3 ~ db3 ~ db3 ~", Y: "f2 ~@7", Z: "~@2 f4 bb3 ~@3 d4",
  AA: "~@2 bb4 f4 ~@2 a4 f4", AB: "~@2 bb4 f4 ~@2 bb4 f4", AC: "~@2 f4 d4 ~@2 f4 c4", AD: "~@3 f4 ~@2 a4 f4",
  AE: "~@2 bb4 f4 ~@2 d5 bb4", AF: "~@2 c5 a4 ~@4", AG: "~@2 bb4 g4 ~@2 bb4 gb4", AH: "~@2 bb4 f4 ~@3 e4",
  AI: "~@6 f4 d4", AJ: "~@2 f4 c4 ~@3 b3", AK: "~@3 c4 ~@2 f4 d4", AL: "~@2 f4 bb3 ~@2 bb4 f4",
  AM: "~@2 f4 c4 ~@2 f4 d4", AN: "~@2 e4 bb3 ~@3 a3", AO: "~@2 d4 bb3 ~@2 f4 d4", AP: "~@2 bb4 f4 ~@2 c5 a4",
  AQ: "~@2 d5 bb4 ~@2 bb4 f4", AR: "~@2 f4 d4 ~@2 eb4 c4", AS: "~@2 d5 ~@3 d5 bb4", AT: "~@2 c5 a4 ~@2 b4 ab4",
  AU: "~@2 c5 g4 ~@2 b4 f4", AV: "~@2 c5 eb4 ~@2 d5 ~", AW: "~@2 g4 c4 ~@2 eb5 c5", AX: "~@2 d5 b4 ~@2 db5 bb4",
  AY: "~@2 d5 a4 ~@2 db5 g4", AZ: "~@2 d5 ~@3 e5 e4", BA: "~@2 a4 d4 ~@2 eb5 c5", BB: "~@2 eb5 bb4 ~@3 a4",
  BC: "~@2 eb5 bb4 ~@2 eb5 c5", BD: "~@2 eb5 d5 ~@4", BE: "~@2 d5 ~@3 gb5 d5", BF: "~@2 g5 g4 ~@2 d5 bb4",
  BG: "~@3 eb4 ~@2 b4 g4", BH: "~@2 c5 ~@5", BI: "~@2 d5 f4 ~@2 c5 f4", BJ: "~@2 bb4 f4 ~@2 a4 ~",
  BK: "~@2 d4 gb5 ~@2 d5 ~", BL: "~@3 g5 ~@2 bb4 d5", BM: "~@2 eb4 ~@3 g4 b4", BN: "~@2 c4 c5 ~@2 eb4 ~",
  BO: "~@2 d5 f4 ~@2 c5 ~", BP: "~@2 bb4 ~@5", BQ: "~@2 eb5 f4 ~@2 d5 f4", BR: "~@2 a5 f4 ~@2 g5 ~",
  BS: "~@2 f5 ~@3 e5 ~", BT: "[~@3 eb6@3 ~@5 f5@4 c5, ~@4 f6@27 ~, ~@12 eb6@19 ~, ~@14 c6@17 ~, ~@20 a5@11 ~]/2",
  BU: "~@14 [e2,f2] [g2,a2]", BV: "bb2 ~@3", BW: "~@14 e2 [f2,g2]", BX: "bb2 ~@3, a2 ~@15", BY: "~@14 [f2,g2] [a2,bb2]",
  BZ: "c3 ~@3", CA: "bb2@14 c3 [d3,eb3]", CB: "gb3 ~@3, f3 ~@15", CC: "bb2@14 [c3,d3] [eb3,f3]", CD: "gb3 ~@3",
  CE: "f3@5 ~@9 [bb2,c3] d3", CF: "f3@4 ~@10 [bb2,c3] d3, eb3 ~@15", CG: "f3 ~@3, eb3 ~@15", CH: "~ [bb2,d3]",
  CI: "[bb2,d3]!2", CJ: "[bb2,d3]@5 [bb2,d3]@5 ~ [bb2,d3]@5",
  CK: "[~@63 a2, d3@6 d3 a2@7 d3 a2@7 d3 a2@7 d3 a2@7 d3 a2@7 d3 a2@7 d3 a2@7 d3@2, ~ gb3@4 gb3@3 d3@5 gb3@3 d3@5 gb3@3 d3@5 gb3@3 d3@5 gb3@3 d3@5 gb3@3 d3@5 gb3@3 d3@5 gb3@3, ~@2 a3@2 a3@5 gb3@3 a3@5 gb3@3 a3@5 gb3@3 a3@5 gb3@3 a3@5 gb3@3 a3@5 gb3@3 a3@5 gb3@3 a3@4, ~@3 d4@7 a3 d4@7 a3 d4@7 a3 d4@7 a3 d4@7 a3 d4@7 a3 d4@7 a3 d4@5]/8",
  CL: "~@4 a3 gb3 d3 a2, d3@11 ~@5, ~ gb3@4 ~@3, ~ a3 ~@2, ~@6 d4@5 ~@5", CM: "bb2 ~ gb2 ~ ab2 ~ bb2 ~",
  CN: "b2 ~ db3 ~ d3 ~ e3 ~", CO: "gb3 ~ g3 ~ gb3 ~ e3 ~", CP: "d3 ~ db3 ~ b2 ~ db3 ~", CQ: "eb3 ~ b2 ~ db3 ~ eb3 ~",
  CR: "e3 ~ gb3 ~ g3 ~ a3 ~", CS: "b3 ~ c4 ~ b3 ~ a3 ~", CT: "g3 ~ gb3 ~ e3 ~ gb3 ~", CU: "g3 ~ e3 ~ a3 ~ g3 ~",
  CV: "gb3 ~ e3 ~ d3 ~ e3 ~", CW: "gb3 ~ d3 ~ g3 ~ gb3 ~", CX: "e3 ~ d3 ~ db3 ~ d3 ~", CY: "e3 ~ db3 ~ gb3 ~ e3 ~",
  CZ: "d3 ~ db3 ~ b2 ~ bb2 ~", DA: "b2 ~ d3 ~ db3 ~ b2 ~", DB: "bb2 ~ db3 ~ gb3 ~ db3 ~", DC: "b2 ~ g2 ~ a2 ~ b2 ~",
  DD: "c3 ~ d3 ~ e3 ~ f3 ~", DE: "g3 ~ ab3 ~ g3 ~ f3 ~", DF: "e3 ~ d3 ~ c3 ~ b2 ~", DG: "db3 ~ a2 ~ b2 ~ db3 ~",
  DH: "d3 ~ e3 ~ f3 ~ e3 ~", DI: "d3 ~ bb2 ~ c3 ~ d3 ~", DJ: "e3 ~ f3 ~ g3 ~ f3 ~", DK: "e3 ~ c3 ~ d3 ~ e3 ~",
  DL: "f3 ~ c3 ~ e3 ~ f3 ~", DM: "g3 ~ c3 ~ f3 ~ g3 ~", DN: "a3 ~ c3 ~ g3 ~ a3 ~", DO: "bb3 ~ c3 ~ c4 ~ bb3 ~",
  DP: "a3 ~ g3 ~ f3 ~ e3 ~", DQ: "d3 ~ c3 ~ b2 ~ a2 ~", DR: "e3 ~ e3 ~", DS: "e3@3 gb3", DT: "e3 ~ eb3 ~ db3 ~ eb3 ~",
  DU: "e3 ~ eb3 ~ db3 ~ b2 ~", DV: "e3!4", DW: "e3!3 ~", DX: "a3 ~ a3 ~ a3 ~ a3 ~", DY: "[e3,a3] ~ a3 ~ a3 ~@3",
  DZ: "a3 ~@7", EA: "[f3,a3] ~ a3 ~@5", EB: "~@6 a3 ~", EC: "[g3,a3] ~ a3 ~ a3 ~ a3 ~", ED: "a3 ~ a3 ~@3 a3 ~",
  EE: "[a3,bb3] ~ a3 ~ a3 ~ a3 ~", EF: "[a3,b3] ~ a3 ~ a3 ~ a3 ~", EG: "[a3,db4] ~ a3 ~ a3 ~ a3 ~",
  EH: "[a3,d4] ~ a3 ~ a3 ~ a3 ~", EI: "[a3,e4] ~ a3 ~ a3 ~ a3 ~", EJ: "[a3,f4] ~ a3 ~ a3 ~ a3 ~",
  EK: "bb3@2 ~@2 [d4,f4,bb4]@2 bb3 ~, [bb2,d3,f3]@13 ~@3, ~ bb3@2 ~", // Bb
  EL: "bb3@2 bb3@2 [d4,f4,bb4] ~ bb3 ~, [bb2,d3,f3]@5 ~@3", // Bb
  EM: "bb3@4 ~@4 [eb4,gb4,bb4]@3 ~ bb3@2 ~@2, [bb2,eb3,gb3]@11 ~@5, ~@4 bb3@7 ~@5", // Ebm
  EN: "bb3@4 ~@4 [f4,ab4,bb4]@3 ~ bb3@2 ~@2, bb2@11 ~@5, ~@4 bb3@7 ~@5", // Bb7
  EO: "bb3@4 ~@4 [eb4,gb4,bb4]@3 ~ bb3@2 ~@2, bb2@11 ~@5, ~@4 bb3@7 ~@5", // Ebm
  EP: "bb3@4 ~@4 [d4,f4,bb4]@3 ~ bb3@2 ~@2, bb2@11 ~@5, ~@4 bb3@7 ~@5", // Bb
  EQ: "bb3@2 ~@2 [eb4,gb4,bb4]@2 bb3 ~, bb2@13 ~@3, ~ bb3@2 ~", // Ebm
  ER: "eb4@2 ~@2 [gb4,bb4,eb5]@2 eb4 ~, eb3@3 ~, ~ eb4@2 ~", ES: "b3@2 b3@2 [gb4,a4,b4] ~ b3 ~, b2@5 ~@3",
  ET: "[e4@2 e4@2 [ab4,b4,e5] ~@3 c4@2 c4@2 [g4,bb4,c5] ~ c4 ~, e3@5 ~ e4@7 ~@3, ~@8 c3@5 ~@3]/2", // E C7
  EU: "f4@2 f4@2 [a4,c5,f5] ~ f4 ~, f3 ~", EV: "db4@2 db4@2 [e4,g4,db5] ~ db4 ~, db3@9 ~@7",
  EW: "[d4@2 d4@2 [f4,a4,d5] ~@3 a3@2 a3@2 [db4,e4,a4] ~ a3 ~, d3@5 ~ d4@7 ~@3, ~@8 a2@5 ~@3]/2", // Dm A
  EX: "gb3@4 ~@4 [a3,c4,gb4]@3 ~ gb3@2 ~@2, gb2@11 ~@5, ~@4 gb3@7 ~@5", EY: "g3@2 g3@2 [bb3,d4,g4] ~ g3 ~, g2@9 ~@7",
  EZ: "bb3@2 bb3@2 [d4,e4,bb4] ~ bb3 ~, bb2@5 ~@3", // Em7b5
  FA: "a3@4 ~@4 [db4,e4,a4]@3 ~ a3@2 ~@2, [a2,bb2]@11 ~@5, ~@4 a3@7 ~@5", // A Bbmaj7
  FB: "db4@4 ~@4 [e4,g4,db5]@3 ~ db4@2 ~@2, db3@11 ~@5, ~@4 db4@7 ~@5", FC: "d4@2 d4@2 [f4,a4,d5] ~ d4 ~, d3@5 ~@3",
  FD: "a3@2 a3@2 [db4,e4,a4] ~ a3 ~, a2@5 ~@3", FE: "gb3@2 gb3@2 [a3,c4,gb4] ~ gb3 ~, gb2@9 ~@7",
  FF: "[g3@2 g3@2 [bb3,d4,g4] ~@3 bb3@2 bb3@2 [d4,bb4] ~ bb3 ~, g2@9 ~@3 g3@14 ~@6, ~@8 bb2@5 ~@3]/2", // Gm
  FG: "g3@2 g3@2 [d4,e4,g4] ~ g3 ~, g2@5 ~@3", FH: "g3@4 ~@4 [d4,e4,g4]@3 ~ g3@2 ~@2, g2@11 ~@5, ~@4 g3@7 ~@5",
  FI: "~@12 ab2 a2 b2 db3", FJ: "d3@5 ~@11", FK: "~@12 a2 b2 db3 d3", FL: "e3@5 ~@11", FM: "e2@11 ~ e2 f2 g2 a2",
  FN: "e2@12 e2 f2 g2 ~", FO: "a2@3 ~@9 d2 e2 f2 g2", FP: "a2 ~@3", FQ: "~@12 d2 e2 f2 g2", FR: "~@13 e2 f2 g2",
  FS: "d3/2", FT: "gb6@15 d6", FU: "~ gb6@13 d6@2",
  FV: "[~@96 gb6@27 ~@5, gb6 gb6 gb6 gb6 gb6 gb6 ~@2, ~@3 g6@8 g6@8 g6@8 ~@5, ~@20 e6@8 e6@24 e6@8 e6@24 e6@8 e6@31 ~@5, ~@3 d6@4 d6@4 d6@4 ~]/8",
  FW: "[[gb2,gb3]@31 ~]/2", FX: "[[b2,gb3]@15 ~]/2", FY: "[a2,a3]", FZ: "[~@17 d3@111, ~@15 d2@63 ~@50]/8",
})).s("gm_piano").gain(0.26)

// other · piano · "A.PIANO 3" · soft notes
const piano_soft = note(`<
  ~@50 A ~@9 B C ~@6 D ~ E F ~@10 G ~@3 G H ~ I ~ J K G L ~@2 M ~@6 N ~@2 O ~@3 P ~ Q ~ R S ~ T U ~ V W X Y Z V AA ~ AB
  V AC@3 ~@155 AD AE AF AG AH AE AF AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AS AT AW AJ AX AY AZ BA AX AY BB BC BD BE
  BF BG BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ CA CB CC CD CE BZ CA CF CG CH CI CJ@8 ~@8 A CK CL ~ CM
  CN ~@3 CO ~@86 CP ~@4 CQ@7 ~ CR@3 ~ CS@3 ~@25
>`.pickRestart({
  A: "~@6 a3 ~", B: "~@2 f3 ~@5", C: "~@6 f3 ~", D: "~@2 gb3 ~ gb3 ~ gb3 ~", E: "~@4 ab3 ~@3", F: "~@6 ab3 ~",
  G: "~@6 f4 ~", H: "~@2 bb4 ~@5", I: "~@6 b4 ab4", J: "~@6 bb4 ~", K: "~@2 a4 eb4 ~@4", L: "~@2 f4 ~@5",
  M: "~@6 eb4 ~", N: "~@3 bb4 ~@4", O: "~@7 d4", P: "~@3 f4 ~@4", Q: "~@6 eb5 ~", R: "~@6 eb5 f4", S: "~@3 gb4 ~@4",
  T: "~@2 eb5 ~@5", U: "~@3 c4 ~@2 eb5 eb4", V: "~@7 f4", W: "~@7 gb5", X: "~@2 g4 ~@5", Y: "~@3 eb5 ~@4", Z: "~@7 eb5",
  AA: "~@3 f4 ~@2 a4 f4", AB: "~@3 f4 ~@2 b4 f4", AC: "[~@3 f4 ~@3 f4@15 eb5 ~]/3", AD: "~@3 e3",
  AE: "~@2 c4 e4 ~@2 e4 g4", AF: "~@2 g4 c5 ~@2 b4 d5", AG: "~@2 c5 e5 ~@2 g4 c5", AH: "~@2 e4 g4 ~@2 d4 f4",
  AI: "~@2 c5 e5 ~@2 e5 c5", AJ: "~@2 d5 b4 ~@2 db5 bb4", AK: "~@2 c5 a4 ~@2 c5 ab4", AL: "~@2 c5 g4 ~@2 c5 gb4",
  AM: "~@2 b4 f4 ~@2 g4 e4", AN: "~@2 g4 d4 ~@2 g4 db4", AO: "~@2 g4 d4 ~@2 g4 e4", AP: "~@2 g4 c4 ~@2 g4 d4",
  AQ: "~@2 g4 b3 ~@2 g4 db4", AR: "~@2 g4 d4 ~@2 g4 b3", AS: "~@2 c3 [g3,c4] ~@2 e3 [c4,e4]",
  AT: "~@2 g3 [e4,g4] ~@2 b3 [f4,b4]", AU: "~@2 c4 [g4,c5] ~@2 g3 [e4,g4]", AV: "~@2 e3 [c4,e4] ~@2 d3 [b3,d4]",
  AW: "~@2 c4 [g4,c5] ~@2 e5 c5", AX: "~@2 c4 f4 ~@2 f4 a4", AY: "~@2 a4 c5 ~@2 c5 e5", AZ: "~@2 c5 f5 ~@2 a4 c5",
  BA: "~@2 f4 a4 ~@2 c4 g4", BB: "~@2 c5 f5 ~@2 a5 f5", BC: "~@2 g5 e5 ~@2 gb5 eb5", BD: "~@2 g5 d5 ~@2 gb5 c5",
  BE: "~@2 d5 bb4 ~@2 gb5 a4", BF: "~@2 g5 g4 ~@2 g5 e5", BG: "~@2 f5 d5 ~@2 e5 db5", BH: "~@2 f5 c5 ~@2 e5 bb4",
  BI: "~@2 c5 a4 ~@2 e5 g4", BJ: "~@2 f5 f4 ~@2 c5 eb5", BK: "~@2 bb4 eb5 ~@2 a4 eb5", BL: "~@2 bb4 eb5 ~@2 c5 eb5",
  BM: "~@2 d5 eb5 ~@2 f4 eb5", BN: "~@2 bb4 f5 ~@2 a4 c5", BO: "~@2 g4 c5 ~@2 gb4 c5", BP: "~@2 g4 c5 ~@2 a4 c5",
  BQ: "~@2 bb4 c5 ~@2 d4 c5", BR: "~@2 g4 d5 ~@2 g4 bb4", BS: "~@2 f4 bb4 ~@2 e4 bb4", BT: "~@2 d4 bb4 ~@2 c4 bb4",
  BU: "~@2 d4 bb4 ~@2 e4 bb4", BV: "~@2 db4 a4 ~@2 a4 db5", BW: "~@2 d4 d5 ~@2 f4 a4", BX: "~@2 bb3 bb4 ~@2 d4 gb4",
  BY: "~@2 g3 g4 ~@2 bb3 bb4", BZ: "~@2 c4 a4 ~@2 c4 g4", CA: "~@2 c4 f4 ~@2 c4 e4", CB: "~@2 db5 a3 ~@2 db5 a4",
  CC: "~@2 d5 d4 ~@2 a4 f4", CD: "~@2 bb4 bb3 ~@2 gb4 d4", CE: "~@2 g4 g3 ~@2 bb4 bb3", CF: "~@2 c4 bb4 ~@2 c4 a4",
  CG: "~@2 c4 g4 ~@2 c4 gb4", CH: "~@2 c4 e5 ~@2 c4 d5", CI: "~@2 c4 c5 ~@2 c4 b4",
  CJ: "[~@11 g5@3 ~@9 e5@3 ~@9 db5@3 ~@21 db4@3 g3 bb3, ~@2 bb5@4 g5@4 e5@8 e5@5 ~@3 e5@5 e5@8 e5@12 g4@12 ~, ~@3 db6@16 ~@3 db5@8 db5@5 ~@3 db5@5 db5@12 e4@8 ~, ~@7 bb5@7 g5@5 g5@8 g5@16 ~@3 g4@4 e4@4 db4@4 bb3@5 ~, ~@15 bb5@16 ~@3 bb4@8 bb4@5 bb4@16 ~]/8",
  CK: "~@2 a3 ~ a3 ~ a3 ~", CL: "a3 ~ a3 ~ a3 ~ a3 ~", CM: "~@4 a3 ~ a3 ~", CN: "a3 ~ a3 ~ a3 ~@3", CO: "~@4 a3 ~@3",
  CP: "~@12 d2 ~@3", CQ: "[~@7 d2@16 ~ d3@15 ~ d3@16, ~@23 d2@16 d2@16 ~]/7", CR: "[~ d3@2, ~@7 d2@16 ~]/3",
  CS: "[~@8 d3@13 ~@3, ~@7 d2@14 ~@3]/3",
})).s("gm_piano").gain(0.15)

stack(piano, piano_soft)