Strudelify

Night Walk

Rhythm Tengoku

KeyD majorTempo126 bpm
0:00/0:00
// Night Walk — Rhythm Tengoku
// 126 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: ch 8 "Brass Synthesizer, Orch. Hit" named as a brass, played on synth brass 1 (its tremolo strings patch is not one)
// note: duplicate parts dropped: ch 13 "Square Synthesizer, Square Lead" slap bass 1 (copy of ch 2 "Saw Synthesizer, Sawtooth Lead" pad bowed); ch 5 "Electric Piano, Electric Piano" epiano1 (copy of ch 6 "Pad Synthesizer, New Age" pad sweep); ch 14 "Pad Synthesizer, Warm Pad" pad warm (copy of ch 4 "Strings, Strings" string ensemble 1); ch 7 "Bass Synthesizer, Synth Bass" synth bass 1 (copy of ch 3 "Electric Bass, Finger Bass" electric bass finger)
// note: Transcription provider: pdmx. https://musescore.com/score/5908807; license: https://creativecommons.org/publicdomain/zero/1.0/
// note: Full arrangement: all 45 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(126/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.

// chords · dulcimer · "Square Synthesizer, Square Wave" · F#m A5 F#m C#m A5 C#m A5 F#m …
const dulcimer = note(`<
  ~@26
  [c#4 a3 c#4 e4 [c#4,a4] [a3,e4] [c#4,a4] [e4,c#5] [a4,e5] [e4,c#5] [a4,e5] [c#5,a5] [e5,c#6] [c#5,a5] [e5,c#6] [a5,e6]]
  ~@18
>`).s("gm_dulcimer").gain(0.4)

// other · synth brass 1 · "Brass Synthesizer, Orch. Hit" · A D#
const synth_brass_1 = note("<~@26 [a5 b5 c#6 e6] ~@8 [[a4,a5]!4] ~@8 [[d#4,d#5,d#6] ~]>")
  .s("gm_synth_brass_1").gain(0.5)

// other · pad sweep · "Pad Synthesizer, New Age"
const pad_sweep = note("<~@5 A ~@3 B ~@3 C ~@3 D ~@3 E ~@3 F G ~@12 H ~@3 I ~>".pickRestart({
  A: "~ b3 e4 g4 b4 e5 g5 b5 e6 b5 g5 e5 b4 g4 e4 b3", B: "b5 a5 g5 f5",
  C: "~ c4 f4 g#4 c5 f5 g#5 c6 f6 c6 g#5 f5 c5 g#4 f4 c4", D: "c6 a#5 g#5 f#5",
  E: "~ c#4 f#4 a4 c#5 f#5 a5 c#6 f#6 c#6 a5 f#5 c#5 a4 f#4 c#4", F: "c#6 b5 a5 g5", G: "a5 b5 c#6 e6",
  H: "~ d4 g4 a#4 d5 g5 a#5 d6 g6 d6 a#5 g5 d5 a#4 g4 d4", I: "d6 c6 a#5 g#5",
})).s("gm_pad_sweep").gain(0.35)

// chords · string ensemble 1 · "Strings, Strings"
const string_ensemble_1 = note(`<
  ~@2 A B C D E F G B H I J K L M N I O P Q R S T U V@2 W X Y Z AA AB Y P@2 AC AD AE AF AG AH AI AJ AK
>`.pickRestart({
  A: "[c4,e4,g4,c5]", B: "[b3,d4,g4,b4]", C: "[a3,c4,e4,a4]", D: "[e3,g3,b3,e4]", E: "[f3,a3,d4,f4] [g3,b3,d4,g4]",
  F: "[g3,b3,e4,g4] [a3,c4,e4,a4]", G: "[a3,d4,f#4,a4] [d4,f#4,a4,c5]", H: "[c#4,f4,g#4,c#5]", I: "[c4,d#4,g#4,c5]",
  J: "[a#3,c#4,f4,a#4]", K: "[f3,g#3,c4,f4]", L: "[f#3,a#3,d#4,f#4] [g#3,c4,d#4,g#4]",
  M: "[g#3,c4,f4,g#4] [a#3,c#4,f4,a#4]", N: "[a#3,d#4,g4,a#4] [d#4,g4,a#4,c#5]", O: "[d4,f#4,a4,d5]",
  P: "[c#4,e4,a4,c#5]", Q: "[b3,d4,f#4,b4]", R: "[f#3,a3,c#4,f#4]", S: "[g3,b3,e4,g4] [a3,c#4,e4,a4]",
  T: "[a3,c#4,f#4,a4] [b3,d4,f#4,b4]", U: "[b3,e4,g#4,b4] [e4,g#4,b4,d5]", V: "[c#4,e4,a4,c#5]/2", W: "[f#4,b4,d5,f#5]",
  X: "[c#4,f#4,a4,c#5]", Y: "[d4,g4,b4,d5]", Z: "[f#4,a4,d5,f#5]", AA: "[e4,g4,b4,e5] [a3,c#4,e4,a4]",
  AB: "[d4,f#4,a4,d5] [c#4,e4,g4,c#5] [b3,d4,f#4,b4] [a3,c#4,e4,a4]", AC: "[d#4,g4,a#4,d#5,d#6]",
  AD: "f6@3 a#5, [d4,f4,a#4,d5]", AE: "[c4,d#4,g4,c5,c6]", AF: "d6@3 a#5, [g3,a#3,d4,g4]",
  AG: "[g#3,c4,f4,g#4,c6] [a#3,d4,f4,a#4,d6]", AH: "[a#3,d4,g4,a#4,f6] [c4,d#4,g4,c5,d#6]",
  AI: "[c4,f4,a4,c5] [f4,a4,c5,d#5], f6", AJ: "[d4,f4,a#4,d5,a#6]", AK: "~@4 d#2!2 ~ d#2 d#2@4 ~@4",
})).s("gm_string_ensemble_1").gain(0.4)

// chords · dulcimer · "Baryton, Dulcimer"
const dulcimer_2 = note("<~@27 A B C D E F C G@2 ~@9>".pickRestart({
  A: "[f#4,b4,d5,f#5]", B: "[c#4,f#4,a4,c#5]", C: "[d4,g4,b4,d5]", D: "[f#4,a4,d5,f#5]",
  E: "[e4,g4,b4,e5] [a3,c#4,e4,a4]", F: "[d4,f#4,a4,d5] [c#4,e4,g4,c#5] [b3,d4,f#4,b4] [a3,c#4,e4,a4]",
  G: "[c#4,e4,a4,c#5]", // A
})).s("gm_dulcimer").gain(0.4)

// bass · electric bass finger · "Electric Bass, Finger Bass"
const bass = note(`<
  ~@2 A B C D E F G B H I J K L M N I O C P Q R S T C@2 U Q B O F V W X@2 Y J Z B AA AB AC J AD
>`.pickRestart({
  A: "c2 c3 c2 c3 c2 c3 c2 c3", B: "g2 g3 g2 g3 g2 g3 g2 g3", C: "a2 a3 a2 a3 a2 a3 a2 a3",
  D: "e2 e3 e2 e3 e2 e3 e2 e3", E: "d2 d3 d2 d3 g2 g3 g2 g3", F: "e2 e3 e2 e3 a1 a2 a1 a2",
  G: "d2 d3 d2 d3 f#2 f#3 f#2 f#3", H: "c#2 c#3 c#2 c#3 c#2 c#3 c#2 c#3", I: "g#2 g#3 g#2 g#3 g#2 g#3 g#2 g#3",
  J: "a#2 a#3 a#2 a#3 a#2 a#3 a#2 a#3", K: "f2 f3 f2 f3 f2 f3 f2 f3", L: "d#2 d#3 d#2 d#3 g#2 g#3 g#2 g#3",
  M: "f2 f3 f2 f3 a#1 a#2 a#1 a#2", N: "d#2 d#3 d#2 d#3 g2 g3 g2 g3", O: "d2 d3 d2 d3 d2 d3 d2 d3",
  P: "b2 b3 b2 b3 b2 b3 b2 b3", Q: "f#2 f#3 f#2 f#3 f#2 f#3 f#2 f#3", R: "e2 e3 e2 e3 a2 a3 a2 a3",
  S: "f#2 f#3 f#2 f#3 b1 b2 b1 b2", T: "e2 e3 e2 e3 g#2 g#3 g#2 g#3", U: "b1 b2 b1 b2 b1 b2 b1 b2",
  V: "d2 d3 c#2 c#3 b1 b2 a1 a2", W: "g1 g2 g1 g2 g1 g2 g1 g2", X: "a1 a2 a1 a2 a1 a2 a1 a2",
  Y: "d#2 d#3 d#2 d#3 d#2 d#3 d#2 d#3", Z: "c3 c4 c3 c4 c3 c4 c3 c4", AA: "f2 f3 f2 f3 a#2 a#3 a#2 a#3",
  AB: "g2 g3 g2 g3 c2 c3 c2 c3", AC: "f2 f3 f2 f3 a2 a3 a2 a3", AD: "d#3@2 ~@2 d#2!2 ~ d#2 d#2@2 ~@6",
})).s("gm_electric_bass_finger").gain(0.4)

// other · glockenspiel · "Orff Alto Glockenspiel, Glockenspiel" · G F# E D C B A G …
const glockenspiel = note(`<
  [g4 f#4 e4 d4 c4 b3 a3 g3 [g3,g4] [f#3,f#4] [e3,e4] [d3,d4] [c3,c4] [b2,b3] [a2,a3] [g2,g3]]
  [[d2,d3] [e2,e3] [f#2,f#3] [a2,a3] [d3,d4] [e3,e4] [f#3,f#4] [a3,a4] [d4,d5]@2 ~@6]
  ~@7
  [b5 a5 g5 f5]
  ~@7
  [c6 a#5 g#5 f#5]
  ~@27
>`).s("gm_glockenspiel").gain(0.4)

// drums · kick
const kick = s("bd").struct("<[x!4]!2 [x!2]!33 x [x!2]!8 ~>").gain(0.4)

// drums · snare
const snare = s("sd").struct("<~ A B@7 C B@7 C B@8 D B@8 E B@8 F>".pickRestart({
  A: "~@11 x!5", B: "~ x ~ x", C: "~@4 x ~@7 x ~ x!2", D: "~@4 x ~@6 x!5", E: "~@4 x ~@2 x!9", F: "~@4 x!2 ~ x!2 ~@7",
})).gain(0.4)

// drums · pedal hat
const pedal_hat = s("hh").struct("<[x!4]!44 ~>").gain(0.4)

// drums · open hat
const open_hat = s("oh").struct("<[~ x ~ x ~ x ~ x] [~ x ~ x ~@3 x] [~ x ~ x ~ x ~ x]!42 x>").gain(0.4)

// drums · crash
const crash = s("cr").struct("<~@10 x ~@7 x ~@17 x ~@8>").gain(0.4)

// drums · cowbell
const cowbell = s("cb").struct("<[x!2] [x!4] ~@43>").gain(0.4)

stack(
  dulcimer, synth_brass_1, pad_sweep, string_ensemble_1, dulcimer_2, bass, glockenspiel, kick, snare, pedal_hat,
  open_hat, crash, cowbell
)