Strudelify
I Got You (I Feel Good) cover art

I Feel Good

I Got You (I Feel Good)

James Brown

KeyD majorTempo150 bpm
0:00/0:00
// I Got You (I Feel Good) — Brown James
// 150 bpm, 4/4, key D major. Source: midi.
// Generated by strudelify. One cycle = one bar.
// note: Tempo changes preserved in elapsed time; displayed bars use the dominant tempo.
// note: pitch bends are ignored
// note: Full arrangement: all 99 bars on a 16-step grid, each part at one level; ghost notes are separate "_soft" parts. Source detail keeps the original performance.
setcpm(150/4)

// Notation: c3@3 lasts 3 steps · ~ is a rest · [c3,e3] is a chord · [...]/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 · acoustic bass · "ACOU BASS"
const bass = note(`<
  ~ A B A B C D A E F G H I A B A B C D A E F G H I ~@4 J K L M J N O ~ A B A B C D A E F G H I P ~@3 J K L M J N O ~ A
  B A B C D A E F G H I A B A B C D A E F G H I F G H I F G H Q@2 ~ R S@2 T
>`.pickRestart({
  A: "d2@2 d3 c#3 d3 c#3 d3 c#3", B: "d3 ~ d2 d3 ~ c3 ~ a2", C: "g1@2 g2 f#2 g2 f#2 g2 f#2", D: "g2 ~ g1 g2 ~ f2 ~ c2",
  E: "d3 ~ d2 d3 ~ c3 ~ d2", F: "~@2 a2 ~ a2 ~@3", G: "~@2 g2 ~ g2 ~@3", H: "~ d2 ~ f#2 ~ a2 ~ c3", I: "~ e3 ~@6",
  J: "g2!2 f2!2 e2!2 d2!2", K: "g2!2 f2!2 e2!2 b1@2", L: "d2!2 c2!2 b1!2 a1!2", M: "d2!2 c2!2 b1!2 a1@2",
  N: "g2!2 f2!2 e2 f2 g2 g#2", O: "a2 ~@7", P: "d2 ~@3",
  Q: "[~@2 e3@2 ~@2 d3@2 ~@2 c3@2 ~@3 a2@2 ~@3 g2@3 ~@2 f2@3 ~@4]/2", R: "~@13 d2@2 d2",
  S: "[~ d2@2 d2 d2@2 d2 ~ d2@2 d2 d2@2 ~ d2 d2@2 d2 d2@2 ~ d2 d2@2 d2 ~ d2@2 d2 d2@2 d2]/2", T: "~ d2 ~ d2@2 ~@11",
})).s("gm_acoustic_bass").gain(0.36)

// chords · electric guitar clean · "CLEAN GTR"
const electric_guitar_clean = note(`<
  ~@2 A ~ A ~ B ~ A C D E F ~ A ~ A ~ B ~ A C D E F ~@4 G@2 H@2 G@2 I ~@2 A ~ A ~ B ~ A C D E F ~@4 G@2 H@2 G@2 I ~@2 A
  ~ A ~ B ~ A C D E F ~ A ~ A ~ B ~ A C D E F C D E F C D E J K ~@5
>`.pickRestart({
  A: "~@4 [d4,a4,d5] ~@11", B: "~@4 [g3,d4,g4] ~@11", C: "~@4 [e4,g4,a4,c#5] ~@3 [e4,g4,a4,c#5] ~@7",
  D: "~@4 [d4,f4,g4,b4] ~@3 [d4,f4,g4,b4] ~@7", E: "~@2 d4 ~@3 f#4 ~@3 a4 ~@3 c5 ~", F: "~@2 e5 ~@13",
  G: "[g3,d4,g4] ~@3 [g3,d4,g4] ~@3 [g3,d4,g4] ~@3 [g3,d4,g4] ~@3", // G5
  H: "[d4,a4,d5] ~@3 [d4,a4,d5] ~@3 [d4,a4,d5] ~@3 [d4,a4,d5] ~@3", I: "[a3,e4,a4] ~@15",
  J: "~@2 e5 ~@3 d5 ~@3 c5@2 ~@3 a4", K: "~@4 g4 ~@4 f4 ~@6",
})).s("gm_electric_guitar_clean").gain(0.42)

// other · tenor sax
const tenor_sax = note(`<
  ~ A B A B C D A B E F G H A B A B C D A B E F G H I J I J K@2 ~ L K@2 ~@2 A B A B C D A B E F G H I J I J K@2 ~ L K@2
  ~@2 A B A B C D A B E F G H A B A B C D A B E F G H E F G H E F G M N ~ O@4
>`.pickRestart({
  A: "~@2 a3 g#3 a3 g#3 a3 g#3", B: "a3 ~@15", C: "~@2 d4 c#4 d4 c#4 d4 c#4", D: "d4 ~@15", E: "~@4 c#5 ~@3 c#5 ~@7",
  F: "~@4 b4 ~@3 b4 ~@7", G: "~@2 d4 ~@3 f#4 ~@3 a4 ~@3 c5 ~", H: "~@2 e5 ~@13", I: "d4 ~@5 d5 ~@3 c5 ~@3 a4@2",
  J: "c5 ~ a4 ~@3 f#4@4 ~@6", K: "f4@5 e4 [b3,c4,d4] [f3,g3,a3] e3 ~@7", L: "~@2 g4 f4 g4 f4 d4 c4",
  M: "~@2 e5 ~@3 d5 ~@4 c5 ~@3 a4", N: "~@4 g4 ~@4 f4 ~@6", O: "[~@13 [a4,c5,e5]@39 ~@12]/4",
})).s("gm_tenor_sax").gain(0.42).pan(0.4)

// chords · trombone
const trombone = note(`<
  ~ A B A B C D A B E F G H A B A B C D A B E F G H ~@4 I@2 ~ J I@2 ~@2 A B A B C D A B E F G H ~@4 I@2 ~ J I@2 ~@2 A B
  A B C D A B E F G H A B A B C D A B E F G H E F G H E F G K L ~ M@4
>`.pickRestart({
  A: "~@2 [c4,d4] [b3,c#4] [c4,d4] [b3,c#4] [c4,d4] [b3,c#4]", B: "[c4,d4] ~@15",
  C: "~@2 [b3,f4] [a#3,e4] [b3,f4] [a#3,e4] [b3,f4] [a#3,e4]", D: "[b3,f4] ~@15", E: "~@4 c#4 ~@3 c#4 ~@7",
  F: "~@4 b3 ~@3 b3 ~@7", G: "~@2 d3 ~@3 f#3 ~@3 a3 ~@3 c4 ~", H: "~@2 e4 ~@13",
  I: "d4@5 c4 [g3,a3,b3] [e3,f3,a3] d3 ~@7", J: "~@2 d4 c4 d4 c4 a3 g3", K: "~@2 e4 ~@3 d4 ~@4 c4 ~@3 a3",
  L: "~@4 g3 ~@4 f3 ~@6", M: "[~@13 [f#3,a3,c4]@39 ~@12]/4",
})).s("gm_trombone").gain(0.42).pan(0.6)

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

// drums · kick · soft notes
const kick_soft = s("bd").struct(`<
  ~@2 A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@17 A ~ A ~ A ~ A ~@5 A ~ A ~ A ~ A ~@18
>`.pickRestart({
  A: "~@7 x",
})).gain(0.28)

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

// drums · snare · soft notes
const snare_soft = s("sd").struct("<~@29 A@3 B A C ~@18 D E D B A C ~@36 F G@2 H>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@5 x!3 ~@8", C: "~@3 x ~@4", D: "~ x ~ x", E: "~ x ~@2", F: "~@13 x!3", G: "x!16",
  H: "x!3 ~@13",
})).gain(0.17)

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

// drums · hihat · soft notes
const hihat_soft = s("hh").struct("<~ A@8 ~@4 A@8 ~@16 A@8 ~@16 A@8 ~@4 A@8 ~@14 B C D E>".pickRestart({
  A: "~@3 x ~@3 x", B: "~@13 x ~ x", C: "~@2 x ~ x ~ x ~@2 x ~@6", D: "x ~ x ~@2 x ~ x ~@2 x ~ x ~ x ~", E: "~ x ~@14",
})).gain(0.17)

// drums · open hat
const open_hat = s("oh").struct("<~ A@8 ~@4 A@8 ~@16 A@8 ~@16 A@8 ~@4 A@8 ~@18>".pickRestart({
  A: "~ x ~@3 x ~@2",
})).gain(0.22)

// drums · crash
const crash = s("cr").struct("<~@29 A ~@3 A@2 ~@18 A ~@3 A@2 ~@36 B ~@3>".pickRestart({
  A: "x", B: "~@13 x ~@2",
})).gain(0.39)

// drums · ride bell
const ride_bell = s("rd").struct("<~@25 A@3 B C@3 D C E ~@14 A@3 B C@3 D C E ~@40>".pickRestart({
  A: "x!4", B: "x!2 ~@2", C: "x!8", D: "x!2 ~@6", E: "x!5 ~@3",
})).gain(0.22)

stack(
  bass, electric_guitar_clean, tenor_sax, trombone, kick, kick_soft, snare, snare_soft, hihat, hihat_soft, open_hat,
  crash, ride_bell
)

More by James Brown