Strudelify
Travelin' Man cover art

Travelin' Man

Ricky Nelson

KeyD majorTempo120 bpm
0:00/0:00
// Travelin' Man — Ricky Nelson
// 120 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 73 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.

// bass · acoustic bass · "ACOU BASS"
const bass = note(`<
  A B C D E F G D E H I J K B L M E H N O@2 P Q R S P Q T U B E V E H W X K B L M E H N O@2 P Q R S P Q T U B E V E H W
  X K B C D E B C D E H W X ~
>`.pickRestart({
  A: "~@5 a1 b1 c#2", B: "d2@4 ~@2 a2@3 ~ f#2@2 a2@2 a#2@2", C: "b2@2 ~ f#2 ~ f#2 b2 a#2", D: "a2@2 ~ f#2 ~ f#2 a2 a#2",
  E: "b2@5 ~ f#2@2 ~@2 f#2@2 b2@2 a#2@2", F: "a2@4 ~@2 f#2@3 ~ f#2@2 a2 ~ a#2@2",
  G: "b2@4 ~@2 f#2@2 ~@2 f#2@2 b2@2 a#2 ~", H: "d2@4 ~@2 d2@2 f#2@5 ~ f#2@2", I: "g2@5 ~ g2@2 ~@2 g2@2 f#2@2 e2 ~",
  J: "d2 ~ d2 ~ a1!2 ~ d2", K: "~@2 a1 ~ a1 ~ a1 ~ a1 ~ a1@2 b1@2 c#2@2", L: "b2@4 ~@2 f#2@3 ~ f#2@2 b2@2 a#2@2",
  M: "a2@4 ~@2 f#2@2 ~@2 f#2@2 a2 ~ a#2@2", N: "g2@4 ~@2 g2@2 ~@2 g2 ~ f#2@2 e2@2",
  O: "[d2@2 ~@2 d2@2 ~@2 a1@2 ~@2 a1@2 d2@4 ~@2 d2 ~ d2@2 e2 ~ e2 ~ f#2 ~ f#2@2]/2",
  P: "g2@4 ~@2 g2@2 ~@2 g2@2 d2@2 g2 ~", Q: "f#2@2 ~ f#2 ~ f#2 c#2 f#2", R: "g2@2 ~ g2 ~ g2 d2 g2, f#2 ~@15",
  S: "d2@3 ~ d2 ~ d2 ~ e2 ~ e2@2 f#2 ~ f#2 ~", T: "e2@2 ~ e2 ~ e2 ~ e2", U: "a2@2 a2 ~ g2@2 g2 ~ f#2 ~ f#2 ~ e2 ~ e2 ~",
  V: "a2@4 ~@2 f#2@3 ~ f#2@2 a2@2 a#2@2", W: "g2@2 ~ g2 ~ g2 f#2 e2", X: "d2@2 ~@2 d2@2 ~@2 a1 ~ a1@2 ~@2 d2@2",
})).s("gm_acoustic_bass").gain(0.35)

// other · piano · "A.PIANO"
const piano = note(`<
  ~ A B C B C B C B D E F G C B C B D E H I J K L M N O P Q C R C B D S T U V B C B D E W X N K E Y N Z P AA C B C B AB
  E AC G C B C B C B C AD D E F ~
>`.pickRestart({
  A: "~@2 a5 f#5 d5@2 f#5@2 a5@2 d5@2 f#5@2 a5@2", B: "d5@2 b5 f#5 d5@2 f#5@2 b5@2 d5@2 f#5@2 b5@2",
  C: "d5@2 a5 f#5 d5@2 f#5@2 a5@2 d5@2 f#5@2 a5@2", D: "d5@2 a5 f#5 d5@2 f#5@2 c6@2 d5@2 f#5@2 c6@2",
  E: "d5@2 b5 g5 d5@2 g5@2 b5@2 ~@2 g5@2 b5 ~, ~@5 d5@2 ~",
  F: "[f#5,a5] ~@3 a5@2 ~@2 [e5,g5] ~ [e5,g5]@2 ~@2 [d5,f#5] ~, ~@4 f#5 ~@11", // F#m Em D
  G: "~@2 a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~ a5 ~",
  H: "[f#5,a5]@2 ~@2 [f#5,a5]@2 ~@2 [e5,g5]@3 ~ [e5,g5]@2 f#5@2, ~@14 d5 ~", I: "~@4 d5 ~ d5 ~ e5 ~ e5 ~ f#5 ~ f#5 ~",
  J: "d5@2 b5 g5 d5@2 g5@2 b5@2 d5@2 ~@2 b5@2, ~@3 g5",
  K: "c#5@2 a5 ~ c#5@2 f#5@2 a5@2 ~@2 f#5@2 a5@2, ~@3 f#5@2 ~@5 c#5@4 ~@2",
  L: "d5@2 b5 g5 d5@2 g5@2 b5@2 ~@4 b5@2, ~@5 d5@2 ~, ~@3 g5", M: "d5@3 ~ d5 ~ d5@2 e5@2 e5@2 f#5 ~ f#5@2",
  N: "d5@2 b5 g5 d5@2 g5@2 b5@2 ~@2 g5@2 b5@2, ~@5 d5@2 ~",
  O: "c#5@2 a5 f#5 c#5@2 f#5@2 a5@2 ~@2 f#5@2 a5@2, ~@5 c#5@2 ~", P: "b4@2 g#5 e5 b4@2 e5@2 g#5@2 b4@2 e5@2 g#5@2",
  Q: "a5 ~ a5@2 g5@2 g5@2 f#5 ~ f#5@2 e5 ~ e5@2", R: "d5@2 b5 f#5 d5@2 f#5@2 b5@2 d5@2 ~@2 b5@2, ~@3 f#5",
  S: "d5@2 b5 g5 d5@2 g5@2 b5@2 d5@2 g5@2 b5 ~",
  T: "[f#5,a5] ~@3 [f#5,a5]@2 ~@2 e5@2 [e5,g5]@2 ~@2 [d5,f#5] ~, ~@8 g5 ~@7", // F#m Em D
  U: "~@2 [e5,a5] ~ [e5,a5] ~ [e5,a5] ~ [e5,a5] ~ [e5,a5] ~ [e5,a5] ~ [e5,a5] ~", // A5
  V: "d5@2 a5 f#5 d5@2 f#5@2 a5@2 ~@2 f#5@2 a5@2, ~@14 f#5 ~",
  W: "[f#5,a5] ~@3 [f#5,a5]@2 ~@2 [e5,g5] ~ [e5,g5]@3 ~ d5@2, ~@14 f#5 ~", X: "~@4 d5 ~ d5 ~ e5 ~ e5 ~ f#5 ~ f#5@2",
  Y: "a5@4 d5 ~ d5 ~ e5 ~ e5 ~ f#5 ~ f#5@2", Z: "c#5@2 a5 f#5 c#5@2 f#5@2 a5@2 ~@2 f#5@2 a5@2, ~@10 c#5@4 f#5 ~",
  AA: "a5 ~ a5@2 g5 ~ g5 ~ f#5 ~ f#5 ~ e5 ~ e5@2", AB: "d5@2 a5 f#5 d5@2 f#5 ~ c6@2 d5@2 f#5@2 c6@2",
  AC: "[f#5,a5] ~@3 [f#5,a5]@2 ~@2 [e5,g5]@2 [e5,g5]@2 ~@2 d5@2, ~@14 f#5 ~", // F#m Em
  AD: "d5@2 b5 f#5 d5@2 f#5@2 b5@2 ~@2 f#5@2 b5@2, ~@5 d5@2 ~",
})).s("gm_piano").gain(0.28).pan(0.3)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note(`<
  ~ A B A B A B A B C D E F A B A B C D G H D I J K D I L M A B A B C D N F A B A B C D O P D I D P Q R S T A B A U C D
  V F A B A U A B A B C D W ~
>`.pickRestart({
  A: "~@4 [a3,d4,f#4] ~ [a3,d4,f#4] ~@5 [a3,d4,f#4] ~ [a3,d4,f#4] ~", // D
  B: "~@4 [b3,d4,f#4] ~ [b3,d4,f#4] ~@5 [b3,d4,f#4] ~ [b3,d4,f#4] ~", // Bm
  C: "~@4 [a3,d4,f#4] ~ [a3,d4,f#4] ~@5 [a3,c4,f#4] ~ [a3,c4,f#4] ~", // D F#dim
  D: "~@4 [b3,d4,g4] ~ [b3,d4,g4] ~@5 [b3,d4,g4] ~ [b3,d4,g4] ~", // G
  E: "[a3,d4,f#4]@2 ~@2 [a3,d4,f#4] ~@3 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@2 [a3,d4] ~", // D A D5
  F: "~@2 a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~ a3 ~",
  G: "[a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,c#4,e4]@2 ~@2 [a3,c#4,e4] ~ [a3,d4,f#4]@2", // D A D
  H: "~@4 [a3,d4,f#4] ~ [a3,d4,f#4]@2 ~@4 [a3,d4,f#4]@2 ~@2", // D
  I: "~@4 [a3,c#4,f#4] ~ [a3,c#4,f#4] ~@5 [a3,c#4,f#4] ~ [a3,c#4,f#4] ~", // F#m
  J: "~@4 [b3,d4,f#4,g4] ~ [b3,d4,g4] ~@5 [b3,d4,g4] ~ [b3,d4,g4] ~", // Gmaj7 G
  K: "~@4 [a3,d4,f#4] ~ [a3,d4,f#4] ~@5 [a3,d4,f#4]@2 ~@2", // D
  L: "~@4 [b3,e4,g#4] ~ [b3,e4,g#4] ~@5 [b3,e4,g#4] ~ [b3,e4,g#4] ~", // E
  M: "~@4 [c#4,e4,a4] ~ [c#4,e4,a4] ~@5 [c#4,e4,a4] ~ [c#4,e4,a4]@2", // A
  N: "[a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@2 [a3,d4,f#4] ~", // D A D
  O: "[a3,d4,f#4] ~@3 [a3,d4,f#4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@2 [a3,d4,f#4] ~", // D A D
  P: "~@4 [a3,d4,f#4] ~ [a3,d4,f#4] ~@5 [a3,d4,f#4] ~@3", Q: "~@4 [b3,d4,g4] ~ [b3,d4,g4] ~@5 [b3,d4,g4] ~@3",
  R: "~@4 [a3,c#4,f#4] ~ [a3,c#4,f#4] ~@5 [a3,c#4,f#4]@2 ~@2", S: "~@4 [b3,e4,g#4] ~ [b3,e4,g#4] ~@5 [b3,e4,g#4]@2 ~@2",
  T: "~@4 [c#4,e4,a4] ~ [c#4,e4,a4] ~@5 [c#4,e4,a4] ~ [c#4,e4,a4] ~", // A
  U: "~@4 [b3,d4,f#4] ~ [b3,d4,f#4]@2 ~@4 [b3,d4,f#4] ~ [b3,d4,f#4] ~", // Bm
  V: "[a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@2 [a3,d4] ~", // D A D5
  W: "[a3,d4,f#4]@2 ~@2 [a3,d4,f#4]@2 ~@2 [a3,c#4,e4] ~ [a3,c#4,e4]@2 ~@2 [a3,d4,f#4]@2", // D A D
})).s("gm_acoustic_guitar_steel").gain(0.28).pan(0.7)

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@36 A B C D@2 E F G ~@29>".pickRestart({
  A: "~@12 f#3@2 a3 ~", B: "b3@3 ~ a3 ~ f#3 ~ a3@4 f#3@2 a3 ~", C: "f#3@2 e3@2 d3@2 b2@2 d3@3 ~ [e3,f#3] ~ a3 ~",
  D: "[b3@2 a3 ~ a3@2 f#3@2 a3@2 b3@2 a3 ~ b3@10 ~@2 a3@2 b3@2 d4 ~]/2", E: "f#4 ~@3 e4@2 d4@2 e4@2 d4@2 b3@2 d4@2",
  F: "b3 ~ a3 ~@3 g3 ~@3 d3@2 e3@2 d3 ~", G: "f#3 ~ a3 ~ e3!2 ~ d3",
})).s("gm_electric_guitar_clean").gain(0.56)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!71 ~>").gain(0.51)

// drums · snare
const snare = s("sd").struct("<~ A@10 B C A@6 D A@15 B C A@6 B E A@3 F A@10 B C A@10 B ~>".pickRestart({
  A: "~@2 x!2 ~@2 x ~", B: "x ~ x ~ x!2 ~ x", C: "~@2 x ~ x ~ x ~ x ~ x ~ x ~ x!2", D: "x ~ x ~ x ~ x!2",
  E: "~@2 x ~ x ~@2 x!2 ~ x ~ x!3 ~", F: "~@4 x ~ x ~@5 x!4",
})).gain(0.51)

// drums · hihat
const hihat = s("hh").struct("<~ [x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~]!71 ~>").gain(0.36)

// drums · tambourine
const tambourine = s("tb").struct(`<
  ~ A@10 B C A@4 D A E F A@14 G C A@6 B C H D H I A@7 D A H B C A@10 B ~
>`.pickRestart({
  A: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x ~", B: "x ~ x ~ x!2 ~ x", C: "~ x!7", D: "x!8", E: "x ~ x ~ x ~ x!2", F: "~ x!2 ~@5",
  G: "x ~ x!3 ~ x ~ x ~ x ~@3 x ~", H: "x ~ x!2 ~@2 x ~ x ~ x ~ x ~ x ~", I: "x ~ x!6",
})).gain(0.26)

stack(bass, piano, acoustic_guitar_steel, electric_guitar_clean, kick, snare, hihat, tambourine)

More by Ricky Nelson