Strudelify

Only the Young

Journey

KeyG majorTempo144 bpm
0:00/0:00
// Only the Young — Journey
// 144 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 150 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(144/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 · electric bass finger · "Track 2"
const bass = note(`<
  ~ A B@2 C D@2 E F G@3 H B@3 I D@4 B@3 J G@3 H B@3 I D@4 B@3 J K@3 L M N B O P Q P L M@2 R S G@5 H B@3 I D@4 B@3 J K@3
  L M N B O P Q P L M@2 R S G@3 H B@3 I D@4 B@3 J K@3 L M N B O P Q P L M@2 R S G@2 K@3 L M N B O P Q P L M@2 R S G@4 T
  U V@2 ~
>`.pickRestart({
  A: "c2@4 ~@2 c2 ~ c2@3 ~@3 c2 ~", B: "c2@4 ~@2 c2 ~ c2@4 ~@2 c2 ~", C: "c2@4 ~@2 c2 ~ c2@2 d2@2 e2@2 c2@2",
  D: "a1@4 ~@2 a1 ~ a1@4 ~@2 a1 ~", E: "b1@4 ~@2 b1 ~ b1@4 ~@2 b1 ~", F: "b1@3 ~@3 b1 ~ b1 ~ b1@2 a1@2 b1@2",
  G: "d2@4 ~@2 d2 ~ d2@4 ~@2 d2 ~", H: "d2@4 ~@2 d2 ~ d2@2 e2@2 f#2@2 g2@2", I: "c2@4 ~@2 c2 ~ c2@2 e2@2 d2@2 c2@2",
  J: "c2@4 ~@2 c2 ~ c2@4 a1@2 c2@2", K: "g1@4 ~@2 g1 ~ g1@4 ~@2 g1 ~", L: "g1@4 ~@2 g1 ~ g1@4 a1@2 b1@2",
  M: "c2@4 ~@2 c2 ~ c2@5 ~@3", N: "c2@4 ~@2 c2 ~ c2@6 ~@2", O: "c2@2 ~ c2 e2 d2 c2 a1", P: "g1@4 ~@2 g1 ~ g1@5 ~@3",
  Q: "g1@4 ~@2 g1 ~ g1@6 ~@2", R: "b1@4 ~@2 b1 ~ b1@5 ~@3", S: "b1@4 ~@2 b1 ~ b1@4 g1@2 b1@2", T: "c2@5 ~ c2@2 ~@8",
  U: "c2@5 ~ c2@3 ~@5 [g1,a1,b1] ~", V: "[d1@31 ~, f1 ~@31]/2",
})).s("gm_electric_bass_finger").gain(0.49)

// chords · acoustic guitar steel · "Track 3"
const acoustic_guitar_steel = note(`<
  ~ A B C D E F G H ~ I J ~ C K@3 L@4 C B C M ~ I N ~ C K@3 L@4 C B C M O P Q P R S R S Q H O T R S U V ~@3 I J ~ C K@3
  L@4 C B C M O P Q P R S R S Q H O T R S U V ~@4 C K@3 L@4 C B C M O P Q P R S R S Q H O T R S U V ~@2 O P Q P R S R S
  Q H O T R S U V ~@9
>`.pickRestart({
  A: "~@3 g4 ~@3 f#4, g4@4 g3@5 ~ c4@6, ~ c4@3 f#4@2 g3@2", B: "~@3 e4 ~@3 f#4, e4 g3 f#4 g3, ~@2 c4@7 ~ c4@6",
  C: "~@3 g4 ~@3 f#4, g4 g3 f#4 g3, ~@2 c4@7 ~ c4@6", D: "~@3 e4 ~@2 e4 f#4, e4 g3 f#4 g3, ~@2 c4@7 ~ c4@6",
  E: "~@3 g4 ~@3 f#4, g4 a3 f#4 a3, ~@2 d4@7 ~ d4@6", F: "~@3 e4 ~@2 e4 f#4, e4 a3 f#4 a3, ~@2 d4@7 ~ d4@6",
  G: "~@3 g4 ~@3 f#4, g4 b3 f#4 b3, ~@2 d4@7 ~ d4@6", H: "~@3 e4 ~@2 e4 f#4, e4@4 b3@5 ~ d4@6, ~ d4@3 f#4@2 b3@2",
  I: "~@10 [d4,g4,a4] ~ [d4,g4,a4]@2 f#4 ~", J: "[d4,f#4,a4]@15 ~",
  K: "[~@3 e4 ~ c4 ~ f#4 ~@3 g4 ~@3 f#4 ~@3 f#4@2 ~ g3@2, e4@4 g3@6 ~@2 g3@6 c4@6 f#4@4 g3@6 c4@7 ~ [c4,g4]@6, ~@2 c4@6 f#4@4 ~@4 g4@4 g3@5 ~ c4@6 e4@6 ~@10, ~@6 g3 ~]/3", // C5
  L: "[~@3 g4 ~@3 f#4 ~@3 e4 ~@3 f#4 ~@3 g4 ~@3 f#4 ~@3 f#4@2 ~ a3@2, g4@2 a3@3 c4@3 e4@2 a3@3 c4@3 g4@2 a3@3 c4@3 e4@3 ~@5, ~@2 c4@6 f#4@4 a3@6 c4@6 f#4@4 a3@6 c4@6 f#4@4 a3@6 c4@7 ~ [c4,g4]@6, ~@26 a3@3 ~@3]/4", // C5
  M: "~@6 f#4@4 ~@2 g3@3 ~, e4@3 ~@5, ~@2 c4@7 ~ [c4,g4]@6, ~@4 g3@5 ~@7", N: "[d4,f#4,a4]@7 ~",
  O: "~@3 g4 ~@3 f#4, g4@2 b3@2 ~ d4@3, ~ d4@3 f#4@2 b3@2", P: "~@3 e4 ~@2 e4 f#4, e4@2 b3@2 ~ d4@3, ~ d4@3 f#4@2 b3@2",
  Q: "~@3 g4 ~@3 f#4, g4@4 b3@5 ~ d4@6, ~ d4@3 f#4@2 b3@2", R: "~@3 g4 ~@3 f#4, g4@2 g3@2 ~ c4@3, ~ c4@3 f#4@2 g3@2",
  S: "~@3 e4 ~@2 e4 f#4, e4@2 g3@2 ~ c4@3, ~ c4@3 f#4@2 g3@2",
  T: "~@3 e4 ~@2 e4 f#4, e4@4 b3@4 ~@2 d4@5 ~, ~ d4@3 f#4@2 b3@2",
  U: "~@3 g4 ~@3 f#4, g4@2 b3@2 ~ d4@3, ~@2 d4@5 ~ f#4@4 b3@4",
  V: "~@3 e4 ~@2 [b3,e4] f#4, e4@2 b3@2 ~ d4@2 ~, ~ d4@3 f#4@2 ~@2", // E5
})).s("gm_acoustic_guitar_steel").gain(0.16)

// chords · pad warm · "Track 4"
const pad_warm = note(`<
  ~ A@4 B@2 C@2 D@4 E@4 D@4 E@4 D@4 E@4 D@4 F@4 G@4 E@4 G@4 H@2 I@2 J@2 D@4 E@4 D@4 E@4 G@4 E@4 G@4 H@2 I@2 D@4 E@4 D@4
  F@4 G@4 E@4 G@4 H@2 I@2 K@6 E@4 G@4 H@2 I@2 J@2 D@4 ~@3
>`.pickRestart({
  A: "g3/4", B: "a3/2", C: "b3/2", D: "[a3,d4]/4", E: "[g3,c4,d4]/4", F: "[g3,c4]/4", G: "[[g3,b3,d4]@63 ~]/4",
  H: "[g3,c4,d4]/2", I: "[b3,d4]/2", J: "[a3,d4]/2", K: "[d4@32 [g3,b3,d4]@63 ~, a3@2 ~]/6",
})).s("gm_pad_warm").gain(0.24)

// chords · pad warm · "Track 4" · soft notes
const pad_warm_soft = note("<~@37 A@4 ~@14 B@2 ~@32 B@2 ~@12 A@4 ~@14 B@2 ~@16 B@2 ~@9>".pickRestart({
  A: "d4/4", B: "g3/2",
})).s("gm_pad_warm").gain(0.15)

// drums · kick
const kick = s("bd").struct("<~ A@7 B A@15 B A@15 B A@15 B A B A@15 B A@15 B A@15 B A@33 B A@4 C@2 D ~@2>".pickRestart({
  A: "x ~@2 x!2 ~@2 x", B: "x ~@3 x!4", C: "x ~@2 x ~@4", D: "x",
})).gain(0.34)

// drums · snare
const snare = s("sd").struct(`<
  ~ A@7 B A@15 B A@15 B A@15 B A B A@15 B A@15 B A@15 B A@33 B A@4 C@2 D ~@2
>`.pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@3 x!2", C: "x ~@2 x ~@4", D: "x",
})).gain(0.49)

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@8 A ~@15 A ~@15 A ~@15 A ~ A ~@15 A ~@15 A ~@15 A ~@33 A ~@9>".pickRestart({
  A: "~@4 x!2 ~@2",
})).gain(0.24)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct(`<
  ~ A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A C A C
  A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A B A B A B A B A C A B A B A B A B A B A
  B A B A B A B A B A B A B A B A B A B A B A C A B A B ~@5
>`.pickRestart({
  A: "~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~@2", C: "~ x ~@6",
})).gain(0.19)

// drums · open hat
const open_hat = s("oh").struct(`<
  ~@8 A ~@15 A ~@15 A ~@15 A ~ A ~@15 A ~@15 A ~@15 A ~@33 A ~@4 B@2 C ~@2
>`.pickRestart({
  A: "~ x!3", B: "x ~@2 x ~@4", C: "x",
})).gain(0.44)

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

// drums · ride
const ride = s("rd").struct("<~@147 [~@5 x ~ x ~ x ~@2 x ~ x ~] [~@2 x ~@3 x ~@3 x ~@4 x] [~@2 x ~@2 x ~@2]>")
  .gain(0.19)

stack(
  bass, acoustic_guitar_steel, pad_warm, pad_warm_soft, kick, snare, snare_soft, hihat, hihat_soft, open_hat, crash,
  ride
)

More by Journey