Strudelify

By The Time I Get To Phoenix

Glen Campbell

KeyB♭ majorTempo85 bpm
0:00/0:00
// By The Time I Get To Phoenix — Glen Campbell
// 85 bpm, 4/4, key A# major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 60 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(85/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.

// other · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note("<~@35 A B C D@2 E F G@2 ~@16>".pickRestart({
  A: "~@6 d2 eb2", B: "f2@5 f2!3", C: "f2 f2@5 eb2 bb2", D: "[bb2 g2@13 d2 eb2]/2", E: "f2@3 f2 f2@2 f2!2",
  F: "f2@2 f2@3 eb2 bb2@2", G: "[g2@7 ~]/2",
})).s("gm_electric_guitar_clean").gain(0.5).pan(0.2)

// other · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel = note("<~@35 A B C D@2 E F G@2 ~@16>".pickRestart({
  A: "~@6 d3 eb3", B: "f3@5 f3!3", C: "f3 f3@5 eb3 bb3", D: "[bb3 g3@13 d3 eb3]/2", E: "f3@3 f3 f3@2 f3!2",
  F: "f3@2 f3@3 eb3 bb3@2", G: "[g3@7 ~]/2",
})).s("gm_acoustic_guitar_steel").gain(0.5).pan(0.9)

// chords · acoustic guitar steel · "STEEL GTR"
const acoustic_guitar_steel_2 = note(`<
  ~@4 A@2 B C A@2 B C D E F G H I J K A@2 B C A@2 B C D E F G H I J K A@2 B C A@2 B C D E F G L M C N L O P E P E Q@2
>`.pickRestart({
  A: "~ [f3,ab3,c4] ~ [f3,ab3,c4], bb2!2", B: "~ [g3,bb3,d4] ~ [g3,bb3,d4], eb3 bb2",
  C: "~ [g3,bb3,d4] ~ [g3,bb3,d4], eb3!2", D: "~ [ab3,c4,eb4] ~ [g3,c4,eb4], ab2!2",
  E: "~ [f3,bb3,d4] ~ [f3,bb3,d4], bb2!2", F: "~ [g3,bb3,d4] ~ [g3,bb3,d4], g2!2",
  G: "~ [g3,c4,eb4] ~ [g3,c4,eb4], c3!2", H: "~ [f3,ab3,c4] ~ [f3,ab3,c4], f2 c3",
  I: "~ [f3,ab3,c4] ~ [f3,ab3,c4], f2!2", J: "~ [ab3,db4,f4] ~ [ab3,db4,f4], db3!2",
  K: "~ [f3,ab3,d4] ~ [f3,ab3,d4], bb2 f2", L: "~ [ab3,c4,f4] ~ [ab3,c4,f4], f2!2",
  M: "~ [ab3,d4,f4] ~ [ab3,d4,f4], bb2!2", N: "~ [g3,c4,eb4] ~ [g3,c4,eb4], ab2!2",
  O: "~ [g3,b3,d4] ~ [g3,b3,d4], g2!2", P: "~ [g3,c4,e4] ~ [g3,c4,e4], c3!2", Q: "[~ [c3,g3,c4,e4]@23 ~@8]/2",
})).s("gm_acoustic_guitar_steel").gain(0.12).pan(0.7)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1 = note("<~@6 A B ~@2 C D E ~@9 A B ~@2 C D E ~@9 A B ~@2 C D E ~@15>".pickRestart({
  A: "~@6 eb5 bb5", B: "bb5 g5@7", C: "~@8 f5@3 eb5@2 bb5@3", D: "g5@10 eb5 f5 g5 ab5 bb5 b5", E: "c6",
})).s("gm_string_ensemble_1").gain(0.21).pan(0.2)

// other · string ensemble 1 · "STRINGS"
const string_ensemble_1_2 = note("<A@3 B C ~@9 D E ~@2 A B C ~@9 D E ~@2 A B C ~@9 D E ~@4 F C ~@6>".pickRestart({
  A: "[eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5] [eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5] [eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5] [eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5]", // Eb D C Bb Eb D C Bb …
  B: "[eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5] [eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5] [eb5,eb6] [d5,d6] [c5,c6] [bb4,bb5] [ab4,ab5] [g4,g5] [f4,f5] [eb4,eb5]", // Eb D C Bb Eb D C Bb …
  C: "[f4,f5]", D: "[g4,g5]@3 [d5,d6]", E: "[c5,c6]", F: "~@5 [eb4,eb5]@3 [eb4,eb5]@3 [f4,f5]@2 [g4,g5]@3",
})).s("gm_string_ensemble_1").gain(0.1).pan(0.6)

// bass · electric bass pick · "PICK BASS"
const bass = note(`<
  A@3 B C@2 D E C@2 D E F C G H I J K L C@2 D E C@2 D E F C G H I J K L C@2 D E C@2 D E F C G H J C E F J G H C H C M@2
>`.pickRestart({
  A: "eb2 bb2@2 bb1", B: "eb2 bb2 bb1 ~", C: "bb1!2", D: "eb2 bb1", E: "eb2!2", F: "ab1!2", G: "g1!2", H: "c2!2",
  I: "f1 c2", J: "f1!2", K: "db2!2", L: "bb1 f1", M: "[~ c2@23 ~@8]/2",
})).s("gm_electric_bass_pick").gain(0.24).pan(0.2)

// chords · string ensemble 1 · "STRINGS"
const string_ensemble_1_3 = note(`<
  A B A C D@2 E@2 D@2 E@2 F G H I D@2 J G D@2 E@2 D@2 E@2 F G H I D@2 J G D@2 E@2 D@2 E@2 F G H I K G L M N O P Q P Q
  R@2
>`.pickRestart({
  A: "eb3 bb3@2 [bb2,eb5], [g4,bb4], d5@3 ~", B: "eb3 bb3@2 [bb2,f5], [f4,ab4], c5@3 ~",
  C: "eb3 bb3 bb2 ~, [f4,ab4,c5]@3 ~", D: "[ab4,c5,f5]/2", E: "[g4,bb4,d5]/2", F: "[ab4,c5,eb5]", G: "[ab4,d5,f5]",
  H: "g5@3 d6, [bb4,d5]", I: "[c5,eb5,c6]", J: "[ab4,db5,f5]", K: "[ab4,c5,f5]", L: "[g4,bb4,d5]", M: "[g4,c5,eb5]",
  N: "[f4,ab4,c5]", O: "[g4,b4,d5]", P: "[g4,c5,e5]", Q: "[f4,bb4,d5]", R: "[~ [g4,c5,e5]@23 ~@8]/2",
})).s("gm_string_ensemble_1").gain(0.1).pan(0.2)

// other · oboe
const oboe = note(`<
  ~@3 A B C D@2 E F G@2 H I J@2 K L M@2 B C D@2 E F G@2 H I J@2 K L N@2 ~@7 O P Q R S T U V@2 W@2 X@2 Y@4
>`.pickRestart({
  A: "~@6 d4 eb4", B: "f4@5 f4!3", C: "f4 f4@5 eb4 bb4", D: "[bb4 g4@13 d4 eb4]/2", E: "f4@3 f4 f4@2 f4!2",
  F: "f4@2 f4@3 eb4 bb4@2", G: "[g4@14 g4 bb4]/2", H: "c5@3 c5 c5@3 c5", I: "c5 ab4 bb4 c5",
  J: "[bb4 bb4@12 f4@2 g4]/2", K: "ab4@3 ab4 ab4@3 ab4", L: "g4!2 f4@4 eb4@2", M: "[f4@14 d4 eb4]/2", N: "[f4@7 ~]/2",
  O: "~@10 eb4 f4 g4 ab4 bb4 b4", P: "c5@5 ~ c5@2 c5@6 c5@2", Q: "c5@2 ab4@8 bb4@3 c5@3",
  R: "bb4@3 bb4@9 d5@3 ~, ~@12 db5 ~@3", S: "c5@10 bb4@3 g4@3", T: "ab4@5 ~ ab4@2 ab4@6 g4@2",
  U: "ab4@11 g4 ab4 g4 ab4 bb4", V: "[~ g4@21 eb4@2 eb4@2 ~ f4@2 g4@2 ~]/2", W: "[f4@23 ~ f4@2 eb4@2 d4@2 ab4@2]/2",
  X: "[g4@7 f4]/2", Y: "[g4@28 bb4@5 g4@23 ~@8]/4",
})).s("gm_oboe").gain(0.21)

// drums · kick
const kick = s("bd").struct("<x!4 [x!2]!54 [~ x ~@14] ~>").gain(0.19)

// drums · rim
const rim = s("rim").struct("<~@4 [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!17 [~ x ~@2] ~@6>").gain(0.25)

// drums · snare
const snare = s("sd").struct("<[~ x ~ x]!3 [~ x ~@2] ~@50 [~ x ~ x]!3 [~ x ~@2] ~@2>").gain(0.19)

// drums · mid tom
const mid_tom = s("mt").struct("<~@3 A ~@15 B ~@15 B ~@17 B ~@3 C ~@2>".pickRestart({
  A: "~@7 x", B: "~@6 x!2", C: "~@12 x ~@2 x",
})).gain(0.29)

// drums · high tom
const high_tom = s("ht").struct("<~@3 A ~@15 B ~@15 B ~@17 B ~@3 B ~@2>".pickRestart({
  A: "~@10 x!3 ~@3", B: "~@10 x!2 ~@4",
})).gain(0.29)

// drums · crash
const crash = s("cr").struct("<~@4 A ~@15 A ~@7 A ~@7 A ~@7 A ~@9 A ~@3 B ~>".pickRestart({
  A: "x", B: "~ x ~@14",
})).gain(0.19)

// drums · ride
const ride = s("rd").struct(`<
  [x!8]!3
  [x!5 ~@3]
  ~@50
  [~@2 x ~ x ~ x!3 ~ x!6]
  [x ~ x ~ x ~ x!3 ~ x!6]
  [x ~ x!3 ~ x!3 ~ x!6]
  [x ~ x!3 ~ x!3 ~@7]
  ~@2
>`).gain(0.13)

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

stack(
  electric_guitar_clean, acoustic_guitar_steel, acoustic_guitar_steel_2, string_ensemble_1, string_ensemble_1_2, bass,
  string_ensemble_1_3, oboe, kick, rim, snare, mid_tom, high_tom, crash, ride, tambourine
)

More by Glen Campbell