Strudelify
The Swing cover art

The Swing

The Swing

INXS

KeyD majorTempo123 bpm
0:00/0:00
// The Swing — INXS
// 123 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: pitch bends are ignored
// note: Full arrangement: all 121 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(123/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 · lead 8 bass lead · "Bass&Lead"
const lead_8_bass_lead = note(`<
  ~@15 A B C D@2 E F G H I J K L M N O P Q R ~@2 S@6 T U V W X Y Z AA G H I J K L M N O P Q R ~@2 S@5 ~ AB AC AB AD AE
  ~@3 AF ~@2 AG AH@2 AI AJ AK AA AK AA AL@2 AM AN ~ AO AP AQ ~ AR@2 ~ AS AT AU AV AW@2 AX AY AZ BA BB BC AZ BA BB BD BE
  BF@2
>`.pickRestart({
  A: "~@2 [c5,e5]@11 ~@3", B: "~@4 [d5,f#5]@3 ~ [c5,e5] ~ [c5,f5] ~@5",
  C: "~@2 [c5,e5]@3 ~@3 [c5,e5] ~ [d5,f#5] ~ [d5,f#5] ~ [c5,e5] ~", // C D C
  D: "[[d4,f#5]@4 ~@2 e4@3 ~ d4 ~@7 [e4,a4] ~ [d4,g4] ~ [e4,a4] ~ [d4,g4] ~ [e4,a4] ~ [e4,a4] ~ [d4,g4] ~, ~@12 a3@15 ~@5]/2", // D A5 G5 A5 G5 A5 G5
  E: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~@3 [e4,a4]@5 ~@3", // A5
  F: "~@2 [g4,c5] ~ [a4,d5] ~ [g4,c5] ~ [g4,c5] ~ [a4,d5] ~ [a4,d5] ~ [g4,c5] ~", // C5 D5 C5 D5 C5
  G: "[d4,a4,d5,f#5]@4 ~@2 [d4,a4,d5,f#5]@7 ~@3", H: "~@2 [g4,c5] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4]@3 ~ [g4,c5]@3 ~",
  I: "~@6 [g4,c5] ~ [e4,a4] ~@7", J: "~@2 [g4,c5] ~ d4 ~ e4 ~ d4 ~ a3 ~ c4 ~ [e4,a4] ~", K: "[d4,g4]@9 ~ d4 ~ a3 ~@3",
  L: "~@4 [e4,a4]@7 ~ [e4,a4] ~@3", M: "[d4,g4]@5 ~@3 [g4,c5] ~ [e4,a4] ~ [g4,c5] ~@3",
  N: "[d4,g4] ~@3 [e4,a4] ~ [e4,a4]@7 ~@3", O: "[a4,d5] ~ d4 ~ d4 ~ [a4,d5]@7 ~@3",
  P: "~@2 [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~", // D5
  Q: "[a4,d5]@3 ~@3 [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [g4,c5] ~ [a4,d5] ~", R: "~@6 [a4,d5] ~ [a4,d5]@3 ~ [g4,c5]@3 ~",
  S: "a4@11 ~@5", T: "[a4,d5]@3 ~ [a4,d5]@3 ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [e4,a4] ~",
  U: "[g4,c5] ~ [g4,c5] ~ [a4,d5] ~ [c5,g5]@7 ~@3", // C5 D5 C5
  V: "[a4,d5]@3 ~ [a4,d5]@3 ~ [a4,d5] ~ [a4,d5] ~ [g4,c5] ~ [e4,a4] ~", // D5 C5 A5
  W: "[g4,c5] ~ [g4,c5] ~ [a4,d5] ~ [c5,f5]@5 ~@5", // C5 D5 F5
  X: "[e4,a4]@3 ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [g4,c5] ~ [e4,a4] ~ [e4,a4] ~", // A5 C5 A5
  Y: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4]@3 ~@3 [g4,c5] ~ [e4,a4] ~", // A5 C5 A5
  Z: "~@2 [g4,c5] ~ [e4,a4] ~@3 [g4,c5] ~ [e4,a4] ~@3 [e4,a4] ~", // C5 A5 C5 A5
  AA: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~", // A5
  AB: "[a3,d4] ~ [b3,e4] ~ [b3,e4] ~ [a3,d4] ~ [b3,e4] ~ [b3,e4] ~@5", AC: "~@3 d4", AD: "~@6 b4 ~ [b4,e5]@5 ~@3",
  AE: "[g3,c4] ~ [a3,d4] ~ [a3,d4] ~ [g3,d4] ~ [a3,d4] ~ [a3,d4] ~@5", // C5 D5 G5 D5
  AF: "[g3,c4] ~ [a3,d4] ~ [a3,d4] ~ [g3,c4] ~ [a3,d4] ~ [a3,d4] ~@5", // C5 D5 C5 D5
  AG: "[g3,c4] ~ [a3,d4] ~ [a3,d4] ~ [g3,c4] ~ [g3,c4] ~ [g3,c4] ~@5", AH: "[[a4,d5]@27 ~@5]/2",
  AI: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [g4,c5] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~", // A5 C5 A5
  AJ: "[e4,a4] ~ [g4,c5] ~ [e4,a4] ~ [e4,a4] ~ [g4,c5] ~ [e4,a4] ~ [g4,c5] ~ [e4,a4] ~", // A5 C5 A5 C5 A5 C5 A5
  AK: "[d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [d4,g4] ~", // G5
  AL: "[[a4,d5]@3 ~@3 [a4,d5]@21 ~@5]/2", AM: "[a4,d5] ~@3 [a4,d5] ~@3 [a4,d5] ~ [g4,c5] ~@3 [e4,a4] ~",
  AN: "~@2 [e4,a4] ~ [g4,c5] ~@3 [g4,c5]@3 ~ [e4,a4] ~ [g4,c5] ~", AO: "~@10 f5 ~ e5 ~ d5 ~", AP: "c5@5 ~@11",
  AQ: "~@4 f5 ~ e5 ~ d5 ~ c5 ~ a4 ~ c5 ~", AR: "[~@8 f5 ~ c5 ~ d5 ~ c5@7 ~@11]/2",
  AS: "[a4,d5]@3 ~ [a4,d5]@3 ~ [a4,d5]@3 ~ [g4,c5] ~ [a4,d5] ~", AT: "~@4 [c5,f5]@3 ~ [a4,d5] ~ [g4,c5] ~@5",
  AU: "[a4,d5]@3 ~ [a4,d5]@3 ~ [g4,c5] ~ [g4,c5] ~ [a4,d5] ~ [a4,d5] ~", // D5 C5 D5
  AV: "~@4 [c5,f5]@3 ~ [a4,d5] ~ [a4,d5] ~ [g4,c5] ~ [g4,c5] ~", // F5 D5 C5
  AW: "[a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~", // Am
  AX: "~@4 [a3,e4,a4,c5,e5]@3 ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~", // Am
  AY: "~@2 [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~ [a3,e4,a4,c5,e5] ~", // D Am
  AZ: "[a4,d5]@3 ~@3 [d4,a4,d5,f#5]@5 ~ [g4,c5] ~ [g4,c5] ~", // D5 D C5
  BA: "[a4,d5] ~ [a4,d5] ~ [g4,c5] ~ [e4,a4] ~ [a4,d5] ~ [a4,d5] ~ [g4,c5] ~ [e4,a4] ~", // D5 C5 A5 D5 C5 A5
  BB: "~@4 [d4,g4]@3 ~ [a4,d5] ~ [a4,d5] ~@3 [d4,g4]@2", // G5 D5 G5
  BC: "~@2 [d4,g4] ~ [d4,g4] ~ [d4,g4] ~ [e4,a4] ~ [e4,a4] ~ [g4,c5] ~ [e4,a4] ~", // G5 A5 C5 A5
  BD: "[d4,g4]@3 ~ [e4,a4] ~ [e4,a4] ~@3 [d4,g4] ~ [d4,g4] ~ [e4,a4] ~", // G5 A5 G5 A5
  BE: "[a4,d5] ~@3 [d4,a4,d5,f#5] ~ [a4,f#5]@10, ~@6 [d4,d5]@7 ~@3", BF: "[[a4,d5]@21 ~@11]/2",
})).s("gm_lead_8_bass_lead").gain(0.31).pan(0.7)

// chords · overdriven guitar · "Overdrive"
const overdriven_guitar = note(`<
  ~@9 A@5 B@7 C D@2 E@2 F G H I J@3 K E@2 L M N@2 O I P@3 Q R@2 S T D@2 E@2 F G H I J@3 K E@2 L M N@2 O U V@4 W@8 X@2 Y
  Z AA AB AA AB AC@2 AD@2 Y AE AB AF AB@2 T AB AG@4 R@4 AH AI R@2 AH AI R@2 AJ@3
>`.pickRestart({
  A: "[b5@53 ~@3 b3@17 ~ g4@3 ~ b4@2]/5",
  B: "[~@2 g4@3 ~ d4@63 ~@3 d4@3 ~ a3@12 ~@4 a3@12 ~@4 c4 [c4,d4] d4 [c4,d4]]/7", // Csus2
  C: "c4 [c4,d4] d4 [c4,d4] c4 [c4,d4] d4 [c4,d4] c4 [c4,d4] d4 [c4,d4] c4 [c4,d4] d4 [c4,d4]", D: "[d4@27 ~@5]/2",
  E: "[a3@27 ~@5]/2", F: "g4@11 ~@5", G: "a3@11 ~@5", H: "g4@5 ~@3", I: "a3@5 ~@3", J: "[~@6 d4@29 ~ d4!12]/3",
  K: "d4!16", L: "c4@3 ~ a3 ~ a3 ~ a3@4 ~@2 c4 ~", M: "a3 ~ c4 ~ a3@3 ~ c4@2 c#4@2 c4@2 c#4 ~",
  N: "[a3@20 ~ a3 c#4@2 c4@2 c#4@2 c4@2 c#4 ~]/2", O: "a3@5 ~@3 c4@2 c#4@2 c4@2 c#4 ~",
  P: "[a4@10 ~@10 f#5@9 ~@19, d5@43 ~@5, ~@16 a4@27 ~@5]/3",
  Q: "[g4,c5] ~ [g4,c5] ~ [a4,d5] ~ [c5,f5] ~ [a4,d5]@3 ~ [a4,d5]@3 ~", // C5 D5 F5 D5
  R: "[e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~ [e4,a4] ~", // A5
  S: "[a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~", // A5 C A5 C A5 C
  T: "[a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~", U: "[a3,f4]@11 ~@5",
  V: "[[b3,e4]@59 ~@5]/4", W: "[[d4,a4,d5,f#5]@123 ~@5]/8", X: "[[a4,d5]@27 ~@5]/2",
  Y: "[a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~", // A5 C A5 C A5
  Z: "[a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4]@3 ~", // A5 C A5 C A5
  AA: "[g3,d4] ~ [g3,d4] ~ [g3,d4] ~ [g3,d4] ~ g3 ~ g3 ~ a3 ~ c4 ~", // G5
  AB: "[a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~", // A5
  AC: "[[a4,d5] ~@5 [a4,d5]@21 ~@5]/2", // D5
  AD: "[d4,a4,d5,f#5]@3 ~ [d4,a4,d5,f#5]@3 ~ [d4,a4,d5,f#5]@3 ~ [d4,a4,d5,f#5]@3 ~", // D
  AE: "[a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~", // A5 C A5 C A5
  AF: "[c4,e4] ~ [a3,e4] ~ [a3,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~ [c4,e4] ~ [a3,e4] ~", // C A5 C A5 C A5
  AG: "[a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~ [a4,d5] ~", // D5
  AH: "[d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5]@5 ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~", // D
  AI: "[d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~", // D
  AJ: "[[d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5] ~ [d4,a4,d5,f#5]@31 ~@11]/3", // D
})).s("gm_overdriven_guitar").gain(0.35).pan(0.3)

// bass · electric bass finger · "FingeredBs"
const bass = note(`<
  ~@11 A B C B@4 D@4 B@2 D@2 E D E D B@4 F G D@2 F G D@2 B@4 D@4 B@2 D@2 E D E D B@4 F G D@2 F G D@2 H@5 B@2 C I C B@4
  D@4 E D B@4 D@8 B@4 D@4 B@2 D@2 B@2 D@2 J@3
>`.pickRestart({
  A: "~@8 a1 ~ a1 ~ c2 ~ a1 ~", B: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ d2 ~",
  C: "d2 ~ d2 ~ d2 ~ d2 ~ d2 ~ a1 ~ c2 ~ a1 ~", D: "a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~ a1 ~",
  E: "g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~ g1 ~", F: "a1 ~ a1 ~@3 a1 ~ a1 ~ a1 ~@3 a1 ~",
  G: "a1 ~ a1 ~@3 a1 ~ a1 ~ a1 ~ a1 ~ a1 ~", H: "e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~ e2 ~",
  I: "c2 ~ d2 ~ d2 ~ c2 ~ d2 ~ d2 ~ d2 ~ d2 ~", J: "[d3@4 ~@2 d3@31 ~@11]/3",
})).s("gm_electric_bass_finger").gain(0.31)

// drums · kick
const kick = s("bd").struct("<A@21 B C A@6 D A@11 E A@8 C A@6 D A@24 F@8 G F A@8 H@2 A@4 F@3 I F@8 J K ~>".pickRestart({
  A: "x!2 ~ x!3 ~ x", B: "x!2 ~ x!3 ~@2", C: "x!2 ~@2 x!2 ~ x", D: "x!2 ~ x!5", E: "x!6 ~ x", F: "x!2 ~@2 x!2 ~@2",
  G: "x ~@2 x!3 ~@2", H: "x!8", I: "x ~ x ~@5 x!3 ~ x ~ x ~", J: "x!2 ~ x ~@4", K: "~@7 x",
})).gain(0.31).pan(0.3)

// drums · rim
const rim = s("rim").struct("<~@92 [x ~ x ~ x ~ x ~ x ~ x!6]!8 ~@21>").gain(0.31).pan(0.3)

// drums · snare
const snare = s("sd").struct("<A@21 B C A@18 ~ A@8 C A@18 D A@11 E F@8 G F H@8 I J A@4 F@3 K F@8 L D ~>".pickRestart({
  A: "~ x ~ x", B: "~@2 x ~@2 x!3", C: "~@2 x!2 ~@2 x ~", D: "~@3 x", E: "~@2 x ~@3 x!2", F: "~@2 x!2 ~@2 x!2",
  G: "~@6 x!2", H: "~@6 x!2 ~ x ~ x!2 ~@3", I: "~ x!2 ~ x!3 ~", J: "~@2 x ~@3 x ~ x ~ x!3 ~ x ~",
  K: "~@4 x!3 ~ x!3 ~ x!3 ~", L: "~ x ~@2",
})).gain(0.31).pan(0.3)

// drums · hihat
const hihat = s("hh").struct("<~@82 A B@7 ~@16 A B@3 C B@3 C B@3 D E ~>".pickRestart({
  A: "~@2 x!6", B: "x!8", C: "x!3 ~@2 x!3", D: "x!3 ~@5", E: "~@7 x",
})).gain(0.31).pan(0.3)

// drums · low tom
const low_tom = s("lt").struct("<~@29 A B ~@10 C ~@15 A B ~@10 C ~@20 D ~@30>".pickRestart({
  A: "~@5 x ~ x", B: "x!2 ~@6", C: "~@6 x!2", D: "x!3 ~@5",
})).gain(0.31).pan(0.3)

// drums · open hat
const open_hat = s("oh").struct("<~@119 [~@3 x] ~>").gain(0.31).pan(0.3)

// drums · mid tom
const mid_tom = s("mt").struct("<~@41 A ~@27 B ~@11 C ~@18 D E ~@19>".pickRestart({
  A: "~ x ~@2 x!2 ~@2", B: "x ~ x!4 ~@2", C: "~@4 x!3 ~", D: "~ x!2 ~ x!3 ~", E: "~@2 x ~@3 x ~ x ~ x!3 ~ x ~",
})).gain(0.31).pan(0.3)

// drums · crash
const crash = s("cr").struct("<~@22 A ~@7 A ~@19 A ~@7 A ~@23 B ~@7 A ~@15 B ~@3 A ~@3 A ~@3 A ~@2>".pickRestart({
  A: "~@3 x ~@4", B: "x",
})).gain(0.31).pan(0.3)

// drums · high tom
const high_tom = s("ht").struct("<~@41 [x ~ x!2 ~@2 x ~] ~@27 [~ x ~@2] ~@51>").gain(0.31).pan(0.3)

// drums · ride
const ride = s("rd").struct("<~@22 A ~@7 A ~@11 B ~@7 A ~@7 A ~@11 B ~@19 A ~@11 B ~@15 A ~@2>".pickRestart({
  A: "~ x", B: "x",
})).gain(0.41).pan(0.3)

stack(
  lead_8_bass_lead, overdriven_guitar, bass, kick, rim, snare, hihat, low_tom, open_hat, mid_tom, crash, high_tom, ride
)

More by INXS