Strudelify

Half The Man

Jamiroquai

KeyA majorTempo83 bpm
0:00/0:00
// Half The Man — Jamiroquai
// 83 bpm, 4/4, key A major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: Full arrangement: all 102 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(83/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.

// other · melodic tom
const melodic_tom = note("<~@32 [~@8 c4!8] ~@27 [~@5 b2 ~@2 b2 ~ b2!5 ~] ~@3 [~@5 b2 ~@2 b2 ~ b2!5 ~] ~@37>")
  .s("gm_melodic_tom").gain(0.51)

// bass · electric bass finger · "bass"
const bass = note(`<
  ~@9 A B A C A D A E F G F G F G F G A B A C A D A E ~@8 A B A C A B A C A B A C A B A C H I H J H I H J H I H J H I H
  J K L@3 M N O P@2 Q R S T@2 U V W X@3 Y Z AA@2 AB@2 ~@3
>`.pickRestart({
  A: "d3 ~ d3@5 ~ g2 ~ g2@5 ~", B: "a#2 ~ a#2@5 ~ a2 ~ a2@2 ~ c#3@3, ~@12 a2@3 ~",
  C: "a#2 ~ a#2@5 ~ a2 ~@3 a2 e2 a2@2, ~@10 a3@5 ~", D: "a#2 ~ a#2@5 ~ a2 ~ a2@2 ~ e2 a2@2, ~@6 a2 ~",
  E: "a#2 ~ a#2@5 ~ a2 ~ a2@5 ~", F: "a2 ~ a2@5 ~ d2 ~ d2@5 ~", G: "g2 ~ g2@5 ~ a2 ~ a2@5 ~",
  H: "e3 ~ e3@5 ~ a2 ~ a2@5 ~", I: "c3 ~ c3@5 ~ b2 ~ b2@2 ~ d#3@3, ~@12 b2@3 ~",
  J: "c3 ~ c3@5 ~ b2 ~@3 b2 ~ b2@2, ~@10 b3@5 ~", K: "d3 ~ d3@5 ~@2 g2 ~ g2@5",
  L: "[~@2 a#2 ~ a#2@5 ~@2 a2 ~ a2@2 ~ c#3@3 d3 ~@2 d3@5 ~ g2 ~ g2@5 ~@2 a#2 ~ a#2@5 ~@2 a2 ~, ~@5 a2 ~@10]/3",
  M: "~@2 a2 ~ e2 a2@2 d3 ~ d3@5 ~@2, a3@5 ~@11", N: "g2 ~ g2@5 ~@2 a#2 ~ a#2@5",
  O: "~ a2 ~@2 a2@2 ~ e2 a2@2 d3 ~ d3@4, ~@3 a2 ~@4", P: "[~@3 g2 ~ g2@5 ~@2 a#2 ~ a#2@5 ~@2 a2 ~ a2@5 ~@2 a2 ~]/2",
  Q: "a2@5 ~@2 d2 ~ d2@5 ~ g2", R: "~@2 g2@5 ~ a2 ~ a2@5 ~", S: "~ a2 ~ a2@5 ~@2 d2 ~ d2@4",
  T: "[~@3 g2 ~ g2@5 ~@2 a2 ~ a2@5 ~ a2 ~@2 a2@5 ~ d2 ~@2]/2", U: "d2@5 ~ g2 ~ g2@5 ~@2 a2",
  V: "~ a2@5 ~@2 a2 ~ a2@5 ~", W: "~ d2 ~ d2@5 ~@2 g2 ~ g2@4",
  X: "[~@2 a2 ~@2 a2@5 ~ a2 ~@2 a2@5 ~ d2 ~ d2@5 ~@2 g2 ~ g2@5 ~@2 a2 ~ a2@5 ~@2 a2]/3", Y: "~ a2@5 ~@2 d2 ~ d2@5 ~",
  Z: "g2 ~@2 g2@5 ~ a2 ~ a2@5", AA: "[~@2 a2 ~ a2@5 ~@2 d2 ~ d2@5 ~@2 g2 ~ g2@5 ~@3 a2 ~]/2", AB: "[a2@5 ~@3]/2",
})).s("gm_electric_bass_finger").gain(0.41)

// other · pad new age · "newage"
const pad_new_age = note(`<
  A B C@3 D E@3 F G F G F G F G H I H I H I H I F G F G F G F G ~@8 F G F G F G F G F G F G F G F G J K J K J K J K J K
  J K J K J K L M N O@2 P Q@2 R@3 S@2 T U@2 V@2 W X@2 Y Z AA@2 AB@2 AC@2
>`.pickRestart({
  A: "~@2 c4 d4", B: "b3@4 ~ d4@4 a#3@4 d4@3", C: "[~ a3@4 ~@5 c4@4 d4@4 b3@4 ~ d4@4 a#3@4 d4@4 a3@4 ~@5 c4@4]/3",
  D: "d4@4 b3@4 ~ d4@4 a#3@3", E: "[~ d4@4 a3@4 ~@5 c4@4 d4@4 b3@4 ~ d4@4 a#3@4 d4@4 a3@4 ~@5]/3", F: "c4 d4 b3 d4",
  G: "a#3 d4 a3 ~", H: "d4 c#4!2 b3", I: "g3 e3 a3 ~", J: "d4 e4 c#4 e4", K: "c4 e4 b3 ~", L: "c4@4 d4@4 ~ b3@4 d4@3",
  M: "~@2 a#3@4 d4@4 ~ a3@4 ~", N: "~@3 c4@4 ~ d4@4 b3@4", O: "[~ d4@4 a#3@4 ~ d4@4 a3@4 ~@5 c4@4 d4@4 ~]/2",
  P: "b3@4 d4@4 ~ a#3@4 d4@3", Q: "[~ a3@4 ~@5 c4@4 ~ d4@4 b3@4 ~ d4@4 a#3@4]/2",
  R: "[d4@4 ~ a3@4 ~@5 d4@4 c#4@4 ~ c#4@4 b3@4 g3@4 ~ e3@4 a3@4 ~ g3@3]/3",
  S: "[~ d4@4 c#4@4 ~ c#4@4 b3@4 ~ g3@4 e3@4 ~ a3@4]/2", T: "g3@3 ~ d4@4 ~ c#4@4 c#4@3",
  U: "[~@2 b3@4 g3@4 ~ e3@4 a3@4 g3@3 ~@2 d4@4 c#4@4]/2", V: "[~ c#4@4 b3@4 ~ g3@4 e3@4 a3@4 ~ g3@3 ~ d4@4 ~]/2",
  W: "c#4@4 c#4@4 ~ b3@4 g3@3", X: "[~ e3@4 ~ a3@4 g3@3 ~@2 d4@4 c#4@4 ~ c#4@4 b3@4]/2", Y: "g3@4 ~ e3@4 a3@4 ~ g3@2",
  Z: "~@2 d4@4 ~ c#4@4 c#4@5", AA: "[b3@4 g3@5 e3@5 a3@4 g3@3 ~@2 d4@5 c#4@4]/2", AB: "[~ c#4@5 b3@5 g3@21]/2",
  AC: "[e3@11 ~@5]/2",
})).s("gm_pad_new_age").gain(0.26)

// other · pad new age · "newage" · soft notes
const pad_new_age_soft = note("<~@18 A ~ A ~ A ~ A ~@12 B C B C ~@61>".pickRestart({
  A: "~@12 g3@3 ~", B: "d4 c#4!2 b3", C: "g3@4 e3@4 a3@4 g3@3 ~",
})).s("gm_pad_new_age").gain(0.1)

// other · electric guitar jazz · "jazz"
const electric_guitar_jazz = note("<~@17 A B@7 ~@16 A B@3 A B@3 A B@3 A B@3 ~@8 C D@3 C D@3 ~@29>".pickRestart({
  A: "~@4 d5 ~@7 d5 ~@3", B: "~@4 d5 ~@4 d5 ~@2 d5 ~@3", C: "~@4 e5 ~@7 e5 ~@3", D: "~@4 e5 ~@4 e5 ~@2 e5 ~@3",
})).s("gm_electric_guitar_jazz").gain(0.2)

// other · harmonica · "armonica"
const harmonica = note("<~@2 [~@5 f#5@3] [e5@2 d5@3 ~ b4@9 ~] ~@98>").s("gm_harmonica").gain(0.41).pan(0)

// other · harpsichord · "harpcord"
const harpsichord = note(`<
  ~@4 A B C D E ~@9 F G H I J ~@2 K L K L K L K L ~@8 K L K L K L K L K L K L K L K L ~@8 M N M N M N M N ~@4 O P Q R S
  T U V ~@17
>`.pickRestart({
  A: "~@12 a5 ~@3", B: "f#5 ~@3 a5 b5 ~ a5 g5 ~@4 g5 a5 g5", C: "f#5 ~@2 d5 e5 f#5 ~ g5 f#5 d5 ~@2 e5 ~ a5 ~",
  D: "~@2 f#5 ~@3 a5 ~ b5 a5 g5 ~@2 e5 f#5 g5", E: "a5 g5 f#5 ~@2 d5 e5 f#5 ~ g5 f#5 d5 ~@2 e5 ~", F: "~@14 d5 ~",
  G: "d6 ~@15", H: "~@14 d7 ~", I: "d7 ~@15", J: "~@12 d5@3 ~", K: "a5 ~@3 f#5 ~@3 a5 b5 a5 g5 ~@2 e5 f#5",
  L: "g5 a5 g5 f#5 ~@2 d5 e5 f#5 g5 f#5 d5 ~@2 e5 ~", M: "b5 ~@3 g#5 ~@3 b5 c#6 b5 a5 ~@2 f#5 g#5",
  N: "a5 b5 a5 g#5 ~@2 e5 f#5 g#5 a5 g#5 e5 ~@2 f#5 ~", O: "~@7 a5 ~@3 f#5 ~@4",
  P: "a5 b5 a5 g5 ~@2 e5 f#5 ~ g5 a5 g5 f#5 ~@2 d5", Q: "e5 f#5 g5 ~ f#5 d5 ~@2 e5 ~ a5 ~@4 f#5",
  R: "~@3 a5 b5 a5 g5 ~@3 e5 f#5 g5 a5 g5 f#5", S: "~@3 d5 e5 f#5 g5 f#5 d5 ~@2 e5 ~@2 a4 ~", T: "~@4 d5 ~@2 a5@5 ~@4",
  U: "~@6 a6 ~ a6@5 ~@3", V: "~@12 d5!2 ~@2",
})).s("gm_harpsichord").gain(0.36)

// chords · rock organ · "orgue"
const rock_organ = note(`<
  ~@25 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 C D C D E D E D C D C D C D C D ~@29
>`.pickRestart({
  A: "a4 f#4 a4 g4", B: "e4!2", C: "[d4,b4] [e4,g#4] [c#4,b4] [e4,a4]", D: "[c4,f#4] e4 [b3,f#4] ~",
  E: "[d4,c#5] [e4,b4] [c#4,b4] [e4,a4]", // Dmaj7 E5 C#7 A5
})).s("gm_rock_organ").gain(0.2)

// chords · rock organ · "orgue" · soft notes
const rock_organ_soft = note("<~@25 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 ~@45>".pickRestart({
  A: "c4 d4 b3 d4", B: "a#3 d4 a3@2",
})).s("gm_rock_organ").gain(0.1)

// chords · acoustic guitar nylon · "seche"
const acoustic_guitar_nylon = note("<~@33 A B@3 C D E F ~@61>".pickRestart({
  A: "[g3,g4] g4!2 ~ [g4,b4] ~ [g4,b4] ~ [g4,a4] ~ a4 f#4 ~ f4 ~ e4", // G Gsus2
  B: "[~ e4 ~ e4 d4 ~ d4 ~ [d4,f#4]@2 f#4 e4 ~ e4 ~ [b4,d5]@2 [b4,d5]!2 ~ [g4,b4]!2 ~ [e4,a4]!2 ~ [e4,a4] [d#4,f4] ~ [d#4,f4] ~ [g3,e4]@2 ~ d4 ~@2 [g3,e4]@3 [c4,d4]@2 d4!3 g4 ~@2]/3", // D Bm G A5 D#sus2 C Csus2
  C: "~ d5 b4 a4 d5 ~ b4 ~ [d4,a4,c#5] ~ [d4,c#5] [d4,c#5]@2 [d4,c#5] ~ [a4,d5]", // Dmaj7 D5
  D: "~ b4 ~ b4!2 ~ [d4,d5] ~ d5 ~ b4 d5 ~ [f#4,d5,f#5] ~ [f#4,d5,f#5]", // D
  E: "~ f#5 ~ f#5 [f#4,e5]@2 [f#4,e5]@2 [f#4,e5] ~ e5 d5 ~ d5 ~ [b4,e5]", // F#7 E5
  F: "~ [b4,e5] ~ e5 [b4,d5] ~ [b4,d5] ~ d5 ~ b4 [b4,d5] ~ [e4,b4,e5]@3", // E5 Bm E5
})).s("gm_acoustic_guitar_nylon").gain(0.36)

// other · electric guitar jazz · "voix"
const electric_guitar_jazz_2 = note("<~@9 A@4 B C B D A@2 E@2 B C B D A@2 F ~@74>".pickRestart({
  A: "[a4 ~ b4 d5 ~ e5 ~ f#5@5 ~@3 a5@3 g5 f5@2 f5@2 f5 ~ d5 d5@2 ~@4]/2", B: "f#5 ~ e5!2 ~ d5 ~ d5@3 ~@6",
  C: "c5!2 ~ c5 ~ d5 ~ f5@2 ~ d5!2 ~@4", D: "c5!2 ~ c5 ~ d5 ~ f5@2 d5 ~ d5 ~@4",
  E: "[a4 ~ b4 d5 ~ e5 ~ f5 ~@2 d5 ~@4 a5@3 g5 f5@2 f5@2 f5 ~ d5 d5@2 ~@4]/2", F: "a4 ~@15",
})).s("gm_electric_guitar_jazz").gain(0.41)

// chords · pad warm · "synthe"
const pad_warm = note(`<
  ~@37 A B A B ~@24 C D C D C D C D E F G H@2 I J@2 K@3 L@2 M N@2 O@2 P Q@2 R@2 S@2 T ~ U ~
>`.pickRestart({
  A: "[d4,f#4] [c#4,e4]!2 [b3,d4]", B: "[g3,b3] [e3,a3] [a3,d4,e4] [g3,c#4]", C: "[d4,b4] [e4,g#4] [c#4,b4] [e4,a4]",
  D: "[c4,f#4] e4 [b3,f#4] ~", E: "[c4,a4]@4 [d4,f#4]@4 ~ [b3,a4]@4 [d4,g4]@3", F: "~@2 [a#3,e4]@4 d4@4 ~ [a3,e4]@4 ~",
  G: "~@3 [c4,a4]@4 ~ [d4,f#4]@4 [b3,a4]@4", // F D B7
  H: "[~ [d4,g4]@4 [a#3,e4]@4 ~ d4@4 [a3,e4]@4 ~@5 [c4,a4]@4 [d4,f#4]@4 ~]/2", // G5 A#dim A5 F D
  I: "[b3,a4]@4 [d4,g4]@4 ~ [a#3,e4]@4 d4@3", // B7 G5 A#dim
  J: "[~ [a3,e4]@4 ~@5 [c4,a4]@4 ~ [d4,f#4]@4 [b3,a4]@4 ~ [d4,g4]@4 [a#3,e4]@4]/2", // A5 F D B7 G5 A#dim
  K: "[d4@4 ~ [a3,e4]@4 ~@5 [d4,f#4]@4 [c#4,e4]@4 ~ [c#4,e4]@4 [b3,d4]@4 [g3,b3]@4 ~ [e3,a3]@4 [a3,d4]@4 ~ [g3,c#4]@3]/3", // A5 D C#m Bm G A5 D5 Gdim
  L: "[~ [d4,f#4]@4 [c#4,e4]@4 ~ [c#4,e4]@4 [b3,d4]@4 ~ [g3,b3]@4 [e3,a3]@4 ~ [a3,d4]@4]/2", // D C#m Bm G A5 D5
  M: "[g3,c#4]@4 [d4,f#4]@4 ~ [c#4,e4]@4 [c#4,e4]@3", // Gdim D C#m
  N: "[~@2 [b3,d4]@4 [g3,b3]@4 ~ [e3,a3]@4 [a3,d4]@4 [g3,c#4]@4 ~ [d4,f#4]@4 [c#4,e4]@4]/2", // Bm G A5 D5 Gdim D C#m
  O: "[~ [c#4,e4]@4 [b3,d4]@4 ~ [g3,b3]@4 [e3,a3]@4 [a3,d4]@4 ~ [g3,c#4]@4 [d4,f#4]@4 ~]/2", // C#m Bm G A5 D5 Gdim D
  P: "[c#4,e4]@4 [c#4,e4]@4 ~ [b3,d4]@4 [g3,b3]@3", // C#m Bm G
  Q: "[~ [e3,a3]@4 ~ [a3,d4]@4 [g3,c#4]@4 ~ [d4,f#4]@4 [c#4,e4]@4 ~ [c#4,e4]@4 [b3,d4]@4]/2", // A5 D5 Gdim D C#m Bm
  R: "[[g3,b3]@4 ~ [e3,a3]@4 [a3,d4]@4 ~ [g3,c#4]@4 [d4,f#4]@4 ~ [c#4,e4]@4 [c#4,e4]@5]/2", // G A5 D5 Gdim D C#m
  S: "[[b3,d4]@4 [g3,b3]@5 [e3,a3]@5 [a3,d4]@4 c#4@5 [d4,f#4]@5 [c#4,e4]@4, ~@18 g3@3 ~@11]/2", // Bm G A5 D5 D C#m
  T: "~ [c#4,e4]@5 [b3,d4]@5 [g3,b3]@5", U: "[e3,a3]@5 ~ [a3,d4]@5 [g3,c#4]@5",
})).s("gm_pad_warm").gain(0.15)

// other · reed organ · "orgue2"
const reed_organ = note("<~@57 A@2 B C D@2 E@2 B F B F B F B F ~@29>".pickRestart({
  A: "[~ g#4 ~ a4 f#4@2 f#4@2, b4 b4@3]/2", B: "b4 g#4 b4 a4", C: "f#4!2", D: "[~ b4!2 a4 f#4@2 f#4@2, c#5]/2",
  E: "[~ b4!2 ~ f#4@2 f#4@2, c#5 ~, ~@3 a4@4 ~]/2", F: "f#4 ~ f#4 ~",
})).s("gm_reed_organ").gain(0.46)

// other · percussive organ · "orgue2"
const percussive_organ = note("<~@57 A B A B A B A B A C A C A C A C ~@29>".pickRestart({
  A: "d4 e4 c#4 e4", B: "c4 e4 b3@2", C: "c4 e4 b3 ~",
})).s("gm_percussive_organ").gain(0.36)

// other · church organ
const church_organ = note("<~@65 A@2 B@2 A@2 C@2 ~@29>".pickRestart({
  A: "[e5@7 f#5]/2", B: "[~@6 g#6 f#6, e5@7 ~]/2", C: "[~@24 g#6@4 f#6@3 ~, e5@7 ~]/2",
})).s("gm_church_organ").gain(0.46)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@8 A B C B C B C D C B C B C B C B C B C B C E C D C F ~ F ~ F ~ F ~ B C B C B C B C B C B C B C B C B C B C B C B C
  B C B C B C B C ~@29
>`.pickRestart({
  A: "~@3 x", B: "~@8 x ~@2 x ~@4", C: "~ x", D: "~@8 x ~@2 x!2 ~@3", E: "x ~@7 x ~@2 x ~@4", F: "~@11 x ~@4",
})).gain(0.2)

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

// drums · clap
const clap = s("cp").struct("<~@9 [~ x ~ x]!14 [~ x ~@2] [~ x ~ x]!15 [~ x ~@2] [~ x ~ x]!33 ~@29>").gain(0.2)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@8 A ~ B C B ~ B ~@3 B C B ~ B ~@3 B C B D B ~@3 B C B ~ B ~@3 B C B D B C B D B C B D B C B C B D B C B D B D B C B
  D B C ~@30
>`.pickRestart({
  A: "~@11 x!2 ~@3", B: "~@15 x", C: "~@11 x ~@4", D: "x",
})).gain(0.1)

// drums · low tom
const low_tom = s("lt").struct("<~@8 [~@11 x!2 ~ x ~] ~@51 [~@3 x ~@4] ~@3 [~@3 x ~@4] ~@37>").gain(0.31)

// … 91 more lines

More by Jamiroquai