Strudelify
In The Air Tonight cover art

Face Value

In The Air Tonight

Phil Collins

KeyD minorTempo96 bpm
0:00/0:00
// In The Air Tonight — Collins Phil
// 96 bpm, 4/4, key D minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: sustain pedal (CC 64) lengthens the held notes
// note: Full arrangement: all 108 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(96/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 · electric bass finger · "FINGERDBAS"
const bass = note("<~@64 A ~@15 B C D E B C D E B C D E B C D E B C D E B C D E B C D E>".pickRestart({
  A: "d2 ~ d2 ~@13", B: "d2@2 f2 ~ d2@2 f2 ~@5 a2 g2 f2 [g2,a2]", C: "g2 e2 c2 ~@5", D: "d2 e2 f2 ~@5",
  E: "~@2 a1@2 c2@2 ~@4 g1 a1 c2@2 ~@2",
})).s("gm_electric_bass_finger").gain(0.4)

// chords · pad warm · "WARM PAD"
const pad_warm = note(`<
  ~@4 A@8 B C D C B C E C B C D F G@4 H@2 I@8 J@2 K@5 F D F B F D F B L D F B F D C M@5 ~ J@2 N@2 O@8 P@8 ~@22
>`.pickRestart({
  A: "[a4@16 [e4,g4]@16 [d4,f4]@16 e4@16 f4@16 [e4,g4]@16 [d4,f4]@16 c4@15 ~, [d1,d2], ~@32 bb3@15 ~ c4@14 ~@34 bb3@15 ~@17]/8", // Em Dm Em Dm D
  B: "[d4,f4,a4]", C: "[e4,g4], c4@7 ~", D: "[bb3,d4,f4]", E: "[d4,f4]", F: "[c4,e4,g4]", G: "[[d4,f4,a4]@63 ~]/4",
  H: "[d4,f4,a4]/2", I: "[[e4,g4]@32 [bb3,d4,f4]@32 c4@31 ~ d4@31 ~, [d1,d2], c4@15 ~@17 [f4,a4]@32]/8",
  J: "[c4,e4,g4]/2", K: "[bb3@2 a4@3, [d4,f4]]/5", L: "[e4,g4], c4@13 ~@3", M: "[[d4,f4,a4]@17 ~@3]/5",
  N: "[bb3,d4,f4]/2", O: "[c4@31 ~ d4@32 [e4,g4]@32 [bb3,d4,f4]@31 ~, [f4,a4]@32 c4@15 ~@17, ~ [d1,d2]@3]/8",
  P: "[[d4,f4,a4] ~@3, [d1,d2]]/8", // Dm D
})).s("gm_pad_warm").gain(0.3)

// chords · pad warm · "WARM PAD" · soft notes
const pad_warm_soft = note("<~@4 A B ~ C D E ~ F ~@6 G ~@89>".pickRestart({
  A: "[d4,f4]", B: "c4@15 ~", C: "g4", D: "[d4,a4]", E: "c4@7 ~", F: "[e4,g4]@15 ~", G: "bb3@15 ~",
})).s("gm_pad_warm").gain(0.15)

// other · distortion guitar · "DISTORTION"
const distortion_guitar = note(`<
  ~@24 A@4 ~@7 B@3 ~ C D@3 E@3 F@5 ~@3 G@3 ~ H@2 A@4 I ~@15 J K L M J K L M J K L M J K L M J K L M J K L M J K L M
>`.pickRestart({
  A: "[[d2,a2,d3]@63 ~]/4", B: "[c5@11 ~]/3", C: "e4", D: "[d4@37 ~@11]/3", E: "[~ c5@5]/3",
  F: "[~@12 g4@14 f5 ~@3 d5@50]/5", G: "[g4@11 ~@5]/3", H: "g4/2", I: "[d2,a2,d3,a3]@2 [d2,a2,d3,a3] ~@13",
  J: "d3@2 f3 ~ d3@2 f3 ~@5 a3 g3 f3 [g3,a3]", K: "g3 e3 c3 ~@5", L: "d3 e3 f3 ~@5",
  M: "~@2 a2@2 c3@2 ~@4 g2 a2 c3@2 ~@2",
})).s("gm_distortion_guitar").gain(0.35).pan(0.6)

// other · piano · "A.PIANO 1"
const piano = note("<~@8 A@2 B@3 ~@25 A@2 C@3 D@2 ~@63>".pickRestart({
  A: "[~ d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5, d6@2 d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~, ~@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@2]/2",
  B: "[~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~ d6@6 ~@11, d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@7 ~@11, ~ d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 ~@17]/3",
  C: "[~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5, d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~, ~ d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@3 d6@2]/3",
  D: "[~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 ~@2 d5 d5@11 ~@6, d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~ d5@2 ~@18, ~ d6@3 d6@3 d6@3 d6@3 d6@13 ~@6]/2",
})).s("gm_piano").gain(0.19).pan(0.3)

// chords · pad sweep · "SWEEP PAD"
const pad_sweep = note("<~@60 A@2 B@2 C ~@15 D E F G H I F G J E K E J E K E J E K E J E K G J G K E>".pickRestart({
  A: "[d2,d3,f3,a3,d4]/2", B: "[~@16 f5@15 ~, [d2,d3,f4,a4,d5]@31 ~]/2",
  C: "[d2,d5]@2 [d2,d3,f4,d5] ~@13, [d3,f4] ~@15", D: "[a4,a5]", E: "[g4,c5,e5,g5]", F: "[bb3,f4,d5,f5]",
  G: "[g4,e5,g5]", H: "[a4,f5,a5]", I: "[g4,c5,e5]", J: "[a4,d5,f5,a5]", K: "[bb3,f4,bb4,d5,f5]",
})).s("gm_pad_sweep").gain(0.2)

// chords · pad sweep · "SWEEP PAD" · soft notes
const pad_sweep_soft = note("<~@80 A ~ B C D E B C ~@15 C ~ C ~@2>".pickRestart({
  A: "[d5,f5]", B: "bb4", C: "c5", D: "d5", E: "g5",
})).s("gm_pad_sweep").gain(0.1)

// other · lead 8 bass lead · "BASS&LEAD"
const lead_8_bass_lead = note("<~@46 A B ~ C D E@2 ~ F G@2 H I J ~@5 K L ~ M N O P ~ Q R S T U V ~@29>".pickRestart({
  A: "~@3 g4@2 f4 d4 g4@2 f4 ~ g4@2 f4 d4@2, ~@5 d4 ~@2", B: "~@3 g4@3 a4 ~ g4@2 a4 ~@5",
  C: "~@4 d5@2 c5 ~ d5@2 c5 ~@5", D: "~@3 g4@2 f4 d4 g4@2 f4 d4 ~@5", E: "[~@4 a4 ~ g4@4 a4 ~ a4 ~ g4@4 ~@8 a4 ~@5]/2",
  F: "~@3 g4@2 f4 d4 g4@2 f4 ~ g4@2 f4 d4 ~", G: "[~@4 g4 ~ g4@4 a4 ~ g4 ~ g4@4 a4 ~@13]/2", H: "~@4 d5@2 c5 ~@9",
  I: "~@4 g4 f4 d4 g4@2 f4 d4 g4@2 f4 d4 ~", J: "~@4 g4 ~ g4@4 a4 ~@5", K: "~@12 d5 c5 d5@2",
  L: "c5 ~ d5 c5 d5@2 c5 ~ d5 c5 d5@2 c5 ~@3", M: "~@8 g4@2 ~@2 g4@3 ~", N: "~@6 g4 ~", O: "~@8 a4 ~@3 a4 ~@3",
  P: "a4 ~@3 a4 ~@11", Q: "~@15 c5", R: "a4 ~ c5@2 ~@2 c5@2 a4 ~ c5 ~ a4 ~@3", S: "~@4 g4 ~@3 g4@2 ~@2 g4 ~@3",
  T: "~@8 g4 ~ g4@2 f4@2 g4@2", U: "~@8 g4 ~ g4@2 f4 ~ g4 f4", V: "d4@3 ~@13",
})).s("gm_lead_8_bass_lead").gain(0.07)

// other · lead 8 bass lead · "BASS&LEAD" · soft notes
const lead_8_bass_lead_soft = note("<~@47 A ~@2 B ~ C ~ D ~@16 E ~@2 F ~@33>".pickRestart({
  A: "~@12 g4@2 a4 ~", B: "~@11 g4@2 f4 d4@2", C: "~@2 a4 ~ a4 ~ g4@4 ~@6", D: "~@10 d4 ~@5", E: "~@8 a4 ~@7",
  F: "~@4 a4 ~@11",
})).s("gm_lead_8_bass_lead").gain(0.05)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct("<~@81 [~ x ~@2] ~@26>").gain(0.05)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@88 A ~@3 A ~@3 A ~@3 A ~@6 B>".pickRestart({
  A: "x ~@4 x ~@10", B: "~@7 x",
})).gain(0.1)

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

// drums · hihat
const hihat = s("hh").struct("<[~ x ~ x ~ x ~ x]!107 [~ x ~ x ~ x ~@2]>").gain(0.2)

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

// drums · open hat
const open_hat = s("oh").struct("x ~@2 x").gain(0.15)

// drums · high tom
const high_tom = s("ht").struct("<A@79 B A@7 C A@3 C A@3 C A@3 C A@8>".pickRestart({
  A: "~ x ~ x ~@2 x ~", B: "x!5 ~ x!2 ~@4 x ~@3", C: "~@2 x ~@3 x ~@5 x ~ x!2",
})).gain(0.2)

// drums · high tom · soft notes
const high_tom_soft = s("ht").struct("<~@79 A ~@8 B ~@3 B ~@3 B ~@3 B ~@6 C>".pickRestart({
  A: "~@5 x ~@2 x ~@7", B: "x", C: "~@7 x",
})).gain(0.1)

// drums · congas
const congas = s("conga:33").struct("~ x ~ x ~@2 x ~").gain(0.47)

stack(
  bass, pad_warm, pad_warm_soft, distortion_guitar, piano, pad_sweep, pad_sweep_soft, lead_8_bass_lead,
  lead_8_bass_lead_soft, kick, kick_soft, snare, snare_soft, low_tom, hihat, mid_tom, open_hat, high_tom, high_tom_soft,
  congas
)

More by Phil Collins