Strudelify

Up Up and Away

Fifth Dimension

KeyG majorTempo130 bpm
0:00/0:00
// Up Up and Away — Fifth Dimension
// 130 bpm, 2/2, key G major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 "French Horn (Duet)" french horn (copy of ch 1 "Trombone" trombone); ch 6 "Acc. Bass" acoustic bass (copy of ch 3 "Fretless Bass" fretless bass); ch 7 "Solo Vox" lead 6 voice (copy of ch 8 "Choir Aah's" choir aahs)
// note: Full arrangement: all 94 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(130/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 · brass section · "Brass"
const brass_section = note(`<
  A@2 B@2 C@2 D@4 E@6 F@2 G H I@2 J@2 A@2 B@2 C@2 D@4 E@6 F@2 G H I@4 K L M@2 N@2 O@2 P Q R@2 S@2 T@2 A@2 B@2 C@2 D@4
  E@6 F@2 G H I@10
>`.pickRestart({
  A: "[d4@2 d4 g4@3 a4 b4@6 b4 b4@2, b3@3 [b3,d4]@4 [d4,g4]@9]/2", // Bm G5
  B: "[b4 c5@2 a4@3 g4 [c4,f4,a4]@7 ~@2, [f4,a4]@3 [c4,f4]@4 ~@9]/2", // F F5
  C: "[f4@2 f4@2 a#4 c5@2 d5@6 d5 d5@2, d4@4 [d4,f4]@3 [f4,a#4]@9]/2", // Dm A#5
  D: "[[g#4,c5]@3 c5@3 a#4 [d#4,g#4,c5]@5 g#3@2 c#4 f4@3 f4 f4@3 f4 f4@3 f4 f#4@3 f4@2, ~@3 [d#4,g#4]@4 ~@8 [g#3,c#4]@4 [g#3,c#4]@4 [g#3,c#4]@9]/4", // G# G#5 C#5
  E: "[f4 f#4@2 c#4@8 d#4 f4 f#4@2 ~@3 [g#3,c#4,f4]@2 ~@2 [g#3,c#4,f4]@2 ~@2 [a#3,d#4,f#4]@2 g#4 g#4@2 ~@3 [c#4,f4,g#4]@2 ~@2 [c#4,f4,g#4]@2 ~@2 [d4,e4,g#4,d5]@6, [a#3,c#4]@3 a#3@9 [b3,d#4]@3 g#4@13 [d#4,f#4]@3 c#5@11 ~@6]/6", // C# D#m C# E7 A#m B D#m
  F: "[~@2 [a3,c#4]@2 a4!2 b4 e5@2 c5 [e4,a4,c#5]@4 [e4,a4,c#5]@2, e4@4 [c#4,e4]@3 [e4,a4]@3 ~@6]/2", // A C#m A5
  G: "c#5 d5@2 [d4,f#4,b4]@3 [d4,f#4,a4]@2, [f#4,a4]@3 ~@5", H: "b4 c#5@2 [d4,a4]@3 [d4,e4]@2, [d4,g4]@3 ~@5",
  I: "[[e4,a4,c#5]@14 [g4,b4]@5 [g4,b4] [a4,c5]@12, e5]/2", // A G Am
  J: "[[e4,a4,c#5]@14 [g4,b4]@5 [g4,b4] [a4,c5]@8 ~@2 d4@2, e5@7 ~]/2", K: "~ [c4,e4,g4] c5 d5, ~ [e4,g4]",
  L: "e5@2 f5 e5 d5@2 c5@2, [g4,b4]", // G
  M: "[~@2 [f4,a4,c5] g4 ~@2 [a3,c4,f4]@2 ~@2 [b3,d4]@2 ~@2 [b3,d4]@2, d5@3 ~ g4@12]/2", // F Bm
  N: "[~@2 [c4,g4]@2 c5@2 d5 e5@3 f5 e5 d5@2 c5@2, ~@4 g4@3 g4@9, ~@7 c5@7 ~@2]/2", // C5
  O: "[~@3 d5 ~@2 [f4,a4,c5]@2 ~@2 [g4,b4]@2 ~@2 [g4,b4]@2, g5@3 ~ d5@12, ~ [a4,c5] ~@6]/2", // F G Am
  P: "~ [g3,a#3] d#4 f4, ~ [g3,a#3]", Q: "g4@2 g#4@2 g4 f4 d#4@2, [a#3,d4]",
  R: "[~@3 f4 ~@2 [g#3,c4]@2 ~@2 [g#3,a#3]@2 ~@2 [a#3,d4] g#4, a#4@3 ~ f4@11 ~, ~ [c4,d#4] ~@6]/2", // G# G#sus2 A# Cm
  S: "[c#5@2 c#5 c#5@3 c#5 d#5@2 f5@7, [f#4,a#4]@7 [g#4,c5]@9]/2", // F# G#
  T: "[g4@2 g4 g4@3 g4 a4@2 b4@3 ~@2 [a#3,d#4,g4]@2, [b3,d4]@7 [c4,f4]@5 ~@4]/2", // D# Bm F5
})).s("gm_brass_section").gain(0.44).pan(0.8)

// bass · fretless bass
const bass = note(`<
  A B C D E F G H I J K L M@3 N O P Q R S T U T A B C D E F G H I J K L M@3 N O P Q R S T U T V W X Y Z V AA Y AB AC AD
  AE AF AG AC AH A B C D E F G H I J K L M@3 N O P Q R S T S T S T AI ~@3
>`.pickRestart({
  A: "g2 ~ d2 ~", B: "g2 d2 g2 ~", C: "f2 ~ c2 ~", D: "f2 c2 d2 f2", E: "a#2 ~ f2 ~", F: "a#2 f2 a#2 ~",
  G: "g#2 ~ d#2 ~", H: "g#2 d#2 g#2 ~", I: "c#3 c3", J: "b2", K: "a#2@3 a#2", L: "d#2 d#3 g#2 ~",
  M: "[c#2,c#3] ~ [c#2,c#3] ~", N: "[c#2,c#3] ~ b2 e2", O: "[a2,e3]@2 [e2,e3] ~", P: "c#3 a2 e2 a2",
  Q: "[d2,d3]@3 [d2,d3]@3 [d2,d3]@2", R: "g2@3 b2@3 b2@2", S: "a2 e2 f#2 a2", T: "g2 f2 c2 f2", U: "a2 e2 g2 a2",
  V: "c3", W: "[e2,e3]", X: "[d2,d3]", Y: "f2 f3", Z: "e3", AA: "d3", AB: "d#3", AC: "[g2,g3]", AD: "[f2,f3] [d#2,d#3]",
  AE: "[d2,d3] a#2", AF: "[f#2,f#3]", AG: "[g#2,g#3] [g2,g3] [f2,f3] [d#2,d#3]", AH: "[f2,f3]!2 [d#2,d#3]@2",
  AI: "a2 ~@3",
})).s("gm_fretless_bass").gain(0.51).pan(0.3)

// bass · fretless bass · soft notes
const bass_soft = note("<~@90 [~ e2 f#2 a2] [g2 f2 c2 f2] [a2 e2 f#2 a2] [g2 f2 c2 f2]>")
  .s("gm_fretless_bass").gain(0.17).pan(0.3)

// chords · string ensemble 1 · "Strings"
const string_ensemble_1 = note(`<
  A@2 B@2 C@2 D@4 E@2 F G H I J@2 K L M@2 N@2 A@2 B@2 C@2 D@4 E@2 F G H I J@2 K L M@4 O P Q R S@2 T U V W X Y Z@2 AA@2
  A@2 B@2 C@2 D@4 E@2 F G H I J@2 K L M@10
>`.pickRestart({
  A: "[b3@3 [b3,d4]@4 [d4,g4]@9]/2", B: "[[f4,a4]@3 [c4,f4]@4 [c4,f4]@7 ~@2]/2", C: "[d4@4 [d4,f4]@3 [f4,a#4]@9]/2",
  D: "[[g#4,c5]@3 [d#4,g#4]@4 [d#4,g#4]@5 g#3@2 c#4 [g#3,c#4]@4 [g#3,c#4]@4 [g#3,c#4]@9]/4", // G# G#5 C#5
  E: "[[a#3,c#4]@3 a#3@9 [b3,d#4]@3 ~]/2", F: "~ [g#3,c#4,f4] ~ [g#3,c#4,f4]", G: "~@2 [a#3,d#4,f#4]@2 [d#4,f#4]@3 ~",
  H: "~ [c#4,f4,g#4] ~ [c#4,f4,g#4]", I: "~ [d4,e4,g#4]@3",
  J: "[~@2 [a3,c#4]@2 [c#4,e4]@3 [e4,a4]@3 [e4,a4]@4 [e4,a4]@2]/2", K: "[f#4,a4]@3 [d4,f#4]@3 [d4,f#4]@2",
  L: "[d4,g4]@3 d4@3 d4@2", M: "[[e4,a4,c#5]@14 [g4,b4]@5 [g4,b4] [a4,c5]@12]/2",
  N: "[[e4,a4,c#5]@14 [g4,b4]@5 [g4,b4] [a4,c5]@8 ~@2 d4@2]/2", O: "~ [c4,e4] [e4,g4]@2", P: "[g4,b4]",
  Q: "~@2 [f4,a4,c5] ~@3 [a3,c4,f4]@2", R: "~ [b3,d4] ~ [b3,d4]", S: "[~@2 c4@2 g4@3 [g4,c5]@9]/2",
  T: "~ [a4,c5] ~ [f4,a4,c5]", U: "~ [g4,b4] ~ [g4,b4]", V: "~ g3 [g3,a#3]@2", W: "[a#3,d4]",
  X: "~ [c4,d#4] ~ [g#3,c4]", Y: "~@2 [g#3,a#3]@2 ~@2 [a#3,d4] ~", Z: "[[f#4,a#4]@7 [g#4,c5]@9]/2",
  AA: "[[b3,d4]@7 [c4,f4]@5 ~@2 [a#3,d#4,g4]@2]/2", // Bm F5 D#
})).s("gm_string_ensemble_1").gain(0.39).pan(0.1)

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

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

// drums · low tom
const low_tom = s("lt").struct("<~@7 A ~@7 B ~@15 C ~@7 A ~@7 B ~@15 C ~@7 A ~@7 B ~@14>".pickRestart({
  A: "~@7 x", B: "~@12 x!2 ~@2", C: "~@5 x ~@2",
})).gain(0.8)

// drums · hihat
const hihat = s("hh").struct("<[x!8]!93 [~ x!7]>").gain(0.8)

// drums · mid tom
const mid_tom = s("mt").struct("<~@7 A ~@7 B ~@15 A ~@7 A ~@7 B ~@15 A ~@7 A ~@7 B ~@14>".pickRestart({
  A: "~ x", B: "~@9 x ~ x ~@4",
})).gain(0.8)

// drums · crash
const crash = s("cr").struct("<A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@7 A ~@5>".pickRestart({
  A: "x",
})).gain(0.8)

stack(brass_section, bass, bass_soft, string_ensemble_1, kick, snare, low_tom, hihat, mid_tom, crash)

More by Fifth Dimension