Strudelify
Been Around the World cover art

Been Around the World

Puff Daddy

KeyB majorTempo96 bpm
0:00/0:00
// Been Around the World — Puff Daddy
// 96 bpm, 4/4, key B major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: duplicate parts dropped: ch 7 electric guitar clean (copy of ch 3 clavinet)
// note: Full arrangement: all 64 bars on a 32-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 · fretless bass
const bass = note(`<
  ~@3 A B C D E F D E G H I J K I J K I J L M N O P@2 D E F D E B C D E F D E G H I J K I J K I J L M N O P@2 D E F D E
  Q D@2 ~
>`.pickRestart({
  A: "c#2@2 ~@2 c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~ c#2@3 ~", B: "g#1@2 ~ g#1 f#1@2 ~@2 f1@2 ~@2 d#1@2 ~@2",
  C: "g#1@3 ~@3 g#1 ~ f#1@4 g1@3 ~ g#1@5 ~@11", D: "g#1@4 ~@2 g#1 ~ f#1@5 ~@3 f1@4 ~@4 d#1@8",
  E: "c#2@5 ~ c#2 ~ b1@7 ~ a#1@6 ~@2 f#1@7 ~", F: "e1@5 ~ e1 ~ e1@3 ~ e1@3 ~ e1@4 ~@8 g1@2 g#1 ~",
  G: "~ g#1@4 ~@2 g#1@2 f#1@4 ~@4 f1@4 ~@4 d#1@4 ~@3", H: "~ g#1@3 ~@3 g#1 ~ f#1@4 g1@3 ~ g#1@5 ~@10",
  I: "~ g#1@4 ~@2 g#1 ~ f#1@5 ~@3 f1@4 ~@4 d#1@7", J: "~ c#2@5 ~ c#2 ~ b1@7 ~ a#1@6 ~@2 f#1@7",
  K: "~ e1@5 ~ e1 ~ e1@3 ~ e1@3 ~ e1@4 ~@8 g1@2 g#1", L: "~@2 e1@5 ~ e1 ~ e1@3 ~ e1@3 ~ e1@4 ~@8 g1@2",
  M: "g#1 ~ g#1@4 ~@2 g#1 ~ f#1@5 ~@3 f1@4 ~@4 d#1@6", N: "~@2 c#2@5 ~ c#2 ~ b1@7 ~ a#1@6 ~@2 f#1@6",
  O: "~@4 e1@5 ~ e1 ~ e1@3 ~ e1@3 ~ e1@4 ~@8",
  P: "[g1@2 g#1 ~ g#1@4 ~@2 g#1 ~ f#1@5 ~@3 f1@4 ~@8 g#1@3 ~@3 g#1 ~ f#1@4 g1@3 ~ g#1@5 ~@11, ~@7 d#1@2 ~@7]/2",
  Q: "~@2 e1@5 ~@2 e1 e1@3 ~ e1@3 ~ e1@4 ~@8 g1@2",
})).s("gm_fretless_bass").gain(0.72)

// chords · clavinet
const clavinet = note(`<
  ~@2 A B C ~ D ~ E D ~ F ~ G ~ H G ~ H G ~ I J ~ K L ~ D ~ E D ~ C ~ D ~ E D ~ F ~ G ~ H G ~ H G ~ I J ~ K L ~ D ~ E D
  ~ M D ~@2
>`.pickRestart({
  A: "[c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3 [c#3,f3,g#3,c#4] ~@3", // C#
  B: "[c#3,f3,g#3,b3] ~@5 [c#3,f3,g#3,b3] ~ [f3,g#3,b3] ~@5 [c#3,f3,g#3,b3] ~ [c#3,f3]@2 ~@4 [c#3,f3,g#3,b3] ~ [c#3,f3,g#3,b3] ~@3 [c#3,f3,g#3,b3] ~@3, ~@8 c#3@2 ~@6 [g#3,b3] ~@15", // C#7 Fdim C#7 C# C#7 G#m
  C: "[f#3,b3,c#4]@5 ~ [f#3,b3,c#4] ~ [f#3,b3,c#4]@5 ~ [f#3,b3,c#4] ~ [f#3,b3,c#4] ~@3 [f#3,b3,c#4] ~@11", // F#sus4
  D: "[f3,b3,d#4] ~@3 [f3,b3,d#4] ~@3 [f3,b3,d#4] ~ [f3,b3,d#4]@3 ~ [f3,b3,d#4]@5 ~ [f3,b3,d#4]@3 ~@9", // Fm7b5
  E: "[g#3,c#4,e4]@5 ~ [g#3,c#4,e4] ~ [g#3,c#4,e4]@6 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@10", // C#m
  F: "~ [f#3,b3,c#4]@5 ~ [f#3,b3,c#4] ~ [f#3,b3,c#4]@5 ~ [f#3,b3,c#4] ~ [f#3,b3,c#4] ~@3 [f#3,b3,c#4] ~@10", // F#sus4
  G: "~ [f3,b3,d#4] ~@3 [f3,b3,d#4] ~@3 [f3,b3,d#4] ~ [f3,b3,d#4]@3 ~ [f3,b3,d#4]@5 ~ [f3,b3,d#4]@3 ~@8", // Fm7b5
  H: "~ [g#3,c#4,e4]@5 ~ [g#3,c#4,e4] ~ [g#3,c#4,e4]@6 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@9", // C#m
  I: "~@2 [g#3,c#4,e4]@5 ~ [g#3,c#4,e4] ~ [g#3,c#4,e4]@6 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@8", // C#m
  J: "~@2 [f3,b3,d#4] ~@3 [f3,b3,d#4] ~@3 [f3,b3,d#4] ~ [f3,b3,d#4]@3 ~ [f3,b3,d#4]@5 ~ [f3,b3,d#4]@3 ~@7", // Fm7b5
  K: "~@4 [g#3,c#4,e4]@5 ~ [g#3,c#4,e4] ~ [g#3,c#4,e4]@6 [g#3,c#4,e4] ~ [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@6", // C#m
  L: "~@4 [f3,b3,d#4] ~@3 [f3,b3,d#4] ~@3 [f3,b3,d#4] ~ [f3,b3,d#4]@3 ~ [f3,b3,d#4]@5 ~ [f3,b3,d#4]@3 ~@5", // Fm7b5
  M: "~@2 [g#3,c#4,e4]@5 ~@2 [g#3,c#4,e4] [g#3,c#4,e4]@6 ~ [g#3,c#4,e4] [g#3,c#4,e4]@2 ~@2 [g#3,c#4,e4]@2 ~@8", // C#m
})).s("gm_clavinet").gain(0.56)

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

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

// drums · clap
const clap = s("cp").struct("<~@4 A@7 B@10 C@3 D@2 A@13 B@10 C@3 D@2 A@6 C A@2 ~>".pickRestart({
  A: "~ x ~ x", B: "~@9 x ~@15 x ~@6", C: "~@5 x ~@7 x ~@2", D: "~@3 x ~@3 x",
})).gain(0.48)

// drums · hihat
const hihat = s("hh").struct(`<
  A ~@3 B C B C B@2 C D E D E D@2 E D@2 E F@2 G H@2 I B C B@2 C B C B C B@2 C D E D E D@2 E D@2 E F@2 G H@2 C B C B@2 C
  F B@2 ~
>`.pickRestart({
  A: "x!4", B: "x!7 ~", C: "x ~ x ~ x ~ x!3 ~ x ~ x ~@3", D: "~ x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@3 x ~@6",
  E: "~ x ~@3 x ~@3 x ~@3 x ~ x ~ x ~@3 x ~@3 x ~@6", F: "~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2",
  G: "~ x ~ x ~ x ~ x!3 ~ x ~ x ~@2", H: "~ x!7", I: "~@2 x ~ x ~ x!3 ~ x ~ x ~@3",
})).gain(0.56)

// drums · open hat
const open_hat = s("oh").struct("<~@4 A@7 B@10 C@3 ~ D E A@12 B@10 C@3 ~ D E A@5 C A@2 ~>".pickRestart({
  A: "~@7 x", B: "~@29 x ~@2", C: "~@15 x", D: "x", E: "x ~@6 x",
})).gain(0.48)

// drums · crash
const crash = s("cr").struct("<~@3 [x!4] x ~@59>").gain(0.56)

// drums · claves
const claves = s("clave:2").struct(`<
  ~@5 A B C B@2 C ~ D E F E@2 F E@2 F G@2 H I@2 A B C B@2 C ~ A B C B@2 C ~ D E F E@2 F E@2 F G@2 H I@2 A B C B@2 C J
  B@2 ~
>`.pickRestart({
  A: "~@3 x ~@2 x!2 ~ x!2 ~@2 x!2 ~", B: "~ x ~@14", C: "~@3 x!2 ~ x!9 ~", D: "~@7 x ~@5 x ~ x ~@3 x ~ x ~@5 x ~ x ~@2",
  E: "~@3 x ~@28", F: "~@7 x ~ x ~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@2", G: "~ x ~@6", H: "~@4 x!2 ~ x!9",
  I: "~@3 x ~@12", J: "~@5 x ~@26",
})).gain(1.18)

// drums · claves · soft notes
const claves_soft = s("clave:2").struct(`<
  ~@5 A ~@2 B ~@3 C ~@2 D ~@2 D ~@2 E ~@2 F ~ A ~@2 B ~@3 A ~@2 B ~@3 C ~@2 D ~@2 D ~@2 E ~@2 F ~ A ~@2 B ~@2 E ~@3
>`.pickRestart({
  A: "~@11 x ~@4", B: "x!2 ~@6", C: "~@23 x ~@8", D: "~ x ~@3 x ~@26", E: "~ x ~ x ~@12", F: "~ x!2 ~@5",
})).gain(0.78)

// drums · woodblocks
const woodblocks = s("woodblock:5").struct(`<
  ~@5 A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E ~@2 A ~ B ~@2 B ~ A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E ~@2 A ~ B ~@2 B ~@4
>`.pickRestart({
  A: "~ x!3 ~@4", B: "~@3 x!2 ~ x!3 ~ x ~@5", C: "~@5 x ~@3 x ~@3 x ~@18", D: "~@7 x ~ x ~@3 x ~ x ~ x ~@3 x ~@10",
  E: "~@4 x!2 ~ x!3 ~ x ~@4",
})).gain(0.58)

// drums · woodblocks · soft notes
const woodblocks_soft = s("woodblock:5").struct(`<
  ~@5 A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E ~@2 A ~ B ~@2 B ~ A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E ~@2 A ~ B ~@2 B ~@4
>`.pickRestart({
  A: "~ x", B: "~@5 x ~@3 x ~@2 x ~@3", C: "~@17 x ~@14", D: "~@11 x ~@7 x ~@5 x ~@6", E: "~@6 x ~@3 x ~@2 x ~@2",
})).gain(0.35)

// drums · woodblocks
const woodblocks_2 = s("woodblock:4").struct(`<
  ~@5 A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E ~@2 A ~ B ~@2 B ~ A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E ~@2 A ~ B ~@2 B ~@4
>`.pickRestart({
  A: "~@3 x ~ x ~ x ~ x ~@6", B: "~@2 x ~@3 x ~@2 x ~ x ~ x ~@2", C: "~@7 x ~@3 x ~@3 x ~@3 x ~@12",
  D: "~@5 x ~@7 x ~@5 x ~@3 x ~@3 x ~@4", E: "~@3 x ~@3 x ~@2 x ~ x ~ x ~",
})).gain(0.58)

// drums · woodblocks · soft notes
const woodblocks_soft_2 = s("woodblock:4").struct(`<
  ~@7 A ~@2 A ~@3 B ~@2 B ~@2 B ~@2 C ~@4 A ~@2 A ~@3 A ~@2 A ~@3 B ~@2 B ~@2 B ~@2 C ~@4 A ~@2 A ~@4
>`.pickRestart({
  A: "~ x!2 ~", B: "~@9 x ~@7 x ~@14", C: "~@5 x ~@3 x ~@6",
})).gain(0.35)

// drums · triangle
const triangle = s("triangles:30").struct(`<
  ~@4 A ~@3 A ~@6 B ~@2 B ~@2 C ~@2 D ~@4 A ~@6 A ~@6 B ~@2 B ~@2 C ~@2 D ~@4 A ~@2 E ~@3
>`.pickRestart({
  A: "x ~@7 x ~@6 x!2 ~@15", B: "~ x ~@7 x ~@6 x!2 ~@14", C: "~ x ~@3 x ~@2 x!2 ~@6", D: "~@2 x ~@3 x ~@2 x!2 ~@5",
  E: "~@2 x ~@7 x ~@6 x!2 ~@13",
})).gain(4.18)

// drums · triangle
const triangle_2 = s("triangles:35").struct(`<
  ~@4 A ~@3 A ~@6 B ~@2 B ~@2 C ~@2 D ~@4 A ~@6 A ~@6 B ~@2 B ~@2 C ~@2 D ~@4 A ~@2 C ~@3
>`.pickRestart({
  A: "~@5 x ~@2", B: "~@21 x ~@10", C: "~@11 x ~@4", D: "~@3 x",
})).gain(4.18)

// drums · rim
const rim = s("rim").struct(`<
  ~@5 A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E F ~ A G B ~@2 H ~ A ~ B ~@2 B ~ C ~ D ~@2 D ~@2 D ~@2 E F ~ A G B ~@2 H ~@4
>`.pickRestart({
  A: "~@2 x ~ x!10 ~ x", B: "~@2 x ~@3 x!2 ~@2 x!2 ~@3 x", C: "~@5 x ~@3 x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~ x ~@3 x",
  D: "~@5 x ~@7 x ~ x ~@5 x ~ x ~@7 x", E: "~@3 x ~@3 x!2 ~@2 x!2 ~@3", F: "x", G: "~ x ~@14",
  H: "~@4 x ~@7 x ~ x ~@5 x ~ x ~@7 x!2",
})).gain(0.4)

// drums · rim · soft notes
const rim_soft = s("rim").struct(`<
  ~@8 A ~@6 B ~@2 B ~@2 C ~@2 D ~@4 A ~@6 A ~@6 B ~@2 B ~@2 C ~@2 D ~@4 A ~@2 E ~@3
>`.pickRestart({
  A: "~@3 x ~@12", B: "~@7 x ~@24", C: "~ x ~@2", D: "~@5 x ~@10", E: "~@9 x ~@22",
})).gain(0.24)

stack(
  bass, clavinet, kick, snare, clap, hihat, open_hat, crash, claves, claves_soft, woodblocks, woodblocks_soft,
  woodblocks_2, woodblocks_soft_2, triangle, triangle_2, rim, rim_soft
)

More by Puff Daddy