Strudelify

Himalayan Tune

Traditional Nepali

KeyA minorTempo120 bpm
0:00/0:00
// Himalayan Tune — Traditional Nepali
// 120 bpm, 4/4, key A minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 pizzicato strings (copy of ch 2 pizzicato strings)
// note: Transcription provider: pdmx. https://musescore.com/score/5859255; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 64 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(120/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.

// chords · pizzicato strings · A5
const pizzicato_strings = note("<~@48 [a4@3 [a4,e5]@3 [a4,e5]@2]!8 ~@8>").s("gm_pizzicato_strings").gain(0.3)

// other · violin
const violin = note(`<
  A B C D A B C D E F G H E F G H A B C D A B C D E F G H E F G H I J I J I K L M N O N P Q R S T ~@8 E F G H E F G U
>`.pickRestart({
  A: "a4@2 a4 c5 a4@2 c5 d5", B: "e5 a5", C: "g5@2 a5 g5 e5@2 d5 c5", D: "d5 c5", E: "e5 d5 ~ c5 d5 c5 ~ a4",
  F: "c5 a4 ~ g4 e4@2 g4@2", G: "a4@6 d5 c5", H: "a4", I: "e5@2 e5 g5 f#5@2 g5@2", J: "e5 f#5 f#5@2 e5@4",
  K: "e5!2 e5@2 a5@4", L: "a4@2 a4 e5 d5@2 e5@2", M: "c5 d5 d5@2 a4@4", N: "a4@2 a4 g4 e4@2 g4@2", O: "a4!2 a4@2 a4@4",
  P: "a4!2 b4@2 c5@4", Q: "e4@2 e4 g4 f#4@2 g4@2", R: "a4!2 a4@2 d5@4", S: "c5@2 c5 e5 d5@2 e5@2", T: "c4 d4 d4@2 a3@4",
  U: "a4@2 a4!2 a4@2 ~@2",
})).s("gm_violin").gain(0.3)

// other · viola
const viola = note("<~@40 A B A B A C D E F@2 G@2 H@2 I@2 J K L M J K L N>".pickRestart({
  A: "e4@2 e4 g4 f#4@2 g4@2", B: "e4 f#4 f#4@2 e4@4", C: "e4!2 e4@2 a4@4", D: "a3@2 a3 e4 d4@2 e4@2",
  E: "c4 d4 d4@2 a3@4", F: "[a3@3 b3]/2", G: "c4/2", H: "[d3@3 g3]/2", I: "a3/2", J: "e4 d4 ~ c4 d4 c4 ~ a3",
  K: "c4 a3 ~ g3 e3@2 g3@2", L: "a3@6 d4 c4", M: "a3", N: "a3@2 a3!2 a3@2 ~@2",
})).s("gm_viola").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_2 = note(`<
  A@2 B C A C D E F G@2 H F G@2 C A@2 B C A C D E F G@2 H F G@2 C I J K L M N O P ~@24
>`.pickRestart({
  A: "~@3 e4 ~@2 e4@2", B: "~@3 d4 ~@2 d4@2", C: "~@3 c4 ~@2 c4@2", D: "~@3 b3 ~@2 b3@2", E: "~@3 a3 ~@2 a3@2",
  F: "~@3 f3 ~@2 a3@2", G: "~@3 b3 ~@2 c4@2", H: "~@3 d4 ~@2 c4@2", I: "a3@3 c4@3 c4@2", J: "a3@3 d4@3 d4@2",
  K: "a3@3 e4@3 e4@2", L: "a3@3 f#4@2 g4 a4@2", M: "a3 g3", N: "f4 g4", O: "a4", P: "e4 ~@3",
})).s("gm_pizzicato_strings").gain(0.3)

// other · cello
const cello = note("<~@47 A B@2 C@2 D@2 E@2 F G H I J K L M>".pickRestart({
  A: "~@2 e3 g3", B: "[a3@12 g3@2 a3 g3]/2", C: "[e3@6 e3 g3]/2", D: "[a3@12 b3@2 c4 b3]/2", E: "e4/2", F: "d3",
  G: "g3", H: "a3", I: "c4", J: "e3 d3 ~ c3 d3 c3 ~ a2", K: "c3 a2 ~ g2 e2@2 g2@2", L: "a2@6 d3 c3",
  M: "a2@2 a2!2 a2@2 ~@2",
})).s("gm_cello").gain(0.3)

// other · pizzicato strings
const pizzicato_strings_3 = note(`<
  A@2 B C A@2 B C D B A E D B A@4 B C A@2 B C D B A E D B A@2 F G F H I J K F@2 G F H I L K M ~@16
>`.pickRestart({
  A: "a2", B: "g2", C: "f2", D: "d2", E: "c3", F: "a2@3 a3@3 a3@2", G: "a2@3 a3@3 a3 e3", H: "a2@3 a3@2 a3!2 e3",
  I: "d3 e3", J: "f3 g2", K: "d3", L: "f3 g3", M: "a3 ~",
})).s("gm_pizzicato_strings").gain(0.3)

stack(pizzicato_strings, violin, viola, pizzicato_strings_2, cello, pizzicato_strings_3)