Strudelify

Miles Away

Winger

KeyF majorTempo92 bpm
0:00/0:00
// Miles Away — Winger
// 92 bpm, 4/4, key F major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 9 electric bass finger (copy of ch 8 acoustic bass)
// note: Full arrangement: all 36 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(92/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 · piano
const piano = note("<A B C D E F C D G H I J K L ~@8 M N C D E F C D G H I J K L>".pickRestart({
  A: "[f5,a5] ~ c5 ~ f4 ~ g5 ~ c5 ~ g4 ~ a5 ~ a4 ~", B: "f5 ~ f4 ~ c5 ~ g5 ~ g4 ~ c5 ~ a5@3 ~",
  C: "[d4,c5,f5] ~ d4 ~ c5 ~ f4 ~ d4 ~ f4 ~ c5 ~ d5 ~", D: "[bb3,f4,c5] ~ bb4 ~ f4 ~ g5 ~ bb4 ~ g4 ~ f5 ~ d5 ~",
  E: "[c4,g4,bb4,e5] ~ g4 ~ c5 ~ [g4,d5] ~ c5 ~ e5 ~ g4 ~ c5 ~", // C7 G5
  F: "[bb4,f5,bb5]@3 ~ bb4 c5 f5 ~ [a4,c5,f5] ~ f4 ~ [e4,e5] ~ g5 ~", // Bb5 F E
  G: "[c4,g4,c5,e5] ~ g4 ~ c5 ~ [g4,d5] ~ c5 ~ e5 ~ g4 ~ c5 ~", // C G5
  H: "[bb4,f5,bb5]@3 ~ bb4 c5 f5 ~ [f4,a4,c5,f5]@3 ~ [f4,c5]@3 ~", // Bb5 F F5
  I: "[a3,f4,a4,c5]@4 ~@2 [bb3,f4,bb4,d5,f5]@4 ~@2 [d5,f5]@3 ~", // F Bb Dm
  J: "[bb4,d5,f5]@2 ~ [bb4,c5,f5] ~ [bb4,d5,f5]@2 ~ [a4,d5,f5]@3 ~ [g4,d5,f5]@3 ~", // Bb Bbsus2 Bb Dm G7
  K: "[a3,g4,c5,g5]@3 ~ a5 ~ [bb3,bb4,d5,f5]@3 ~ d5 ~ c5@3 ~", // Am7 Bb
  L: "[bb3,f4,c5,d5]@2 ~ [bb3,f4,c5,d5]@2 ~ [f4,g4,d5] ~ [c4,g4,c5,f5,bb5]@2 ~ [c5,d5] [c5,d5,g5] ~ g4 ~", // Bb G7 Csus4 Csus2
  M: "[f4,c5,f5] ~ f4 ~ c6 ~ g5 ~ g4 ~ c6 ~ a5 ~ a4 ~", N: "[f4,c5,f5] ~ f4 ~ c6 ~ g5 ~ g4 ~ c5 ~ [a4,a5]@3 ~",
})).s("gm_piano").gain(0.41).pan(0.4)

// chords · acoustic guitar nylon
const acoustic_guitar_nylon = note("<~@28 A B C D E F G H>".pickRestart({
  A: "[d4,a4,d5,f5,a5]@4 ~@2 [d4,a4,d5,f5,a5] ~ [d4,a4,d5,f5,a5] ~ [d4,a4,d5,f5,a5]@3 ~ [d4,a4,d5,f5,a5] ~", // Dm
  B: "[bb3,f4,bb4,d5]@3 ~ [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5] ~", // Bb
  C: "[c4,g4,c5,e5]@3 ~ [c4,g4,c5,e5] ~ [c4,g4,c5,e5] ~ [c4,g4,c5,e5] ~ [c4,g4,c5,e5] ~ [c4,g4,c5,e5] ~ [c4,g4,c5,e5] ~", // C
  D: "[f3,f4,bb4,d5]@4 ~@2 [f3,f4,a4,c5] ~ [f3,f4,a4,c5]@3 ~ [f3,f4,a4,c5]@3 ~", // Bb F
  E: "[a3,f4,a4,c5]@4 ~@2 [bb3,f4,bb4,d5]@4 ~@2 [bb3,f4,bb4,d5]@3 ~", // F Bb
  F: "[bb3,f4,bb4,d5]@2 ~ [bb3,f4,bb4,d5]!2 ~ [bb3,f4,bb4,d5] ~ [bb3,f4,bb4,d5]!3 ~ [bb3,f4,bb4,d5]!3 ~", // Bb
  G: "[a3,f4,a4,c5]@3 ~ [a3,f4,a4,c5] ~ [bb3,f4,bb4,d5]@4 ~@2 [bb3,f4,bb4,d5]@3 ~", // F Bb
  H: "[bb3,f4,bb4,d5]@2 ~ [bb3,f4,bb4,d5]!2 ~ [bb3,f4,bb4,d5]!2 [c4,g4,c5,e5]!3 ~ [c4,g4,c5,e5]@3 ~", // Bb C
})).s("gm_acoustic_guitar_nylon").gain(0.41).pan(0.6)

// chords · synth strings 1
const synth_strings_1 = note("<A B C D E F C D E G H@2 I J ~@8 A B C D E F C D E G H@2 I J>".pickRestart({
  A: "~@8 c5 ~ g4@3 ~ g4 ~, [f3,c4,f4]@11 ~@5", B: "[f3,c4,f4,a4]@5 ~@3 g4 ~ [g3,g4] ~ [a3,a4]@3 ~",
  C: "[d4,a4,d5,f5,a5]@11 ~@5", D: "[bb3,f4,bb4,d5]@11 ~@5", E: "[c4,g4,c5]@11 ~@5",
  F: "[f3,f4,bb4,d5]@5 ~@3 [f3,f4,a4,c5]@3 ~ e4@3 ~", G: "[f3,f4,bb4,d5]@5 ~@3 [f3,f4,a4,c5]@5 ~@3",
  H: "[[a3,f4,a4,c5]@4 ~@2 [bb3,f4,bb4]@21 ~@5]/2", I: "[a3,f4,g4,c5]@4 ~@2 [f4,c5,d5]@5 ~@5",
  J: "[f4,c5,d5]@2 ~ [f4,c5,d5]@2 ~ [f4,c5,d5] ~ [c4,g4,c5,d5,g5]@3 ~ [c4,g4,c5,d5,g5]@3 ~", // Dm7 Csus2
})).s("gm_synth_strings_1").gain(0.36)

// chords · distortion guitar
const distortion_guitar = note("<~@14 A B C D E F G@2 ~@14>".pickRestart({
  A: "[c4,g4,c5,e5]@3 ~ [c4,g4,c5,e5] ~ [d4,a4,d5,f5]@4 ~@2 [d4,a4,d5,f5]@3 ~", // C Dm
  B: "[bb3,f4,bb4,d5]@3 ~ [bb4,d5] ~ [f3,c4,f4,a4,c5]!3 ~ [c5,f5] ~ [c4,g4,c5,e5]@3 ~", // Bb F F5 C
  C: "[c4,g4,c5,e5] ~ [c4,g4]!2 [c4,g4,c5,e5] ~ [d4,a4,d5,f5]@3 ~ [g4,c5,e5] ~ [g4,c5,e5] ~ [bb3,f4,bb4,d5]@2", // C C5 C Dm C Bb
  D: "~@2 f4 ~ [f3,c4] ~ [c4,g4,c5,f5] [c4,g4,c5,e5] ~ [c4,g4] [c5,f5] g4 e5 c5 g4 ~", // F5 Csus4 C C5 F5
  E: "[c4,g4,c5,e5]@3 ~ [c4,g4,bb4,e5] ~ [d4,a4,d5,f5]@4 ~@2 [d4,a4,d5,f5]@3 ~", // C C7 Dm
  F: "[bb3,f4,bb4,d5] ~ [bb3,f4] ~ [bb4,d5] ~ [f3,c4,f4,a4,c5]!3 ~ [c4,g4,c5] ~ [c4,g4,c5,e5]@3 ~", // Bb Bb5 Bb F C5 C
  G: "[[g3,d4,g4]@3 ~ g3!2 [d4,a4,d5,f5]@4 ~@2 [c4,g4,c5,e5] ~ [bb3,f4,bb4,d5]@13 ~@5]/2", // G5 Dm C Bb
})).s("gm_distortion_guitar").gain(0.41)

// bass · electric bass pick
const bass = note("<~@10 A@4 B C D@2 B E F@2 G@2 H ~@11>".pickRestart({
  A: "[a2@4 ~@2 bb2@21 ~@5]/2", B: "c2@4 ~@2 d2@5 ~@5", C: "bb1@4 ~@2 f1!2 f1@3 ~ c2@4",
  D: "[~@2 c2!3 ~ d2@3 ~ c2@3 ~ bb1@5 ~ f1 ~ c2 ~ c2@3 ~ c2!3 ~]/2", E: "bb1@4 ~@2 f1!2 f1@3 ~ c2 ~ c2 ~",
  F: "[g1@3 ~ g1!2 d2@4 ~@2 c2 ~ bb1@13 ~@5]/2", G: "[f1@21 ~@5 g1 ~ a1@3 ~]/2", H: "d2 ~@3",
})).s("gm_electric_bass_pick").gain(0.41)

// bass · acoustic bass
const bass_2 = note("<~@10 A@4 B C D@2 E F G@2 H@2 I ~@11>".pickRestart({
  A: "[a1@4 ~@2 bb1@21 ~@5]/2", B: "c1@4 ~@2 d1@5 ~@5", C: "bb1@4 ~@2 f1!2 f1@3 ~ c2@4",
  D: "[~@2 c2!3 ~ d2@3 ~ c2@3 ~ bb1@5 ~ f1 ~ c2 ~ c2@3 ~ c2!3 ~]/2", E: "c2@4 ~@2 d2@5 ~@5",
  F: "bb1@4 ~@2 f1!2 f1@3 ~ c2 ~ c2 ~", G: "[g1@3 ~ g1!2 d2@4 ~@2 c2 ~ bb1@13 ~@5]/2", H: "[f1@21 ~@5 g1 ~ a1@3 ~]/2",
  I: "d2 ~@3",
})).s("gm_acoustic_bass").gain(0.41)

stack(piano, acoustic_guitar_nylon, synth_strings_1, distortion_guitar, bass, bass_2)