Strudelify

Julianne

Ben Folds Five

KeyD majorTempo140 bpm
0:00/0:00
// Julianne — Ben Folds Five
// 140.4 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Full arrangement: all 84 bars on a 16-step grid, each part at one level. Source detail keeps the original performance.
setcpm(140.4/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 pick · "Bass"
const bass = note(`<
  A B A C D E F ~ A B A C D E G C A B A C D E G C A B A C A B A C D E G C A B A C D E G C H@2 I J H@2 K@2 A B A C D L G
  C A B A C D E G C A B A C D E G C A B A C D E G I
>`.pickRestart({
  A: "a1!8", B: "d2!7 g1", C: "d2!8", D: "b1!8", E: "e2!3 d2!5", F: "g1 ~@3", G: "g1!4 a1!4", H: "b1!4 c2!4", I: "d2",
  J: "d1", K: "[d1,d2]/2", L: "e2!4 d2!4",
})).s("gm_electric_bass_pick").gain(0.37)

// chords · piano
const piano = note(`<
  ~@8 A B C D E F G H I J K L M N@3 O P Q@2 A B C R E F G H I J K L M N@3 S@2 T ~ S@2 U@2 O P Q@2 V W X@2 A Y C R E F G
  H I J K L M N@3 I J K L M N@3
>`.pickRestart({
  A: "[d4,g4,b4]!7 [d4,g4]", B: "[d4,f#4,b4] [d4,f#4,a4]@2 [d4,f#4,a4]@2 [d4,f#4,a4]@2 c#5",
  C: "[d4,g4,b4]!5 [d4,g4]!3", D: "[d4,f#4,b4] [d4,f#4,a4]@2 [d4,f#4,a4]@2 [d4,f#4,a4]@2 ~",
  E: "[f#4,b4,d#5]!2 ~ [f#4,b4,d#5]@2 [f#4,b4,f#5]@2 [f#4,b4,f#5]", // B B5
  F: "[a4,d5,g5]!2 [a4,d5,f#5] [a4,e5]@2 [d4,f#4,a4]@2 [d4,f#4,b4]", // Dsus4 D A5 D Bm
  G: "~ [g4,b4,d5]!3 [g4,b4,d5]@2 [d4,f#4,c#5] [d4,f#4,b4]", H: "[d4,f#4,a4] [d4,f#4,a4]@2 [d4,f#4,b4]@2 [d4,f#4,a4]@3",
  I: "[c#4,e4,a4]@2 [c#4,e4,a4]@2 [c#4,e4,g4] [c#4,e4,g4]@2 [c#4,e4,a4]", // A C#dim A
  J: "[f#4,a4,d5]@2 [f#4,a4,d5]@2 ~ [f#4,a4,d5]@2 ~", K: "[e4,a4,c#5]@2 [e4,a4,c#5]@2 ~ [e4,a4,c#5]@2 ~",
  L: "[d4,f#4,a4,d5]@2 [f#4,a4,d5]@2 [f#4,a4,c#5] [f#4,a4,d5]@2 ~", // D F#m D
  M: "[f#4,b4,d#5]@2 [f#4,b4,d#5]@2 [f#4,b4,e5]!2 [f#4,b4,f#5]@2", // B Esus2 B5
  N: "[[a4,d5,g5] [a4,d5,g5]@2 [a4,e5]@2 g4!2 [c#4,e4,a4]@2 [c#4,e4,g4]@2 [c#4,e4,a4]@2 [c#4,e4,a4]@2 [d4,f#4,a4]@8 ~]/3", // Dsus4 A5 A C#dim A D
  O: "[c#5,e5,a5] b5 d6 [c#5,e5,b5]@2 [c#5,e5]@2 a4, ~@5 a5 ~@2", // A C#m7 C#m
  P: "[f#4,a4,d5] e5 a5 [a4,d5,f#5]@2 [d4,f#4,a4] [d4,f#4,b4] [d4,f#4,a4]", // D Bm D
  Q: "[[c#5,e5,a5] b5 d6 [c#5,e5,b5]@2 [c#5,e5]@2 [a4,d5,f#5]@2 [d4,f#4,a4] [d4,f#4,b4] [d4,f#4,a4]!2 [d4,f#4,b4]@3, ~@5 a5 ~@10]/2", // A C#m7 C#m D Bm D Bm
  R: "[d4,f#4,b4] [d4,f#4,a4]@2 ~ b5 a5@2 b5", S: "[d#4,f#4,b4] [d#4,f#4,b4]@2 [d#4,f#4,b4] [e4,g4,c5]@2 [e4,g4,c5]@2",
  T: "[f#4,a4,d5]", U: "[a4,d5,f#5]/2",
  V: "~ [f#4,b4,d#5]@3 [f#4,b4,d#5]@4 [f#4,b4,e5]@2 [b4,d#5,f#5]@2 [b4,d#5,f#5]@2 [b4,d#5,f#5]@2", // B Esus2 B
  W: "[a4,d5,g5]!2 [a4,d5,f#5] e5@2 [d4,a4]!2 [d4,b4], ~@3 a4 ~@4", // Dsus4 D D5 G
  X: "[~ [e1,g1,a1,b1,d2]@2 [a1,b1,d2]@2 [g1,a1]@2 [f#1,a1,d2]@8 ~]/2", // Em7 Bm7 Gsus2 D
  Y: "[d4,f#4,b4] [d4,f#4,a4]@2 a5 b5 a5@2 [c#5,b5], ~@3 [d4,f#4,a4]@2 ~@3", // Bm D C#7 D
})).s("gm_piano").gain(0.4)

// drums · kick
const kick = s("bd").struct("<~@8 A@7 ~ A@19 ~ A@8 B@2 C@2 B@2 ~ D A@6 ~@2 A@7 ~ A@15 E>".pickRestart({
  A: "x ~@2 x!2 ~@3", B: "x!4", C: "x!2 ~ x!2 ~ x ~", D: "~ x ~@2", E: "x",
})).gain(0.64)

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

// drums · low tom
const low_tom = s("lt").struct("<~@50 [~ x] ~@33>").gain(0.64)

// drums · mid tom
const mid_tom = s("mt").struct("<~@15 A ~@19 A ~@10 B@2 ~@2 C D ~@6 A@2 ~@7 A ~@16>".pickRestart({
  A: "~@6 x ~@2 x ~@2 x ~ x ~", B: "x!2", C: "~@3 x ~@2 x!2", D: "x ~@2 x ~@2 x ~",
})).gain(0.64)

// drums · open hat
const open_hat = s("oh").struct("<~@16 [x!4]!8 ~@12 [x!4]!8 ~@24 [x!4]!15 x>").gain(0.64)

// drums · crash
const crash = s("cr").struct(`<
  ~@8 A ~ A ~ A ~ A B A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~ A B A ~ A ~ A ~ A ~ C@2 D@2 C@2 A E A ~ A ~ A ~ B@2 A ~ A ~ A
  ~ A B A ~ A ~ A ~ A ~ A ~ A ~ A ~ A ~
>`.pickRestart({
  A: "x", B: "x ~ x ~@4 x ~@5 x ~@2", C: "x!4", D: "x ~ x!2 ~ x!2 ~", E: "~@4 x!3 ~",
})).gain(0.64)

// drums · high tom
const high_tom = s("ht").struct("<~@15 A ~@19 A ~@10 B@2 ~@2 B ~@7 A@2 ~@7 A ~@16>".pickRestart({
  A: "~@3 x!2 ~@6 x ~@4", B: "~ x ~@6",
})).gain(0.64)

// drums · tambourine
const tambourine = s("tb").struct("<~@8 A@7 B A@19 B A@8 ~@2 C@2 ~@2 C ~ A@6 B@2 A@7 B A@15 D>".pickRestart({
  A: "x!8", B: "~@5 x ~@10", C: "~ x ~@2", D: "x",
})).gain(0.64)

// drums · ride
const ride = s("rd").struct("<~@15 A B@8 ~@11 A B@8 ~@2 C@2 ~@10 A@2 ~@7 A B@15 A>".pickRestart({
  A: "x", B: "x!4", C: "~ x!2 ~",
})).gain(0.64)

// drums · congas
const congas = s("conga:13").struct("<~@46 [x!2]!2 ~@36>").gain(2.05)

// drums · congas
const congas_2 = s("conga:33").struct("<~@46 [~ x]!2 ~@36>").gain(2.05)

stack(bass, piano, kick, snare, low_tom, mid_tom, open_hat, crash, high_tom, tambourine, ride, congas, congas_2)

More by Ben Folds Five