Strudelify

Lights

Journey

KeyD majorTempo110 bpm
0:00/0:00
// Lights — Journey
// 110 bpm, 12/8, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 55 bars on a 24-step grid, each part at one level. Source detail keeps the original performance.
setcpm(110/6)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · "a, b" plays two voices at once.
// A part's distinct bars are riffs (A, B, C...) played in order: edit a riff to change every repeat.

// other · ocarina
const ocarina = note("<~@18 A B ~@6 A C D E F G ~@2 H I ~@7 J D K L G ~@2 M N M O ~>".pickRestart({
  A: "b5 c6", B: "a5 g5 f#5@7 ~@3", C: "a5 g5 f#5@7 ~ f#5 g5", D: "a5@3 ~@2 a5 a5@4 a5!2", E: "g5!2 ~@8 f#5 g5",
  F: "a5@3 a5@3 a5@5 b5", G: "a5 g5@5 ~@6", H: "b5@3 b5@2 d6 c6@6", I: "d6 b5 a5@10", J: "~@10 f#5 g5",
  K: "g5@2 g5 ~@7 f#5 g5", L: "a5@3 a5@3 a5@3 a5@2 b5", M: "b5@5 d6 c6@6", N: "a5 g5 ~@4 g5@2 f#5 e5@2 d5, ~ f#5@3 ~@2",
  O: "d6 b5 a5 a5@9",
})).s("gm_ocarina").gain(0.41).pan(0.8)

// chords · ocarina
const ocarina_2 = note("<~@18 A B ~@6 A C D E F G ~@2 H I ~@7 J D K F L ~@2 H B H I ~>".pickRestart({
  A: "[b4,d5] [c5,e5]", B: "[a4,d5] [g4,b4] [f#4,a4]@7 ~@3", C: "[a4,d5] [g4,b4] [f#4,a4]@7 ~ [f#4,a4] [g4,b4]",
  D: "[a4,d5]@3 ~@2 [a4,d5] [a4,d5]@4 [a4,d5]!2", E: "[g4,c5] [g4,c5]@2 ~@7 [f#4,a4] [g4,b4]",
  F: "[a4,d5]@3 [a4,d5] [a4,d5]@2 [a4,d5]@5 [b4,e5]", G: "[a4,d5] [g4,c#5]@5 ~@6", H: "[b4,d5]@5 [d5,f#5] [c5,e5]@6",
  I: "[d5,f#5] [b4,e5] [a4,d5]@10", J: "~@10 [f#4,a4] [g4,b4]", K: "[g4,c#5]@2 [g4,c#5] ~@7 [f#4,a4] [g4,b4]",
  L: "[a4,d5] [g4,c5] [g4,c5]@4 ~@6", // D5 C5
})).s("gm_ocarina").gain(0.41).pan(0.1)

// chords · piano
const piano = note("<A B C D E F E G H I J K ~@43>".pickRestart({
  A: "f#5 d5 a4 f#5 d5 a4 f#5 d5 a4 f#5 d5 a4", B: "f#5 d5 a4 f#5 d5 a4!2 c#5 a4 e5 c#5 a4",
  C: "b4 d5 f#5 a5 f#5 d5 c#5 e5 c#5 a5 e5 c#5", D: "[d5,f#5] [a4,d5] [d5,f#5]@7 ~ d5 e5",
  E: "[a4,d5,f#5] a4 d5 a5 f#5 d5 [a4,d5,f#5] a4 d5 a5 f#5 d5", // D
  F: "[g4,c5,e5]@3 [g4,c5,g5] e5 c5 [c5,e5,a5]@2 [c5,e5,g5]@2 c5 e5", // C C5 Am C
  G: "[c5,e5,a5]@4 [e5,a5] [c5,f#5] [e5,a5] [c5,f#5] d5 [e5,a5] d5 a4", // Am A5 Cdim A5 Cdim A5
  H: "[a4,d5,f#5] [d5,f#5,a5] [a4,d5,f#5] [d5,f#5,a5]", // D
  I: "[g4,c5,e5]@2 [g4,c5,e5] g5 e5 c5 [c5,e5,a5]@2 [c5,e5,g5]@2 c5 e5", // C Am C
  J: "[b4,d5,f#5]@3 a5@3 c#5 e5 c#5 [c#5,e5,a5] e5 c#5", K: "[d5,f#5] a4 [d5,f#5]@7 ~ d5 f#5",
})).s("gm_piano").gain(0.17)

// chords · piano
const piano_2 = note(`<
  ~@12 A B C D E F G H I J K L M N O P Q R S T S U V W X Y Z AA Z AB AC AD AE AF AG AH AI AJ AK AL AK AL ~
>`.pickRestart({
  A: "[a4,d5,f#5]@3 a5 f#5 d5 [d5,f#5,a5]@3 a5 d5@2", // D
  B: "[c5,e5,a5]@3 a5 f#5 c5 [c5,e5,g5]@2 [c5,e5,a5]@2 [c5,e5,g5]@2", // Am C Am C
  C: "[a4,d5,f#5]@3 a5 f#5 d5 [b4,d5,f#5]@3 a5 f#5 d5", D: "[c5,e5,g5]@3 g5 e5 c5 ~ [g5,c6] [e5,a5] [d5,g5] e5 d5",
  E: "[a4,d5,f#5]@3 a5 f#5 d5 [a4,d5,f#5]@3 a5 f#5@2", // D
  F: "[c5,e5]@2 [c5,e5] [c5,e5,g5]@3 [c5,e5,a5]@2 [c5,e5,g5]@2 [c5,e5] g4", // C Am C
  G: "[b4,d5,f#5]@3 a5 f#5 d5 [c5,e5,g5]@3 a5 g5@2", H: "[a4,d5,f#5] e5 [a4,d5,f#5]@6 d5!3 c#5",
  I: "[b4,d5,f#5]@3 [b4,d5,f#5]@2 [a4,c#5,e5] [g4,b4,d5]@3 [g4,b4,d5]@3", // Bm A G
  J: "[b4,d5,f#5]@3 g5 [a4,d5,f#5]@2 [a4,d5,f#5]@3 d5@2 c#5", // Bm D
  K: "[b4,d5,f#5]@2 [b4,d5,f#5] [b4,d5,f#5]@2 [a4,c#5,e5] [g4,b4,d5]@3 [g4,b4,d5]@3", // Bm A G
  L: "[a4,d5,f#5]@3 [b4,d5,f#5]!3 ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a#4,c#5,f5]", // D Bm A A#m
  M: "[b4,d5,f#5]@2 [b4,d5,f#5] [b4,d5,f#5]@2 [a4,c#5,e5] [g4,b4,d5]@3 [g4,b4,d5]@2 [g4,b4,d5]", // Bm A G
  N: "[a4,d5,f#5]@3 g5 [a4,d5,f#5]@2 [a4,d5,f#5]@3 a4 a4@2, ~@3 [d5,f#5]", // D
  O: "[b4,d5,f#5]@3 a5@2 f#5 [c5,e5,g5]@3 a5@3", P: "[a4,d5,f#5] e5 a4@7 a4 d5 e5, ~ [d5,f#5]@4 ~",
  Q: "[a4,d5,f#5]@3 a5 f#5 d5 [b4,d5,f#5]@3 a5@3", // D Bm
  R: "[c5,e5,a5]@3 [g5,c6] [e5,a5] [c5,g5] [g5,c6] [e5,a5] [c5,g5] c5!2 e5, ~@9 [e5,g5]@2 ~", S: "[a4,d5,f#5]!4",
  T: "[c5,e5,a5]@3 [c5,e5,g5] e5 c5 [c5,e5,a5]@2 [c5,e5,g5]@2 [c5,e5,a5] [c5,e5,g5]", // Am C Am C Am C
  U: "[c5,e5,a5]@3 [c5,e5,g5]@3 [c5,e5,a5]@2 [c5,e5,g5]@2 [c5,e5,a5] [c5,e5,g5]", // Am C Am C Am C
  V: "[b4,d5,f#5] [d5,f#5,a5] [c5,e5,g5]!2", W: "[a4,d5,f#5]@4 [d5,d6]!5 g5@3", X: "[b4,d5,f#5]!2 [g4,b4,d5]!2",
  Y: "[a4,d5,f#5]@3 [a4,d5,f#5] g5 f#5 [a4,d5,f#5]@3 [a4,c#5,f#5]@3", // D F#m
  Z: "[b4,d5,f#5]@3 [b4,d5,f#5]@2 [a4,c#5,e5] [g4,b4,d5]@3 [g4,b4,d5]@2 [g4,b4,d5]", // Bm A G
  AA: "[a4,d5,f#5]@3 [a4,d5,f#5]@2 [a4,d5,f#5] ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a#4,c#5,f5]", // D A A#m
  AB: "[a4,d5,f#5]@3 [a4,d5,g5] [a4,d5,f#5]@2 [a4,d5,f#5]@3 [a4,d5,f#5]@3", AC: "[b4,d5,f#5] a5 [c5,e5,g5] a5",
  AD: "[a4,d5,f#5] e5 [a4,d5,f#5]@3 [a4,d5,f#5]!5 d5 e5", // D
  AE: "[a4,d5,f#5]@3 ~ [a4,d5,f#5]@2 [b4,d5,f#5]@3 ~ [f#5,a5]@2", // D Bm F#m
  AF: "[c5,e5,a5]@2 [c5,e5,a5]!2 [c5,e5,g5]@2 [c5,e5,a5]@2 [c5,e5,g5]!2 [c5,e5,a5] [c5,e5,g5]", // Am C Am C Am C
  AG: "[a4,d5,f#5]@3 ~ a5 f#5 [b4,d5,f#5]@3 [d5,f#5,a5]@3", // D Bm D
  AH: "[c5,e5,a5]@2 c5 [c5,e5,g5] e5 c5 [c5,e5,a5]@2 [c5,e5,g5]@2 [c5,e5,a5]@2", // Am C Am C Am
  AI: "[a4,d5,f#5] [d5,f#5,a5] [a4,d5,f#5] [d5,f#5,a5]", // D
  AJ: "[c5,e5,g5]@2 [c5,e5,g5]@2 [e5,g5] [c5,e5] [e5,g5] [c5,e5] [e5,g5]@2 d5 c5", // C Em C Em C Em
  AK: "[b4,d5,f#5]@3 a5@3 c5 e5 c5 [c5,e5,a5] e5 c5", AL: "[a4,d5,f#5] e5 [a4,d5,f#5]@10",
})).s("gm_piano").gain(0.26)

// bass · fretless bass
const bass = note(`<
  ~@3 A B C B C B D E F B C G H G D I J K L K M K L I A G N G N G D I O K L K P K L E Q G D G E G D I R I R ~
>`.pickRestart({
  A: "d2 a1 d2@7 a1 b1 c#2", B: "d2@5 c#2 b1@6", C: "c2@5 g1 c2@6", D: "c2@5 g1 c2@4 g1 c2",
  E: "b1@4 f#1 b1 c2@4 d2 e2", F: "f#2@9 a1 b1 c#2", G: "d2@5 c#2 b1@5 b1", H: "c2@3 c2!2 g1 c2@6",
  I: "b1@4 f#1 b1 c2@4 g1 c2", J: "d2 a1 d2 d2@4 d2!4 c#2", K: "b1@5 a1 g1@4 b1 c#2", L: "d2@5 a1 d2@4 c#2 c2",
  M: "d2@4 c#2 b1 ~ a1 ~ a1 ~ a#1", N: "c2@5 g1 c2@5 c2", O: "d2 a1 d2@2 d2!7 c#2",
  P: "d2@2 a1 d2 c#2 b1 ~ a1 ~ a1 ~ a#1", Q: "f#2 a1 d2@4 d2!3 a1 b1 c#2", R: "d2 a1 d2@10",
})).s("gm_fretless_bass").gain(0.64)

// other · overdriven guitar
const overdriven_guitar = note(`<
  A B C D E F G H I J K L M N O P Q R S T U V U W U X Y T Z AA AB AC AD AE Y AF AG X AH W AH AI AJ AK AL AM AN AO AP AQ
  Y AR Y AS ~
>`.pickRestart({
  A: "f#3@2 [a3,d4]@2 f#3@2 [a3,d4,f#4] e4 [a3,d4,f#4]@2 b3@2 b2@2 d3@2 f#3@2 e4@2 a3@2 f#3@2", // D5 D
  B: "f#3@4 f#3@2 [b3,e4]@2 [a3,d4]@2 b3@2 a2@2 e3@2 a3@2 c#4 [c#4,e4] a3@2 f#3@2", // E5 D5 C#m
  C: "b2@2 d3@2 f#3@2 e4 d4 a3@2 f#3@2 c3@2 g3@2 c4@2 e4@2 c4@2 g3@2", D: "d3 a2 [d3,a3]@10",
  E: "f#3@3 e4 d4 b3 b2 f#3 b3 [b3,d4]@3", F: "e3 g3 c4 e4@2 c4 e3 g3 c4 [a3,d4] [g3,c4] e3",
  G: "f#3@3 [a3,d4]@2 f#3 b2 f#3 b3 [b3,d4,f#4]@3", H: "e3 g3 c4 e4@2 c4 e3 g3 c4 d4 c4 a3",
  I: "f#3@5 ~ e4@2 b3@2 f#3@2 b2@2 f#3@2 b3@2 d4@6", J: "e3@2 g3@2 c4@2 e3@2 e3@4 d4@5 ~ c4@2 a3@2 g3@2",
  K: "b2@2 f#3@2 a3@2 [a3,d4]@2 a3@2 f#3@2 c3@5 ~ [c4,e4]@6", L: "~@3 d4 f#4@8",
  M: "f#3@3 e4 d4 b3 [f#3,b3]@3 [f#3,b3]@3", N: "e3 g3 c4!3 e3 d4@3 d4 c4 a3", O: "f#3@3 e4 b3 f#3 b2 f#3 a3 d4@3",
  P: "e3 g3 c4 e3@3 d4 c4 d4 c4@2 a3", Q: "f#3@3 e4 b3 f#3 b2 f#3 b3 [b3,d4]@3", R: "e3 g3 c4@4 d4@3 c4 a3 g3",
  S: "b2 f#3 b3 d4 b3 f#3 c3 g3 c4 e4 c4 g3", T: "[d3,a3] a2 [d3,a3]@10", U: "[b2,f#3]@5 a2 [g2,d3]@6",
  V: "[d3,a3]@5 a2 [d3,a3]@6", W: "[d3,a3]@6 ~ [a2,e3] ~ [a2,e3] ~ [a#2,f3]", X: "[d3,a3]",
  Y: "b2 f#3 a3 d4 a3 f#3 c3 g3 c4 e4 c4 g3", Z: "f#3@3 e4 b3 f#3 a3@6", AA: "e3 g3 c4 e4@2 c4 g3@6",
  AB: "f#3@3 e4 b3 d4 b2 f#3 a3 d4 a3 f#3", AC: "e3 g3 c4 e4!2 c4 d4@3 c4 a3 g3",
  AD: "f#3@3 e4 c#4 f#3 b2 f#3 b3 d4 a3 f#3", AE: "e3 g3 c4 e4@2 c4 d4@3 c4 g3@2", AF: "[d3,a3]!12",
  AG: "[b2,f#3]@2 [b2,f#3] [b2,f#3]@2 a2 [g2,d3]@6", AH: "[b2,f#3]@2 [b2,f#3] [b2,f#3]@2 a2 [g2,d3]@3 [g2,d3]@3",
  AI: "[d3,a3]@6 [d3,a3]@3 [d3,a3]!3", AJ: "[b2,f#3]@6 [c3,g3]@3 [c3,g3]!3", AK: "[d3,a3]!3 f#4@3 e4 d4 b3 a3 f#3 e3",
  AL: "f#3@3 e4 d4 b3 b2 f#3 a3 [a3,c#4]@3", AM: "e3 g3 c4 e3 g3 c4 d4@3 c4 a3 g3",
  AN: "f#3@3 e4 b3 f#3 b2 f#3@2 [a3,d4,f#4]@3", AO: "e3 g3 c4 e3@3 d4@3 c4 a3 g3",
  AP: "f#3@3 e4 b3 f#3 b2 f#3 b3 [d4,f#4,b4]@3", AQ: "e3 g3 c4 e3 g3 c4 d4@3 c4@3",
  AR: "f#3@3 f#4@3 e4 d4 c#4 a3 e3 d3", AS: "[f#4,a4] [e4,g4] [d4,f#4]@10",
})).s("gm_overdriven_guitar").gain(0.24)

// other · distortion guitar
const distortion_guitar = note("<~@13 A B ~@12 C ~ D B E B ~@2 F G H I J K L M N ~@11>".pickRestart({
  A: "~@5 e4 d5@3 c5 a4 g4", B: "f#4 ~@3", C: "f#4@3 g5 f#5 e5 d5 c#5 a4 f#4@3", D: "~@6 d5@3 c#5 g4@2",
  E: "~@6 d5 c5 d5@2 a4 g4", F: "~@2 c#4 a3@2 f#3 a3 b3 d4 f#4 a4 b4", G: "f#5@6 f#5@4 d5@2 e5 d5@5 d5@2 b4@2 d5@2",
  H: "f#5@6 f#5@4 d5@2 e5 a4@5 ~ e5@5", I: "d5@5 b4 a4 f#4!2 [d4,e4] d4@8 b3@2 d4@2 e4@2, ~@10 b3 ~@13",
  J: "f#4@3 f#4@2 d4 e4@3 f#4 a4 b4", K: "[b4,d5]!6 a4@2 g4@2 a4 b4",
  L: "d5 a4 b4 f#4 a4 e4 f#4 d4 e4 b3 d4 a3 b3 f#3 a3 e3 f#3 ~ e3 [e3,f#3] d3@4", // Esus2
  M: "~@2 a5@2 f5@2 d5@3 d5@3 a5 [f5,g5] g5@4 f5@4 f5@2", // Fsus2
  N: "d5@4 d5@2 b4@2 d5@2 e5@2 [f#5,a5]@2 [f#5,a5]@2 [f#5,a5]@2 f#5 g5 f#5 e5 d5 ~", // F#m
})).s("gm_distortion_guitar").gain(0.72)

// chords · drawbar organ
const drawbar_organ = note(`<
  ~@12 A B A C A C D E F E F G D E D E A C H B A C D E F E F I F E D E A J A J A J D E D E ~
>`.pickRestart({
  A: "[a4,d5,f#5] [b4,d5,f#5]", B: "[c5,e5,a5]", C: "[c5,e5,g5]", D: "[b4,d5,f#5] [c5,e5,g5]", E: "[a4,d5,f#5]",
  F: "[b4,d5,f#5]!2", G: "[a4,d5,f#5]@6 ~ [a4,c#5,e5] ~ [a4,c#5,e5] ~ [a#4,c#5,f5]", H: "[g4,d5,f#5] [b4,d5,f#5]",
  I: "[a4,d5,f#5]@6 ~ e5@2 g5@3", J: "[c5,e5,g5]!2",
})).s("gm_drawbar_organ").gain(0.17)

// drums · kick
const kick = s("bd").struct(`<
  ~@3 A B@6 C ~ D@3 E D E C ~ F@3 G F D F A H@5 E I ~ F@2 J G F D K ~ J B J B J D L ~ M N ~
>`.pickRestart({
  A: "~@10 x!2", B: "x ~@4 x!2 ~ x ~ x!2", C: "x ~ x ~ x!3 ~@3 x!2", D: "x ~@4 x!2 ~@5", E: "x ~@4 x!2 ~@3 x!2",
  F: "x ~ x ~@2 x!2 ~@3 x!2", G: "x ~@4 x!3 ~ x ~ x", H: "x ~@4 x!2 ~@4 x", I: "x ~@3 x!3 ~@3 x!2",
  J: "x ~ x ~@2 x!2 ~@4 x", K: "x!5 ~", L: "x ~ x ~@2 x!2 ~@5", M: "x ~ x!2 ~ x", N: "x!3 ~@9",
})).gain(0.53)

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

// drums · hihat
const hihat = s("hh").struct("<~@4 A@6 B C A@6 B ~@9 A@6 D ~@17 A ~@2>".pickRestart({
  A: "x!12", B: "~ x!11", C: "~@9 x!3", D: "x ~ x!3 ~ x ~ x ~ x ~ x ~ x!3 ~ x ~ x ~ x ~",
})).gain(0.53)

// drums · low tom
const low_tom = s("lt").struct("<~@3 A ~@7 A ~@7 B ~@7 A ~@7 C ~@7 D ~@7 A ~@3>".pickRestart({
  A: "x!3 ~@9", B: "x!3 ~@4 x!5", C: "x!3 ~ x!4 ~@3 x", D: "x!12",
})).gain(0.53)

// drums · mid tom
const mid_tom = s("mt").struct("<~@35 [~@5 x] ~@13 [~@22 x!2] ~@5>").gain(0.53)

// drums · high tom
const high_tom = s("ht").struct("<~@25 A ~@9 B ~@5 C ~@7 D ~@5>".pickRestart({
  A: "~@17 x!2 ~ x ~@3", B: "~@16 x!3 ~@5", C: "~@10 x!2", D: "~@18 x ~ x!2 ~@2",
})).gain(0.53)

// drums · crash
const crash = s("cr").struct("<~@10 A ~@7 A ~ A ~ A B A ~ A ~@9 C ~ A B ~@4 A ~ A ~ A ~ A ~@2 D ~>".pickRestart({
  A: "x", B: "~@7 x ~ x ~ x", C: "x!2 ~@2", D: "x!3 ~@9",
})).gain(0.53)

// drums · ride
const ride = s("rd").struct("<~@20 A B A C A D A ~@9 E B A C B F B ~ A B A B A C A ~@4>".pickRestart({
  A: "~ x!11", B: "x!12", C: "x!7 ~@5", D: "x!7 ~ x ~@3", E: "~ x!2 ~ x!8", F: "x!10 ~@2",
})).gain(0.53)

stack(
  ocarina, ocarina_2, piano, piano_2, bass, overdriven_guitar, distortion_guitar, drawbar_organ, kick, snare, hihat,
  low_tom, mid_tom, high_tom, crash, ride
)

More by Journey