Strudelify

Riverisco

Nomadi

KeyG majorTempo120 bpm
0:00/0:00
// Riverisco — Nomadi
// 120 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 91 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 · "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 · drawbar organ · "ORGAN HAMMOND"
const drawbar_organ = note(`<
  ~ A@2 B C A@2 B C D E F G@2 H I J K@2 L M N O P G@2 Q I J R@2 L M S O P G@2 T I U@4 B V A@2 B W D E F G@2 H I J K@2 L
  M N O P G@2 Q I J R@2 L M S O P G@2 T I U@4 B C A@2 B C
>`.pickRestart({
  A: "[[c5,e5,g5] [a4,f#5] [g4,b4]@2, ~@8 d5@23 ~]/2", B: "[e5,g5] [d5,f#5,a5], c5@3 ~@5", C: "[b4,d5,g5]@15 ~",
  D: "[g2,d5,b5] [c3,c5,e5,g5], g5@3 ~@5", E: "[d3,a4,f#5] [g3,g5], d5@7 ~, ~@4 b4@3 ~",
  F: "[g2,b5] [c3,c5,e5,g5], [d5,g5]@7 ~@9", G: "[[d3,f#5,a5]@2 [g3,b5] [c3,c5,e5,g5], d5@23 ~@9, ~@8 g5@3 ~@5]/2",
  H: "[g3,e5,g5,b5] [d3,d5,a5] [e3,e5,g5,b5]@2, ~@4 f#5@3 ~@9", I: "[c3,c5,e5,g5]", J: "[d3,f#5,a5] [g3,g5,b5], d5",
  K: "[[c3,c5,e5,g5] [d3,a4,f#5] [g3,g4,b4]@2, ~@8 d5@23 ~]/2", L: "[c3,e5,g5] [d3,d5,f#5,a5], c5@3 ~@5",
  M: "[g3,b4,d5,g5]", N: "[g3,d5,b5] [c3,c5,e5,g5], g5@3 ~@5", O: "[d3,a4,f#5] [g2,g5], d5@7 ~, ~@4 b4@3 ~",
  P: "[g3,b5] [c3,c5,e5,g5], [d5,g5]@7 ~@9", Q: "[g3,e5,g5,b5] [d4,d5,a5] [e3,e5,g5,b5]@2, ~@4 f#5@3 ~@9",
  R: "[[c3,e5,g5] [d3,a4,f#5] [g3,g4,b4]@2, c5@7 ~ d5@23 ~]/2", S: "[g4,d5,g5,b5] [c3,c5,e5,g5]",
  T: "[g3,e5,g5,b5] [d4,d5,a5] [e4,e5,g5,b5]@2, ~@4 f#5@3 ~@9", // Em D5 Em
  U: "[[d3,f#5,a5]@8 b5@7 b5 c6 e6 d6 c6 b5 c6 b5 a5 b5 a5 g5 a5 g5 f#5 g5 f#5 [c5,e5,g5]@8 [a4,f#5]@8 [g4,b4]@16, d5@32 ~@8 d5@23 ~, ~@4 g3@13 ~@15, ~@8 g5@15 ~@41]/4", // D C D G
  V: "g5 a5 b5 c6 b5 c6 d6 e6 d6 e6 f#6 e6 g6 f#6 e6 d6, [b4,d5]@15 ~", // Bm
  W: "b5 c6 d6 e6 c6 d6 e6 d6 f#6 g6 b6 a6 g6 f#6 e6 d6, [b4,d5,g5]@15 ~", // G
})).s("gm_drawbar_organ").gain(0.31)

// bass · acoustic bass · "BASS"
const bass = note(`<
  ~ A B C D A B C D E F G H G I J K A B C D E F G H G I J K A B C D E F G H G I J K L A B C D A B C D E F G H G I J K A
  B C D E F G H G I J K A B C D E F G H G I J K L A B C D A B C M
>`.pickRestart({
  A: "c2@5 ~ c2 ~ d2@5 ~ d2@2", B: "g2@9 ~ g2@3 ~ g2 ~", C: "c2@5 ~ c2@2 d2 ~ d2@3 ~ d2@2", D: "g2@5 ~ g2 ~ g2@7 ~",
  E: "g2@5 ~ g2@2 c2@5 ~ c2!2", F: "d2 ~ d2@3 ~ d2@2 g2@6 c2@2", G: "g2@2 g2@3 ~ g2@2 c2@5 ~ c2@2",
  H: "d2 ~ d2@3 ~ d2 ~ d2@6 c2 d2", I: "g2@4 f#2@4 e2@6 d2 ~", J: "c2 ~ c2@3 ~ c2 ~ c2@6 a1 c2",
  K: "d2 ~ d2@3 ~ d2@2 g2@6 ~ e2, ~@7 d2", L: "g2 ~ g2@3 ~ g2@2 g2@8", M: "g2 ~",
})).s("gm_acoustic_bass").gain(0.44)

// other · electric guitar jazz · "JAZZ GUITAR"
const electric_guitar_jazz = note(`<
  ~@10 A B C D ~@8 A B C D ~@8 A B C D ~@13 A B C D ~@8 A B C D ~@8 A B C D ~@12
>`.pickRestart({
  A: "~@9 d4 e4 f#4 e4 f#4 g4 a4", B: "b4@13 ~@3", C: "~@9 d4 e4 f#4 e4 d4 e4 f#4", D: "g4@11 ~@5",
})).s("gm_electric_guitar_jazz").gain(0.31)

// other · synth brass 1 · "SEC BRASS"
const synth_brass_1 = note(`<
  ~ A B C@2 A B D@2 ~@5 E ~@2 A B F@2 ~@5 E ~@2 A G F@2 ~@5 E ~@3 H G I@2 A B J@2 ~@5 E ~@2 A K F@2 ~@5 E ~@2 A L M@2
  ~@5 E ~@3 H G N@2 A O M@2
>`.pickRestart({
  A: "g5@4 f#5 ~ e5 d5@5 g4 ~ a4 ~", B: "b4 ~ d5 ~ d5 ~ e5 d5@6 g4 a4 g4",
  C: "[g5@4 f#5 ~ e5 d5@5 a4 ~ b4 g4@15 ~@2]/2", D: "[g5@4 f#5 ~ e5 ~@2 e5 ~@2 a4 ~ b4 g4@15 ~@2, ~@7 d5@5 ~@20]/2",
  E: "[d4,g5]@4 [g4,f#5]@4 [b4,e5]@7 ~", F: "[g5@4 f#5 ~ e5 d5@5 a4 ~ b4 g4@14 ~@3]/2",
  G: "b4@2 d5 ~ d5 ~ e5 d5@6 g4 a4 g4", H: "g5@3 ~ f#5 ~ e5 d5@5 g4 ~ a4 ~",
  I: "[g5@4 f#5 ~ e5 d5@5 a4 ~ b4 g4@14 ~ g4 ~]/2", J: "[g5@4 ~@2 e5 d5@5 a4 ~ b4 g4@15 ~@2]/2",
  K: "b4 ~ d5 ~ d5 ~ e5 d5@6 g4 [g4,a4] ~", L: "b4@2 d5 ~ d5 ~ e5 d5@6 g4 ~ g4, ~@7 a4",
  M: "[g5@4 f#5 ~ e5 d5@5 a4 ~ b4 g4@16 ~]/2", N: "[g5@4 f#5 ~ e5 d5@5 a4 ~ b4 g4@14 ~ g4@2]/2",
  O: "b4 ~ d5 ~ d5 ~ e5 d5@9",
})).s("gm_synth_brass_1").gain(0.5)

// drums · kick
const kick = s("bd").struct(`<
  ~ A@7 B A@7 B A@3 B A@7 B A@3 B A@8 B A@3 B A@3 B A@7 B A@3 B A@7 B A@3 B A@8 B A@3 B A@3 C
>`.pickRestart({
  A: "x ~@2 x!2 ~@3 x ~@3 x ~ x ~", B: "x ~@2 x!2 ~@3 x ~@3 x ~@3", C: "x",
})).gain(0.54)

// drums · snare
const snare = s("sd").struct(`<
  ~@8 A B@7 A B@3 A B@7 A B@3 A B@8 A B@3 A B@3 A B@7 A B@3 A B@7 A B@3 A B@8 A B@3 A B@3 ~
>`.pickRestart({
  A: "~@4 x ~@4 x ~@2 x ~ x ~", B: "~ x ~ x",
})).gain(0.61)

// drums · hihat
const hihat = s("hh").struct(`<
  ~ A B@6 C A B@4 ~ B@2 A B@2 D A B@4 ~ B@2 A B@2 D A B@3 E ~ B@3 A B@3 A B@3 A B@3 D ~ F B A B@3 A B@4 ~ B@2 A B@3 A
  B@3 D ~ B@3 A B@2 D A B G ~
>`.pickRestart({
  A: "~ x!6 ~", B: "x!7 ~", C: "x!2 ~@2 x ~ x ~", D: "x!5 ~ x ~", E: "x!3 ~ x ~ x ~", F: "x!6 ~@2", G: "x!3 ~ x ~@3",
})).gain(0.48)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~ A@7 B A@5 ~ A@5 C A@5 ~ A@5 C A@4 D ~ A@15 C ~ E A@10 ~ A@10 C ~ A@6 C A@2 B ~
>`.pickRestart({
  A: "~@7 x", B: "~@3 x ~ x ~@2", C: "~@5 x ~ x", D: "~@3 x ~ x ~ x", E: "~@6 x!2",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct(`<
  ~ A ~@7 A ~@4 B ~@2 A ~@3 A ~@4 B ~@2 A ~@3 A ~@4 B ~@3 A ~@3 A ~@3 A ~@4 B ~@2 A ~@3 A ~@4 B ~@2 A ~@3 A ~@4 B ~@3 A
  ~@3 A ~ C A
>`.pickRestart({
  A: "x", B: "x!3 ~", C: "~@6 x!2",
})).gain(0.54)

// drums · tambourine
const tambourine = s("tb").struct(`<
  A B C@7 B C@4 D C@2 B C@3 B C@4 D C@2 B C@3 B C@4 D C@3 B C@3 B C@3 B C@4 D C@2 B C@3 B C@4 D C@2 B C@3 B C@4 D C@3 B
  C@3 B C@2 E
>`.pickRestart({
  A: "x!4", B: "~@2 x!3 ~ x!3 ~ x!3 ~ x!2", C: "x ~ x!3 ~ x!3 ~ x!3 ~ x!2", D: "~@3 x ~@2 x ~@3 x!3 ~ x!2", E: "x",
})).gain(0.41)

stack(drawbar_organ, bass, electric_guitar_jazz, synth_brass_1, kick, snare, hihat, open_hat, crash, tambourine)

More by Nomadi