Strudelify

When You Gonna Learn (Digeridoo)

Jamiroquai

KeyC minorTempo107 bpm
0:00/0:00
// When You Gonna Learn (Digeridoo) — Jamiroquai
// 107 bpm, 4/4, key C minor. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 5 "trompette2" brass section (copy of ch 4 "trompette1" trumpet)
// note: Full arrangement: all 85 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(107/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 · violin
const violin = note(`<
  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 ~@12 A B C D A B C D ~@21
>`.pickRestart({
  A: "c5@3 ~@7 bb4@3 ~ c5@2", B: "~@2 bb4 ~ c5@3 ~@7 eb5 ~", C: "d5 ~ d5 ~@3 g4@3 ~ bb4@3 ~ g4 ~",
  D: "c5 ~ c5 ~@3 c5@3 ~ bb4@3 ~ bb4 ~",
})).s("gm_violin").gain(0.15)

// chords · violin
const violin_2 = note(`<
  A B C D A B C D A B C D A B C D A B C D E ~@7 A B C D A B C D A B C D A B C D E ~@3 F@8 A B C D A B C D E ~@7 E ~@12
>`.pickRestart({
  A: "~@2 c4 ~@3 eb4@3 ~ [c4,eb4] ~ f4@2 bb3 ~, eb4@4 ~@2 c4 ~@9", // Cm
  B: "~@2 ab3 ~@3 g4@4 g4@3 ~ [bb3,f4] ~, g4@4 ~@2 ab3 ~@3 g3 ~@5", // Bb5
  C: "~@2 c4 ~@3 g4@3 ~ g4@3 ~ [bb3,g4] ~, g4@4 ~@2 c4 ~@3 c4 ~@5", // Eb
  D: "~@2 f3 ~@3 f4@3 ~ f4@3 ~ [bb3,f4] ~, f4@4 ~@2 f3 ~@3 g3 ~@5", E: "eb4 ~@3", F: "[g6, eb4 ~@31]/8",
})).s("gm_violin").gain(0.15).pan(1)

// bass · contrabass
const bass = note(`<
  A B C B A B C B A B C B A B C B A B C B ~@8 A B C B A B C B A B C B A B C B ~@12 A B C B A B C B ~@21
>`.pickRestart({
  A: "c3@3 ~@5 g3@3 ~ d3@3 ~", B: "f2@3 ~ f2@3 ~ g3@3 ~ d3@3 ~", C: "e2@3 ~ e2@3 ~ g3@3 ~ d3@3 ~",
})).s("gm_contrabass").gain(0.2).pan(1)

// chords · trumpet · "trompette1"
const trumpet = note(`<
  ~@3 A B C@2 A B D@2 A E F G A B D@2 A B H ~ I ~ H ~ I ~ C@2 A B D@2 A E F J A B D@2 A B H ~ I ~@9 K@2 A B D@2 A B H ~
  I ~ H ~ I B H ~ I ~@9
>`.pickRestart({
  A: "~@8 c4 ~ g4 f4 ~ f4 eb4 ~", B: "c4@3 ~@13", C: "[g4@2 ~@12 f4 g4@2 ~@13 g4 ~]/2",
  D: "[g4@2 ~@12 [f4,bb4] [g4,c5]@2 ~@13 [g4,c5] ~]/2", E: "c4@3 ~@11 [f4,bb4] [g4,c5]", F: "~@7 g4",
  G: "~@14 [eb4,g4] [g4,c5]", H: "[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3",
  I: "[c4,f4,ab4]@2 ~ [c4,f4,ab4] ~@2 [c4,g4]@9 ~", J: "~@14 g4 c5", K: "[g4@2 ~@13 g4@2 ~@13 g4 ~]/2",
})).s("gm_trumpet").gain(0.26).pan(1)

// chords · trumpet · "trompette1" · soft notes
const trumpet_soft = note("<~@77 A ~ B ~ A ~ B ~>".pickRestart({
  A: "[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3", // D7 Dbmaj7
  B: "[c4,f4,ab4]@2 ~ [c4,f4,ab4] ~@2 [c4,g4]@9 ~", // Fm C5
})).s("gm_trumpet").gain(0.05).pan(1)

// chords · baritone sax · "sax1"
const baritone_sax = note(`<
  ~@3 A B C@2 A B D@2 A E@2 F A B D@2 A G H I J I H I J ~ C@2 A B D@2 A E@2 K A B D@2 A G H I J ~@9 L@2 A B D@2 A G H I
  J I H I J G H I J I ~ M ~@6
>`.pickRestart({
  A: "~@8 c4 ~ g4 f4 ~ f4 eb4 ~", B: "c4@3 ~@13", C: "[g4@2 ~@12 f4 g4@2 ~@13 g4 ~]/2",
  D: "[g4@2 ~@12 [f4,bb4] [g4,c5]@2 ~@13 [g4,c5] ~]/2", E: "[c4@3 ~@11 [f4,bb4] [g4,c5]@2 ~@13 g4@2]/2",
  F: "~@14 [eb4,g4] [g4,c5]", G: "c4@3 ~ g3 bb3 ~ c4 ~ eb4 ~ f4 g4 f4 eb4 ~",
  H: "[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3", I: "~@4 g3 bb3 ~ c4 ~ eb4 ~ f4 g4 f4 eb4 ~",
  J: "[c4,f4,ab4]@2 ~ [c4,g4,bb4] ~@2 [c4,g4]@9 ~", K: "~@14 g4 c5", L: "[g4@2 ~@13 g4@2 ~@13 g4 ~]/2",
  M: "~@4 g3 bb3 ~ c4 ~ eb4 ~ f4 g4 ~@3",
})).s("gm_baritone_sax").gain(0.26).pan(1)

// chords · baritone sax · "sax1" · soft notes · D7 Dbmaj7 Fm C7 C5 D7 Dbmaj7
const baritone_sax_soft = note(`<
  ~@77
  [[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3]
  [~@13 f4 eb4 ~]
  [[c4,f4,ab4]@2 ~ [c4,g4,bb4] ~@2 [c4,g4]@9 ~]
  [~@4 g3 bb3 ~ c4 ~ eb4 ~ f4 g4 f4 eb4 ~]
  [[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3]
  [~@4 g3 bb3 ~ c4 ~ eb4 ~ f4 g4 f4 eb4 ~]
  ~@2
>`).s("gm_baritone_sax").gain(0.05).pan(1)

// chords · tenor sax · "vent"
const tenor_sax = note(`<
  ~@3 A B C@2 A B D@2 A E@2 F A B D@2 A G H I J I H I J ~ K@2 A B D@2 A E@2 L A B D@2 A G H I J ~@9 C@2 A B D@2 A G H I
  J I H I J M H N J O H P ~@6
>`.pickRestart({
  A: "~@8 c4 ~ g4 f4 ~ f4 eb4 ~", B: "c4@3 ~@13", C: "[g4@2 ~@13 g4@2 ~@13 g4 ~]/2",
  D: "[g4@2 ~@12 [f4,bb4] [g4,c5]@2 ~@13 [g4,c5] ~]/2", E: "[c4@3 ~@11 [f4,bb4] c5@4 ~@11 g4@2, ~@15 g4@2 ~@15]/2",
  F: "~@14 [eb4,g4] [g4,c5]", G: "c4@3 ~ g3 bb3 ~ c4 ~ eb4 ~ f4 g4 f4 eb4 ~",
  H: "[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3", I: "~@4 g3 bb3 ~ c4 ~ eb4 ~ f4 g4 f4 eb4 ~",
  J: "[c4,f4,ab4]@2 ~ [c4,g4,bb4] ~@2 [c4,g4]@9 ~", K: "[g4@2 ~@12 f4 g4@2 ~@13 g4 ~]/2", L: "~@14 g4 c5",
  M: "c5@3 c5 ~@2 c5 ~@3 c5 ~ bb4 c5 ~@2", N: "c5@3 c5 ~@2 c5 ~@3 c5 ~ bb4 c5!2 ~",
  O: "c5@3 c5 ~@2 c5 ~@3 c5!2 bb4 c5 ~@2", P: "c5@3 c5 ~@12",
})).s("gm_tenor_sax").gain(0.31).pan(0.9)

// chords · tenor sax · "vent" · soft notes · Fm C7 C5 D7 Dbmaj7 Fm C7 C5
const tenor_sax_soft = note(`<
  ~@78
  [~@6 c5 ~@3 c5 ~ bb4 c5 ~@2]
  [[c4,f4,ab4]@2 ~ [c4,g4,bb4] ~@2 [c4,g4]@9 ~]
  [c5@3 c5 ~@2 c5 ~@3 c5 ~ bb4 c5 ~@2]
  [[c4,d4,a4,c5] ~@2 [c4,d4,a4,c5] ~@2 [db4,ab4,c5]@9 ~, ~@6 c4@7 ~@3]
  [c5@3 c5 ~@2 c5 ~@3 c5 ~ bb4 c5 ~@2]
  [[c4,f4,ab4]@2 ~ [c4,g4,bb4] ~@2 [c4,g4]@9 ~]
  ~
>`).s("gm_tenor_sax").gain(0.05).pan(0.9)

// bass · electric bass finger · "bass"
const bass_2 = note(`<
  ~@3 A B C D E B C D E B C D E B C D E F G H I F G H J B C D E B C D E B C D E B C D E F G H I F K H I F K H J B C D E
  B C D E F G H I F G H J F G H I L ~@8
>`.pickRestart({
  A: "~@12 eb2@3 ~", B: "~@3 g2@3 c3 ~@2 c3 d2@2 eb2@2 e2@2, c2@7 ~@9", C: "f2@3 c2@3 ~@4 f2@2 d2@2 f2@2, ~@6 f1@7 ~@3",
  D: "e2@3 b1@3 e2@4 e2@3 b1 e2@2", E: "f2@3 c2@3 f2@2 ~@2 bb2@2 ~@2 b2@2, ~@2 bb1 b1",
  F: "~ bb2 ~ bb2 ~ bb2 ~ bb2, bb1!4", G: "[d2,d3]@3 [d3,d4] ~@2 [db2,db3]@4 [db3,db4] ~@2 [db3,db4] ~@2",
  H: "~ c3 ~ c3 ~ g2 ~ c3, c2@4 c2@7 ~ c2@4, ~@8 g1@7 ~",
  I: "[db2,db3]@3 [db2,db3] ~@2 [c2,c3]@4 [c2,c3] ~@2 [c2,c3] ~@2", // Db C
  J: "[db2,db3]@3 [db2,db3] ~@2 [f1,f2]@4 [f2,f3] ~@2 [f2,f3] ~@2", K: "[d2,d3]@3 d3 ~@2 [db2,db3]@4 db3 ~@2 db3 ~@2",
  L: "~ bb2 ~ bb2 bb1@2 ~@2, bb1!2 ~@2",
})).s("gm_electric_bass_finger").gain(0.41)

// bass · electric bass finger · "bass" · soft notes
const bass_soft = note("<~@76 A B C D E B C D ~>".pickRestart({
  A: "~@5 bb2 ~ bb2, ~@3 bb1", B: "[d2,d3]@3 [d3,d4] ~@2 [db2,db3]@4 [db3,db4] ~@2 [db3,db4] ~@2",
  C: "~ c3 ~ c3 ~ g2 ~ c3, c2@4 c2@7 ~ c2@4, ~@8 g1@7 ~",
  D: "[db2,db3]@3 [db2,db3] ~@2 [f1,f2]@4 [f2,f3] ~@2 [f2,f3] ~@2", E: "~ bb2 ~ bb2 ~ bb2 ~ bb2, bb1!4",
})).s("gm_electric_bass_finger").gain(0.15)

// other · pan flute · "flute"
const pan_flute = note("<~@19 A B A B A B A B ~@16 A B A B ~@17 B A B A B A B ~ C D B A E D B A F ~@4>".pickRestart({
  A: "~@14 b5 ~", B: "c6@5 ~@11", C: "f6!2 ~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~@2", D: "g6@2 f6 eb6 ~@2 c6@5 ~@3 b5 ~",
  E: "f6!2 ~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~@2, c6@5 ~@11", F: "c6@5 ~@11, f6 ~@15",
})).s("gm_pan_flute").gain(0.26).pan(1)

// other · pan flute · "flute" · soft notes
const pan_flute_soft = note(`<
  ~@80
  [~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~ f6 ~@2]
  [g6@2 f6 eb6 ~@2 c6@5 ~@3 b5 ~]
  [c6@5 ~@11]
  [~@14 b5 ~]
  [c6@5 ~@11]
>`).s("gm_pan_flute").gain(0.1).pan(1)

// other · piano · "piano 2"
const piano = note("<~@20 A@2 B@2 A@2 B@2 ~@16 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 C ~@8>".pickRestart({
  A: "[bb2@3 ~ f2 bb2 ~ bb2@4 bb2@3 ~@2 a2@3 a2@3 ab2@2 g2 ab2 ~ g2 ab2 ~@3, ~@14 bb2@5 ~@13]/2",
  B: "[g2@3 ~ c2 g2 ~ g2@4 g2@3 ~@2 ab2@3 ab2@3 g2 ~ g2!2 ~ g2 g2@4, ~@14 g2@5 ~@13]/2", C: "bb2@3 ~@13",
})).s("gm_piano").gain(0.15).pan(0)

// other · piano · "piano 2" · soft notes
const piano_soft = note("<~@76 A@2 B@2 C@2 B@2 ~>".pickRestart({
  A: "[~@4 f2 bb2 ~ bb2@4 bb2@3 ~@2 a2@3 a2@3 ab2@2 g2 ab2 ~ g2 ab2 ~@3, ~@14 bb2@5 ~@13]/2",
  B: "[g2@3 ~ c2 g2 ~ g2@4 g2@3 ~@2 ab2@3 ab2@3 g2 ~ g2!2 ~ g2 g2@4, ~@14 g2@5 ~@13]/2",
  C: "[bb2@3 ~ f2 bb2 ~ bb2@4 bb2@3 ~@2 a2@3 a2@3 ab2@2 g2 ab2 ~ g2 ab2 ~@3, ~@14 bb2@5 ~@13]/2",
})).s("gm_piano").gain(0.05).pan(0)

// other · percussive organ
const percussive_organ = note("<~@55 A B C B D E C B C B C B C B C B F ~@13>".pickRestart({
  A: "~@7 g4", B: "bb4 c5 eb5 f5 eb5 c5 bb4 c5", C: "eb5@2 c5@2 eb5@3 ~@7 g4@2",
  D: "eb5@2 c5@2 gb5@2 f5@3 ~ eb5@3 ~ eb5@2", E: "gb5 f5 eb5 f5 eb5 c5 bb4 c5", F: "eb5@2 c5@2 eb5@3 ~@9",
})).s("gm_percussive_organ").gain(0.26).pan(1)

// drums · kick
const kick = s("bd").struct("<~@4 A@16 B@7 C A@10 D A@5 B@11 C A@8 B@7 C B@7 C B@3 C ~>".pickRestart({
  A: "x ~@2 x!2 ~ x ~@3 x ~ x!2 ~@2", B: "x!2", C: "x!3 ~", D: "x ~@3 x ~ x ~@3 x ~ x!2 ~@2",
})).gain(0.41)

// drums · clap
const clap = s("cp").struct("<~@4 [~ x ~ x]!69 ~@12>").gain(0.41)

// drums · clap · soft notes
const clap_soft = s("cp").struct("<~@73 [~ x ~ x]!11 ~>").gain(0.15)

// drums · snare
const snare = s("sd").struct("<~@4 A@15 B C@7 D A@9 E F A@4 B C@11 D A@7 B C@7 D C@4 G ~@8>".pickRestart({
  A: "~ x ~ x", B: "~@4 x ~@3 x ~ x!2 ~ x!2 ~", C: "~@4 x ~@4 x ~@2 x ~@2 x", D: "~@6 x ~@2 x ~@2 x ~ x!2",
  E: "~@4 x ~@7 x ~@2 x", F: "~@2 x!2 ~@2 x ~", G: "~ x ~@2",
})).gain(0.41)

// drums · snare · soft notes
const snare_soft = s("sd").struct(`<
  ~@76
  [~@9 x ~@2 x ~@2 x]
  [~@4 x ~@4 x ~@2 x ~@2 x]!2
  [~@6 x ~@2 x ~@2 x ~ x!2]
  [~@4 x ~@4 x ~@2 x ~@2 x]!3
  [~@6 x ~@2 x ~@2 x ~ x!2]
  ~
>`).gain(0.15)

// drums · hihat
const hihat = s("hh").struct(`<
  ~@4 A@16 ~ B ~ B ~ B ~ B A@16 ~ B ~ B ~ B ~ B ~ B ~ B A@8 ~ B ~ B ~ B ~ B ~@13
>`.pickRestart({
  A: "x!5 ~ x!2", B: "x!3 ~@5",
})).gain(0.41)

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~@73 A ~ A ~ A ~ A ~ A ~ A ~>".pickRestart({
  A: "x!3 ~@5",
})).gain(0.15)

// drums · open hat
// … 81 more lines

More by Jamiroquai