Strudelify

Night in Motion

U96

KeyD majorTempo126 bpm
0:00/0:00
// Night in Motion — U96
// 126 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 4 lead 2 sawtooth (copy of ch 3 lead 2 sawtooth, 0.083 beats late)
// note: Full arrangement: all 107 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(126/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 · synth bass 2
const bass = note(`<
  ~@7 A B C D E B C D E B C D E B C D E B C D E ~@4 F@3 G H F I J B C D E B C D E B C D E B C D E ~@4 F@3 G H F I J B C
  D E B C D E B C D E K C L ~ B C D E B C D E B C D E B C D E B C D E ~@3
>`.pickRestart({
  A: "~@7 d1", B: "e1 ~ e1 ~@2 e1 ~@2 e1@3 ~ e1@2 f#1@2", C: "g1 ~ g1 ~@2 g1 ~@2 g1@3 ~ g1 ~ g1@2",
  D: "d1 ~ d1 ~@2 d1 ~@2 d1@3 ~ d1 ~ d1@2", E: "c1 ~ c1 ~@2 c1 ~@2 c1@3 ~ c1@2 d1@2",
  F: "e1 ~ e1@2 ~ e1@2 ~ e1@2 ~@2 e1@2 d1@2", G: "e1 ~ e1@2 ~ e1@2 ~ e1@2 g1@2 a1@2 b1 ~",
  H: "e1@2 e1@2 ~ e1@2 ~ e1@2 ~@2 e1@2 d1@2", I: "e1 ~ e1@2 ~ e1@2 ~ e1@2 ~@2 e1@2 d1 ~", J: "e1 ~@7",
  K: "e1 ~ e1 ~@2 e1 ~@2 e1@2 ~@2 e1@2 f#1@2", L: "d1 ~ d1 ~@2 d1 ~@2 d1@2 ~@2 d1 ~ d1 ~",
})).s("gm_synth_bass_2").gain(0.57)

// other · lead 2 sawtooth
const lead_2_sawtooth = note("<~@32 A B C D E F G ~@21 A B C D E F G ~@13 H I J ~@24>".pickRestart({
  A: "b2@2 b3@2 b2!2 b3@2 b2@2 b3@2 b2!2 b3@2", B: "b2@2 b3@2 b2!2 b3@2 c3@2 c4@2 a2!2 a3@2",
  C: "a2@2 a3@2 a2!2 a3@2 a2@2 a3 ~ a2!2 a3@2", D: "a2@2 a3@2 a2!2 a3@2 g2@2 g3@2 d3!2 d4@2",
  E: "[b2,b3]@2 [b3,b4]@2 [b2,b3]!2 [b3,b4]@2 b2@2 [b3,b4]@2 [b2,b3]!2 [b3,b4]@2, ~@8 b3 ~@7", // B
  F: "[b2,b3]@2 [b3,b4] ~ [b2,b3]!2 [b3,b4]@2 [c3,c4]@2 [c4,c5]@2 [a2,a3]!2 [a3,a4]@2", // B C A
  G: "a2@2 [a3,a4]@2 [a2,a3]!2 [a3,a4]@2 [a2,a3]@2 [a3,a4] ~ [a2,a3]!2 [a3,a4] ~, a3 ~@15", // A
  H: "[e2,e3,e4] ~ [e2,e3,e4] ~ e2 [e2,e3,e4] ~ [e3,e4] e2 ~ [e3,e4] ~ [e3,e4] ~ [e3,e4] [f#3,f#4], ~@6 e2 f#2", // E F#
  I: "[g2,g3,g4] ~ [g2,g3,g4] ~ g2 [g2,g3,g4] ~ [g3,g4] g2@2 [g3,g4] ~ [g2,g3,g4] ~ [g3,g4] [f#3,f#4], ~@7 g2", // G F#
  J: "[d2,d3,d4] ~ [d2,d3,d4] ~ d2 [d2,d3,d4] ~ [d3,d4] d2 ~ [d3,d4] ~ [d2,d3,d4] ~ d2 ~", // D
})).s("gm_lead_2_sawtooth").gain(0.19).pan(0.1)

// other · acoustic guitar steel
const acoustic_guitar_steel = note(`<
  ~@20 A@2 B@2 A@2 B@2 A@2 B@2 ~@8 A@2 B@2 A@2 B@2 A@2 B@2 A@2 B@2 ~@12 A@2 B@2 A@2 B@2 A@2 B@2 ~@4 A@2 B@2 A@2 B@2 A@2
  B@2 A@2 B@2 A@2 B@2 ~@3
>`.pickRestart({
  A: "e2!16", B: "d2!16",
})).s("gm_acoustic_guitar_steel").gain(0.02).pan(0.7)

// other · lead 4 chiff
const lead_4_chiff = note("<~@10 A B ~@3 C ~@27 C ~@2 A B ~@2 A B ~@7 D ~@11 C ~@15 C ~@2 A B ~@15>".pickRestart({
  A: "~@6 a4 b4", B: "c5!6 b4!7 ~@3", C: "e4 ~ d4 d4@2 ~ b3!2 e4 ~ d4 ~ e4@3 ~", D: "~@8 b3 ~ b3 e4@2 ~@3",
})).s("gm_lead_4_chiff").gain(0.47).pan(0.2)

// other · lead 4 chiff · soft notes
const lead_4_chiff_soft = note("<~@11 A ~@35 A ~@3 A ~@39 A ~@15>".pickRestart({
  A: "~@13 b4!3",
})).s("gm_lead_4_chiff").gain(0.26).pan(0.2)

// chords · percussive organ
const percussive_organ = note("<~@4 A@28 ~@8 A@20 ~@8 A@12 ~@4 A@20 ~@3>".pickRestart({
  A: "[[e5,g5] ~@2 [c5,e5], b5 a5, ~ [d5,f#5]@2 ~]/4", // Em C D
})).s("gm_percussive_organ").gain(0.18)

// chords · lead 2 sawtooth
const lead_2_sawtooth_2 = note(`<
  A B C D A B C D A B C D A B C D A B C D A B C D A B C D A B C D ~@8 A B C D A B C D A B C D A B C D A B C D ~@8 A B C
  D A B C D A B C D ~@4 A B C D A B C D A B C D A B C D A B C D ~@3
>`.pickRestart({
  A: "e2 ~ e2!4 [e2,b2]!2 e2!6 [e2,b2]!2, ~@2 b2 ~@3 b2 ~", // E5
  B: "e2!6 [e2,b2]!2 e2!2 [e2,a2]!2 e2!2 [e2,g2]!2, ~@2 b2 ~ a2 ~ g2 ~", // E5 A5 Em
  C: "[d2,e2] e2 d2!4 [d2,a2]!2 d2!6 [d2,a2]!2, ~@2 a2 ~@3 a2 ~", // Dsus2 D5
  D: "d2!6 [d2,a2]!2 d2!2 [d2,g2]!2 [d2,f#2] d2 [d2,f#2]!2, ~@2 a2 ~ g2 ~@3", // D5 G5 D
})).s("gm_lead_2_sawtooth").gain(0.33).pan(0.6)

// chords · lead 2 sawtooth · soft notes
const lead_2_sawtooth_soft = note(`<
  ~@2 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@3 A ~@3 A ~@11 A ~@3 A ~@3 A ~@7 A ~@3 A ~@3 A
  ~@3 A ~@3 A ~@4
>`.pickRestart({
  A: "~@2 e2 ~@13",
})).s("gm_lead_2_sawtooth").gain(0.14).pan(0.6)

// drums · kick
const kick = s("bd").struct("<~@16 A@12 ~@4 A@24 ~@4 A@23 ~ A@20 ~@3>".pickRestart({
  A: "x!4",
})).gain(0.5)

// drums · clap
const clap = s("cp").struct("<~@32 A@3 B A@3 ~ A@15 B ~@4 A@3 B A@3 ~ A@15 ~ A@20 ~@3>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!2 ~",
})).gain(0.5)

// drums · snare
const snare = s("sd").struct("<~@31 A ~@7 A ~@27 A ~@15 A ~@3 B ~@3 A ~@7 A ~@3 B ~@3>".pickRestart({
  A: "x!2 ~ x!2 ~ x!2 ~ x!2 ~ x!3 ~", B: "~@7 x",
})).gain(0.5)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@20
  [~@2 x ~@3 x!2 ~@2 x ~@3 x ~]!36
  ~@4
  [~@2 x ~@3 x!2 ~@2 x ~@3 x ~]!20
  [~ x ~ x ~ x ~ x]!3
  ~
  [~@2 x ~@3 x!2 ~@2 x ~@3 x ~]!20
  ~@3
>`).gain(0.5)

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

// drums · shaker · soft notes
const shaker_soft = s("sh").struct(`<
  ~@12 A B A B A B A B A B A B A B A B A B A B ~@8 A B A B A B A B A B A B A B A B ~@12 A B A B A B A B A B A B ~@4 A B
  A B A B A B A B A B A B A B A B A B ~@3
>`.pickRestart({
  A: "~ x ~@5 x ~ x ~ x ~ x ~ x", B: "~ x ~ x ~ x ~ x ~ x ~ x ~@3 x",
})).gain(0.25)

stack(
  bass, lead_2_sawtooth, acoustic_guitar_steel, lead_4_chiff, lead_4_chiff_soft, percussive_organ, lead_2_sawtooth_2,
  lead_2_sawtooth_soft, kick, clap, snare, hihat, shaker, shaker_soft
)

More by U96