Strudelify

Cho Nguoi Noi Ay

Huy Tuáºn

KeyD minorTempo130 bpm
0:00/0:00
// Cho Nguoi Noi Ay — Huy Tuáºn
// 130 bpm, 4/4, key D minor. 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/5891304; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 45 bars on a 32-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/4)

// 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 · flute · "Sáo"
const flute = note("<~@19 A B C D C E F G A B C D C E F H ~@10>".pickRestart({
  A: "~ f4 a4 c5", B: "d5@15 ~", C: "~ d4 e4 f4", D: "c5@8 d5@15 ~ a4@8", E: "g4@23 ~ a4@8", F: "e4@15 ~ f4@8 e4@8",
  G: "d4@15 ~", H: "d4@23 ~@9",
})).s("gm_flute").gain(0.3)

// other · flute · "Sáo" · soft notes
const flute_soft = note("<~@35 A@2 B@3 C@2 D@3>".pickRestart({
  A: "[d4@9 d4@9 ~ a4@9 a4@9 ~ e4@26]/2", B: "[~@2 f4@7 e4@2 ~ d4@9 d4@9 ~ a4@9 a4@9 e4@36 ~@2 d4@9]/3",
  C: "[~ d4@9 a4@9 ~ a4@9 e4@27 ~ f4@7]/2", D: "[~ e4@2 d4@9 d4@9 ~ c4@9 c4@9 ~ d4@36 ~@19]/3",
})).s("gm_flute").gain(0.2)

// other · violin · "Nhị"
const violin = note("<~@11 A B A C A B D E ~ F G H ~ I J K L M G N ~ O P Q ~ R S@5 T@3>".pickRestart({
  A: "d4!2 a4!2", B: "e4@12 f4@3 e4", C: "e4", D: "d4!2 c4!2", E: "d4", F: "~ f4 a4 c5", G: "d5@3 ~", H: "c5 d5@2 a4",
  I: "~ a4 g4 f4", J: "e4 c4", K: "d4 a3 c4 d4 ~ f4 g4 a4",
  L: "d5@4 d4 ~ d4 ~ c4 ~ d4 ~ f4 ~ g4 ~ f4 ~ g4 ~ a4 ~ c5 ~ a4 ~ g4 ~ a4 ~ c5 ~", M: "d5@6 f4 g4 a4@2 c5@4 f5 e5",
  N: "c5@2 d5@3 g4 a4@2", O: "~@2 d4 e4 f4@2 g4@2 ~@2 g4@2 a4@2 g4@2", P: "e4@2 c4 e4", Q: "d4@3 ~", R: "~@3 e4@13",
  S: "[~@12 d4@19 a4@18 e4@38 d4@19 a4@19 e4@28 e4@7]/5", T: "[~@3 d4@19 c4@19 d4@38 ~@17]/3",
})).s("gm_violin").gain(0.3)

// chords · acoustic guitar nylon · "Tranh"
const acoustic_guitar_nylon = note(`<
  A@3 B C B C B C D E F G H I J K L M N O P Q R S T U V W X Y ~ Z AA AB AC AD AE AF@4 AG@2 AH
>`.pickRestart({
  A: "d3@2 [d4,f4]!2 a3@2 c4@2", B: "[a3,d4]@2 [a3,d4]!2 [f4,a4]@2 ~@2", C: "[c3,a3]@2 [c3,a3]!2 [a4,c5]@2 ~@2",
  D: "[a3,d4]@2 [a3,d4]!2 [g4,c5]@2 ~@2", E: "d3 a3 g3 f3 ~ a3 g3 f3", F: "d3 ~@3", G: "[c3,a3]@2 a3 g3 ~ g3 f3 e3",
  H: "[d3,f3]@2 d3 d4 a3 a4 a3 a4", I: "[c4,a4]@2 a4 g4 ~ g4 f4 c4", J: "[d4,f4]@2 d4 d3 a3 a2 a3 c4",
  K: "[c3,a3]@2 f3 g3 ~ g3 a3 c4", L: "d4 d3 d4 d3 c4 c3 c4 c3", M: "d3@2 d4 f4 g4@2 a4@2 ~@2 f4 g4 a4@2 c5@2",
  N: "[a4,d5] ~@3", O: "d4 d3 f4 f3 a4 a3 c5 c4", P: "[f4,d5]@2 d4 d3 e4!2 f4 f3", Q: "c5 c4 d5 d4 d5 d4 a4 a3",
  R: "a4 a3 d4 d3 e4!2 f4 f3", S: "[d4,g4]@2 d4 f4 ~ g4 a4 g4", T: "c4 c3 a4 g4 f4 f3 c4 c3",
  U: "d4 a3 c4 d4 ~ f4 g4 a4", V: "[d4,d5] ~@7", W: "[a3,d4]!2 [c4,f4]!2 [d4,g4]!2 [f4,a4]!2",
  X: "[a4,d5]!2 [a3,d4]!2 [g3,e4]!2 [d4,f4]!2", Y: "[g3,c4]!2 [a3,d4]@2 ~@2 [f3,a3]@2",
  Z: "[d4,g4]!2 [a3,d4]!2 [g3,e4]!2 [d4,f4]!2", AA: "a4 a3 a4 g4 f4 c4 a3 c4", AB: "[a3,d4]@3 ~", AC: "d3@9 ~@23",
  AD: "~@6 [c3,a3,a4]@19 ~@7", AE: "~@12 [d3,a3,d4]@19 ~",
  AF: "[~@17 [c3,c4,a4]@19 ~@19 [d3,a3,d4]@19 ~@19 [c3,a3,a4]@19 ~@16]/4", // F D5 F
  AG: "[~@3 [d3,a3,d4]@19 [c3,g3,c4]@19 [d3,a3,d4]@19 ~@4]/2", AH: "~@15 d5@9 ~@8",
})).s("gm_acoustic_guitar_nylon").gain(0.25)

// drums · tambourine
const tambourine = s("tb").struct("<[~ x ~ x]!11 ~ [~@3 x]!7 x ~@25>").gain(0.25)

// drums · cowbell
const cowbell = s("cb").struct("<A@11 ~ B@7 ~ C@7 D E@7 ~ F G ~ H I J K ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "~@2 x ~@2 x ~@2", C: "~ x ~ x", D: "~ x!3", E: "~@4 x ~@7 x!2 ~@2", F: "~@20 x!3 ~ x ~@7",
  G: "~@13 x ~@2", H: "x!4 ~@28", I: "~@5 x ~@26", J: "~@11 x!2 ~ x!2 ~@16", K: "~@17 x ~@14",
})).gain(0.25)

// drums · congas
const congas = s("conga:33").struct("<~@12 A@7 B C@7 D E@7 ~ F G H I J K L M ~>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x", C: "x ~ x!2 ~@2 x ~@3 x ~@3 x ~", D: "x!4 ~ x!3 ~ x!3 ~ x!3",
  E: "x ~ x!2 ~ x!2 ~@3 x!2 ~@2 x ~", F: "~@6 x ~@18 x ~@6", G: "~@12 x ~@18 x", H: "~@17 x ~@14",
  I: "~@4 x ~@18 x ~@8", J: "~@10 x ~@18 x ~@2", K: "~ x", L: "~@3 x ~@18 x ~@4 x ~@4", M: "~@4 x ~@4 x ~@22",
})).gain(0.79)

stack(flute, flute_soft, violin, acoustic_guitar_nylon, tambourine, cowbell, congas)