Strudelify

Girl Can't Help It

Journey

KeyG majorTempo125 bpm
0:00/0:00
// Girl Can't Help It — Journey
// 125 bpm, 4/4, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: bank select 127 (Roland MT-32 map) read through the MT-32 patch table: 
// note: Full arrangement: all 122 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(125/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(`<
  ~@2 A ~ A B C B D E@2 F@2 G@2 H I E@2 F@2 G@2 H I J K J L M N O@2 P@2 Q@2 R@2 B C B D E@2 F@2 G@2 H I E@2 F@2 G@2 H I
  J K J L M N O@2 P@2 Q@2 R@2 O@2 P@2 Q@2 R@2 S@2 T@2 S@2 T@2 S@2 T@2 S@2 T@2 U@2 V@2 U@2 V W S@2 T@2 S@2 T@2 U@2 V@2
  S@2 T@2 X
>`.pickRestart({
  A: "~@4 a1@4 ~@2 a1 ~ a1@4", B: "f1 ~ f1 ~", C: "~@4 g1@2 c2 ~", D: "~@2 g1@2 a1@2 ~@2 e2@3 ~ e2@4",
  E: "[a1@4 ~@2 a1 ~ a1@4 ~@2 a1@6 ~@2 a1 ~ a1@3 ~ a1@2 ~@2]/2",
  F: "[a1@4 ~@2 a1 ~ a1@4 ~@2 a1@6 ~@2 a1 ~ a1@2 b1@2 c2@2 e2@2]/2",
  G: "[f1@4 ~@2 f1 ~ f1@4 ~@2 g1@6 ~@2 g1 ~ g1@4 c2@2 g1@2]/2", H: "f1@4 ~@2 f1 ~ f1@4 ~@2 g1@2",
  I: "~@2 g1@2 a1@2 g1@2 e2@3 ~ e2@3 ~", J: "c2 ~ c2 ~ c2 ~ c2 ~", K: "c2 ~ c2 ~ c2!3 ~", L: "c2 ~ c2!4 d2 d#2",
  M: "g#1 ~ g#1 ~ g#1 ~ g#1 ~", N: "g#1 ~ g#1!2 a#1 ~ a#1@2",
  O: "[f1@4 ~@2 f1 ~ f1@4 ~@2 f1@7 ~ f1 ~ f1@4 f2@2 e2@2]/2",
  P: "[f1@4 ~@2 f1 ~ f1@4 ~@2 f1@7 ~ f1 ~ f1@2 e2@2 d2@2 c2@2]/2",
  Q: "[a1@4 ~@2 a1 ~ a1@4 ~@2 a1@6 ~@2 a1@2 f1@2 ~@2 g1@2 ~@2]/2",
  R: "[a1@4 ~@2 a1 ~ a1@4 ~@2 a1@6 ~@2 a1 ~ a1@4 f2@2 e2@2]/2", S: "[c2@4 ~@2 c2 ~ c2@4 ~@2 c2@6 ~@2 c2 ~ c2@4 ~@4]/2",
  T: "[c2@4 ~@2 c2 ~ c2@4 ~@2 a#1@6 ~@2 a1 ~ a1@4 g1@2 f1@2]/2", U: "a#1!8", V: "g#1!8", W: "g#1!5 g1 g#1 a#1",
  X: "c2 ~@7",
})).s("gm_electric_bass_finger").gain(0.44)

// bass · electric bass finger · "Track 2" · soft notes
const bass_soft = note("<~@5 A@2 B C ~@16 D E D F G H ~@8 A@2 B C ~@16 D E D F G H ~@57>".pickRestart({
  A: "[~@6 f1 ~@7 g1@6 ~@2 g1 ~@7 g1@2]/2", B: "~@6 f1 ~@7 g1@2", C: "~@3 g1 ~@4", D: "~ c2 ~ c2 ~ c2 ~ c2",
  E: "~ c2 ~ c2 ~@3 c2", F: "~ c2 ~@6", G: "~ g#1 ~ g#1 ~ g#1 ~ g#1", H: "~ g#1 ~@6",
})).s("gm_electric_bass_finger").gain(0.24)

// chords · epiano1 · "Track 3"
const epiano1 = note(`<
  ~ A@2 B@2 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 ~@14 C@2 D@2 E@2 F@2 G@2 H@2 E@2 F@2 G@2 H@2 ~@63
>`.pickRestart({
  A: "[a4@2 b4@4 ~@2 [c4,e4]@5 ~ [b3,e4,g4]@16 e4@2, [c4,e4]@3 g4@3 ~@10]/2", // C Em C
  B: "[a4@2 b4@4 ~@2 [c4,e4]@4 ~@2 [b3,d4,g4]@17 ~, [c4,e4]@3 g4@3 ~@10]/2", // C G C
  C: "[a4@2 b4@4 ~@2 [c4,e4]@5 ~ [b3,e4]@16 e4@2, [c4,e4]@6 g4@6 ~@2 g4@15 ~@3]/2", // C E5 C
  D: "[a4@2 b4@4 ~@2 [c4,e4]@5 ~ [b3,d4,g4]@18, [c4,e4]@3 g4@3 ~@10]/2", // C G C
  E: "[a4 b4@2 ~ [c4,e4]@2 ~ [b3,e4,g4]@8 e4, [c4,e4]@3 g4@3 ~@10]/2", // C Em C
  F: "[a4 b4@2 ~ [c4,e4]@2 ~ [b3,d4,g4]@8 e4, [c4,e4]@3 g4@3 ~@10]/2", // C G C
  G: "[a4 b4@2 ~ [a3,c4]@2 ~ [b3,d4,g4]@8 e4, [a3,c4]@3 g4@3 ~@10]/2", // Am G Am
  H: "[a4 b4@2 ~ [a3,c4]@2 ~ [b3,d4,g4]@8 ~, [a3,c4]@3 g4@3 ~@10]/2", // Am G Am
})).s("gm_epiano1").gain(0.24)

// chords · synth strings 1 · "Track 4"
const synth_strings_1 = note(`<
  ~@25 A@6 B@2 C@6 ~@20 A@6 B@2 C@6 B@2 C@6 D@16 E@2 F@2 E@2 G@2 D@8 E@2 F@2 D@4 H
>`.pickRestart({
  A: "[c4@3 a#3@11 a3@2 c4@3 a#3@11 a3@2 c4@3 a#3@11 a3@2, g4@95 ~]/6", B: "[[c4,e4]@11 ~ b3@20, ~@11 d4@21]/2",
  C: "[[c4,e4]@3 [b3,d4]@5]/2", D: "[[e4,g4,c5]@7 [d4,b4]@9 ~@11 a4@5, ~@14 g4@31 ~ f4@18, ~ c4, ~@16 a#4@11 ~@5]/4",
  E: "[d#5@18 d5@13 ~, [f4,a#4]@31 ~]/2", F: "[[d#4,g#4,c5]@31 ~]/2", G: "[d#4,g#4,c5]/2", H: "[e4,g4,c5] ~@7",
})).s("gm_synth_strings_1").gain(0.34)

// chords · synth strings 1 · "Track 5"
const synth_strings_1_2 = note("<~@31 A@2 B@2 C@2 D@2 ~@26 A@2 B@2 C@2 D@2 A@2 B@2 C@2 D@2 ~@41>".pickRestart({
  A: "[[e5,g5,c6] ~@5 [e5,g5,c6] ~@5 [d5,g5,b5]@7 ~ [d5,g5] ~@3 [d5,b5]@2 [e5,d6]@2 [d5,c6]@2 ~@2, ~@10 b5 ~ g5@3 ~]/2", // C G G5 G E7 D7
  B: "[[e5,g5,c6] ~@5 [e5,g5,c6] ~@5 [d5,g5,b5]@7 ~ [d5,g5] ~@3 [d5,b5]@2 d6@2 [d5,c6]@2 ~@2, ~@10 b5 ~ g5@3 ~, ~@26 e5 ~@5]/2", // C G G5 G D7
  C: "[[e5,c6] ~@5 [e5,a5] ~@5 [d5,g5,b5]@7 ~ [d5,g5,b5] ~@3 [d5,g5] ~ e5 ~ c6@2 ~@2, a5@2 ~@4 c6@2 ~@16 b5@2 [g5,d6]@3 ~@3, ~@27 d5@2 ~@3]/2", // C A5 G G5
  D: "[[e5,a5,c6] ~@5 [e5,a5,c6] ~@5 [d5,g5,b5]@7 ~ [d5,g5,b5] ~@3 [d5,g5] ~ [e5,g5] g5 [d5,c6] ~@3, ~@12 b5 d6 ~@2]/2", // Am G G5 Em D7
})).s("gm_synth_strings_1").gain(0.32)

// chords · brass section · "Track 6"
const brass_section = note(`<
  ~@31 A@2 B@2 C@2 D@2 ~@26 B@2 E@4 F@2 E@8 G@2 H@2 G@2 H@2 G@2 H@2 G@2 H@2 I@2 J@2 K@2 L@2 G@2 H@2 G@2 H@2 I@2 J@2 G@2
  H@2 M
>`.pickRestart({
  A: "[c5 ~@5 c5 ~@5 b4@11 ~ b4@2 d5@2 c5 ~@3]/2", B: "[c5 ~@5 c5 ~@5 b4@7 ~ b4@2 ~@2 b4@2 d5@2 c5@2 ~@2]/2",
  C: "[c5 ~@5 c5 ~@5 b4@10 ~@2 b4@2 d5@2 c5 ~@3]/2", D: "[c5 ~@5 c5@2 ~@4 b4@10 ~@2 b4@2 d5@2 c5 ~@3]/2",
  E: "[c5@2 ~@4 c5@2 ~@4 b4@7 ~ b4@2 ~@2 b4@2 d5@2 c5@2 ~@2]/2",
  F: "[c5@2 ~@4 c5@2 ~@4 b4@7 ~ b4 ~@3 b4@2 d5@2 c5@2 ~@2]/2", G: "[[e5,g5,c6]@13 ~ [d5,g5,b5]@16 ~@2]/2",
  H: "[[f5,a#5,d#6]@13 ~ [f5,a#5,d6]@7 ~ [f5,a5,c6]@9 ~]/2", I: "[d#5@13 ~ d#5@4 d5@12 c5 d5]/2",
  J: "[d#5@12 f5@2 d#5@4 d5@4 c5@4 d5@4 c5 d5]/2", K: "[d#5@14 d#5@4 d5@12 c5 d5]/2",
  L: "[d#5@6 f5 d#5@2 d5@2 c5@2 d5 c5 d5]/2", M: "[e5,g5,c6] ~@7",
})).s("gm_brass_section").gain(0.08)

// other · synth brass 1 · "Track 7"
const synth_brass_1 = note("<~@85 A@4 ~@33>".pickRestart({
  A: "[~@2 e4 g4@2 c5@2 b4@2 g4@2 b4@2 d5@2 c5@17]/4",
})).s("gm_synth_brass_1").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~ [x!2]!30 [x ~@2 x!2 ~@2 x]!8 [x!2]!26 [x ~@2 x!2 ~@2 x]!56 x>").gain(0.49)

// drums · snare
const snare = s("sd").struct("<~@4 [~@3 x] [~ x ~ x]!116 ~>").gain(0.49)

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

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

// drums · mid tom
const mid_tom = s("mt").struct("<~@38 A B ~@32 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@9>".pickRestart({
  A: "~@6 x!2", B: "x",
})).gain(0.49)

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

// drums · high tom
const high_tom = s("ht").struct("<~@38 A B ~@32 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@9>".pickRestart({
  A: "~@5 x ~@2", B: "x",
})).gain(0.44)

// drums · crash
const crash = s("cr").struct(`<
  ~@25 A ~@3 A B A ~@3 A ~@3 A ~@19 A ~@3 A B A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A
  ~@3 A ~@3 A
>`.pickRestart({
  A: "x", B: "~ x",
})).gain(0.49)

// drums · ride bell
const ride_bell = s("rd").struct("<~ [~ x ~ x]!4 ~@117>").gain(0.49)

stack(
  bass, bass_soft, epiano1, synth_strings_1, synth_strings_1_2, brass_section, synth_brass_1, kick, snare, hihat,
  hihat_soft, mid_tom, open_hat, high_tom, crash, ride_bell
)

More by Journey